Agent-10-11.引用约束生成与报告合成

系列:00 索引 · 上一篇:10 长任务


1. 行业常见问题

现象 风险
报告流畅但引用造假 科研/合规不可接受
多源证据(文献+计算+方法库)混在一起 读者无法追溯
推荐列表无排序依据 无法复现决策
「定稿」无审批 错误结论流出

2. 该技术如何解决

  1. Grounded Generation:生成前强制注入证据块;生成后校验引用 id
  2. Citation Packing:每条结论绑定 [n] 或结构化 ref
  3. 结构化推荐表:JSON/Markdown 表格 + 分源引用(文献 vs 方法 vs 计算输出)
  4. HITL 定稿:无引用或缺关键字段则不可 approve

段末注释:Grounded Generation 指生成内容必须可追溯到给定上下文证据,而非模型自由发挥。


3. 核心原理

3.1 报告输入分层

1
2
3
4
事实层:intake、转录本、job 结果路径(artifact)
证据层:RAG chunks、graph nodes
方法层:采用的分析路径说明
合成层:LLM 按模板填槽 + 引用

3.2 Prompt 约束(生成层)

  1. 每个段落至少一条 [n] 引用
  2. 推荐表每行 refs 非空,区分 literature / method / computation
  3. 末尾声明:研究辅助,非临床/监管决策

4. 典型实现与代码示例

报告合成两层:模板合并 artifactagent/reporter/artifacts.py)+ LangChain 轻量合成(LangGraph reporter 节点)。

4.1 结构化报告:artifact 合并

1
2
3
4
5
6
7
8
9
10
# agent/reporter/artifacts.py — 读取落盘 JSON 的关键字段
def build_final_report(*, run_id, gene_symbol, artifacts_dir, summaries=None) -> str:
plan = _load_json(artifacts_dir / "research_plan.json")
# goal / transcripts / metrics / steps → 「Research Plan」节
execution = _load_json(artifacts_dir / "execution_manifest.json")
# status / workflows[].outputs → 「Execution」节与计算 URI 引用
summaries = summaries or {} # 来自 PipelineState,键名与 state 字段对应:
# sequence_summary / literature_summary / method_kb_summary
# planner_summary / analyst_summary
...

各 Specialist 摘要来自 LangGraph 节点 state;artifact 路径由 uni/artifact_store 统一管理。

4.2 LangChain 合成节点

1
2
3
4
5
6
7
8
# agent/orchestrator/graph.py
def synthesize_with_langchain(*, sequence_summary, literature_summary, method_kb_summary="", force_mock=False):
prompt = "基于以下三阶段摘要,写一段 siRNA 调研结论(带 [sequence]/[literature]/[method_kb] 来源标注):..."
if force_mock:
return f"[mock 合成]\n{prompt[:500]}..."
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-4.1-mini", model_provider="openai")
return str(model.invoke([SystemMessage(...), HumanMessage(content=prompt)]).content)

Reporter Skill(skills/reporter/report_template.md)约束引用格式;HITL 定稿前须校验 [n] 或分源 ref 非空。

4.3 工程验收

1
2
3
4
5
6
# 全链路生成 report artifact
uv run python -m agent.orchestrator.cli run --symbol BRCA1 --llm-agents --mock-llm
# 报告落盘:workspace/runs/<run_id>/artifacts/final_report.md

# 单独 Reporter Agent(若有 research_plan + execution manifest)
uv run python -m agent.reporter.cli from-run <run_id> --symbol BRCA1

5. 替代方案与优缺点

方案 优点 缺点
模板 + LLM 填槽 结构稳 灵活性中
纯 LLM 自由撰写 文笔好 引用不可靠
先抽取事实 JSON 再渲染 可审计 两步成本
RAG + 强制 JSON refs 机器可验 prompt 工程
人工只改 Markdown 简单 难规模化

6. 自检题

  1. 文献引用与计算输出引用在报告中应如何区分呈现?
  2. 为何「无引用定稿」必须被系统拒绝?
  3. Grounded Generation 与 Hybrid RAG 的关系是什么?

7. 延伸阅读

-------------本文结束感谢您的阅读-------------