Skip to content

12 · 原子业务需求解构与源码级实现方法

严格按 11 框架 v2 执行:实现真实性闸(§C)+ 四角色对抗评审(§D)+ 原子业务需求为单元(§E)+ 底座级判据(§F)+ PMO 诚实留痕(§G)。 证据级标注:T0 运行实测 / T1 执行路径源码 file:line / T2 接口 / T3 spec·wiki(仅意图)。本文结论均 ≥T1。


§0 S′1 依赖真实性裁决(命门核验 · 三依赖走 §C 闸)

09 底座有三个"复用 deer-flow 原生"的承重假设。对抗式源码核验(T1)裁决如下——这是 v2 框架首次在下结论前自拦乐观:

裁决 1:项目事实集 ≈ 原生记忆 —— ❌ 推翻(判级:夸大/不适用)

维度实际实现(T1)结论
存储形态agents/memory/storage.py:24-40 facts 是无索引数组(id/content/category/confidence/source);无谓词/实体/会议索引不可精确查询/溯源
一致性memory/queue.py:120-138 同 thread LWW 覆盖、updater.py:425-466 30s 去抖 + LLM 抽取丢事实、无强一致、精修后下游立即读必读到旧值
项目隔离memory/namespace.py:30 仅前缀;updater.py:update_memory() 签名project_id(update_memory_from_conversation 却传它 → TypeError 待发);scope_extraction.py 有逻辑但无调用方per-project 隔离未实装
消费memory/prompt.py:202-318 仅按 confidence 排序截断注入 system prompt(≤2000 tok),无 query API下游无法按业务检索

裁决:原生记忆是"个人上下文摘要器",不是"可查询可溯源强一致的项目事实库"。事实集必须 acdm-backend 自建(PG + 全文/向量检索 + 审计链)。 修正 05 GAP-6:选 6A/6C(a-cdm PG/物化视图),显式否决 6B(原生记忆)。原生记忆保留其本职(个人偏好注入)。

裁决 2:HITL 澄清可异步回灌续跑 —— ⚠️ 部分(判级:机制真实,异步待办层缺失)

能力实际实现(T1)结论
中断clarification_middleware.py:144-147 Command(goto=END)真实
持久化runtime/runs/worker.py:72-121 checkpoint 绑定(SQLite/PG)真实
续跑langgraph_client.py:204-257 update_state() + runs.wait(input=None);worker.py:156-165 {}None 从 checkpoint 续跑;ba_report 生产验证真实,增量(只跑中断后节点)
结构化/owner/异步待办tools/builtins/clarification_tool.py:7-18 仅 question/type/context/options(字符串);无 suspicious_id/offset/owner;同会话设计缺失,须自建

裁决:中断-持久化-续跑是真实且经 ba_report 生产验证的范式;但"异步、面向责任人、批量可疑点待办"层 deer-flow 没有,须 acdm-backend BFF 自建(awaiting_clarification 表 + API + IM + update_state 桥)。Aegra/vendored 零改动。

裁决 3:任务流=可持久/审阅/回滚/续跑契约 —— ❌ 当前会议管道没有,但范式已验证(判级:占位,须按 ba_report 重建)

维度实际实现(T1)结论
会议管道pipelines/meeting_aggregator_realtime/pipeline.py:121 graph.compile() 无 checkpointer、无 interrupt;insights_service.py:753 join_stream 仅转发非 resume;progress 事件无 payload;cache 后置一次性 SSE,无契约边界
平台是否支持ba_report/pipeline.py:140 graph.compile(interrupt_before=…, checkpointer=…) + langgraph.json:15-17 checkpointer 工厂存在平台支持,会议管道没用
节点级查看/回滚langgraph_client.pyget_state 调用;无节点级 API缺失

裁决:09 的"任务流契约"在现会议代码=0;但 ba_report 已在 Aegra 上跑通 checkpointer+interrupt+update_state 续跑——这是"事半功倍"的真实复用对象。09 任务流须按 ba_report 范式重建编排(非复用占位会议代码),节点级查看/回滚需 BFF 补 get_state

