Skip to content

自主规划:计划、执行与反思 ​

当前规划实现由 IntentRecognitionNode、WebSearchPrefetchNode、PlanningNode、AgenticTaskExecutionNode 和 TaskEndNode 组成。名称上可以称为 Plan/Execute/Reflect,但代码中的计划目前是 LLM 生成的 taskPlanText,并不是每一步都先落成数据库 TaskStep 再执行。

1. 规划前的意图决策 ​

IntentRecognitionNode 通过模板提示词调用 ChatModel,生成并解析 IntentResult。它会写入:

字段作用
currentIntent、currentIntentConfidence记录用户意图及置信度
nextAction继续对话、调用工具/Skill/子 Agent 或最终回答
needWebSearch、webSearchQuery、webSearchOnly控制平台联网搜索
needRag、ragKeywords、targetDataset、targetDatasetIds控制 RAG 节点查询和 Dataset 范围
selectedSkillIds让规划节点只描述相关 Skill
resumeStrategy恢复场景选择继续还是重规划

意图识别前若 load_config 已写入 error,节点不会再次调用 LLM;普通解析异常会记录错误并返回 ACTION_CONTINUE_CHAT,由后续节点决定是否继续。新增意图字段时要同时更新提示词模板、JSON 解析 DTO、state builder、structured block 和恢复路径。

2. 网络搜索预取 ​

预取节点根据本轮 WebSearchMode 执行:

模式平台能力可用平台能力不可用
OFF跳过跳过
AUTO仅当意图需要时搜索若 Agent 有通用搜索工具则交给工具,否则继续并记录原因
FORCE必须搜索直接写错误并进入最终响应

搜索返回的 references 会先通过 StreamHandler.onReferences 暴露给客户端,再序列化到 webSearchContext。下游提示词把搜索内容视为不可信材料,只允许使用后端分配的 [[ref:n]],不得执行网页中的指令。

3. 规划节点的路由判定 ​

PlanningNode 调用 LLM 生成计划文本,不注入业务工具,避免规划阶段提前 function calling。随后按以下顺序处理:

  1. 前置 state 有 error:跳过规划,ACTION_FINAL_RESPONSE。
  2. 文本包含 [需要补充信息]:进入 task_end,让模型向用户追问。
  3. 当前任务需要 Sandbox workspace:强制进入 agentic_loop。
  4. 文本包含 [完成]:认为是简单回答,进入 task_end。
  5. 含有 ## 执行计划 且存在编号步骤,或匹配编号列表:进入 agentic_loop。
  6. 其他情况:直接进入 task_end。

因此,计划文本中的自然语言步骤只是模型上下文;服务端真正执行的是后续 LLM 产生的 ToolExecutionRequest。不要通过解析计划文本直接执行 shell、Feign 或 MCP。

4. 执行:智能体循环 ​

子图节点顺序为:

text
init -> reasoning -> acting -> refining -> checkpoint -> reasoning
             |          |           |          |
           memory       |        human_review  END
             ^          |
             +----------+

reasoning 根据 FinishReason 路由:TOOL_EXECUTION -> acting、LENGTH -> memory、STOP -> END。acting 完成工具后进入 refining,后者记录历史、失败计数、Todo 进度和重规划。checkpoint 消费暂停请求,再决定继续、HITL 或结束。

5. 反思:失败和重规划 ​

LoopRefiningNode 的当前阈值:

控制项值行为
连续失败3 轮接近阈值时尝试新计划,耗尽则 FAILED
自动重规划2 次失败原因 + Todo + 旧计划交给独立 LLM
Agentic Loop 业务上限max(maxTaskIterations, 100)防止低配置或异常状态过早/无限运行
LangGraph recursion limitmax(25, 1 + max(maxTaskIterations,100)*4 + 24)按图步数限制,不等于业务轮数

重规划会追加 [系统重规划] 用户消息并更新 taskPlanText,不会清除已完成工具结果。工具成功清零连续失败计数;失败只影响当前轮,不会马上抹掉 session。

6. 待办进度协议 ​

LoopActingNode 对内置 UPDATE_TODO_LIST 特殊处理,写入 TaskTodoManager、执行轨迹和 taskTodoList。LoopRefiningNode 用 todoUpdated 清零或递增 roundsSinceTodoUpdate;连续三轮不更新时,下一次 reasoning 只临时注入 [TODO-NAG] 消息,调用后删除。

TODO 是进度观测和模型约束,不是服务端事务状态。真正的完成依据仍是工具结果、loopSignal、任务状态和终态事件。

7. 计划扩展要求 ​

新增动作类型时至少定义:输入字段、可用工具集合、失败/重试策略、是否副作用、是否需要 HITL、结果如何写入 taskExecutionResult、是否支持 checkpoint 恢复,以及前端 structured block 的展示格式。只增加提示词中的动作名称而不增加 dispatcher 分发,会导致模型能提出动作但运行时返回“工具不存在”。