|
|
@@ -76,11 +76,12 @@ Step 3: calculate_roi_metrics ← 计算ROI(依赖Step 1+2的数据)
|
|
|
↓
|
|
|
Step 4: get_ads_for_review ← 分类(零消耗待关停 / 需评估 / 正常运行)
|
|
|
↓
|
|
|
-Step 5: AI推理决策 ← 对【待评估(候选)】广告推理
|
|
|
- · 参考 roi_zone 和 fission_vs_tier 字段做**综合判断**
|
|
|
- · ROI 在降价区间时,必须检查裂变率再决定是 bid_down 还是 observe
|
|
|
- · 在**一次 LLM 输出**里为所有候选广告生成完整 JSON 数组(含 ad_id / action / pct / reason / confidence)
|
|
|
- · 注意力管理:按 tier 分组依次评估,同 tier 内共用同一基线
|
|
|
+Step 5: AI推理决策 ← 对【待评估(候选)】广告推理(按 tier 分批)
|
|
|
+ · **分批策略**:从 get_ads_for_review 的 tier_batches 中读取分批数据
|
|
|
+ · **循环处理**:依次处理每个 tier_batch,为每批广告生成决策 JSON 数组
|
|
|
+ · **决策依据**:参考 roi_zone 和 fission_vs_tier 字段做**综合判断**
|
|
|
+ · **裂变检查**:ROI 在降价区间时,必须检查裂变率再决定是 bid_down 还是 observe
|
|
|
+ · **累积提交**:所有 tier 处理完毕后,合并为完整决策数组,**一次性调用 apply_decisions**
|
|
|
↓
|
|
|
Step 6: apply_decisions ← 主 Agent 把第 5 步输出的 JSON 数组整体喂给 apply_decisions
|
|
|
↓
|
|
|
@@ -98,14 +99,26 @@ Step 10: generate_report ← 生成报告
|
|
|
- 如果先调用 `calculate_roi_metrics` 而不先 `fetch + merge`,会因缺少最新数据而得到错误结果
|
|
|
- **正确做法**:先 `fetch_creative_data` → 再 `merge_creative_data` → 最后 `calculate_roi_metrics`
|
|
|
|
|
|
-### ⚡ 候选广告评估:一次性全量提交
|
|
|
+### ⚡ 候选广告评估:按 tier 分批处理,累积后一次性提交
|
|
|
|
|
|
-**`apply_decisions` 是覆盖式工具,只调一次,必须包含所有候选**——遗漏的会被默认 `hold` 覆盖(已实测 bid_down 被吞 bug)。**宁可 reason 写短,也要全部覆盖**。
|
|
|
+**分批流程(Step 5 必须严格遵守)**:
|
|
|
|
|
|
-**reason 写法**对齐范例风格(紧凑、单句、含核心数值即可):
|
|
|
-> "动态 ROI 为 4.42,高于渠道P50 3.48 的 27%;投放 266 天,消耗稳定 21 天;建议扩量。"
|
|
|
+1. **读取批次列表**:从 `get_ads_for_review` 结果的 `tier_batches` 中获取所有 tier 批次
|
|
|
+2. **循环处理每个 tier**:
|
|
|
+ - 读取 `tier_batch["ads"]` 列表(单个 tier 通常 20-40 条,远小于全量 100+)
|
|
|
+ - 为该 tier 的所有广告生成决策 JSON 数组(格式见下方)
|
|
|
+ - 同 tier 内广告特征相似,共用同一基线,判断更聚焦
|
|
|
+ - 将决策数组累积到总列表
|
|
|
+3. **一次性提交**:所有 tier 处理完毕后,合并为完整决策数组,**调用一次 apply_decisions**
|
|
|
|
|
|
-**禁止**:多次调 `apply_decisions`(后调吞前调)、`agent(task=...)` 委托子 Agent(拿不回结构化决策)。
|
|
|
+**分批收益**:单批输入量降低 60%-80%,减少"lost in the middle"现象,决策质量显著提升。
|
|
|
+
|
|
|
+**关键约束**:
|
|
|
+- ✅ **允许**:分 tier 逐批推理(降低单次输入量,提升质量)
|
|
|
+- ✅ **允许**:reason 写短(紧凑、单句、含核心数值):*"动态 ROI 为 4.42,高于渠道P50 3.48 的 27%;投放 266 天,消耗稳定 21 天;建议扩量。"*
|
|
|
+- ❌ **禁止**:多次调 `apply_decisions`(后调吞前调,已实测 bug)
|
|
|
+- ❌ **禁止**:`agent(task=...)` 委托子 Agent(拿不回结构化决策)
|
|
|
+- ⚠️ **必须**:所有候选全部覆盖(遗漏的会被默认 `hold` 覆盖)
|
|
|
|
|
|
### 灵活性与强制规则
|
|
|
|
|
|
@@ -129,25 +142,9 @@ Step 10: generate_report ← 生成报告
|
|
|
```
|
|
|
|
|
|
**理由编写规范**:
|
|
|
-- 自然中文,禁用英文变量名(`pause_line`→"关停线"、`bid_down_line`→"降价线"、`bid_up_line`→"提价线"、`bid_increased_7d`→"7天内已提价")
|
|
|
-- 引用具体数值(ROI/阈值/消耗),用分号连接多个判断
|
|
|
+- 理由用自然中文,引用具体数值(ROI/阈值/消耗),用分号连接多个判断
|
|
|
- `confidence` 与数据支撑度一致;`recommended_change_pct` 为小数(+0.05=提5%),单次绝对值 ≤ 0.10
|
|
|
|
|
|
-每条 reason 必须包含 5 个语义元素(ROI 值 / 对比基准 / 偏离% / 辅助信号 / 行动建议),详见 decision-strategy skill §七。
|
|
|
-
|
|
|
-每条 reason 必须体现多维度综合判断——具体维度和权衡原则见 decision-strategy、posterior-wisdom skill。
|
|
|
-
|
|
|
-### ⚠️ 降价决策的裂变率检查(必须执行)
|
|
|
-
|
|
|
-当 roi_zone = "bid_down_zone" 时,**必须检查 fission_vs_tier 再做决策**:
|
|
|
-
|
|
|
-- fission_vs_tier = "low" → 可以 bid_down(ROI低+裂变低,双低确认)
|
|
|
-- fission_vs_tier = "normal" → 改 observe(裂变正常,ROI低可能暂时)
|
|
|
-- fission_vs_tier = "high" → 改 observe 或 hold(裂变优秀,有长期价值)
|
|
|
-- fission_vs_tier = "unknown" → 改 observe(数据不足不决策)
|
|
|
-
|
|
|
-**禁止**:仅因 roi_zone="bid_down_zone" 就判定 bid_down,必须结合裂变信号。
|
|
|
-
|
|
|
**硬约束**:
|
|
|
- reason 中禁止出现英文变量名(pause_line、bid_down_line、tier_roi_p50 等),改用中文术语
|
|
|
- reason 不得模板化(错例:"ROI 低于线建议降价";正例见 posterior-wisdom skill 的反例警示)
|