Deep Research Agent:让 AI 带着小本本去查资料

Deep Research Agent 不只是“联网搜索一下”,而是会拆问题、找证据、交叉验证、写报告的研究型 agent。可爱归可爱,证据链不能撒娇。

有些问题不适合让 AI “秒答”。

比如“给我比较几种向量数据库”“分析某个行业的机会”“帮我查一下这个开源项目能不能用于生产”。这类问题像一团毛线球:一拽就是资料、定义、时间线、价格、限制、反例、过期信息、营销话术。普通聊天模型如果张口就答,常常答得很顺,顺到像刚从 PPT 里滑出来。

Deep Research Agent 做的是另一种活。它不急着回答,而是先背上小书包,拿出小本本,开始查资料:先拆问题,再找来源,再对比证据,最后把“我为什么这么判断”写清楚。很像一只戴眼镜的小仓鼠在资料堆里翻来翻去:吱吱,找到一个来源;吱吱,这个来源有点可疑;吱吱,先别下结论。

一句话理解

Deep Research Agent 是研究型 agent:它会把开放问题拆成子问题,循环搜索和阅读材料,保存证据,交叉验证,最后生成带来源、带不确定性说明的报告。重点不是“搜到了什么”,而是“证据链怎么长出来”。

它和普通搜索差在哪

搜索引擎像图书馆门口的索引卡。你问一句,它递给你十扇门。

Deep Research Agent 更像一个研究助理。它会进门、翻目录、做笔记、发现不对劲再换一个门。最后它不应该只说“我找到了这些网页”,而要告诉你:哪些证据可靠,哪些互相打架,哪些结论只能暂时相信。

任务普通搜索Deep Research Agent
找资料返回链接列表主动阅读、摘录、去重
拆问题靠用户自己拆先写研究计划,再分头查
处理冲突用户自己判断标出冲突来源和可能原因
写结论用户自己汇总给出结论、证据和置信度
可复查浏览器历史里慢慢找报告里保留引用和中间笔记

这听起来像“搜索 + 总结”的豪华版,但真正的差别在循环:它会带着问题反复回来,不是扫一眼网页就交卷。

研究现场

{用户} 帮我看看这个技术方向值不值得投时间。

{.小研究员} 收到,我先拆成:市场需求、技术成熟度、替代方案、学习成本、未来风险。先不急着夸它,喵。

{用户} 喵?

{.小研究员} 语气可以可爱,引用必须严肃。

一只靠谱研究员的工作流

Deep Research Agent 的核心不是“联网能力”,而是一条研究流水线。它大概会这样转:

1. 问题澄清

把用户的一句话改写成可以研究的问题。如果目标太大,它要先缩范围,不然会查成一锅粥。

2. 制定计划

列出子问题、关键词、可能来源、验收标准。计划不是装饰,是防止迷路的地图。

3. 搜索与阅读

搜索只是入口。真正花时间的是打开材料、抽取事实、记录出处、判断时效。

4. 交叉验证

同一个结论至少找两个角度看。官方文档、论文、社区实践、代码仓库、价格页,说话方式都不一样。

5. 综合报告

把证据揉成结构化结论,标出不确定性,给出下一步建议。

这里有个很反直觉的点:一个好的研究 agent 不应该显得“特别自信”。它应该在该怂的时候怂一下。资料不足就说不足,来源冲突就说冲突,过期信息就标日期。可爱一点说就是:尾巴可以翘,证据不能飘。

架构:小队出动,而不是一个模型硬扛

如果把 Deep Research Agent 画成一间小小研究所,我会这样分工:

  • 规划员:把大问题切成小问题,决定先查什么、后查什么。
  • 搜索员:负责找入口,不迷信第一页结果。
  • 阅读员:打开网页、论文、文档,抽取事实和原文片段。
  • 质检员:检查来源是否可靠、是否过期、是否互相矛盾。
  • 写作者:把材料整理成报告,让人能读下去。

它们可以是同一个模型在不同 prompt 下扮演,也可以是多个子 agent 分工。关键不是名字好听,而是职责要清楚。否则一个模型一边搜索、一边判断、一边写结论,很容易把“刚看到的东西”当成“最重要的东西”。

