告别低效调研:ollama-deep-researcher如何用LangGraph实现全流程自动化
告别低效调研:ollama-deep-researcher如何用LangGraph实现全流程自动化
你是否还在为手动收集资料、整理摘要、识别信息缺口而烦恼?作为一款完全本地化的网络研究助手,ollama-deep-researcher通过LangGraph工作流引擎,将「查询生成→网页搜索→内容摘要→缺口分析」的全流程自动化。本文将拆解其核心架构,带你掌握智能研究助手的设计精髓。
核心架构概览
ollama-deep-researcher采用模块化设计,核心逻辑集中在src/ollama_deep_researcher/目录下。系统通过LangGraph构建有状态工作流,配合本地大语言模型(LLM)和多源搜索能力,实现无需联网即可完成深度调研。
关键模块分工
- 状态管理:state.py定义工作流数据结构
- 配置中心:configuration.py管理LLM/搜索参数
- 工作流引擎:graph.py构建LangGraph节点与边
- 提示工程:prompts.py优化LLM输出质量
LangGraph工作流详解
1. 节点设计:5大核心功能单元
① 查询生成器(generate_query)
接收用户研究主题,通过LLM生成优化后的搜索查询。支持两种输出模式:
- 工具调用模式:通过结构化工具定义提取查询
@tool class Query(BaseModel): query: str = Field(description="搜索查询字符串") rationale: str = Field(description="查询相关性解释") - JSON模式:直接生成符合格式的JSON响应
② 网页研究员(web_research)
根据配置调用不同搜索引擎API:
if search_api == "tavily":
search_results = tavily_search(...)
elif search_api == "perplexity":
search_results = perplexity_search(...)
# 支持duckduckgo/searxng等多引擎
搜索结果通过deduplicate_and_format_sources去重处理,确保信息质量。
③ 摘要生成器(summarize_sources)
整合新搜索结果与历史摘要:
if existing_summary:
human_message_content = f"<Existing Summary>{existing_summary}</Existing Summary>\n<New Context>{new_content}</New Context>"
else:
human_message_content = f"<Context>{new_content}</Context>"
调用本地LLM生成增量更新的摘要内容。
④ 缺口分析器(reflect_on_summary)
通过反思机制识别知识缺口:
messages = [
SystemMessage(content=reflection_instructions),
HumanMessage(content=f"反思现有知识:\n{state.running_summary}\n识别缺口并生成后续查询")
]
生成针对性的补充搜索查询,驱动多轮调研。
⑤ 报告整理器(finalize_summary)
整合所有来源并格式化最终报告:
state.running_summary = f"## Summary\n{state.running_summary}\n\n### Sources:\n{all_sources}"
自动去重来源并添加引用标注。
2. 条件路由:智能控制研究深度
路由函数route_research决定工作流走向:
def route_research(state: SummaryState, config: RunnableConfig) -> Literal["finalize_summary", "web_research"]:
if state.research_loop_count <= configurable.max_web_research_loops:
return "web_research" # 继续搜索
else:
return "finalize_summary" # 结束调研
通过max_web_research_loops参数控制最大迭代次数(默认3次)。
3. 工作流编译
在graph.py末尾完成图编译:
builder = StateGraph(
SummaryState,
input=SummaryStateInput,
output=SummaryStateOutput,
config_schema=Configuration,
)
# 添加节点与边...
graph = builder.compile()
编译后的图通过langgraph.json配置暴露:
{
"graphs": {
"ollama_deep_researcher": "./src/ollama_deep_researcher/graph.py:graph"
}
}
配置驱动的灵活架构
configuration.py实现全参数可配置:
| 配置项 | 作用 | 默认值 |
|---|---|---|
| max_web_research_loops | 最大研究迭代次数 | 3 |
| local_llm | 本地模型名称 | llama3.2 |
| llm_provider | LLM提供者 | ollama |
| search_api | 搜索引擎 | duckduckgo |
| use_tool_calling | 工具调用模式 | False |
支持从环境变量或运行时配置动态加载:
@classmethod
def from_runnable_config(cls, config: Optional[RunnableConfig] = None) -> "Configuration":
raw_values: dict[str, Any] = {
name: os.environ.get(name.upper(), configurable.get(name))
for name in cls.model_fields.keys()
}
实战应用:构建你的自动化研究助手
快速启动
- 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/ol/ollama-deep-researcher - 配置环境:修改.env文件设置LLM参数
- 运行工作流:通过LangGraph CLI启动研究任务
扩展建议
- 新增搜索源:在utils.py添加自定义搜索函数
- 优化提示词:修改prompts.py提升LLM输出质量
- 可视化调试:启用LangGraph UI观察工作流执行过程
总结与展望
ollama-deep-researcher通过LangGraph的有状态工作流能力,成功将复杂的研究过程抽象为可配置、可扩展的自动化流程。其核心价值在于:
- 全本地化:保护数据隐私,无需上传敏感信息
- 闭环迭代:自动识别信息缺口,实现深度调研
- 灵活配置:支持多LLM/搜索引擎,适应不同场景
随着本地AI技术的发展,这类自动化研究工具将极大提升知识工作者的效率。下一期我们将深入探讨「提示工程优化策略」,敬请关注!
官方文档:docs/new_features_0.0.1.md
完整源码:src/ollama_deep_researcher/
项目许可证:LICENSE
更多推荐


所有评论(0)