openjiuwen_deepsearch.framework.openjiuwen.agent.main_graph_nodes

本文档描述 DeepSearch 工作流的主图节点与子图节点,内容与当前代码保持一致。

主图节点(Main Graph Nodes)

class StartNode

class StartNode(Start)

StartNode 是工作流起始节点。

功能

  • 校验并补齐输入默认值。
  • 初始化 SearchContextquerysession_idmessagessearch_modereport_template
  • 合并 agent_configservice_config 写入 runtime config
  • 写入 thread_idinterrupt_feedback 到 runtime 配置。

class EntryNode

class EntryNode(BaseNode)

EntryNode 负责语言识别与路由。

功能

  • 调用 classify_query 判断用户需求语言类型。
  • 统一语言标识(zh-CN / en-US)。
  • 失败或异常写入 final_result.exception_info 并结束。

class GenerateQuestionsNode

class GenerateQuestionsNode(BaseNode)

GenerateQuestionsNode 生成澄清问题(HITL)。

功能

  • 调用 query_interpreter,按 workflow_max_gen_question_retry_num 重试。
  • 成功写入 search_context.questions
  • 失败或异常写入 final_result.exception_info 并结束。

class FeedbackHandlerNode

class FeedbackHandlerNode(BaseNode)

FeedbackHandlerNode 读取用户反馈。

功能

  • 根据 workflow_feedback_mode 读取反馈(cmd/web)。
  • 处理 FINISH_TASK 直接结束。
  • 反馈无效或模式错误时写入 exception_info 并结束。

class OutlineNode

class OutlineNode(BaseNode)

OutlineNode 生成报告大纲。

功能

  • report_template 存在时使用 outliner_template 提示词,否则使用 outliner
  • outliner_max_generate_outline_retry_num 重试。
  • 成功时流式输出大纲并写入 search_context.current_outline

class DependencyOutlineNode

class DependencyOutlineNode(OutlineNode)

DependencyOutlineNode 生成依赖驱动工作流报告大纲

功能

  • 基于 dep_driving_outliner 提示词生成带依赖关系的大纲。
  • outliner_max_generate_outline_retry_num 重试。
  • 成功时流式输出大纲并写入 search_context.current_outline

class OutlineInteractionNode

class OutlineInteractionNode(BaseNode)

OutlineInteractionNode 大纲交互节点,接收用户反馈并决定后续流程。

功能

  • 检查 outline_interaction_enabled 配置,禁用时直接跳转到 EditorTeamNode
  • 检查当前交互轮次,达到 outline_interaction_max_rounds 时通知用户并跳转到 EditorTeamNode
  • 通过 workflow_feedback_modecmd/web)获取用户输入, 用户输入需要为如下json格式:
{
  "interrupt_feedback": "accepted/revise_comment/revise_outline",
  "feedback": "用户的反馈,action为revise_comment时为修改意见,action为revise_outline时为新的大纲格式"
}
  • 支持三种用户反馈动作:
    • accepted:用户接受大纲,跳转到 EditorTeamNode
    • revise_comment:用户提供修改意见,跳转到 OutlineNode 重新生成大纲
    • revise_outline:用户直接修改大纲,跳转到 OutlineNode 重新生成大纲
  • 保存交互记录到 search_context.outline_interactions

class DependencyOutlineInteractionNode

class DependencyOutlineInteractionNode(OutlineInteractionNode)

DependencyOutlineInteractionNode 依赖驱动工作流的大纲交互节点。

功能

  • 继承自 OutlineInteractionNode,交互逻辑与父类相同。
  • 区别在于:用户接受大纲时,跳转到 DependencyEditorTeamNode
  • 修改评论时,仍然跳转到 OutlineNode

class EditorTeamNode

class EditorTeamNode(BaseNode)

编辑团队子图管理节点(定义在 editor_team_manager_node.py)。

功能

  • 构建并发子工作流并汇聚结果。
  • 透传子图流式输出。

class DependencyEditorTeamNode

class DependencyEditorTeamNode(EditorTeamNode)

DependencyEditorTeamNode 依赖驱动工作流编辑团队节点(定义在 editor_team_manager_node.py)。

功能

  • 按依赖层级流水线并行执行:每层同时执行「上一层的写作」与「本层的推理」(如 1 推理完成后,1 的写作与 2、3 的推理并行)。
  • 基于前置依赖关系构建推理子工作流与写作子工作流并汇聚结果。
  • 透传子图流式输出信息收集与报告内容。

class ReporterNode

class ReporterNode(BaseNode)

ReporterNode 生成最终报告内容。

功能

  • 调用 Reporter.generate_report
  • 失败时写入 exception_info 并结束。
  • 成功时写入 search_context.reportall_classified_contents

class VLMChartGeneratorNode

class VLMChartGeneratorNode(BaseNode)

VLMChartGeneratorNode 负责vlm迭代式图表生成。

功能

  • vlm_chart_generator_enable 关闭则跳过。
  • vlm_chart_generator_enable 开启, 必须传入vlm模型配置,或者llm是通用模型(可处理多模态任务),否则系统关闭该模块开关,跳过模块。
  • 系统选择图表插入位置生成图表并完成相应图表优化。
  • 写入 final_result.chart_messages
  • 图表生成错误会写入 exception_info

class SourceTracerNode

class SourceTracerNode(BaseNode)

SourceTracerNode 负责溯源与校验。

功能

  • source_tracer_research_trace_source_switch 关闭则跳过。
  • 预处理后调用校验逻辑,生成引用信息。
  • 写入 final_result.response_contentcitation_messages
  • 引用结果会在报告正文中写入稳定的 [checked_citation:id] 标记,并同步返回对应的 citation metadata,供前端按最新 final_result 渲染与后续交互。
  • 校验失败时写入 exception_info