research-agent-architecture.txttext
User question
  ↓
Research planner
  ↓
┌──────────────┬──────────────┬──────────────┐
│ Web searcher │ Doc reader   │ Paper reader │
└──────────────┴──────────────┴──────────────┘
  ↓
Evidence store / notes
  ↓
Verifier / contradiction checker
  ↓
Report writer
  ↓
Final answer with citations

这也是为什么我不太喜欢“把搜索工具塞给模型就叫 deep research”。那只是给小仓鼠一个放大镜。真正的研究 agent 还要有书架、便签、垃圾桶、复核流程,以及一个能把它从资料堆里捞出来的停止条件。

证据仓库:别让上下文窗口变成垃圾桶

研究任务最容易爆上下文。网页全文、PDF 摘要、搜索结果、表格、聊天记录,全塞进模型窗口,最后模型像抱着十床被子过独木桥,走两步就开始晃。

更稳的做法是建一个证据仓库:

evidence-note.yamlyaml
id: source-007
title: LangGraph overview
url: https://docs.langchain.com/oss/python/langgraph/overview
accessed_at: 2026-07-08
claims:
  - LangGraph 用图结构组织 agent 工作流。
  - 它支持持久执行、human-in-the-loop 和长期运行任务。
quotes:
  - "..."
reliability: official-doc
used_for:
  - agent runtime architecture

然后模型每一轮只读取需要的片段。报告里引用 source-007,质检时也能回去查。这个动作很笨,但笨得可靠。很多工程最后拼的不是“模型更聪明”,而是“资料别乱飞”。

不要把引用当装饰品

引用不是给文章贴金的小贴纸。它应该能支撑具体句子。比如“某工具支持 checkpoint”后面要能点回官方文档;“某研究说效果提升”要能点回论文或实验说明。否则引用再多,也只是漂亮的鱼鳞片。

研究计划应该长什么样

一个研究 agent 开始干活前,最好先写一份计划。不是为了仪式感,而是为了让后面的偏航能被看见。

research-plan.mdmd
# 研究问题
Deep Research Agent 适合替代哪些人工资料整理工作?

# 子问题
1. 它比普通搜索多了哪些环节?
2. 哪些任务适合,哪些任务不适合?
3. 需要哪些工具和数据结构?
4. 风险在哪里:幻觉、来源质量、时效、版权、隐私?

# 验收标准
- 至少覆盖官方文档、论文/技术报告、实际产品说明三类来源。
- 每个关键结论都能追到来源。
- 明确写出不能确定的部分。
- 给出可执行的落地建议,而不是泛泛而谈。

这个计划最好可以被人改。人类说“我只关心开源实现,不关心商业产品”,agent 就应该把搜索范围收窄。别让它像热心但没听题的同学,一路查到宇宙尽头。

它适合做什么

Deep Research Agent 最适合那些“答案不是一句话,但也不是写博士论文”的任务。

  • 技术选型:比较框架、数据库、模型服务、监控系统。
  • 竞品调研:梳理产品能力、价格、限制和用户反馈。
  • 论文初筛:从一堆论文里找主线、方法、实验和争议点。
  • 开源项目尽调:看维护活跃度、issue 风险、许可证、生态依赖。
  • 故障背景调查:查相似问题、版本变更、已知 bug、社区 workaround。

不适合的也要说。它不适合替你做没有来源的主观判断,也不适合查需要强权限的私有信息,更不适合在医疗、法律、投资这类场景里直接替人拍板。它可以整理材料,但最后按下按钮的人应该还是人。

风险:小研究员也会乱贴便利贴

Deep Research Agent 的错误通常不是“完全没查”,而是“查了但查歪了”。这更麻烦,因为它看起来很努力。

常见翻车点有几个:

翻车点表现该怎么防
搜索偏差只看排名靠前或 SEO 很强的内容多查询词、多来源类型、保留反例
来源过期拿旧价格、旧 API、旧 benchmark 当现在每个来源记录访问日期和发布时间
引用漂移引用存在,但不支撑那句话把 claim 和 source 绑定,逐条检查
过度综合把几个相似观点揉成一个更强结论报告里保留“哪些来源真的这么说”
假装确定资料不足还给出强判断输出置信度和缺口
一个可爱的质检咒语

写最终报告前,让 agent 对每个关键结论念一遍:

  1. 这句话的来源是谁?
  2. 来源有没有可能过期?
  3. 有没有相反证据?
  4. 如果用户据此行动,最可能踩什么坑?

念完还站得住,再写进正文。站不住就把它放进“不确定”小篮子里。ฅ^•ﻌ•^ฅ

一个最小实现长什么样

不需要一上来就造复杂平台。最小可用版本可以很朴素:搜索工具、网页读取器、笔记文件、引用检查器、报告模板。

mini_deep_research.pypython
class DeepResearchAgent:
    def __init__(self, search, fetch, model, store):
        self.search = search
        self.fetch = fetch
        self.model = model
        self.store = store

    def run(self, question: str):
        plan = self.model.make_plan(question)

        for subquestion in plan.subquestions:
            results = self.search(subquestion.query)
            for item in results[:5]:
                page = self.fetch(item.url)
                note = self.model.extract_claims(page, subquestion)
                self.store.save(note)

        draft = self.model.write_report(question, self.store.relevant_notes())
        checked = self.model.verify_citations(draft, self.store.all_notes())
        return checked

真正上线时,verify_citations 不能只靠模型自己说“没问题”。更好的做法是把引用做成结构化数据,让程序检查 URL 是否存在、引用是否被使用、每条关键 claim 是否至少绑定一个来源。模型负责读和写,程序负责数手指。数错了就打回去,重新来过。

输出报告别写成资料坟场

研究报告最怕两种:一种像营销白皮书,热闹但没证据;一种像资料坟场,证据很多但人读完只想睡觉。

我更喜欢这种结构:

report-template.mdmd
# 结论先行
一句话回答问题。

# 主要判断
- 判断 A:证据、反例、置信度。
- 判断 B:证据、反例、置信度。

# 证据表
| 结论 | 来源 | 备注 |
| --- | --- | --- |

# 风险和未知数
哪些地方还不能确定,为什么。

# 下一步
如果继续研究,应该查什么;如果要落地,先做什么实验。

这个模板不花哨,但读者舒服。先给答案,再给证据,再告诉我哪里别信太满。像一只小猫把抓来的线团按颜色摆好:虽然毛茸茸,但很有秩序。

和 Loop Engineering 的关系

上一篇写 Loop Engineering 时,我说 agent 真正难的是循环。Deep Research Agent 正好是一个典型例子。

它每一圈都在做:提出子问题,找材料,读材料,抽取证据,检查冲突,更新计划。没有 loop,它只是“搜索总结器”;有了 loop,它才像研究助理。

deep-research-loop.txttext
Plan → Search → Read → Note → Verify → Revise Plan → Report
          ↑                              ↓
          └──────── need more evidence ──┘

所以我更愿意把 Deep Research Agent 看成一种“证据驱动的 loop”。它的目标不是显得聪明,而是让结论有来路。

最后:让 AI 查资料,也要让它交作业

Deep Research Agent 最迷人的地方,是它把 AI 从“答题选手”变成了“研究助理”。它可以慢一点,可以查久一点,可以中途改计划。只要最后把证据摊开,让人知道每个判断从哪里来,这个慢就值得。

但也别把它神化。它会漏资料,会被 SEO 带偏,会把过期内容当新消息,会在证据不足时偷偷摆出一副很懂的样子。可爱的小研究员也要打卡、交笔记、接受抽查。ᕕ( ᐛ )ᕗ

我对它的期待很简单:少一点“我觉得”,多一点“我查到”;少一点漂亮废话,多一点可复核的路径。等一个 agent 能把问题查清楚、把不确定性说清楚、把引用放清楚,它就不只是会联网的聊天框了。它真的开始像一个能一起干活的同事。

Vercel AI SDK 入门:从 0 搭一个会流式回复的聊天页
Loop Engineering:别再只会写 Prompt 了

评论区

评论加载中...