本文详细介绍了 Local Deep Researcher 实现的迭代研究过程。它解释了系统如何通过多次研究循环收集、处理和提炼信息,以生成用户提供主题的全面摘要。有关研究过程中状态管理的信息,请参阅状态管理。
Local Deep Researcher 实现了一个受 IterDRAG 启发的迭代网络研究工作流程。系统将研究主题分解为有针对性的搜索查询,检索相关信息,总结发现,识别知识空白,并生成后续查询以弥补这些空白。
来源: src/ollama_deep_researcher/graph.py282-297
研究工作流程以 LangGraph 状态机实现,包含以下关键组件:
来源: src/ollama_deep_researcher/graph.py17-281
在第一阶段,系统根据用户的研究主题生成优化的搜索查询。
实现细节
generate_queryquery_writer_instructions 模板来源: src/ollama_deep_researcher/graph.py17-74 src/ollama_deep_researcher/prompts.py7-32
系统使用生成的查询和配置的搜索 API 执行网络搜索。
实现细节
web_research来源: src/ollama_deep_researcher/graph.py76-112
系统对网络研究结果进行总结,可以创建新摘要或更新现有摘要。
实现细节
summarize_sourcessummarizer_instructions 模板来源: src/ollama_deep_researcher/graph.py114-175 src/ollama_deep_researcher/prompts.py34-62
系统对当前摘要进行反思,以识别知识空白并生成后续搜索查询。
实现细节
reflect_on_summaryreflection_instructions 模板来源: src/ollama_deep_researcher/graph.py177-229 src/ollama_deep_researcher/prompts.py64-90
系统根据配置的最大研究循环次数,决定是继续研究还是完成摘要。
实现细节
route_research来源: src/ollama_deep_researcher/graph.py262-280
系统对所有收集到的来源进行去重和格式化,然后将它们与正在生成的摘要结合,以创建最终输出。
实现细节
finalize_summary来源: src/ollama_deep_researcher/graph.py231-260
下图说明了数据在整个研究工作流程中的流向:
来源: src/ollama_deep_researcher/graph.py17-297
研究工作流程可以通过以下几个影响其行为的参数进行配置:
| 参数 | 描述 | 默认 | 来源 |
|---|---|---|---|
max_web_research_loops | 最大研究迭代次数 | 3 | README.md74 |
llm_provider | LLM 提供商 ("ollama" 或 "lmstudio") | "ollama" | README.md42 |
local_llm | 要使用的特定 LLM 模型 | "llama3.2" | README.md44 |
search_api | 要使用的搜索 API | "duckduckgo" | README.md70 |
fetch_full_page | 是否抓取完整网页 | false | README.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