|
|
@@ -1,8 +1,8 @@
|
|
|
# V2 阶段开发计划
|
|
|
|
|
|
-状态:V2 迭代输入文档(技术架构版)。
|
|
|
+状态:V2 迭代输入文档(技术架构版)。**V2 M0-M6 已全部实施完成(2026-06-10,详见各模块实施状态行与 12.5 节临时选择清单)。**
|
|
|
|
|
|
-更新时间:2026-06-09
|
|
|
+更新时间:2026-06-10
|
|
|
|
|
|
本文取代并合并 `v1.1 迭代落地/真实E2E问题整理.md`。本文正文面向技术团队,重点讲清 V2 的架构关系、实现路线、数据流、业务影响和验收方式;函数级代码证据、DB 明细和命令清单保留在附录与 implementation briefs 中。
|
|
|
|
|
|
@@ -14,7 +14,7 @@ V1 已经打通单线闭环:
|
|
|
Pattern 证据 -> 搜索词 -> 抖音搜索 -> 内容发现 -> Pattern 回扣 -> 规则判断 -> 游走 -> 结果沉淀 -> 策略复盘
|
|
|
```
|
|
|
|
|
|
-真实 E2E `demand_content.id=45` / `run_id=v1_run_faaf9a1d0ad6` 证明这条链路可以跑完,但也暴露出一个核心问题:**配置、规则、游走和可观测的“位置”已经建好,运行时接线还没有完全接上**。
|
|
|
+(以下为 V2 立项时的问题盘点,所列问题已由 M2-M6 逐一解决。)真实 E2E `demand_content.id=45` / `run_id=v1_run_faaf9a1d0ad6` 证明这条链路可以跑完,但也暴露出一个核心问题:**配置、规则、游走和可观测的“位置”已经建好,运行时接线还没有完全接上**。
|
|
|
|
|
|
| 问题 | 现象 | 业务影响 | 技术根因 | 证据 |
|
|
|
|---|---|---|---|---|
|
|
|
@@ -217,7 +217,9 @@ query_prompts.v1.json
|
|
|
- `douyin/V1` profile 已落地,默认零回归。
|
|
|
- 后续业务主动改 profile 时,结果变化作为受控实验处理。
|
|
|
|
|
|
-## 8. M3 判断规则与策略版本模块
|
|
|
+## 8. M3 判断规则与策略版本模块(已完成)
|
|
|
+
|
|
|
+实施状态:已完成(commit 42d0802,2026-06-10;dispatch 参数化 + rule_pack_by_entity + 画像止血配置驱动 + scorecard 缺维度)。
|
|
|
|
|
|
### 架构关系
|
|
|
|
|
|
@@ -281,7 +283,9 @@ V1 当前实际只跑 Content 包。V2 要把“未来包配置存在”变成
|
|
|
- Content dispatch 继续作为兼容入口。
|
|
|
- M3 完成前画像缺失仍按现行 Excel / JSON 规则 REJECT;M3 实施时如要止血,先改 Excel / JSON 规则,再由代码执行。
|
|
|
|
|
|
-## 9. M4 游走策略模块
|
|
|
+## 9. M4 游走策略模块(已完成)
|
|
|
+
|
|
|
+实施状态:已完成(commit 410cd72,2026-06-10;翻页 success 闸 + decision 过滤作者/tag + edge binding 归属/执行分离,binding 增至 8 条)。
|
|
|
|
|
|
### 架构关系
|
|
|
|
|
|
@@ -336,7 +340,9 @@ RuleDecision
|
|
|
- M4 触发过滤可先于 binding 写回交付,先止血分页 / 作者 / tag 的错误扩展。
|
|
|
- `rule_pack_id` 写回依赖 M3 dispatch 参数化。
|
|
|
|
|
|
-## 10. M5 平台接入模块
|
|
|
+## 10. M5 平台接入模块(已完成)
|
|
|
+
|
|
|
+实施状态:已完成(commit 7e86c9a,2026-06-10;blogger 接口合同 + RateLimiter 双 bucket + PLATFORM_RATE_LIMITED + 分类树 v2 解析)。
|
|
|
|
|
|
### 架构关系
|
|
|
|
|
|
@@ -393,7 +399,9 @@ V2 不扩平台,而是先把现有抖音入口跑稳。
|
|
|
- keyword 搜索继续可用。
|
|
|
- 作者边在 M5 修好前可能为空或异常,但 M4 会先按规则决策过滤,减少无效触发。
|
|
|
|
|
|
-## 11. M6 运行记录与可观测性模块
|
|
|
+## 11. M6 运行记录与可观测性模块(已完成)
|
|
|
+
|
|
|
+实施状态:已完成(commit ed13f10,2026-06-10;stage 计时事件 + decode 五类事件与最小补跑 + timeline summary 七字段)。
|
|
|
|
|
|
### 架构关系
|
|
|
|
|
|
@@ -454,6 +462,8 @@ V2 只增强后端事件和 API,不做前端组件。
|
|
|
|
|
|
## 12. 端到端验收
|
|
|
|
|
|
+验收进度(2026-06-10):配置与 schema 闸、全量单测(299 passed)、离线真实 case 回放、config x case 矩阵均已随各里程碑完成;**live smoke(blogger)与真实 DB run(端到端首条)待执行**。
|
|
|
+
|
|
|
端到端验收是补齐验收,不是首测。各模块仍要在本模块实施时交付自己的单测和契约测试。
|
|
|
|
|
|
| 验收类型 | 目的 | 关键观察点 |
|
|
|
@@ -466,6 +476,23 @@ V2 只增强后端事件和 API,不做前端组件。
|
|
|
|
|
|
详细命令见附录 D。
|
|
|
|
|
|
+## 12.5 V2 临时选择与后续处理
|
|
|
+
|
|
|
+以下是 V2 阶段为控制范围做出的临时搭建/临时选择,均有代码证据,后续阶段按注明方式处理:
|
|
|
+
|
|
|
+| # | 临时选择 | 代码证据 | 后续阶段处理 |
|
|
|
+|---|---|---|---|
|
|
|
+| 1 | 限流 business code 白名单为空集,识别仅靠 HTTP 429 + message token | `content_agent/integrations/douyin.py` RATE_LIMIT_BUSINESS_CODES | 真实运行/live smoke 撞到限流 code 后补入常量并加用例 |
|
|
|
+| 2 | 回放环境 decode/分类匹配用恒成功 Fake 客户端 → real_id45 回放口径为 4×KEEP(画像闸),与 DB 收割口径(1 画像 + 3 解码回扣)不同 | `tests/replay_harness.py`、`tests/test_case_replay.py` docstring | M6 已具备 decode 事件能力,后续造"解码超时"标本对齐两本账 |
|
|
|
+| 3 | syn 合成案例无 has_more/next_cursor(不覆盖"入池→翻页"正向回放断言) | `tests/test_case_replay.py _synthetic_item()` | 需要回放级翻页正向断言时给 syn_pool 补分页字段 |
|
|
|
+| 4 | LocalRuntimeFileStore.append_run_event_records 为 no-op → 本地 runtime 无 lifecycle 行,timeline total_duration_ms 走 stage 求和回退 | `content_agent/integrations/runtime_files.py` | 本地 store 如需 lifecycle 行时补实现;DB 链路不受影响 |
|
|
|
+| 5 | variants_per_seed>1 暂不支持,配置大于 1 直接抛 QUERY_GENERATION_FAILED | `content_agent/business_modules/search_intent.py` | 需要多变体时定义 query 编号合同后放开(M2 遗留拍板) |
|
|
|
+| 6 | walk_engine/walk_strategy 以默认 root(`.`) 加载 WalkStrategyStore,要求从仓库根运行 | `content_agent/business_modules/walk_engine.py`、`walk_strategy.py` | 需要任意工作目录部署时参数化 root |
|
|
|
+| 7 | stage_failed 事件对普通异常只记类型名(error_code=None),仅 ContentAgentError 有结构化 error_code | `content_agent/graph.py _instrumented` | 上游(如 policy_version)改抛 ContentAgentError 后自然结构化,V3 可选 |
|
|
|
+| 8 | Author/Hashtag/Path/Budget 四个 dispatch 配置为 future 未启用(dispatch_enabled=false) | `product_documents/规则包/douyin_rule_packs.v1.json` dispatch 段 | 启用对应游走边的判断时打开 dispatch 并补该包规则 |
|
|
|
+| 9 | "卡住"的业务阈值未定义,M6 只记录耗时/失败/限流/decode 中间态等事实 | M6 已拍板口径 | 积累真实 run 数据后由产品拍卡点标准 |
|
|
|
+| 10 | 测试基线 299 passed(2026-06-10),回放标本为 real_id45 + syn_pool/syn_review | `uv run pytest -q` | 每个后续里程碑更新基线;真实 DB run 后收割新标本 |
|
|
|
+
|
|
|
## 13. 明确不做(V3 留白)
|
|
|
|
|
|
1. 数据源 / 平台宽度扩展,包括 Case、历史搜索、热点、小红书等。
|
|
|
@@ -569,7 +596,7 @@ Path 路径停止判断
|
|
|
Budget 预算待观察判断
|
|
|
```
|
|
|
|
|
|
-当前生产运行事实:
|
|
|
+当前生产运行事实(M4 实施前的历史基线,M4=410cd72 已修复——现状:binding 已被 walk_engine/walk_strategy 完整消费,walk action 全部带归属包与执行事实,path_stop 归 Path 包):
|
|
|
|
|
|
- `content_agent_rule_decisions` 和 `content_agent_policy_runs` 只实际用过 Content 包。
|
|
|
- `walk_rule_pack_binding` 已配置 edge 到规则包的归属关系,但当前运行时没有完整消费。
|