嘿,大家好!最近是不是被各种强大的 Agent 应用刷屏了?你有没有想过,一个能进行『深度研究』的 Agent 到底是怎么构建的?
今天,我们就来一起拆解 LangGraph 官方推出的高质量课程《Deep Research from Scratch》,不卷代码,搞懂一个顶级 Research Agent 的架构设计与评估体系!
这个课程质量非常高,它只依赖了 Tavily 这一个外部工具(Tavily 是一个搜索工具),就实现了一个强大的深度研究 Agent。更棒的是,它教会我们的不仅仅是代码,更是其背后的提示词设计原则和Agent 评估体系,含金量超高。
在这篇文章里,我会把课程的精华提炼出来,带大家一步步构建一个名为 “Fairy” 的研究助手。我希望 Fairy 能成为大家灵活定制的得力伙伴,就像一个更开放、更原生的 Claude Code。
准备好了吗?让我们开始吧!
一个靠谱的深度研究 Agent,它的工作流程可以拆分为两大核心阶段:
你可能会问:为什么需要这样分层?
因为在真实的“深度研究”场景中,最难的往往不是“搜索”,而是“定义问题”。用户的初始需求通常是模糊的(比如“帮我研究下 AI”),直接开搜只会导致信息过载或方向跑偏。这个分层设计,就像一个智能过滤器,确保我们每一步都走在正确的路上。
整体的 Agent 工作流(Workflow)设计如下:
在深度研究工作流程中,最大的挑战之一是用户在初始请求中很少提供足够的信息。请求通常缺少重要细节,直接执行往往事倍功半。
在这个模块,我们的核心目标是明确以下几点:
在这个阶段,Agent 的策略是:不盲目假设。
我们会构建一个运行图,包含 ClarifyWithUser(与用户澄清)和 Summary(生成摘要)等状态。
只有当这份研究简报确立后,Agent 才会进入消耗 token 较多的研究执行阶段。
一旦研究简报确定,我们就进入了研究执行阶段。这个阶段是一个动态的循环过程,主要由以下几个节点构成:
关于提示词的设计难点: 在这个阶段,最难的不是让 LLM 去搜索,而是控制工具调用的次数。
因此,我们需要在 Prompt 中植入启发式策略,例如强制模型“展示你的思考过程”(Chain of Thought),并设置明确的停止条件(比如:当回答了所有关键问题且有数据支撑时)。
构建 Agent 不难,难的是评估 Agent 的好坏。对于深度研究 Agent,我们需要建立一套基于大模型(LLM-as-a-Judge)的评估体系。
本次我们将评估拆分为两个部分:
根据课程推荐,构建高质量的大模型评估器需要遵循如下几个原则:
<criteria>, <input>, <evaluation>)来隔离上下文,帮助模型解析复杂的指令。下面我们以实际的例子来说明应该定义什么样的评估器。
针对“确定研究边界”阶段,我们构造一个评估器,专门检查生成的“研究简报”。
评估的目标是看,生成的简报是否足以指导后续的深度搜索?
然后测试集是一组用户和Agent的对话记录,然后由 Agent 生成的研究背景简报是测试的输出。
然后评估器基于测试集的参考答案和测试的输出,计算出评估结果。
在这里一共有两个关键指标:
如果 Agent 在这一步就生成了含糊不清的简报(例如:“研究一下 AI”),评估器应直接判定为 Fail,该Agent不合格。
针对“执行研究”阶段,主要评估 Agent 的工具调用行为(Tool Calling Behavior)。
常见的失败模式有:
评估器需要检查 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/