class UserFeedbackProcessorNode

class UserFeedbackProcessorNode(BaseNode)

UserFeedbackProcessorNode 在报告生成完成后,处理用户对局部文本的迭代改写请求。

功能

  • 根据 user_feedback_processor_enable 决定是否启用报告后局部优化。
  • 首次进入时先向前端发送完整的 final_result 快照,并通过 search_context.feedback_snapshot_sent 保证只发送一次。
  • 读取用户 JSON 反馈,支持 expandshortenpolishsupplementary_searchnew_tasksyncfinish
  • 对改写类动作解析并校验 actionrewrite_scopeselected_text、偏移量等字段。
  • supplementary_search 支持 selected_onlyselected_and_related 两种改写范围。
  • sync 会以轻量 ack 回传整篇报告更新结果,不消耗 feedback_interaction_count;只有整篇报告内容实际变化时才会追加一条 rewrite_history 记录。
  • 调用 UserFeedbackProcessor 完成局部改写,仅更新 final_result.response_content
  • 普通 rewrite / supplementary_search 会维护 search_context.feedback_interaction_countsearch_context.rewrite_history,记录动作类型、改写范围和实际替换区间。
  • 改写链路保留原有 citation / infer metadata,不再额外维护前端偏移映射。
  • sync 历史仅保留最近 10 条;内容未变化的 sync 不会新增历史记录。
  • 只有非 sync 动作会受 user_feedback_processor_max_interactions 约束;收到 finish 后结束流程。

class SourceTracerInferNode

class SourceTracerInferNode(BaseNode):

SourceTracerInferNode 负责溯源推理。

功能

  • source_tracer_infer_switch关闭则跳过。
  • 系统自动选择需要进行溯源推理的报告内容,生成对应的溯源推理图。
  • 写入 final_result.infer_messages
  • 当溯源推理失败时写入exception_info

class EndNode

class EndNode(End)

EndNode 输出最终结果与结束标记。

功能

  • final_result 以 JSON 输出。
  • 输出 "ALL END" 标记。

编辑团队子图节点(Reasoning Writing Subgraph Nodes)

定义在 reasoning_writing_graph/editor_team_nodes.py

  • SectionStartNode:初始化 section_context
  • ResearchPlanReasoningNode:生成章节计划并决定后续路径。
  • InfoCollectorNode:执行信息收集子图。
  • SubReporterNode:生成子报告。
  • SubSourceTracerNode:对子报告进行溯源标记。
  • SectionEndNode:返回子图结果。

信息收集子图节点(Info Collector Subgraph Nodes)

定义在 collector_graph/graph_builder.pycollector_graph/info_collector.py

  • StartNode:初始化 collector_context
  • GenerateQueryNode:生成初始查询列表。
  • InfoRetrievalNode:执行 ReAct 搜索与信息整理。
  • SupervisorNode:评估信息是否足够并决定是否继续。
  • SummaryNode:生成信息收集总结。
  • GraphEndNode:输出 info_summary 并回写消息。

依赖驱动工作流推理子图节点(Dependency Driven Reasoning Subgraph Nodes)

定义在 reasoning_writing_graph/dependency_reasoning_team_nodes.py

  • SectionReasoningStartNode:初始化 section_context
  • DependencyPlanReasoningNode:基于前置依赖生成章节计划并决定后续路径。
  • DependencyInfoCollectorNode:执行依赖驱动信息收集子图。
  • SectionReasoningEndNode:返回信息收集结果与章节计划。

依赖驱动工作流子报告撰写子图节点(Dependency Driven Writing Subgraph Nodes)

定义在 reasoning_writing_graph/dependency_writing_team_nodes.py

  • SectionWritingStartNode:初始化 section_context
  • SubReporterNode:生成子报告。
  • SubSourceTracerNode:对子报告进行溯源标记。
  • SectionEndNode:返回子图结果。

节点执行流程

主工作流(并行)

StartNode -> EntryNode -> [GenerateQuestionsNode -> FeedbackHandlerNode] -> OutlineNode
-> [OutlineInteractionNode -> OutlineNode]* -> EditorTeamNode -> ReporterNode -> SourceTracerNode -> EndNode
-> SourceTracerInferNode -> UserFeedbackProcessorNode -> EndNode

主工作流(依赖驱动)

StartNode -> EntryNode -> [GenerateQuestionsNode -> FeedbackHandlerNode] -> DependencyOutlineNode
-> [DependencyOutlineInteractionNode -> DependencyOutlineNode]*
-> DependencyEditorTeamNode -> ReporterNode -> SourceTracerNode
-> SourceTracerInferNode -> UserFeedbackProcessorNode -> EndNode

说明:DependencyEditorTeamNode 会在内部同时编排依赖驱动的推理子图与写作子图, 按章节依赖层级执行“上一层写作 + 本层推理”的流水线并行调度。

编辑团队子图

SectionStartNode -> ResearchPlanReasoningNode -> [InfoCollectorNode -> ResearchPlanReasoningNode]*
-> SubReporterNode -> SubSourceTracerNode -> SectionEndNode

信息收集子图

StartNode -> GenerateQueryNode -> InfoRetrievalNode -> SupervisorNode
-> [InfoRetrievalNode -> SupervisorNode]* -> SummaryNode -> GraphEndNode -> End

依赖驱动工作流编辑团队子图

SectionReasoningStartNode -> DependencyPlanReasoningNode -> [DependencyInfoCollectorNode -> DependencyPlanReasoningNode]*
-> SectionReasoningEndNode

依赖驱动工作流子报告撰写子图

SectionWritingStartNode -> SubReporterNode -> SubSourceTracerNode -> SectionEndNode