基于业务对比报告讨论产出的可直接派活的方案 ——
每个任务包含 owner / 时长 / 依赖 / 输入 / 输出 / 验收标准。
核心约束:老 workflow 完全不动 · 新模块独立目录 · 前端加开关 opt-in ·
任何一步不满意都可以停 · 老版永远兜底。
在不动老 workflow 一行代码的前提下,新建 backend/app/agent_v2/ 独立模块,
把 11 阶段用 LangGraph 重实现;前端 /generate 页加开关让用户主动选新版试用 · 老版永远兜底。
process_report_run 及所有依赖代码保持原样,不允许"顺手重构"prompt_definitions 表读 prompt · 只是编排逻辑不同| Phase | 时长 | 风险 | 核心交付 |
|---|---|---|---|
| Phase 0 | 1 周 | 零 | 11 个 YAML + apply 脚本 + CI drift check + 修复 27 段 drift |
| Phase 1 | 1 周 | 低 | agent_v2/ 骨架 + 3 个 node + benchmark 报告 + 继续/停 决策 |
| Phase 2 | 3-4 周 | 低 | 剩余 8 agent + 3 新工具 + 前端开关 + 5 观测看板 + 灰度 |
修 27/27 段 prompt drift · 建 prompt 变更的规范化流程 · 为 Phase 1 铺路。 核心洞察:这一步做完就算不做后续,已经把当前最大黑盒解决了。
backend/app/prompts/ 目录 · 11 个 stage YAML + _schema.yaml 定义 7 段结构(identity / prompt / input / output / gate / tools / model)
scripts/pull-prompts-from-prod.py · 生成 db-dumps/prompts-current-v36-YYYYMMDD.json(73KB · 7 版历史 · 11 stage)
ai_workflow_service.py + _stage_output_contract_issues 反推)
scripts/apply-prompts-to-db.py(YAML→DB 新版本)· scripts/verify-prompts-drift.py(diff 有则 exit 1)· 都支持 --dry-run
核心洞察:花 1 周省下 4 周的方向错误。
只搬 S2/S3/S4 三个 agent · 拿到真实并行数据 · Benchmark 报告决定 GO/NO-GO。
agent_v2/ 独立目录state.py / loaders.py / graph.py / nodes/ / run.py · pip 装 langgraph>=0.2.55 + langgraph-checkpoint-postgres
PackagingState TypedDict · fan-out 字段用 Annotated[dict, merge_by_id] 按 id 合并 · load_agent_skill(stage_code) loader
packaging_intelligence / brand_strategy / copy_compliance 三个 node · 每个自带 repair loop · gate fail 时 error_hint 塞进下一轮 prompt
PostgresSaver 挂测试库 · graph.invoke(state, config) 能从 confirmation 跑到 copy_compliance
docs/decisions/2026-XX-agent-v2-go-nogo.md核心洞察:老 workflow 永远不动 · 用户关掉开关秒回。
compliance-router 工具tools/compliance_router.py + data/compliance_rules.yaml(7 品类合规规则表)· 品类分流从 prompt 里 2096 字 if 变成表查询
quality-scorer 工具tools/quality_scorer.py + data/scoring_weights.yaml(5 维权重可配)· director 阶段打分从 prompt 描述变成显式函数 · 分数落 stage_artifacts
report-template 工具tools/report_template.py + data/report_templates/new-packaging.yaml / upgrade.yaml · 9 sections + 4 表 columns 从 prompt 硬编码搬到 YAML registry
engine 参数POST /api/reports/generate?engine=workflow|agent_v2 · 默认 workflow · agent_v2 走新 celery task · workflow_run.engine 字段记录用哪版跑
/generate 页加开关
review 时发现的关键盲点:现在生产 prompt_versions 表是整体版本(V24 → V36 全局升级)· 想只回滚 brand-strategy 一个 stage 做不到。
Agent 化必须顺便升级版本模型 —— 每个 agent 独立版本 · 出问题精准回滚。
怎么办?只能全量回滚 V37 → V36。其他 10 个 agent 的改进跟着一起被撤销。
结果:内容运营不敢改 · 一改就全 stack 回滚 · 迭代速度慢 · 一个大版本堆几周才发。
只回滚 brand-strategy 到 v3 · 其他 10 个 agent 继续用最新版。运营敢改 · 出问题 30 秒回滚。
结果:每周都能给某个 agent 发新版 · 迭代速度 3-5x · 独立 A/B 也变得可能。
| 表 | 关键字段 | 作用 |
|---|---|---|
| agent_skill_versions |
id · stage_code · version_no ·
yaml_hash · changelog · created_by ·
created_at · is_current · is_frozen
|
每次 apply YAML 生成一条 · per-agent 版本 · is_current 唯一(单 stage 内)· is_frozen 标已上生产不能删 |
| agent_skill_activation |
stage_code · version_id · activated_at ·
activated_by · previous_version_id · reason
|
激活历史表 · 每次 SET is_current 追加一行 · 回滚只需插入历史里的老 version_id · 秒级 |
| workflow_runs | + skill_versions JSONB如 {"brand-strategy": "v3", "copy-compliance": "v7", ...} |
每份报告记录用了每 agent 的哪个版本 · 可回溯 · Loop 1 快速定位 |
| stage_artifacts | + skill_version_id |
每个中间产物挂 version_id · 判断是哪版跑出来的 · A/B 对比数据基础 |
| Agent | 当前版本 | 激活时间 | 激活人 | 历史版本 | 操作 |
|---|---|---|---|---|---|
| packaging-intelligence | v5 | 3 天前 | @yifan | v1 v2 v3 v4 v5 | History Diff Rollback |
| brand-strategy | v3 (rolled back) | 2 小时前 | @qing | v1 v2 v3 v4 (rolled) | History Diff Rollback |
| copy-compliance | v7 | 1 周前 | @yifan | v1..v6 v7 | History Diff Rollback |
| director-selection | v5 pending A/B | — | @qing | v1..v3 v4 (v5 A/B 中) | History Diff Rollback |
| designer-directions | v2 | 3 周前 | @qing | v1 v2 | History Diff Rollback |
| · · · 其余 6 agent · · · | |||||
version_no + changelog 字段verify(stage_code, is_current_version)skill_versions 参数(默认从 activation 表读)/agent-versions 页(如上图)客服 / 运营 / 老板 打开一份已跑完的报告 · 点"查看执行过程"进入追溯页 · 从上往下滚 3 大块: 1 用户对话过程 · 2 报告生成时间线(11 步)· 3 每个 agent 展开细节(工具调用 / 内部推理 / 输入输出)。
每个 agent 展开后 · 你会看到它在 LangGraph 里跑的 5 步循环。以"情报研究员"为例 —— 它需要自己判断该搜什么 · 自己去联网找竞品 · 抓官网原文 · 然后组织成报告。不是我们写死"先搜 A 再搜 B" · 是 agent 自己想 · 自己调工具 · 循环到觉得够了才停。
web_search / web_extract)。
web_search · LangGraph 帮忙真的去调 Google/Bing API · 拿到 8 条结果 · 塞回给 LLM。agent 不用自己写 HTTP 请求 · LangGraph 管所有工具的执行 / 超时 / 重试。
web_extract 抓清泉出山官网 · 回到第 2 步循环。或者判断"信息齐了" → 进入第 5 步。
{competitorReports: [5 家], trends: [3 条]})· LangGraph 用 Gate 规则校验(要求至少 3 家竞品 · 每家至少 5 字段)· 通过 → 存进 checkpoint · 交给下游 agent。fail → repair loop 让 LLM 修。
docs/decisions/| # | 决策点 | 触发时机 | 决策人 | 影响 |
|---|---|---|---|---|
| D1 | prompt drift 修复方向 | Phase 0 前 | 后端 + PM | 以生产 V36 为准 vs repo V24 为准?—— 建议前者(生产在用 · 无回归风险) |
| D2 | Phase 1 GO / NO-GO | Benchmark 报告出后 | 后端 + PM + 老板 | 决定是否投 4 周做 Phase 2 |
| D3 | 主推方向失败策略 | P2.4 期间 | 后端 | 跟老版一致(整 run fail)还是允许降级? |
| D4 | UI 开关默认状态 | P2.6 前 | PM + 前端 | 默认 off / on / 推荐尝试? |
| D5 | 灰度回滚阈值 | P2.8 前 | PM + 后端 | 什么指标下降多少触发回滚 |
| D6 | 老 workflow 何时下线 | 100% opt-in 稳定 30 天后 | 老板 + 后端 | 下线简化维护 vs 永不下线兜底 |
| D7 | 版本粒度到 agent 还是到 stage_prompt 3 段 | Phase 0 前 | 后端 + 内容运营 | per-agent(推荐)/ per-3段 · 后者可分开改 system 和 user 但复杂度翻 3 倍 |
| # | 风险 | 概率 | 影响 | 应对 |
|---|---|---|---|---|
| R1 | 两版长期共存的维护成本 | 高 | 中 | 共用 prompt DB · 只有编排逻辑不同(Phase 0 已铺路) |
| R2 | 并发放大 API 成本 | 中 | 中-高 | agent_v2 内置并行度上限可配 · 供应商余额告警 · 主推同步其他异步 |
| R3 | Phase 2 撞产品迭代 | 高 | 中 | 分阶段可停 · 老 workflow 继续接需求 · agent_v2 由独立 team owner |
| R4 | 灰度期用户体感差 | 低 | 高 | 前端 fallback + 秒回滚 · 5 观测看板异常必报警 |
| R5 | LangGraph 版本坑 | 低 | 中 | 用 0.2.55+ 稳定版 · 关键 API(Send / PostgresSaver)已 GA |
| R6 | 生产 prompt 有未捕获 drift | 低 | 中 | CI 每日 verify · 一发现 PR 回归 |
| R7 | 工具抽出后运营改不动 | 中 | 低 | 3 个 tool 的 YAML 都提供 admin 后台可视化编辑(P2.7 一起做) |
| R8 | 版本回滚做得不对 · 数据错位 | 低 | 高 | workflow_runs.skill_versions 记录每份报告用了哪版 · 回滚前必 dry-run 影响面预览 · frozen 版本不能删 |
backend/app/prompts/*.yaml11 个 agent skill 定义backend/app/agent_v2/新模块根 · 完全独立agent_v2/state.pyLangGraph state schemaagent_v2/graph.pyDAG 定义agent_v2/nodes/*.py每个 agent 一个 nodeagent_v2/tools/*.py3 个新工具data/compliance_rules.yaml品类合规规则表data/scoring_weights.yamlquality-scorer 权重data/report_templates/*.yaml报告结构模板scripts/apply-prompts-to-db.pyYAML → DB 版本scripts/verify-prompts-drift.pyCI drift checkdocs/decisions/*.md关键决策会议纪要任何 PR 涉及以下文件 · 不允许作为"agent 化重构"的一部分改动。若必须改 · 单独提 PR + 附业务原因 · 不与 agent_v2 混。
| 选项 | 优点 | 缺点 |
|---|---|---|
| A · 以生产 V36 为准 | 生产在用 · 无回归风险 · 立刻 CI 生效 | repo 里 27 段全变 · git log 大变化 |
| B · 以 repo V24 为准 | repo 版本"更早" | 27 段回退 · 生产要真跑测试 · 高风险 |
建议 A · 走安全路径。
pi-yunzhan 的 Loop Lab 是通用 loop engineering 平台(基于 pi runtime)。
本方案的 agent_v2 是 PackHorizon 报告生成专用(基于 LangGraph)。
两者不共用编排框架 · 不共用 state · 只在 prompt YAML 组织方式上互相借鉴。未来若发现共通抽象再考虑合并。