§0 总结(诚实):09 方向(05×原生)成立且更扎实,但"事半功倍"= 复用 ba_report 这条生产验证范式 + 自建 PG 事实集,不是复用占位会议代码。三裁决已回填 10 §3 台账;[00 §E] 偏差控制由 [11 §C 闸] 取代并首次生效。


§1 修正后的底座架构(以 ba_report 范式为骨,a-cdm PG 为事实底座)

项目事实集 = acdm-backend 自建 PG(project_facts:可查询/审计链/强一致/按 project 硬隔离)
   ▲ 读                                   ▲ 提问/回灌
   │                                      │
任务流(LangGraph Pipeline,按 ba_report 范式 compile(checkpointer=,interrupt_before=)):
   ingest → refine → extract(带 char offset) → verify(程序校验 quote⊂源文)
        → [可疑/低置信/冲突] interrupt ──▶ acdm-backend BFF:awaiting_clarification 待办
        │                                   (owner 指派 + IM 通知 + 异步)
        │   人答 → update_state(answers) ───┘
        └─◀ runs.wait(None) 从中断节点续跑(仅重算受影响项)→ commit 入 project_facts

跨会聚合 / 待办 / Check / 复盘 —— 只读 project_facts(真 embedding/实体消歧关联)
  • vendored(deer-flow harness)改动 ≈ 0:只在 skills/custom 改 prompt、按 ba_report 范式新建会议任务流 pipeline(pipelines/ 是可加目录,注册 langgraph.json/aegra.json)、可选小扩 clarification_tool 参数(向后兼容)。
  • acdm-backend 自建(原生确不承载,§0 已举证):project_facts 库 + awaiting_clarification 待办 + 节点级 get_state BFF。
  • 05 模型映射:项目工作台=project_facts+配置;任务卡=awaiting_clarification/待办 overlay;任务流=ba_report 范式 pipeline;人审/回滚=interrupt+update_state;双触发=主动 invoke + 事件/cron。

§2 原子业务需求解构(ABR · 全链路 · 每条走 §D 四审)

字段见 [11 §E]。源码现状已走 §C 闸判级。实现方法只列推荐 + 关键取舍(完整多方案见 §3 承重项)。

ABR期望(T3 意图)用户价值/反孤岛验收(可用▏好用)源码现状(§C 判级,T1)实现方法(原生×05,推荐)底座性(§F)
A1 摄入口水稿/纪要入卡并绑定会议组织者上传即建卡,可追溯文件入卡+元数据▏多源统一文件上传 live(T1 file_service)任务流 ingest 节点,复用现上传高(领域无关"原始材料入卡")
A2 精修清洗/分块/说话人归一/结构化口水稿修"垃圾进垃圾出"根精修文本可读▏长会不丢中段(多 pass)缺失(无精修,单 mega-prompt 一遍)refine 节点:分块+多 pass+说话人归一(LLM,确定步骤)高(通用"噪声文本→结构化")
A3 抽取带offset事实抽取每条带 transcript char/行 offset可溯源前提每条带 offset▏分类准(分任务非 mega-prompt)占位/夸大(单 prompt、quote 无 offset,§0 裁决3)extract 节点拆成"分类型小 prompt + 强制结构化 offset"高(通用"带证据抽取")
A4 引文校验程序校验 quote 子串确在源文,否则丢/标可疑防幻觉硬闸(非 LLM 自律)无效 offset 100% 被拦▏可疑入 A5缺失verify 节点:纯程序 substring/对齐校验,acdm-backend 侧(可改)高(通用"产物可信闸")
A5 可疑点HITL可疑/低置信/冲突→澄清待办向责任人提问,人答回灌续跑论证 05 双主体回环;不猜待办指派 owner+IM▏人答增量续跑机制真实(ba_report)+异步待办层缺失(§0 裁决2)interrupt + acdm-backend awaiting_clarification 待办 + update_state 回灌高(通用"AI 不确定→人决策"原语)
A6 入事实集精修+人确认事实写 project_facts(带 offset/确认人/时间)单一真相写入强一致+审计链▏下游立即可读须自建(原生记忆不胜任,§0 裁决1)acdm-backend project_facts 事务写底座核心(领域无关事实库)
A7 跨会聚合同事项跨会归并/演进/风险升级,真关联项目级洞察归并准(真 embedding/实体消歧)▏读事实集不重扫占位(ZeroEmbedding+空 canonical→只看日期,§09§1)读 project_facts + 真 embedding + 实体消歧 reducer中(会议偏多,可抽象)
A8 待办派生action 事实→人审待办池(proposed→confirmed…)闭环到执行派生+状态机+至少一处同步▏跨会归并缺失(无 project_todos)待办 overlay=05 任务卡;读 project_facts高(=05 任务卡通用)
A9 Check 注入下会开场注入上次进度+偏差跨会连续性开场自动注入▏偏差标红缺失before_agent 中间件(custom_middlewares)读 project_facts高(通用"上下文注入")
A10 PDCA 复盘周/月复盘+改进项完成率管理层价值,差异化复盘 skill▏完成率仪表<50%报警缺失(只有占位报告)原生 skill,读 project_facts

