告别低效调研:ollama-deep-researcher如何用LangGraph实现全流程自动化

【免费下载链接】ollama-deep-researcher Fully local web research and report writing assistant 【免费下载链接】ollama-deep-researcher 项目地址: https://gitcode.com/GitHub_Trending/ol/ollama-deep-researcher

你是否还在为手动收集资料、整理摘要、识别信息缺口而烦恼?作为一款完全本地化的网络研究助手,ollama-deep-researcher通过LangGraph工作流引擎,将「查询生成→网页搜索→内容摘要→缺口分析」的全流程自动化。本文将拆解其核心架构,带你掌握智能研究助手的设计精髓。

核心架构概览

ollama-deep-researcher采用模块化设计,核心逻辑集中在src/ollama_deep_researcher/目录下。系统通过LangGraph构建有状态工作流,配合本地大语言模型(LLM)和多源搜索能力,实现无需联网即可完成深度调研。

mermaid

关键模块分工

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()
    }

实战应用:构建你的自动化研究助手

快速启动

  1. 克隆仓库:git clone https://gitcode.com/GitHub_Trending/ol/ollama-deep-researcher
  2. 配置环境:修改.env文件设置LLM参数
  3. 运行工作流:通过LangGraph CLI启动研究任务

扩展建议

  • 新增搜索源:在utils.py添加自定义搜索函数
  • 优化提示词:修改prompts.py提升LLM输出质量
  • 可视化调试:启用LangGraph UI观察工作流执行过程

总结与展望

ollama-deep-researcher通过LangGraph的有状态工作流能力,成功将复杂的研究过程抽象为可配置、可扩展的自动化流程。其核心价值在于:

  1. 全本地化:保护数据隐私,无需上传敏感信息
  2. 闭环迭代:自动识别信息缺口,实现深度调研
  3. 灵活配置:支持多LLM/搜索引擎,适应不同场景

随着本地AI技术的发展,这类自动化研究工具将极大提升知识工作者的效率。下一期我们将深入探讨「提示工程优化策略」,敬请关注!

官方文档:docs/new_features_0.0.1.md
完整源码:src/ollama_deep_researcher/
项目许可证:LICENSE

【免费下载链接】ollama-deep-researcher Fully local web research and report writing assistant 【免费下载链接】ollama-deep-researcher 项目地址: https://gitcode.com/GitHub_Trending/ol/ollama-deep-researcher

更多推荐