菜单

研究工作流

相关源文件

目的与范围

本文详细介绍了 Local Deep Researcher 实现的迭代研究过程。它解释了系统如何通过多次研究循环收集、处理和提炼信息,以生成用户提供主题的全面摘要。有关研究过程中状态管理的信息,请参阅状态管理

概述

Local Deep Researcher 实现了一个受 IterDRAG 启发的迭代网络研究工作流程。系统将研究主题分解为有针对性的搜索查询,检索相关信息,总结发现,识别知识空白,并生成后续查询以弥补这些空白。

来源: src/ollama_deep_researcher/graph.py282-297

核心组件

研究工作流程以 LangGraph 状态机实现,包含以下关键组件:

来源: src/ollama_deep_researcher/graph.py17-281

工作流程阶段

1. 查询生成

在第一阶段,系统根据用户的研究主题生成优化的搜索查询。

实现细节

  • 函数: generate_query
  • 提示: 来自 prompts.py 的 query_writer_instructions 模板
  • LLM 输出格式: 包含 "query" 和 "rationale" 键的 JSON

来源: src/ollama_deep_researcher/graph.py17-74 src/ollama_deep_researcher/prompts.py7-32

2. 网络研究

系统使用生成的查询和配置的搜索 API 执行网络搜索。

实现细节

  • 函数: web_research
  • 支持的搜索 API
    • DuckDuckGo (默认)
    • Tavily
    • Perplexity
    • SearXNG
  • 结果: 格式化并去重后的搜索结果

来源: src/ollama_deep_researcher/graph.py76-112

3. 来源摘要

系统对网络研究结果进行总结,可以创建新摘要或更新现有摘要。

实现细节

  • 函数: summarize_sources
  • 提示: 来自 prompts.py 的 summarizer_instructions 模板
  • 进程
    • 如果无现有摘要: 根据网络研究结果创建新摘要
    • 如果存在现有摘要: 将新信息与现有摘要整合

来源: src/ollama_deep_researcher/graph.py114-175 src/ollama_deep_researcher/prompts.py34-62

4. 摘要反思

系统对当前摘要进行反思,以识别知识空白并生成后续搜索查询。

实现细节

  • 函数: reflect_on_summary
  • 提示: 来自 prompts.py 的 reflection_instructions 模板
  • LLM 输出格式: 包含 "knowledge_gap" 和 "follow_up_query" 键的 JSON
  • 备用方案: 如果 JSON 解析失败,则使用通用查询格式

来源: src/ollama_deep_researcher/graph.py177-229 src/ollama_deep_researcher/prompts.py64-90

5. 研究循环控制

系统根据配置的最大研究循环次数,决定是继续研究还是完成摘要。

实现细节

  • 函数: route_research
  • 决策逻辑: 比较当前 research_loop_count 与 max_web_research_loops
  • 路由选项
    • "web_research": 继续下一次迭代
    • "finalize_summary": 结束研究循环并完成

来源: src/ollama_deep_researcher/graph.py262-280

6. 摘要完成

系统对所有收集到的来源进行去重和格式化,然后将它们与正在生成的摘要结合,以创建最终输出。

实现细节

  • 函数: finalize_summary
  • 进程
    • 跨所有迭代去重来源
    • 将来源格式化为列表
    • 将正在生成的摘要与格式化来源结合
    • 将输出结构化为 Markdown 格式

来源: src/ollama_deep_researcher/graph.py231-260

数据在工作流程中的流向

下图说明了数据在整个研究工作流程中的流向:

来源: src/ollama_deep_researcher/graph.py17-297

配置参数

研究工作流程可以通过以下几个影响其行为的参数进行配置:

参数描述默认来源
max_web_research_loops最大研究迭代次数3README.md74
llm_providerLLM 提供商 ("ollama" 或 "lmstudio")"ollama"README.md42
local_llm要使用的特定 LLM 模型"llama3.2"README.md44
search_api要使用的搜索 API"duckduckgo"README.md70
fetch_full_page是否抓取完整网页falseREADME.md74

这些参数可以通过环境变量、LangGraph UI 配置或 Configuration 类中的默认值进行设置。

来源: README.md42-44 README.md70-74

输出格式

研究工作流程的最终输出是具有以下结构的 Markdown 文档:

## Summary
[Research summary content]

### Sources:
[Source 1]
[Source 2]
...

此格式既提供了全面的研究结果,也提供了研究过程中使用的所有来源的引用。

来源: src/ollama_deep_researcher/graph.py231-260

模型兼容性

研究工作流程要求 LLM 能够生成结构化的 JSON 输出,特别是在查询生成和反思阶段。某些模型可能难以满足此要求,在这种情况下,系统会使用备用机制来处理非结构化响应。

来源: README.md143-146