本页介绍了 Local Deep Researcher 在迭代研究过程中如何维护和更新其研究状态。状态管理是关键组成部分,它使系统能够跟踪进度、积累发现并决定研究流程。有关整体研究工作流逻辑的信息,请参阅研究工作流。
Local Deep Researcher 使用一个专门的状态类,其中包含跟踪研究会话所需的所有信息。该状态既是数据存储,也是迭代研究过程的控制机制。
来源:src/ollama_deep_researcher/state.py6-20
SummaryState 类包含以下组件:
| 字段 | 类型 | 目的 | 累积方法 |
|---|---|---|---|
research_topic | str | 用户提供的研究主题 | 在初始化时设置一次 |
search_query | str | 当前搜索查询 | 每次研究迭代都会更新 |
web_research_results | list | 每次迭代的搜索结果 | 通过 operator.add 累积 |
sources_gathered | list | 用于引用的格式化来源 | 通过 operator.add 累积 |
research_loop_count | int | 已完成的研究迭代次数 | 每次搜索后递增 |
running_summary | str | 当前研究摘要 | 每次迭代都会用新的发现进行更新 |
operator.add 注解在列表字段上,可以在状态更新时自动合并列表,从而允许搜索结果和来源在多次研究迭代中累积。
来源:src/ollama_deep_researcher/state.py6-12
该状态通过使用 LangGraph 的 StateGraph 实现的有向图进行流转。图中的每个节点接收当前状态,执行特定操作,并返回与主状态合并的状态更新。
来源:src/ollama_deep_researcher/graph.py282-297
图中的每个节点都修改状态的特定部分:
generate_query 节点根据研究主题更新 search_query 字段
来源:src/ollama_deep_researcher/graph.py17-74
web_research 节点执行搜索查询并更新三个状态字段:
来源:src/ollama_deep_researcher/graph.py76-112
summarize_sources 节点用新的发现更新当前摘要
来源:src/ollama_deep_researcher/graph.py114-175
reflect_on_summary 节点根据已识别的知识空白生成新的搜索查询
来源:src/ollama_deep_researcher/graph.py177-229
route_research 函数使用状态来决定是继续研究还是完成
来源:src/ollama_deep_researcher/graph.py262-280
finalize_summary 节点通过使用引文格式化当前摘要来准备最终输出
来源:src/ollama_deep_researcher/graph.py231-260
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: 0running_summary: 无这确保了每个研究会话都从一个干净的状态开始。
来源:src/ollama_deep_researcher/state.py6-20
该状态使用两种主要的累积模式:
列表累积:web_research_results 和 sources_gathered 字段用 operator.add 进行了注解,这意味着当这些字段更新时,新项目会被附加到现有列表中,而不是替换它们。
渐进式细化:running_summary 字段随着研究的进展而重复更新,包含更全面的信息。此字段的每次更新都会替换前一个值,但会整合早期迭代中的知识。
来源:src/ollama_deep_researcher/state.py6-12 src/ollama_deep_researcher/graph.py114-175
Local Deep Researcher 中的状态管理系统能够实现:
该系统使用 LangGraph 进行状态管理,为处理自动化研究过程中复杂、迭代的性质提供了一种结构化的方式。