Просмотр исходного кода

refactor(auto_put_ad_mini): 审批消息极简化(单屏可读)

头部 9 行 → 3 行:决策统计 + 动作数量 + 影响金额 合并到一行。
回复指引 7 行 → 2 行:核心 3 种示例 + "或直接说您的想法"兜底,
复用 prompt 第八部分的多轮协商心智(LLM 侧解析自然语言反馈)。
保留"影响金额"显式展示,让运营一眼感知决策规模。
xlsx 附件名按时间戳命名,不再暴露 request_id。

总行数 28 → 15,字节数 2.1 KB → 1.5 KB,消息数维持 2 条(文本 + 表格链接)。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
刘立冬 3 недель назад
Родитель
Сommit
b94212aee5
1 измененных файлов с 18 добавлено и 25 удалено
  1. 18 25
      examples/auto_put_ad_mini/tools/im_approval.py

+ 18 - 25
examples/auto_put_ad_mini/tools/im_approval.py

@@ -258,14 +258,15 @@ def _score_top_decisions(df_tier2: pd.DataFrame, top_n: int = 5) -> pd.DataFrame
 
 
 def _format_approval_message(df_tier2: pd.DataFrame, df_tier1: pd.DataFrame, df_tier0: pd.DataFrame, request_id: str) -> str:
-    """格式化审批消息(瘦身版,目标:单屏可读,≤ 2 KB)。
+    """格式化审批消息(极简版,目标:手机单屏可读,≤ 1 KB)。
 
     设计原则:
-      - 删除 Tier 0 逐条列表(由飞书表格兜底)
-      - 删除 Tier 1 "自动执行" 段落(TIER1_MAX_CHANGE_PCT=0.00 已禁用该通路)
+      - 三行头部:标题 + 决策统计(一行含所有 action 数量) + 影响金额(一行)
       - 用 Top 5 高置信/高消耗决策替代"前 5 个示例"的无排序列表
-      - 展示"影响金额"让运营感知决策规模
+      - 回复指引压到一行(核心 3 种 + "直接说您的想法"兜底自由表达)
       - 明确告知"30 分钟无回复 = 默认拒绝",无隐式自动通过
+      - 标题用人性化时间,不暴露 request_id(内部 ID 放末尾追溯即可)
+      - 两条消息策略:本文本 + 飞书表格详单链接(由调用方串行发送)
     """
     total = len(df_tier2)
 
@@ -282,15 +283,13 @@ def _format_approval_message(df_tier2: pd.DataFrame, df_tier1: pd.DataFrame, df_
     cost_7d = pd.to_numeric(df_tier2.get("cost_7d_avg", 0), errors="coerce").fillna(0).sum() if total > 0 else 0.0
     yesterday_cost = pd.to_numeric(df_tier2.get("yesterday_cost", 0), errors="coerce").fillna(0).sum() if "yesterday_cost" in df_tier2.columns else 0.0
 
+    # 人性化时间标题:04-21 02:33
+    now_label = datetime.now().strftime("%m-%d %H:%M")
+
     lines = [
-        f"📊 广告调控审批请求  {request_id}",
-        "─" * 40,
-        f"📌 决策总数: {total}  (需全部人工审批,无自动执行)",
-        f"   ⏸ 暂停 {n_pause} / ⬇ 降价 {n_down} / ⬆ 提价 {n_up} / 🚀 扩量 {n_scale} / 👀 观察 {n_observe}",
-        "",
-        "💰 影响金额",
-        f"   受影响广告 7 日均消耗合计: {cost_7d:,.0f} 元",
-        f"   昨日总消耗: {yesterday_cost:,.0f} 元",
+        f"📊 广告调控 · {now_label} · 请您复核",
+        f"📌 决策 {total} 条 · ⏸{n_pause} ⬇{n_down} ⬆{n_up} 🚀{n_scale} 👀{n_observe}(全部需您审批)",
+        f"💰 影响金额:受影响广告 7 日均消耗合计 {cost_7d:,.0f} 元,昨日总消耗 {yesterday_cost:,.0f} 元",
         "",
     ]
 
@@ -339,20 +338,14 @@ def _format_approval_message(df_tier2: pd.DataFrame, df_tier1: pd.DataFrame, df_
             lines.append(f"   {idx}. [{ad_id}] {ad_name} | {action_label} | {roi_str} | {reason}")
 
         if total > 5:
-            lines.append(f"   (完整列表见下方飞书在线表格链接)")
+            lines.append(f"   (完整详单见下方表格消息)")
         lines.append("")
 
-    # 回复方式(多轮协商)
+    # 回复方式(多轮协商,精简到核心 3 种 + 自由表达
     lines.extend([
-        "📝 回复方式(支持多轮协商)",
-        "   \"通过\"                — 全部批准",
-        "   \"拒绝\"                — 全部取消",
-        "   \"广告 12345 不动\"      — 保留这条,其余按建议",
-        "   \"整体太激进/保守\"      — 要求重新评估",
-        "   \"只批准 pause\"        — 按 action 类型过滤",
-        f"   ⏰ {IM_APPROVAL_TIMEOUT_MINUTES} 分钟无回复 = 默认拒绝",
-        "",
-        "📎 详单: 飞书在线表格链接(消息 2 单独发送)",
+        "📝 回复:\"通过\" / \"拒绝\" / \"广告 12345 不动\" / \"只批准 降价\",或直接说您的想法",
+        f"⏰ {IM_APPROVAL_TIMEOUT_MINUTES} 分钟无回复 = 默认拒绝",
+        f"(追溯码: {request_id})",
     ])
 
     return "\n".join(lines)
@@ -577,7 +570,7 @@ async def send_approval_request(
                             file_result = _feishu.send_file(
                                 to=FEISHU_AD_PROJECT_CHAT_ID,
                                 file=str(xlsx_path),
-                                file_name=f"审批决策表_{request_id}.xlsx",
+                                file_name=f"广告审批_{datetime.now().strftime('%Y%m%d_%H%M')}.xlsx",
                             )
                             logger.info("飞书审批 Excel(文件)发送成功(项目群): message_id=%s", file_result.message_id)
                     except Exception as e:
@@ -599,7 +592,7 @@ async def send_approval_request(
                             file_result_personal = _feishu.send_file(
                                 to=FEISHU_OPERATOR_OPEN_ID,
                                 file=str(xlsx_path),
-                                file_name=f"决策表_{request_id}.xlsx",
+                                file_name=f"广告审批_{datetime.now().strftime('%Y%m%d_%H%M')}.xlsx",
                             )
                             logger.info("飞书决策 Excel(文件)发送成功(个人): message_id=%s", file_result_personal.message_id)
                     except Exception as e: