Deep Research Agent 实战(一):架构设计与评估体系构建指南
嘿,大家好!最近是不是被各种强大的 Agent 应用刷屏了?你有没有想过,一个能进行『深度研究』的 Agent 到底是怎么构建的?
今天,我们就来一起拆解 LangGraph 官方推出的高质量课程《Deep Research from Scratch》,不卷代码,搞懂一个顶级 Research Agent 的架构设计与评估体系!
这个课程质量非常高,它只依赖了 Tavily 这一个外部工具(Tavily 是一个搜索工具),就实现了一个强大的深度研究 Agent。更棒的是,它教会我们的不仅仅是代码,更是其背后的提示词设计原则和Agent 评估体系,含金量超高。
在这篇文章里,我会把课程的精华提炼出来,带大家一步步构建一个名为 “Fairy” 的研究助手。我希望 Fairy 能成为大家灵活定制的得力伙伴,就像一个更开放、更原生的 Claude Code。
准备好了吗?让我们开始吧!
深度研究 Agent 的整体蓝图
一个靠谱的深度研究 Agent,它的工作流程可以拆分为两大核心阶段:
- 阶段一:确定研究范围 (Scoping)。 Agent 会像一个耐心的顾问,与用户进行多轮对话,直到完全明确用户的意图,最终生成一份清晰的“研究大纲”。
- 阶段二:执行研究任务 (Execution)。 拿到大纲后,Agent 才开始正式工作。它会深度搜索互联网,自我检验信息的相关性,最后汇总成一篇结构化的报告。
你可能会问:为什么需要这样分层?
因为在真实的“深度研究”场景中,最难的往往不是“搜索”,而是“定义问题”。用户的初始需求通常是模糊的(比如“帮我研究下 AI”),直接开搜只会导致信息过载或方向跑偏。这个分层设计,就像一个智能过滤器,确保我们每一步都走在正确的路上。
整体的 Agent 工作流(Workflow)设计如下:
- 用户接入:用户提出一个初步的研究意图。
- 研究范围界定(Scoping):
- Agent 分析用户需求。
- 如果需求模糊,Agent 提出澄清问题(Clarifying Questions)。
- 用户回答后,Agent 更新对需求的理解。
- 循环直到生成一份结构清晰、边界明确的研究简报(Research Brief)。
- 执行研究(Execution):
- Agent 根据研究简报,拆解出具体的搜索查询(Queries)。
- 调用搜索工具(如 Tavily)获取信息。
- 信息压缩与总结:对搜索结果进行摘要,提取关键信息,避免上下文溢出。
- 决策与路由:判断当前信息是否足够?如果不够,继续搜索;如果足够,进入报告撰写。
- 报告生成:基于收集到的所有结构化信息,撰写最终的深度研究报告。
确定研究边界(Scoping)
在深度研究工作流程中,最大的挑战之一是用户在初始请求中很少提供足够的信息。请求通常缺少重要细节,直接执行往往事倍功半。
在这个模块,我们的核心目标是明确以下几点:
- 范围和边界:研究应该包括什么?明确排除什么?(例如:只研究2023年后的数据,或者只关注特定地区)。
- 受众和目的:这项研究是为谁而做的?目的是为了投资决策、学术研究还是科普?
- 具体要求:是否有特定的来源偏好、时间框架或格式限制?
- 术语澄清:用户提到的特定领域术语或缩写是什么意思?
在这个阶段,Agent 的策略是:不盲目假设。
我们会构建一个运行图,包含 ClarifyWithUser(与用户澄清)和 Summary(生成摘要)等状态。
- 输入:用户的原始的研究需求。
- 处理:LLM 判断信息是否完备。如果不完备,生成澄清问题;如果完备,生成研究简报。
- 输出:一份结构化的研究简报(Research Brief),包含研究主题、目标受众、关键问题列表等。
只有当这份研究简报确立后,Agent 才会进入消耗 token 较多的研究执行阶段。
研究执行 & 报告撰写(Execution)
一旦研究简报确定,我们就进入了研究执行阶段。这个阶段是一个动态的循环过程,主要由以下几个节点构成:
- LLM 决策节点:这是 Agent 的大脑。它分析当前收集到的信息(Context)和研究目标,决定下一步是继续搜索新的内容,还是已经收集了足够的信息可以结束研究。
- 工具执行节点:当 LLM 决定需要更多信息时,它会生成搜索关键词,并调用搜索工具(如 Tavily)。
- 研究压缩节点(Context Management):随着搜索的进行,网页内容会非常多,直接堆砌到 Context 中会导致 Token 爆炸且干扰模型判断。因此,我们需要一个“压缩节点”:
- 网页内容摘要:对抓取到的网页内容进行即时摘要(Web Summary)。
- 研究结果压缩:将全部的研究链路发现的信息进行压缩,剔除重复和无关信息。
关于提示词的设计难点: 在这个阶段,最难的不是让 LLM 去搜索,而是控制工具调用的次数。
- 过少:研究不够深入,报告空洞。
- 过多:陷入死循环(Rabbit Hole),浪费大量 Token 且产出边际递减。
因此,我们需要在 Prompt 中植入启发式策略,例如强制模型“展示你的思考过程”(Chain of Thought),并设置明确的停止条件(比如:当回答了所有关键问题且有数据支撑时)。
Agent 各模块的评估体系
构建 Agent 不难,难的是评估 Agent 的好坏。对于深度研究 Agent,我们需要建立一套基于大模型(LLM-as-a-Judge)的评估体系。
本次我们将评估拆分为两个部分:
- Scoping 评估:用户需求是否明确?澄清问题是否切中要害?
- Execution 评估:搜索路径是否合理?是否避免了过深或过浅的探索?
根据课程推荐,构建高质量的大模型评估器需要遵循如下几个原则:
- Role Definition with Expertise Context(具有专业知识上下文的角色定义)
- 例如:“你是一个资深的研究简报审计员,专门负责审核研究大纲的完整性和可行性”。
- Clear Task Specification(明确的任务规范)
- 尽量使用二元判断(Pass/Fail),因为模型在打分上往往不够稳定,而 Pass/Fail 的边界更清晰。
- Rich Contextual Background(丰富的背景信息)
- 告诉评估器什么是“好”的研究简报。例如:一份好的简报必须包含明确的时间范围和目标受众。
- Structured XML Organization(结构化的 XML 组织)
- 使用 XML 标签(如
<criteria>,<input>,<evaluation>)来隔离上下文,帮助模型解析复杂的指令。
- 使用 XML 标签(如
- Comprehensive Guidelines with Examples(包含示例的全面指南)
- 为每个评估标准提供 3-4 个具体案例,覆盖正面(Pass)和负面(Fail)以及边缘情况(Edge Cases)。
- Explicit Output Instructions(明确的输出指令)
- 强制模型先输出“推理过程”,再输出“结论”。
- Bias Reduction Techniques(减少偏见的技巧)
- 设定“严格但公平”的基调。告诉模型:“当存疑时,倾向于判定为 Fail”,以确保通过的内容确实是高质量的。
下面我们以实际的例子来说明应该定义什么样的评估器。
评估 Scoping 阶段 Agent 的执行效果:研究边界明确了吗?
针对“确定研究边界”阶段,我们构造一个评估器,专门检查生成的“研究简报”。
评估的目标是看,生成的简报是否足以指导后续的深度搜索?
然后测试集是一组用户和Agent的对话记录,然后由 Agent 生成的研究背景简报是测试的输出。
然后评估器基于测试集的参考答案和测试的输出,计算出评估结果。
在这里一共有两个关键指标:
- 完整性:是否遗漏了用户意图中的关键约束?
- 清晰度:是否存在歧义词汇?
如果 Agent 在这一步就生成了含糊不清的简报(例如:“研究一下 AI”),评估器应直接判定为 Fail,该Agent不合格。
评估 Execution 阶段 Agent 工具调用是否合理?
针对“执行研究”阶段,主要评估 Agent 的工具调用行为(Tool Calling Behavior)。
常见的失败模式有:
- 早期终止(Premature Stop):Agent 仅仅搜索了一次,看着摘要觉得“差不多了”,就草草结案,导致报告缺乏深度。
- 持续循环(Infinite Loop):Agent 对现有信息永远不满足,反复搜索相似的关键词,陷入死循环。
评估器需要检查 Agent 的操作轨迹:
- 它是否在遇到死胡同时尝试了新的关键词?
- 它是否有效地利用了之前的搜索结果(而不是重复搜索)?
- 它停止搜索的理由是否充分(例如:“已找到所有关键数据的最新来源”)?
因此我们的测试集的输入是Agent研究的工具链路,然后测试输出是 Agent 的决定,是否还有继续做研究。
基于参考答案和测试的输出,我们可以计算出评估结果。Agent 是否能控制好恰到好处的停止搜索。
下一步计划
本次我们先讲了构建一个深度研究 Agent 的整体思路,包括业务流程的拆解,Agent 的各个模块所需要的提示词设计,以及每个模块的评估原则。但是还没有涉及到具体的实现方法。
其实我已经写了一个深度研究的 Demo 工程,地址是:
https://github.com/codemilestones/Fairy
里面的代码基本上是按照教程里 Scope 和 Research 两个阶段的实现,区别在于我把所有的提示词和代码注释都改写为了中文,方便大家阅读。
后面我们将继续深入这个工程,实际看看 深度研究 Agent 的实现效果。
如果你也对实际构造一个工业级的 Agent 感兴趣,欢迎关注我,我会继续分享更多关于 Agent 的实战经验。
参考资料
下面这些文章均是课程中所引用的,写的内容非常有启发性,推荐大家阅读。
[1] Deep Research from Scratch: https://github.com/langchain-ai/deep_research_from_scratch
[2] LLM Judge: https://hamel.dev/blog/posts/llm-judge/index.html
[3] Workflow and Agents: https://docs.langchain.com/oss/python/langgraph/workflows-agents#agent
[4] The "think" tool: https://www.anthropic.com/engineering/claude-think-tool
[5] Context engineering for agents: https://blog.langchain.com/context-engineering-for-agents/