openjiuwen_deepsearch.framework.openjiuwen.agent.main_graph_nodes
本文档描述 DeepSearch 工作流的主图节点与子图节点,内容与当前代码保持一致。
主图节点(Main Graph Nodes)
class StartNode
class StartNode(Start)
StartNode 是工作流起始节点。
功能:
- 校验并补齐输入默认值。
- 初始化
SearchContext:query、session_id、messages、search_mode、report_template。 - 合并
agent_config与service_config写入 runtimeconfig。 - 写入
thread_id与interrupt_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_mode(cmd/web)获取用户输入, 用户输入需要为如下json格式:
{
"interrupt_feedback": "accepted/revise_comment/revise_outline",
"feedback": "用户的反馈,action为revise_comment时为修改意见,action为revise_outline时为新的大纲格式"
}
- 支持三种用户反馈动作:
accepted:用户接受大纲,跳转到EditorTeamNoderevise_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.report与all_classified_contents。
class VLMChartGeneratorNode
class VLMChartGeneratorNode(BaseNode)
VLMChartGeneratorNode 负责vlm迭代式图表生成。
功能:
- 若
vlm_chart_generator_enable关闭则跳过。 - 若
vlm_chart_generator_enable开启:- 且
vlm_chart_generator_max_iterations等于0, 则只执行vlm图生成过程,不执行vlm迭代优化功能。 - 且
vlm_chart_generator_max_iterations大于0, 必须传入vlm模型配置,否则系统关闭该模块开关,跳过模块。
- 且
- 系统选择图表插入位置生成图表并完成相应图表优化。
- 写入
final_result.chart_messages。 - 图表生成错误会写入
exception_info。
class SourceTracerNode
class SourceTracerNode(BaseNode)
SourceTracerNode 负责溯源与校验。
功能:
- 若
source_tracer_research_trace_source_switch关闭则跳过。 - 预处理后调用校验逻辑,生成引用信息。
- 写入
final_result.response_content与citation_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 反馈,支持
expand、shorten、polish、supplementary_search、new_task、sync、finish。 - 对改写类动作解析并校验
action、rewrite_scope、selected_text、偏移量等字段。 supplementary_search支持selected_only与selected_and_related两种改写范围。sync会以轻量 ack 回传整篇报告更新结果,不消耗feedback_interaction_count;只有整篇报告内容实际变化时才会追加一条rewrite_history记录。- 调用
UserFeedbackProcessor完成局部改写,仅更新final_result.response_content。 - 普通 rewrite / supplementary_search 会维护
search_context.feedback_interaction_count与search_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.py 与 collector_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