主题
05 · 方案空间与架构决策(研究核心)
每个关键差距给 2–3 个可行方案,统一 7 维取舍(00 §B.2),给推荐 + 反对理由(devil's advocate)。 排序首要键 = 第 ⑦ 维原生杠杆度(00 §B.3):同档优先纯原生;自建必须回答"为什么不能纯原生"。 评分 0–3;表末"=Σ/21"为总分仅作粗排,不替代逐维判断。
⚠️ P0-1 封板修正(2026-05-18):经 02 §0 核验,所有推荐方案不变且更稳,但前提收窄——
action原子(含 owner/due/status/priority)与跨会evolution_chain/风险升级/矛盾/四象限已是引擎产物。故:GAP-1 退为"溯源精度收口 + 2 个次要类型"(非头号地基);GAP-2 的 2C overlay 更显正确(action 原子就是它要复用的真相);GAP-4 偏差扫描多为"surface 引擎已算结果";GAP-6 的 InsightTree 本就是 L1 缓存计算态(非"漂移待修")。各 GAP 已就地标注修正。⚠️ P0-3(2026-05-19,效力更高):本文方案的前提"引擎产物可用"被推翻——那是 phase-B 占位(慢/差/不可溯源)。ADR-1 升级为"可验证溯源硬契约"、新增"精修先行 ADR"、GAP-6 6C 升为"项目事实集=单一真相(≈deer-flow 原生记忆)"、GAP-2 2C 即 05 任务卡片;关联须换真 embedding/实体消歧(当前最大效果杀手)。完整底座架构与最小闭环见 09 §3/§4。
GAP-1 · 原子溯源精度收口 + 2 个次要类型(修正后:非头号地基,可并行)
P0-1 修正:
decision/risk/action/milestone/agreement已抽取。本 GAP 实际范围 = ① quote→可验证锚(防幻觉收口,见 1B);② 可选加assumption/metric。下方方案与推荐仍适用,仅"扩 5 类"改为"收口溯源 + 可选 2 类",量级由"中"降为"小"。
方案
- 1A 沿 substrate 扩展现有抽取:在
deer-flow/skills/custom/meeting-aggregator-realtime/extract_prompt.md+acdm-backend/app/prompts/atom_extract_prompt.md+app/schemas/insights.py增action_item/risk/blocker/assumption/metric类型,EXTRACT_VERSIONbump → 全 L2 缓存失效 → admin backfill。★★ 原生扩展点。 - 1B 两段式抽取(内容 + 引用分离):沿用 1A 加类型,再加独立 citation pass——每条原子必须回带 transcript 字符/行 offset,程序化丢弃无有效 offset 的原子(langextract 范式;无 offset = LLM 从 few-shot 空想的信号,自动过滤=内建幻觉检测)。★★。
- 1C 新建独立抽取微服务:在 acdm-backend 另写抽取链。★ 自建。
取舍(①功能 ②可信 ③闭环 ④可逆 ⑤性能 ⑥可运维 ⑦原生)
| 方案 | ① | ② | ③ | ④ | ⑤ | ⑥ | ⑦ | Σ/21 | 关键判断 |
|---|---|---|---|---|---|---|---|---|---|
| 1A | 3 | 2 | 2 | 3 | 2 | 3 | 3 | 18 | 复用 substrate/版本化/backfill,改动集中在 prompt+schema,杠杆高 |
| 1B | 3 | 3 | 2 | 3 | 1 | 3 | 3 | 18 | 可信度满分(source_span 硬保证);代价=多一次 LLM pass,⑤降 |
| 1C | 2 | 2 | 2 | 1 | 2 | 1 | 0 | 10 | 对抗 substrate、违反原生杠杆,⑥⑦塌方 |
推荐:1A 为基线 + 折叠 1B 的引用纪律
- 即:1A 扩 schema(事半功倍主路),但强制每条
action_item/decision/risk/blocker带source_span且后处理丢弃无有效 offset 者(1B 的核心价值,代价可控:不必独立 pass,可在同 prompt 要求逐条带 quote+行锚 + 后处理校验)。 - 为什么不纯 1A:②可信只有 2——若不强制 offset,下游待办/Check 会建在幻觉上,违反 01 横切"可信"DoD,这是竞品公认头号信任杀手。
- 为什么不 1C:⑦=0,直接违反凌驾性原则,且与 OpenSpec
2026-05-12-ai-extract-as-aggregation-substrate决策对冲。 - devil's advocate:1B 全量两段式对长会成本翻倍——故"折叠"而非全采,仅对 PDCA 关键类型强制 offset,fact/entity 类沿用单 pass。
- 落地前必做(对应 02 §3 待核验):读
prompts/atom_extract_prompt.md+core/acdm/meeting-atoms.ts+InsightEnginePanel.tsx,确认 source 锚是"行/字符/时间戳"哪种,据此定 offset 字段。
GAP-2 · 一等公民待办池
方案
- 2A acdm-backend 新表全建:
project_todos表 + repo + service(全包business_transaction)+todo_router(require_project_access/owner),状态机复用 OpenSpecarchive/2026-04-30-meeting-status-state-machine范式。★ 自建。 - 2B 复用 deer-flow
ThreadState.todos:借原生 plan-mode 待办。★★★ 表面最省。 - 2C 轻量 overlay(待办 = action_item 原子 + 旁表存生命周期):不复制 what/who/due(留在 L2 原子),只建薄表
todo_overlay{atom_ref, status, owner_confirmed, due_confirmed, merge_key, merged_into, deleted_at}。★ 自建但极薄,强依赖 GAP-1。
取舍
| 方案 | ① | ② | ③ | ④ | ⑤ | ⑥ | ⑦ | Σ/21 | 关键判断 |
|---|---|---|---|---|---|---|---|---|---|
| 2A | 3 | 2 | 3 | 3 | 2 | 3 | 1 | 17 | 能力最全、最稳;⑦低=纯自建,但确属原生不承载的例外 |
| 2B | 0 | 0 | 0 | 0 | 1 | 1 | 3 | 5 | 结构性不可行:ThreadState.todos 单线程临时、无项目权限/无持久/无事务回滚 |
| 2C | 3 | 3 | 3 | 3 | 3 | 3 | 2 | 20 | 不复制上游真相、天然 source 可溯(②=3)、缓存复用(⑤=3)、薄表易接 substrate |
推荐:2C 轻量 overlay(若后续证明生命周期复杂到 overlay 撑不住,再演进到 2A)
- 为什么不能纯原生(2B):已用 7 维证伪——
ThreadState.todos是单 thread plan-mode 临时态,无跨会持久、无项目级权限、无 saga 回滚;项目待办池本质需强一致结构化持久,deer-flow 原生结构上无法承载。这是 00 §B.3 第 5 条要求的"自建例外"举证。 - 为什么 2C 优于 2A:待办的 what/who/due 本就是 GAP-1 的
action_item原子内容;2A 会复制一份真相导致"原子改了待办没改"的双源漂移。2C 让原子保持唯一上游真相,旁表只存"人审决定的生命周期"(状态/确认/归并/软删),既满足 01 §2.5,又天然 source-traceable(②=3),且复用 L2 缓存(⑤=3)。这正是"最大化复用、最小化自建"的体现。 - devil's advocate:2C 强耦合 GAP-1 schema——若 action_item 原子结构频繁变,overlay 引用会脆。缓解:overlay 用
(meeting_id, atom_kind, stable_hash)而非数组下标作引用键;GAP-1 的EXTRACT_VERSION升级时 overlay 走"重映射"而非丢弃(保人审)。 - 必接 substrate:overlay 所有写(确认/状态流转/归并/软删)包
business_transaction,删除走可逆,回收站 30 天——满足 01 §2.5 + 02 核验③ 既有能力。
GAP-3 · 待办闭环到执行系统(可用 Bar 硬门槛)
方案
- 3A 项目管家面板可读可改 + IM 推送:待办经既有 Agent Tools BFF 暴露给 project-{slug} 管家;在 deer-flow 前端洞察/项目面板加"待办"视图(读写 overlay);到期/新建经既有 IM 通道(deer-flow
26-IM通道系统)推送。★★ 原生扩展点为主。 - 3B 双向同步外部 PM(飞书任务/Jira):待办↔外部系统字段映射 + 状态回流。★ 自建集成。
取舍
| 方案 | ① | ② | ③ | ④ | ⑤ | ⑥ | ⑦ | Σ/21 | 关键判断 |
|---|---|---|---|---|---|---|---|---|---|
| 3A | 2 | 3 | 2 | 3 | 3 | 3 | 3 | 19 | 用既有 BFF+前端面板+原生 IM,达"可用反孤岛"门槛,杠杆高 |
| 3B | 3 | 2 | 3 | 2 | 2 | 2 | 1 | 17 | 达"好用"双向闭环,但外部系统集成重、运维面大 |
推荐:先 3A(够到可用 Bar)→ 视采用情况再 3B(抬到好用 Bar)
- 竞品铁律:待办不闭环=坟墓=花架子(07)。3A 用项目管家面板 + 原生 IM 即可让待办"有人回访",用最小代价跨过可用门槛。
- 为什么不直接 3B:外部 PM 双向同步是留存放大器但非可用前提;先验证内部闭环被用起来,再投入重集成,避免过早优化。
- devil's advocate:若公司实际用飞书任务为唯一执行入口,3A 的内部面板可能无人看 → 路线图 P0 末做一次"实际执行入口"用户核验,据此决定 3B 是否提前。
GAP-4 · Check 自动化(注入 + 偏差扫描)= 行业最大空位
方案
- 4A 原生 before_agent 中间件注入 + pipeline 偏差扫描:自定义中间件经
make_lead_agent(custom_middlewares=[...])注入(仿DynamicContextMiddleware),开场读 a-cdm 待办进度 BFF 拼"上次进度表";偏差扫描作为meeting-aggregator-realtime新节点或独立 skill(横扫本场 transcript×上次 action_item)。★★ 原生扩展点。 - 4B BFF 拼 check-materials + 前端注入:acdm-backend 出
/check-materials端点,前端把它塞进首条消息。★ 绕开中间件链。 - 4C 独立 Check pipeline 产出偏差报告 doc:
langgraph.json注册 check pipeline,定时/触发产"偏差报告"工件并回写知识库。★★★ 纯原生,但不是"开场注入"。
取舍
| 方案 | ① | ② | ③ | ④ | ⑤ | ⑥ | ⑦ | Σ/21 | 关键判断 |
|---|---|---|---|---|---|---|---|---|---|
| 4A | 3 | 3 | 3 | 3 | 2 | 3 | 3 | 20 | 注入走原生中间件链=最稳最杠杆;偏差扫描复用聚合 pipeline |
| 4B | 2 | 2 | 2 | 2 | 2 | 1 | 1 | 12 | 前端拼 prompt 脆、无 source 纪律、绕开链,⑥⑦低 |
| 4C | 3 | 3 | 2 | 3 | 3 | 3 | 3 | 20 | 纯原生 skill/pipeline,产物可逆;但"开场自动注入"语义需 4A 补 |
推荐:4A(注入)+ 4C(偏差报告工件)组合,弃 4B
- 4A 解决"下次会议开场就看见上次进度"——这正是 Fellow brief 模式、行业护城河;走原生中间件链是该语义的唯一稳态实现。
- 4C 解决"偏差扫描产出可存档、可回写知识库的工件"——纯 ★★★ 原生,且与 GAP-5 复盘 skill 共用取数与 prompt。
- 为什么弃 4B:前端/BFF 拼 prompt 违反原生杠杆(⑦=1)、脆且无 source 纪律,正是 07 "绕开中间件链"反模式。
- devil's advocate:4A 中间件每次开场调 BFF + 可能触发 LLM 偏差扫描 → 首响应延迟。缓解:偏差扫描结果走 L1/L2 缓存(GAP-6),中间件只注入"已算好的进度表",扫描异步预热;开关
ACDM_CHECK_INJECT_ENABLED降级。 - AISO/注入防护(横切):偏差扫描输入按说话人 provenance 打标;Check 注入文案显式标注"AI 草稿,待人确认",高 stake 结论不自动落待办状态。
GAP-5 · PDCA 复盘 / 报告类原生 skill(杠杆率最优,差异化最高)
方案
- 5A 新
skills/custom/pdca-review/SKILL.md:仿weekly-report范式,读项目 InsightTree+待办进度,产"做了/漂了/聚焦 + 改进项完成率仪表(<50% 报警)"。★★★ 纯原生。 - 5B 扩
weekly-report加 PDCA 版块:在既有周报 skill 的 prompt 加 PDCA 段。★★★。 - 5C 确定性 pipeline 定时产出:新 pipeline 注册
langgraph.json/aegra.json,周/月定时跑 PDCA 复盘工件并回写知识库。★★★。
取舍
| 方案 | ① | ② | ③ | ④ | ⑤ | ⑥ | ⑦ | Σ/21 | 关键判断 |
|---|---|---|---|---|---|---|---|---|---|
| 5A | 3 | 3 | 2 | 2 | 2 | 3 | 3 | 18 | 独立 skill 职责清晰、LLM 按需自选;对话触发 |
| 5B | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 16 | 省事但 PDCA 与周报职责混杂,演进受限 |
| 5C | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 21 | 定时自动产出+可逆回写知识库=闭环最强,纯原生满分 |
推荐:5A(按需对话)+ 5C(定时自动)双形态,弃 5B
- 这是全研究杠杆率最高的产出:GAP-1/2/4 就位后,5A/5C 增量极小(主要是 prompt + 取数),却拿下竞品空白——"显式 PDCA + 改进项完成率仪表(成熟 70–80%,<50% 报警)"。
- 5C 满分:定时 pipeline 产出工件 + 经
services/ba_report/wiki.py范式回写知识库(自动[ai-assist]前缀,可逆),实现 01 §2.6 Act 闭环。 - 为什么弃 5B:职责混杂,PDCA 演进会被周报格式绑架;独立 skill 边界更干净(原生 skill 体系本就鼓励单一职责)。
- devil's advocate:改进项完成率依赖 GAP-2 待办状态真实更新——若执行人不更新状态,完成率失真。缓解:完成率口径明确为"已确认 confirmed 中 done 占比"并标注样本量;Check(GAP-4)反推未更新项促更新,形成自校正。
GAP-6 · InsightTree 持久化(修正后:非"漂移待修",而是"缓存计算态够不够给 skill 用")
P0-1 修正:InsightTree 本就是刻意设计的 L1 缓存计算态(
spec.md:212-251/662-712,ALGO/EXTRACT 双版本 + lazy SQL JOIN 失效),非需求 §6 想象的"部分 cache 部分表漂移"。真实问题 = 报告/PDCA skill 能否直接消费缓存的结构化 payload(很可能可以,已含 aggregated/stats),还是需额外查询索引。推荐 6C 实质 = 系统现状的形式化:把"可由 pipeline 纯函数重建"作为硬约束写死(rebuild=重跑 9 节点),仅当 skill 出现缓存撑不住的统计才局部升 6A。下方 6A/6B/6C 取舍仍适用。
方案
- 6A acdm-backend PG 规范化表:
insight_nodes/insight_edges等规范化,强 join/统计/权限。★ 自建。 - 6B deer-flow 原生长期记忆 namespace:压在
agents/memory存储,项目级 namespace。★★ 原生。 - 6C 现有 L1 缓存升级为"物化视图":
MeetingInsightCache.payload结构化 + 加规范化旁表/索引(仅为查询热点建),真相仍来自 L2 原子聚合。★ 自建但增量,复用既有缓存框架。
取舍
| 方案 | ① | ② | ③ | ④ | ⑤ | ⑥ | ⑦ | Σ/21 | 关键判断 |
|---|---|---|---|---|---|---|---|---|---|
| 6A | 3 | 2 | 2 | 3 | 2 | 2 | 1 | 15 | 查询/统计最强;但新建规范化模型重、⑦低、易与缓存重复 |
| 6B | 2 | 2 | 2 | 1 | 2 | 2 | 3 | 14 | 杠杆高;但记忆是文件态弱一致、结构化查询弱、项目隔离需自管(④低) |
| 6C | 3 | 3 | 2 | 3 | 3 | 3 | 2 | 21 | 复用成熟 L1/L2+版本化,旁表只解查询热点,真相单源不漂 |
推荐:6C 物化视图(收敛"部分 cache 部分表"漂移);仅当报告 skills 出现缓存撑不住的复杂统计时,局部升级到 6A
- 现状痛点(需求 §6 自承)= "部分聚合在 DB / 部分在 cache"漂移。6C 用"单一真相(L2 原子聚合)+ 派生物化视图(为热点查询的旁表/索引)"显式收敛该漂移:真相只有一处,旁表是可重建的派生。
- 为什么不 6A:新建规范化模型会与既有 L1/L2 缓存职责重叠,⑦低且很可能再造一次"双源漂移"——与本 GAP 要解决的问题自相矛盾。
- 为什么不 6B:deer-flow 记忆是文件态、最后写赢、结构化查询弱、项目隔离要自管(④可逆/⑤一致都弱);InsightTree 要支撑报告/Check 的确定性查询,记忆底座不匹配——这是"原生不承载"的又一例外举证。
- devil's advocate(对 6C 最关键的质疑):6C 若纪律不严,"旁表"会悄悄变成"另一份真相",重蹈漂移。收敛判据(硬约束写入设计):旁表必须可由 L2 原子 +
EXTRACT_VERSION纯函数重建(提供rebuild_insight_view(project_id)且 admin backfill 复用之);任何"只在旁表存、无法从原子重建"的字段一律禁止——这条判据是 6C 成立的前提,必须在 06 P1 验收门强制检查。
GAP-8 · ASR / diarization / 词级时间戳(独立专项,给决策树不展开)
不阻塞主干(可人工上传 transcript 兜底),故只给选型决策树,实现细节列后续专项。
隐私/合规是否一票否决(数据不可出网)?
├─ 是 ──▶ 8C 本地自托管
│ ├─ ≤4 人为主、要省运维 ──▶ Parakeet.cpp(内建 diarization,CPU 可跑)
│ └─ 需词级±50ms 回溯/多语种 ──▶ WhisperX 自托管(faster-whisper+wav2vec2 对齐+pyannote)
└─ 否 ──▶ 中文质量优先 / 起步快 ──▶ 8B 云 ASR(通义听悟/讯飞类),按量,省运维
└─ 但需评估:数据出网合规、长会成本、词级时间戳是否够细供 source_span- 与主干衔接的硬要求:无论选哪条,transcript 必须带可映射到 source_span 的时间锚/词级偏移(GAP-1 推荐方案依赖它),否则回溯断裂。
- 中文长会(1–2h)统一要求多 pass 抽取防中段丢失(needle-in-haystack),该要求落在 GAP-1 skill 而非 ASR 层。
- 7 维粗判:8C-Parakeet(⑦原生无关、⑥运维优、合规满分,功能②时间戳较粗);8C-WhisperX(②可信最强、⑥运维最重);8B 云(⑥最省、合规风险高)。留作专项,本研究不替选——选型取决于公司合规政策这一外部输入。
架构决策记录(ADR 摘要 · 承重决策一览)
| ADR | 决策 | 取舍核心 | 可逆性/降级 |
|---|---|---|---|
| ADR-1(修正) | 原子溯源收口为主:quote→程序侧 transcript 校验、丢弃幻觉项;可选加 assumption/metric | 引擎已抽 PDCA 主类型,仅补防幻觉精度;沿双版本机制 | EXTRACT_VERSION 回退 + 旧 prompt 保留 |
| ADR-2 | 待办 = 轻量 overlay(GAP-2 推荐 2C) | 原子为唯一真相,旁表只存生命周期,杜绝双源漂移 | overlay 全写包 business_transaction,软删可逆 |
| ADR-3 | 待办先内部闭环再外部(GAP-3 3A→3B) | 用最小代价跨"反孤岛"可用门槛 | 内部面板/IM 即兜底,外部集成可关 |
| ADR-4 | Check 注入走原生中间件(GAP-4 4A)+ 偏差工件(4C) | 弃前端拼 prompt;注入用 custom_middlewares 扩展点 | ACDM_CHECK_INJECT_ENABLED 开关 |
| ADR-5 | PDCA 复盘 = 原生 skill(5A)+ 定时 pipeline(5C) | 杠杆最优、差异化最高;弃混入周报 | skill 可禁用,pipeline 可停 |
| ADR-6 | InsightTree = L2 真相 + 物化视图(GAP-6 6C) | 收敛"部分 cache 部分表";旁表须可纯函数重建 | rebuild_insight_view 幂等可重建 |
| ADR-7 | ASR 列专项,决策树交公司合规策略 | 不阻塞主干;人工上传兜底 | — |