跳到主要内容

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 1Hermes 通用 agent
arm 2martin FinClaw 完整形态
arm 3FinBayes plain:默认 identity + monkeypatch 关 cognition runtime
arm 4FinBayes 骨架 + martin 灵魂注入 + 同样关 cognition runtime
C1Claude Code 裸(无金融人格注入)
C2Claude 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_transcriptprompt-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 gatesystem prompt 段:"不同任务关注不同维度,参考下表选择性展开" + 表格
字段暴露面分层(MP-5)渲染层 projection + 字段过滤 codecsystem 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.md 2026-06-09 节
  • wrapper-bug 修复证据:FinBayes finbayes/providers/cli_provider.py + Hermes hermes-agent/agent/claude_code_client.py + martin finclaw/providers/cli_provider.py 三处修复 + RED test pass

§7 开放问题(PROPOSED 状态待解答)

Q含义拍板者
Q1NVDA 题 + 5 stratified case 是否复现 BTC 模式?实证决定
Q2「prompt-level 协议」与「ADR-025 纯 ReAct 骨架」是否需要联立改动?owner
Q313 条契约不变量里哪些必须 runtime gate 不能降级(如安全/合规边界)?owner + Claude review
Q4FinBayes workspace 默认要不要 bundle 三件套 persona 模板?bundle 哪一版?owner
Q5MP-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 输出要素规范)继续作为输出契约,不动