第19章:Research Synthesis:如何让 Agent 写出“深度研报”
搜索(Search)只是找砖头,综合(Synthesis)才是盖房子。大多数 Agent 只能给你一堆砖头,而 Research Synthesis 能给你交付一栋别墅。
你让 Agent:“帮我研究一下 Anthropic 这家公司。”
普通 Agent 的回答:
Anthropic 是一家 AI 安全公司,由前 OpenAI 员工创立。他们的产品是 Claude。最近融了很多钱。
这回答错了吗?没错。 但这有用吗?没用。 这只是一堆碎片的堆砌,连“百度百科”的水平都不到。如果你是投资人,拿着这份报告去上会,会被老板骂死。
Research Synthesis(综合研究)模式 的目标,是让 Agent 像一个 顶级分析师 一样工作:
- 多源信源:不只看官网,还要看财报、新闻、甚至社交媒体。
- 交叉验证:A 媒体说融资 10 亿,B 媒体说 40 亿,到底信谁?
- 查漏补缺:发现“管理团队背景”这一块没查到,自动去补查,而不是直接交卷。
- 结构化输出:最终交付一份有目录、有引用、有洞察的深度报告。
01. 为什么“搜完就算”是错误的?
很多人做 RAG(检索增强生成)都有一个误区: 用户提问 -> 搜索 Top 3 结果 -> 扔给 LLM 总结 -> 结束。
这种线性流程有两个致命缺陷:
- 信息茧房:Top 3 结果往往是同质化的(比如 3 篇都是通稿)。
- 盲目自信:Agent 根本不知道自己“漏了什么”。它不知道“产品定价”没查到,它只会假装这个问题不存在。
Research Synthesis 的核心逻辑是:循环迭代。 它不追求“一次搜对”,而是追求“不断逼近全貌”。
02. 核心架构:像写论文一样做研究
我们可以把这个过程想象成 写毕业论文 的五个阶段:
阶段一:开题报告(Planning)
Agent 拿到题目“研究 Anthropic”,首先生成一个 研究大纲:
- 维度 A:公司概况(创始人、愿景)
- 维度 B:产品矩阵(Claude 3 性能、定价)
- 维度 C:资本版图(融资额、投资方)
- 维度 D:风险分析(监管压力、人才流失)
阶段二:分头行动(Parallel Execution)
编排器(Orchestrator)派出 4 个 Researcher Agent,分别去查这 4 个维度。
- Agent A 去官网查概况。
- Agent B 去 TechCrunch 查融资。
- Agent C 去 GitHub 和 HuggingFace 查技术评价。
阶段三:拼图与缺口识别(Coverage Evaluation)
这是最关键的一步。 Agent 把找回来的碎片拼在一起,然后自我审视: “拼图完整了吗?”
- 现状:概况有了,融资有了。
- 缺口:产品定价没找到,团队背景太简略。
- 决策:不能交卷。
阶段四:定向补全(Iterative Filling)
针对缺口,发起第二轮定向搜索:
- “搜索 Anthropic Claude 3 API pricing”
- “搜索 Dario Amodei 之前的论文”
阶段五:终稿合成(Synthesis)
当覆盖率达标(比如 > 80%),或者达到最大轮次,进入最后一步:
- 去重:把重复的融资新闻删掉。
- 冲突解决:如果数据打架,标注“据 X 报道是 A,据 Y 报道是 B”。
- 格式化:生成 Markdown 报告,并在每一处事实后面加上
[1]这样的引用角标。
03. 关键技术点:覆盖率评估器(The Grader)
如何判断“查够了没”?我们需要一个 评估器(Evaluator) 。
这不是靠感觉,而是靠 Prompt Engineering + 确定性规则。
# 伪代码:覆盖率评估逻辑
def evaluate_coverage(current_report, required_dimensions):
prompt = f"""
目标维度:{required_dimensions}
当前报告内容:{current_report}
请评估:
1. 每个维度的覆盖程度(0-1分)。
2. 识别出具体的“关键缺口”(Critical Gaps)。
3. 如果报告里全是“未找到相关信息”,请打低分。
"""
score, gaps = llm.evaluate(prompt)
# 确定性护栏(Guardrails)
if iteration > MAX_ITERATION:
return "强制结束" # 防止死循环烧钱
if score < 0.5:
return "继续查"
if has_critical_gaps(gaps):
return "定向补查"
return "通过"
经验之谈: 最容易出的 Bug 是 “幻觉覆盖” 。 Agent 会说:“我查了产品定价,结果是未公开。” 如果不加干预,评估器可能会觉得“查了”就是“覆盖了”。必须明确告诉评估器: “承认不知道”不等于“覆盖了信息” 。
04. 数据清洗:实体过滤器(Entity Filter)
在搜“Anthropic”时,搜索引擎可能会返回:
- “OpenAI 发布了 Sora”(竞品新闻,干扰项)
- “人类学(Anthropology)的研究进展”(关键词撞车,噪音)
如果把这些垃圾塞进 Context,报告质量会大打折扣。 我们需要一个 实体过滤器:
- 白名单机制:优先保留
anthropic.com、crunchbase.com等权威域名的来源。 - 相关性打分:计算搜索结果摘要与“Anthropic”这个实体的语义相似度,低于 0.3 的直接丢弃。
05. 输出标准:没有引用就是耍流氓
在专业领域,可信度(Trustworthiness) 比 流利度(Fluency) 更重要。 Research Synthesis 模式要求输出必须包含 内联引用(Inline Citations) 。
错误示范:
Anthropic 估值 180 亿。
正确示范:
截至 2024 年初,Anthropic 完成了新一轮融资,估值达到 184 亿美元 [1] 。其主要投资方包括 Amazon 和 Google [2] 。
Sources: [1] New York Times: Anthropic raises $4B... [2] Crunchbase Profile...
这不仅是为了好看,更是为了 免责 和 验证。用户可以点击链接去确认真伪。
总结
Research Synthesis 是 Agent 高级推理能力的集大成者。
- 它用 Planning 拆解维度。
- 它用 Parallel Execution 并行搜集。
- 它用 Reflection 评估覆盖率。
- 它用 Iterative Loop 查漏补缺。
它是目前最接近 “人类分析师” 的工作流。
Part 6(高级推理模式)完结。
我们学习了:
- ToT:在迷宫中找路。
- Debate:在冲突中找真理。
- Research Synthesis:在海量信息中找全貌。
到现在为止,我们在 逻辑层面 已经无懈可击了。 但是,要把这一套复杂的系统搬到 生产环境(Production) ,我们还需要解决最后一公里的问题:性能、并发、部署、监控。
Part 7:生产架构(The Production Architecture) 正式开启。 下一章,我们将跳出具体的 Agent 逻辑,从系统架构师的视角,聊聊 Go/Rust/Python 的三层架构设计 —— 怎么让你的 Python Agent 跑在高性能的 Go 甚至 Rust 基础设施上?
第 20 章见。