菜单

状态管理

相关源文件

本页介绍了 Local Deep Researcher 在迭代研究过程中如何维护和更新其研究状态。状态管理是关键组成部分,它使系统能够跟踪进度、积累发现并决定研究流程。有关整体研究工作流逻辑的信息,请参阅研究工作流

状态结构

Local Deep Researcher 使用一个专门的状态类,其中包含跟踪研究会话所需的所有信息。该状态既是数据存储,也是迭代研究过程的控制机制。

来源:src/ollama_deep_researcher/state.py6-20

状态组件

SummaryState 类包含以下组件:

字段类型目的累积方法
research_topicstr用户提供的研究主题在初始化时设置一次
search_querystr当前搜索查询每次研究迭代都会更新
web_research_resultslist每次迭代的搜索结果通过 operator.add 累积
sources_gatheredlist用于引用的格式化来源通过 operator.add 累积
research_loop_countint已完成的研究迭代次数每次搜索后递增
running_summarystr当前研究摘要每次迭代都会用新的发现进行更新

operator.add 注解在列表字段上,可以在状态更新时自动合并列表,从而允许搜索结果和来源在多次研究迭代中累积。

来源:src/ollama_deep_researcher/state.py6-12

研究图中的状态流

该状态通过使用 LangGraph 的 StateGraph 实现的有向图进行流转。图中的每个节点接收当前状态,执行特定操作,并返回与主状态合并的状态更新。

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

按节点划分的状态更新

图中的每个节点都修改状态的特定部分:

1. 生成查询节点

generate_query 节点根据研究主题更新 search_query 字段

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

2. 网络研究节点

web_research 节点执行搜索查询并更新三个状态字段:

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

3. 汇总来源节点

summarize_sources 节点用新的发现更新当前摘要

来源:src/ollama_deep_researcher/graph.py114-175

4. 反思摘要节点

reflect_on_summary 节点根据已识别的知识空白生成新的搜索查询

来源:src/ollama_deep_researcher/graph.py177-229

5. 研究决策路由

route_research 函数使用状态来决定是继续研究还是完成

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

6. 最终摘要节点

finalize_summary 节点通过使用引文格式化当前摘要来准备最终输出

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

状态与 LangGraph 的集成

Local Deep Researcher 使用 LangGraph 的 StateGraph 来管理节点之间的状态转换。状态类在初始化期间与图一起注册,同时还有输入和输出模式。

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

状态重置与初始化

对于每个新的研究会话,都会创建一个新的 SummaryState 实例,其中只有 SummaryStateInput 中的 research_topic 字段被填充。所有其他字段都初始化为其默认值:

  • search_query: 无
  • web_research_results: 空列表
  • sources_gathered: 空列表
  • research_loop_count: 0
  • running_summary: 无

这确保了每个研究会话都从一个干净的状态开始。

来源:src/ollama_deep_researcher/state.py6-20

数据累积模式

该状态使用两种主要的累积模式:

  1. 列表累积web_research_resultssources_gathered 字段用 operator.add 进行了注解,这意味着当这些字段更新时,新项目会被附加到现有列表中,而不是替换它们。

  2. 渐进式细化running_summary 字段随着研究的进展而重复更新,包含更全面的信息。此字段的每次更新都会替换前一个值,但会整合早期迭代中的知识。

来源:src/ollama_deep_researcher/state.py6-12 src/ollama_deep_researcher/graph.py114-175

结论

Local Deep Researcher 中的状态管理系统能够实现:

  1. 跟踪多次迭代中的研究进展
  2. 累积和组织研究发现
  3. 决定何时继续研究或最终确定结果
  4. 为研究过程中的每个步骤提供上下文
  5. 确保最终研究输出的连贯和渐进式发展

该系统使用 LangGraph 进行状态管理,为处理自动化研究过程中复杂、迭代的性质提供了一种结构化的方式。