四审记录(摘要):架构师否决"在占位会议管道上补"(双源漂移)→ 改 ba_report 范式重建;AI 专家要求 A3 拆小 prompt+A4 程序硬闸(非 prompt 自律);PMO钉死先 A1–A6 单会闭环再 A7–A10;业务顾问要求 A8 必须真同步进既有执行系统否则=孤岛。


§3 承重架构决策(多方案 + 7 维取舍 + 推荐 + devil's advocate)

7 维见 00 §B.2:①功能②可信③闭环④可逆⑤性能成本⑥可运维⑦原生杠杆。

D-1 任务流编排:如何获得 05 契约(持久/中断/审阅/回滚/续跑)

  • 方案 a:复用现 meeting_aggregator_realtime(一次性 SSE)打补丁。①2②1③1④1⑤2⑥2⑦2 — devil:双源漂移、§0 裁决3 已证 0 契约。
  • 方案 b(推荐):按 ba_report 范式新建会议任务流 pipeline:compile(checkpointer=get_checkpointer(), interrupt_before=[clarify_node]),BFF 用 update_state+runs.wait(None) 续跑。①3②3③3④3⑤2⑥3⑦3 — 复用生产验证范式,vendored 零改。devil:聚合从"一次性"变"可中断",延迟模型变复杂 → 缓解:无可疑点时不中断,直通。
  • 方案 c:换外部编排(Prefect/Airflow)。①3②3③3④3⑤2⑥1⑦0 — 违原生杠杆、运维重。。 → 推荐 b:ba_report 是 a-cdm 自己已跑通的 HITL+checkpoint+resume 实例,这才是真"事半功倍"。

D-2 项目事实集存储

  • a(推荐):acdm-backend 新 project_facts(PG;字段:project_id/fact_id/kind/text/owner/offset(file,char_start,char_end)/source_meeting/confidence/status/confirmed_by/version/supersedes/created_at)+ 全文检索,后续可加向量。①3②3③3④3⑤3⑥3⑦1(自建但 §0 已举证原生不胜任)。
  • b:原生记忆 namespace。§0 裁决1 已证 ❌(无查询/无强一致/隔离未实装)。
  • c:复用现 L1/L2 cache 当事实集。devil:cache 是聚合产物非真相源,且基于占位抽取 → 弃为真相源,仅作派生物化视图(沿 [05 GAP-6 6C] 但真相=project_facts)。 → 推荐 a,且设计为领域无关 project_facts(非 meeting_facts)以满足 §F 底座性(会议只是 source 之一)。

D-3 可疑点 HITL 待办层

  • 推荐:deer-flow 侧 clarification_tool 可选加 suspicious_point_id/source_offset/structured_options(向后兼容,vendored 最小);acdm-backend 新 awaiting_clarification(thread_id/point_id/assignee/status/due/answer)+ API + IM 通知 + update_state 回灌桥。①3②3③3④3⑤3⑥3⑦2。devil:中断态久挂的 thread 生命周期/超时 → 设 due + 升级策略(05 开放问题 1,本文 §5 定)。

D-4 抽取与防幻觉(治"错漏多/不可溯源")

  • 推荐:A3 拆分——先 refine(A2)→ 再"按类型分小 prompt 抽取"(decision/risk/action…各自专注,非单 mega-prompt)→ 每条强制带候选 offset → A4 程序校验 text/quote 是否真子串/可对齐到精修文本,失败→丢或转 A5。①3②3⑤2(多次 LLM 但单类小、可并发)。devil:多次 LLM 成本↑ → 缓解:精修后文本短、小 prompt 快、可并发;比单 mega-prompt+thinking 4-6min 串行更快更准(§09§1 反例)。

D-5 真关联(治跨会"只看日期")

  • 推荐:A7 用真 embedding service + 实体 canonical 消歧替换 ZeroEmbeddingService+空 canonical_entity_map;关联/归并读 project_facts。①3②2⑤2⑥2⑦2。devil:embedding 选型/成本/中文 → 留 §5 继续探讨(可先 entity 消歧拿大头,embedding 后置)。

§4 标杆最小闭环 M1(重定义,T0 验收)

目的:用最小范围 T0 证明 05 模型可行(论证北极星),不贪多。

范围:单项目 + 单场会议,A1→A2→A3→A4→A6 跑通(A5 先做"标记可疑"不强制人答,A7–A10 不在 M1)。 技术骨:新会议任务流 pipeline(ba_report 范式,compile(checkpointer=));refine/extract/verify 节点;acdm-backend project_facts 写入。 可证伪验收门(全部 T0):

  1. 一场真实会议跑完,产出 N 条事实,随机抽 20 条 100% 可点回精修文本精确 offset 且引文程序校验通过(可信);
  2. 无效 offset 项 0 条进 project_facts(被 A4 拦,可疑入标记)(防幻觉硬闸);
  3. project_facts 写入后下游立即可精确查询到(强一致,治原生记忆 30s 问题);
  4. 端到端单会 < 现状(占位 4-6min/场),且分类错误率人审显著优于占位(对比 §09§1)。 止损位:M1 不达门 → 回 §3 重选方案,不进 M2。

§5 开放问题(供继续探讨 · 决策点)

  1. 中断态 thread 生命周期:可疑点待办久挂未答,thread/checkpoint 如何超时/升级/GC?(05 开放问题 1)建议:due + 到期降级为"AI 暂定+标低信"入事实集并持续提醒,不永久阻塞。
  2. 事实集冲突治理:跨会矛盾事实(A 说 X,B 说 ¬X)在 project_facts 里是并存+标 conflict 还是仲裁?建议沿 spec"诚实呈现不仲裁"+ 升级为澄清待办。
  3. embedding 选型:中文、成本、是否自托管;能否先纯实体消歧(canonical)拿 80% 效果,embedding 二期。
  4. 底座抽象边界:project_facts + 任务流 + HITL 待办 抽到什么粒度才既领域无关又不过度设计?需一个非会议业务纸面复用验证(§F 判据3,北极星判据4)——建议选一个真实 A-CDM 业务做 1 页演练。
  5. 写成 OpenSpec change:本文 §1/§3 的底座契约应正式化为 openspec change(真相源),避免又一份会被打叉的 spec;何时切入?
  6. vendored 最小扩展的上游策略:clarification_tool 加参数是否走 cherry-pick/上游 PR,避免 vendored 漂移?

§6 PMO 结论(诚实 · 无 T0 不称达成)

  • 现状:已完成的是诚实基线 + 经源码验证的方法,尚无任何运行成果;05 模型"可行"仍是 待 M1 T0 证明 的命题。
  • 方向判定:成立且更扎实——三依赖核验把"复用对象"从"占位会议代码"纠正为"ba_report 生产范式 + 自建 PG 事实集",这反而降低了风险(有可抄的真实例)。
  • 建议序(承 [10 §5]):1 止损重部署 → 2 把 §1/§3 写成 OpenSpec change(底座契约真源)→ 3 M1(ba_report 范式跑通 A1–A6,T0 验收)→ 4 §5 开放问题逐个定。每步过 [11] §C 闸 + §D 四审 + §G 留痕。

公司内部参考 · 由 claude-wiki-gen 基于源码自动生成的二次分析