ADR-029 — 结构化认知载体重定位:runtime 层降级,prompt 层协议化
§0 决议简述
决议(拟):把 FinBayes 的结构化认知约束(MP-4 任务→必含字段动态组合、MP-5 字段暴露面分层、react_cognition 运行时 cognition pipeline)的落地载体从「runtime 强制执行」降级为「prompt-level 协议引导」。
不变:
- ADR-013 codify 哲学(Build-Y / Require-X-when-Y / 最小 Prevent-X)方向不动
- 13 条契约型不变量内容不动
- 战略愿景(条件化判断 / 任务动态字段组合 / 反方观点 / falsifier)不动
变:
- 不变量与契约不再以 runtime gate / DAG pipeline / 强制字段填充 / soft-guidance prompt builder 等运行时机制实施
- 改为以 SOUL.md 风格人格契约 + AGENTS.md 风格操作协议 + 任务驱动 system prompt 段 三件套作为落地形态
- 评测(FinTecEval)仍按 13 条契约不变量校验输出,但输入侧不再做 runtime 强制
触发:2026-06-09 BTC 题 6-arm 实测 + wrapper-bug 中段揪出,证据链锁定(详 §1)。
§1 触发证据:2026-06-09 BTC 6-arm 实测
§1.1 实验设计
6 个测试对象同问「BTC 当前处于牛熊周期的什么阶段?目前是否可以买入?」,同模型 claude-opus-4-7(C1/C2 是 Claude Code 同模型):
| arm | 配置 |
|---|---|
| arm 1 | Hermes 通用 agent |
| arm 2 | martin FinClaw 完整形态 |
| arm 3 | FinBayes plain:默认 identity + monkeypatch 关 cognition runtime |
| arm 4 | FinBayes 骨架 + martin 灵魂注入 + 同样关 cognition runtime |
| C1 | Claude Code 裸(无金融人格注入) |
| C2 | Claude Code 骨架 + martin 灵魂注入 |
§1.2 关键结果
| 现象 | 证据 | 含义 |
|---|---|---|
| arm 3 关掉 MP-4 / 旧 DAG / react_cognition 后,仍输出完整决策框架(数据快照表 + 周期判断 + 触发价 + falsifier + 反方观点) | /tmp/btc_runs/arm3_finbayes_plain.json 完整原文 | runtime 结构化机制不是答案质量必要条件 |
| arm 3 → arm 4 唯一变量是 system prompt 内容(FinBayes default identity → martin SOUL+AGENTS+WATCHLIST 替换),arm 4 比 arm 3 多了 Rating + Conviction 协议、真 thesis 引用(替代 arm 3 的幻觉)、主动 watchlist 更新提议 | /tmp/btc_runs/arm4_finbayes_martin_soul.json vs arm 3 | 结构化效果可由 system prompt 内容承载 |
| C1 → C2 在 Claude Code 骨架上复现同模式:C2 加 martin 灵魂注入 → 也用了 Rating + Conviction,且主动 flag watchlist 价格 vs web 数据 9% 缺口 | /tmp/btc_runs/C2_subagent_transcript | prompt-level 协议在异构骨架上可移植 |
| 6 个 arm 都没 upfront ask 用户,都用分层决策框架(DCA / 信号等待 / 不买)覆盖模糊度 | 6 arm 全部原文 | 模糊度处理可由 prompt-level "If ambiguous, offer layered options" 覆盖,不需要 runtime ask state machine |
§1.3 wrapper bug 的 audit-trail(不进 ADR 主决议,但记入证据)
实验中段揪出 cli_provider.py plan-mode + del tools wrapper bug(详 memory 锚 finbayes_engineering_launch_2026-06-07.md 2026-06-09 段)。此 bug 历史污染了 30 题盲评数据 + 此前所有 react_cognition 实测结果。本 ADR 仅基于 wrapper-fix 后的 BTC 6-arm 干净数据 + arm 3 验证为根因证据。
§2 决议详细
§2.1 落地载体的三层重定位
| 层 | 原(runtime) | 新(prompt) |
|---|---|---|
| 任务→必含字段动态组合(MP-4) | task_type matrix 注入 prompt + runtime field gate | system prompt 段:"不同任务关注不同维度,参考下表选择性展开" + 表格 |
| 字段暴露面分层(MP-5) | 渲染层 projection + 字段过滤 codec | system prompt 段:"对用户面输出叙述判断 + 必要数据;对结构化端额外暴露 reasoning trace" |
| react_cognition 多轮 | 专属 cognition pipeline + cognition tool exclude set | 普通 ReAct loop + system prompt 段:"多轮 reason → tool → update opinion → answer" |
| 13 条契约不变量 | runtime 校验 + gate fail | 评测期校验输出(FinTecEval),输入期不 gate |
§2.2 prompt 协议三件套(取代 runtime 框架)
(a) Persona 契约(类 SOUL.md)
- 性格 / 价值观 / 沟通风格三段
- 任务无关,agent 启动即固化
- 例:「Opinionated:I form clear views and defend them with data, I don't hedge into meaninglessness」
(b) Operating 协议(类 AGENTS.md)
- Opinion Protocol:每个方向判断必含 Rating + Conviction + Key reason
- Watchlist Protocol:讨论标的前 check WATCHLIST.md,存在引用,不存在直接说"无既有 opinion"(修复 arm 3 幻觉发现)
- Tool Selection Protocol:market data 工具选择决策表
- Document Protocol:DOCUMENTS.md 优先于通用知识
(c) Task-aware 段(动态拼装)
- 用户问题类型自动检测后,在 system prompt 追加该任务类型的"建议关注维度"片段
- 不强制 enforce,仅作为软引导
- 例:crypto 周期题追加"建议关注:减半周期阶段 / 链上指标 / ETF 流向 / 宏观流动性 / 反方观点"
§2.3 13 条契约不变量的处理
不删除、不改文字、改实施位置:
- 上位:仍是 strategic-invariants-codified.md 的"机器可断言契约"(文档级)
- 中位:渲染到三件套 prompt 协议里作为软指引
- 下位:FinTecEval 评测时仅校验输出是否满足,输入端不做 runtime gate
§3 后果分析
§3.1 正面后果
- 答案质量验证为不下降(BTC 6-arm 实证)
- 工程复杂度大幅下降:移除 MP-4 矩阵注入、react_cognition pipeline、字段 codec、cognition tool exclude 等 runtime 机制
- 可移植性提升:prompt 协议可在异构骨架(FinBayes / Claude Code / Hermes / 任意 LLM agent)上注入,不绑死 FinBayes 实现
- 减少 ADR-013 漂移机会:runtime gate 是 Prevent-X 倾向的最大温床,降级即从根上消除
§3.2 负面后果
- 强制性降低:runtime gate 能 100% 阻止格式错误,prompt 软引导只能"高概率正确"
- 缓解:FinTecEval 兜底 + 评测期把关
- 跨任务一致性可能轻微下降:runtime 矩阵保证 task A 和 task B 都填同样 N 个字段,prompt 软引导可能在 task B 上 LLM 自主省略某字段
- 缓解:Opinion Protocol 这种关键最小集强约束保留在 persona 契约中
- 历史 codify 工作(B1.1-B1.4 / W1-W4)部分作废
- 不缓解:作为试错成本承担。所幸文档级契约保留,仅 runtime enforcement 部分作废
§3.3 中性后果
- 13 条契约不变量文字不动,外部读者看 strategic-invariants-codified.md 不变
- M0 / M1 milestone 验收维度不动,只是验收方式从 runtime gate 改为 FinTecEval 输出校验
- 工程仓 cli_provider.py 已修,不增加新负担
§4 备选方案
§4.1 备选 A:维持 runtime gate(不改)
- 代价:BTC 实验已证 arm 3(无 runtime gate)= arm 2 质量,runtime gate 是冗余
- 理由弱:维持只是路径依赖,无独立证据支持
- 拒
§4.2 备选 B:仅废除 react_cognition,保留 MP-4 / MP-5
- 部分降级
- 问题:BTC 实验显示 MP-4 矩阵的实际作用是"通过软引导让模型填齐 N 个字段",这等价于 prompt-level 协议;保留 runtime enforcement 是给同样的事多套一层
- 拒
§4.3 备选 C(本 ADR 决议):全量降级到 prompt 层
- 论证见 §1 §2 §3
- 取
§4.4 备选 D:在 prompt 层之上再加 LLM-as-validator
- 问题:LLM judge 已被纪律拉黑(详 memory 锚 2026-06-09 方法论重置段)
- 拒
§5 实施路径(待 owner 拍后细化)
§5.1 Phase A:扩展实证
- 跑第 2 题 NVDA 6-arm(已排期 G2)
- 若 NVDA 重复 BTC 模式,跑 5-stratified case sample(从 30 case 挑覆盖最广)
- 若 5 题样本仍同模式,则本 ADR 由 PROPOSED → ACCEPTED
§5.2 Phase B:工程降级
- 移除 / 保留二选一:MP-4 矩阵注入、react_cognition pipeline、字段 codec 强制路径
- 三件套 prompt 协议写到 FinBayes workspace 标准模板(mirror martin AGENTS.md / SOUL.md 模式)
- ADR-025(骨架范式纯 ReAct)+ 本 ADR 联立:FinBayes 骨架 = 纯 ReAct + persona 三件套,不需要 cognition pipeline
§5.3 Phase C:测试体系对齐
- FinTecEval 输出校验 13 条契约不变量(已基本成立)
- 删除:runtime gate 维度(已在 W2-3 binary 门部分体现)
- 新增:「同样 prompt 协议在 ≥ 2 个骨架上行为一致」作为可移植性维度
§5.4 文档同步项
- 改写:MP-4 / MP-5 文档头注明"降级为 prompt 协议指引,runtime 强制部分作废",保留文字便于历史追溯
- 不动:strategic-invariants-codified.md 13 条契约文字
- 新增:persona-protocol-template/ 目录存三件套模板(SOUL / AGENTS / Task-aware 片段)
§6 依赖证据与可追溯
- 主证据:
/tmp/btc_runs/6 arm 完整 JSON + log(待迁入 governance/audit/ 永久存档) - 方法论锚:memory
finbayes_engineering_launch_2026-06-07.md2026-06-09 节 - wrapper-bug 修复证据:FinBayes
finbayes/providers/cli_provider.py+ Hermeshermes-agent/agent/claude_code_client.py+ martinfinclaw/providers/cli_provider.py三处修复 + RED test pass
§7 开放问题(PROPOSED 状态待解答)
| Q | 含义 | 拍板者 |
|---|---|---|
| Q1 | NVDA 题 + 5 stratified case 是否复现 BTC 模式? | 实证决定 |
| Q2 | 「prompt-level 协议」与「ADR-025 纯 ReAct 骨架」是否需要联立改动? | owner |
| Q3 | 13 条契约不变量里哪些必须 runtime gate 不能降级(如安全/合规边界)? | owner + Claude review |
| Q4 | FinBayes workspace 默认要不要 bundle 三件套 persona 模板?bundle 哪一版? | owner |
| Q5 | MP-4 / MP-5 文档保留还是作废?保留如何标记降级状态? | owner |
§8 关联与依赖
- 承接:ADR-013(codify 哲学不变)、ADR-025(骨架纯 ReAct)、ADR-028(即时生效 + 阶段 1)
- 部分修订落地载体:MP-4、MP-5
- 后续触发:本 ADR 若 ACCEPTED,需新建 ADR 处理「persona 协议三件套标准 + 任务驱动 task-aware 段动态拼装规则」
- 与 INV-13 关系:INV-13(S1 输出要素规范)继续作为输出契约,不动