Skip to content

ADR-0002: Citation 协议设计

  • 状态:Accepted
  • 日期:2026-04-28

背景

投研输出必须可溯源。LLM 容易编造数字,必须有强制约束。候选方案:

  1. Inline source IDs[src:tushare:daily:2024-Q3] 自由 prose 中带 tag
  2. Structured output with mandatory cite field — JSON schema 强制 cite
  3. Two-pass: Agent writes, Verifier checks — 自由生成 + 第二轮 LLM 审核
  4. Competence-anchored — 每个声明锚到 Competence ID

决策

采用 2 + 4 的组合:tagged union cite 字段同时支持 kind: "tool"kind: "competence"

详见 Citation 协议

理由

  • 强 schema 约束 > 弱 inline tag — JSON schema 容易被代码校验,inline tag LLM 容易丢
  • Competence-anchored 让知识可溯 — 不只是数字,定性判断也带来源
  • 不需要第二个 LLM — 大部分编造(90%+)能被确定性代码抓到

取舍

输出冗余度高 — 每个数字都包一层 {value, cite} JSON,不能直接当 prose 输出

  • 缓解:渲染层把结构化数据转成人类可读的报告(保留可点击的 cite link)

要求 LLM 输出严格 JSON — 模型的 instruction-following 要够强

  • 缓解:Model Router 把综合写作路由到强模型 (Claude Opus / GPT-4)

Competence 注册需要前置工作 — 得先把领域知识列出来

  • 缓解:MVP 不要求覆盖完整域;从最常用的 10-20 条开始,按需扩展

为什么不用 LLM Critic

投研里最高频失败是编造数字,不是推理错。编造数字 90% 能被确定性代码抓到:

  • Schema check
  • tool_call_id 解析
  • 值匹配(cite 的值 = tool 返回值)
  • competence_id 解析

LLM Critic 多消耗 3-5x token、引入 judge bias、自己也会 hallucination。先用代码兜底,eval 数据证明不够时再加 LLM 层。

影响

  • 所有 Skill 输出必须符合 cite schema
  • Verifier 是 MVP 的核心组件,不是 nice-to-have
  • 数据层 (01) 必须暴露 tool_call_id 与 fetch 元数据
  • Competence 注册机制是 Hermes 接入工作的关键依赖

Internal documentation