说明
- 本文学自赋范社区,仅供学习和交流!
参考资料
源码地址
open deep researcher简介
open_deep_researcher
是LangChain AI
团队开源的一个深度研究代理项目,其功能和目标是复现并拓展Deep Research
能力,让开发者无需付费即可使用AI自动化完成深入的信息调研和报告撰写。用户只需提供一个研究主题或问题,代理就会自动生成搜索查询,抓取和总结网页内容,反思是否有知识缺口并继续检索,最终整理输出一份结构清晰的Markdown
报告。- 深度研究不仅返回信息,还会自主完成信息筛选和整合。传统搜索需要用户自己点开筛选内容,普通的AI问答则容易产生未经验证的答案;而深度研究代理能够多轮迭代,在发现知识空白时自动调整方向,持续检索直到形成全面理解。最终输出的报告通常包含分层次结构的内容、事实支撑的分析以及明确引用来源,可视作一个专业研究员整理的成果而非简单搜索结果。
两种实现架构
open deep researcher
项目提供了两种不同的实现架构:基于工作流的有向图(Graph
)实现和多智能体(Multi-agent
)实现。这两种实现各有侧重,分别对应不同的应用场景和需求。
有向图架构
Graph
工作流模式采用规划—执行的顺序流程,将深度研究任务划分为固定阶段依次完成。首先使用“规划”大模型分析主题,生成报告的大纲和计划,然后经过人工反馈确认计划,接下来对每个章节依次进行检索和写作,每一章节都包含搜索—总结—反思的循环,确保信息充分,最后整合各章节内容并生成完整报告。
多智能体架构
Mulit-Agent
架构下,open deep researcher
采用监督者-研究员的多智能体协作机制,以提高调研效率。该模式的流程:由一个监督Agent(Supervisor)负责总体规划和协调,多个研究Agent(Researcher)并行执行各章节的搜索与写作。- 具体而言,监督Agent首先根据用户主题拟定报告的大致章节计划,分配若干研究Agent分别处理不同的章节任务。各研究Agent接收到自己负责的章节后,并行地生成该章节的搜索查询,利用搜索工具检索资料,整理后撰写章节内容。
- 所有章节同时开展研究,大大减少了总的报告生成时间。监督Agent在此过程中还可以提问澄清用户需求(如果启用的话),确保理解准确,然后在研究Agent完成各自章节后,监督Agent负责最后汇总各章节并撰写引言结论,组成完整报告。
LangGraph
的引入让open deep researcher
易于部署和集成。例如项目的.env
配置会被LangGraph
自动加载,使模型API Key
、搜索API Key
等环境参数统一管理。open deep researcher
借助LangGraph
实现了复杂代理流程的标准化和模块化,开发者在此之上可以更高效地定制和扩展深度研究Agent
的能力。- 部署
open deep researcher
十分简便,可以通过源码或PyPI
包两种方式安装。这里采用源码安装。
- 打开项目主页open_deep_research,进行源码下载,并进入项目目录创建并激活虚拟环境。
cd open_deep_research uv venv source .venv/bin/activate
- 安装项目依赖
pip install -e .
.env
文件,需要准备API
密钥,核心是两个配置:LLM
模型接口和搜索工具接口。使用的大模型是DeepSeek
,搜索工具是Tavily
。其中Tavily
的Web
搜索API
会作为信息检索工具。注册地址:https://www.tavily.com/
。还有langSmith等配置信息,用于追踪和分析代理的执行过程。
DEEPSEEK_API_KEY=sk-xx
TAVILY_API_KEY=tvly-xxx
SUPERVISOR_MODEL=deepseek:deepseek-chat
RESEARCHER_MODEL=deepseek:deepseek-chat
PLANNER_PROVIDER=deepseek
PLANNER_MODEL=deepseek-chat
WRITER_PROVIDER=deepseek
WRITER_MODEL=deepseek-chat
LANGSMITH_TRACING=true
LANGSMITH_ENDPOINT=https://api.smith.langchain.com
LANGSMITH_API_KEY=lsv2_xxx
LANGSMITH_PROJECT=open_deep_research
- 安装依赖
pip install -e .
- 安装LangGraph命令行工具
pip install -U "langgraph-cli[inmem]"
- 启动 LangGraph 开发服务器,当执行langgraph dev 后,会在本地开启一个 LangGraph Server(默认监听端口 2024)。命令行中会显示 API 接口地址和 Studio 界面URL。
langgraph dev
open_deep_research
:基于./src/open_deep_research/graph.py:graph
open_deep_research_multi_agent
:基于./src/open_deep_research/multi_agent.py:graph
odr_workflow_v2
:基于./src/open_deep_research/workflow/workflow.py:workflow
三种图类型
graph图
- 父图(外层)控制整体报告生成流程,子图(内层)负责具体的任务,即处理单个章节的深度研究。
- 主要适用的场景是自动化生成一份结构化、可信且可控的深度调研/分析报告。将“规划—检索—写作—自评—循环—总结”拆成原子节点,显式控制顺序与分支。非常适合一些需要深度调研的场景。比如市场、技术、政策的分析,需要多轮网络检索的报告等。
- 父层(外层):
generate_report_plan
:生成初始大纲(Sections)human_feedback
:人类审核或提出修改build_section_with_web_research
:对需要检索的 section 逐一并行写作gather_completed_sections
:汇总已完成的研究类 section 作为上下文write_final_sections
:写结论、摘要等无需检索的 sectioncompile_final_report
:按最初规划顺序拼接全部 section
- 子图:
generate_queries
:为单个 section 产出检索词search_web
:调用外部搜索 API 抓取资料write_section
:结合资料撰写并自评,失败则循环检索
multi_agent 图
- multi_agent架构的特点是一个双层智能体系统: 督导者(supervisor) + 多个研究者 。角色明确分工非常明确,由督导负责规划统筹,研究者负责具体执行。其中:
- Supervisor Workflow 控制全局:
- supervisor - 由 LLM 判断是否调用工具。
- supervisor_tools - 真正执行工具调用并根据结果:
- 分发 Section 给 research_team 并行研究;
- 或撰写 Introduction/Conclusion;
- 或汇总 Final Report 并结束。
- Conditional Edge supervisor_should_continue 决定退出或继续循环。
- research_team 子图负责单个章节:
- research_agent 决定下一步是检索还是写作。
- research_agent_tools 执行搜索或写入章节。
- Conditional Edge research_agent_should_continue 决定重复检索-写作还是返回 Supervisor。
- 它解决的核心问题就是多章节、多人并行的调研工作,比如“围绕xx在xx领域的可行性,输出章节:技术现状、经济性分析、政策激励、案例研究、未来展望”等问题。
odr_workflow_v2
- odr_workflow_v2是一个带交互式澄清的工作流研究系统。根据配置决定是否先澄清需求。
- 该工作流解决的核心痛点是因需求不清导致反复返工、章节结构需人工把关、多章节检索写作效率低等情况,整体来看是一个 「澄清 → 规划 → 并行研究 → 自评迭代 → 汇编」 的自动化报告生成器,特别适合需要 前期澄清、用户审核、外部检索 的深度文档写作任务。
结点 / 条件 | 功能 |
---|---|
initial_router | 判断是否需要先 clarify_with_user ,以向用户提问澄清主题。 |
clarify_with_user | 通过结构化输出返回 AIMessage(question) ,以对话形式确认需求。 |
generate_report_plan | ① 生成检索关键词 → 搜索; ② 得到章节草案(Sections)。 |
human_feedback (可选) | 中断并采集用户对章节草案的审核或修改意见。 |
build_section_with_web_research | 对每个需检索的章节并行执行「检索 → 写作 → 自评 → 循环」。 |
gather_completed_sections | 收敛所有已完成章节,为后续写 Introduction / Conclusion 提供上下文。 |
write_final_sections | 写无需检索的章节(引言、总结)。 |
compile_final_report | 按原始顺序拼接 Introduction → Body → Conclusion,返回最终报告。 |