必须构建带记忆与规划能力的多轮任务流:启用memory(绑定唯一threadId)和LLMPlanner;工具需透传上下文(如previous_intent或通过Connector Registry注入);DAG流程中RouterNode须硬编码分支判断,ForEachNode开启stateful_execution,StateUpdateNode记录执行日志以支持动态调整。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要用AgentKit搭建一个能持续理解上下文、自动拆解目标、分步执行并根据结果动态调整后续动作的智能体,必须绕过简单单步调用的陷阱,直接构建带记忆与规划能力的多轮任务流。这要求你明确区分“工具执行”和“任务状态演进”,否则第二轮请求会丢失前序意图,导致重复提问或错误跳步。
定义支持多轮推理的智能体骨架
在agent.ts中创建基础类,继承BaseAgent并显式启用memory和planner模块:使用new Memory({ backend: 'in-memory' })初始化内存实例,传入memory选项;同时将planner设为LLMPlanner而非NonePlanner——若此处漏掉planner配置,智能体将永远无法把“查天气→订酒店→规划路线”这类复合指令自动分解为子任务链。
这一步不能省略memory的threadId绑定逻辑:每次用户发起新会话时,必须生成唯一threadId并注入到Memory构造参数中,否则不同用户的对话历史会在内存中混杂。
注册带状态感知的工具函数
方法一:封装带上下文透传的工具
编写searchFlights工具时,在其parameters schema中强制加入previous_intent字段(类型为string),并在函数体内用if (args.previous_intent?.includes('budget'))判断是否需过滤低价航班——不加此字段,工具就只能机械响应当前指令,无法承接上一轮用户说的“要便宜一点”这类约束条件。
方法二:用Connector Registry统一注入会话状态
在ConnectorRegistry.register('flight-search')时,通过contextInjector钩子自动把memory.get(threadId, 'user_preferences')注入到工具调用参数中。这种方式避免每个工具都手动写透传逻辑,但要求你在用户首次输入后立刻调用memory.set(threadId, 'user_preferences', extractPreferences(input))提取偏好并存入。
配置动态DAG节点流
第一步:在Agent Builder画布中拖入InputNode作为起点,双击编辑其提示词,明确要求LLM输出JSON格式的{"task_type": "multi-step", "steps": [...]}结构。
第二步:连接RouterNode,为其配置分支规则:当task_type === 'multi-step'时流向PlannerNode,否则直连ToolNode。这个判断必须写在RouterNode的condition字段里,不能靠LLM自由发挥——LLM可能把“订机票”误判为单步,导致跳过规划环节。
第三步:将PlannerNode的输出(即步骤数组)绑定到ForEachNode的items属性,再让ForEachNode逐个触发ToolNode。注意:【ForEachNode必须开启stateful_execution: true】,否则每轮迭代都会丢失前序工具返回的结果,导致“查完天气后无法把温度信息传给穿衣建议工具”。
第四步:在ToolNode执行完毕后,添加StateUpdateNode,用memory.append(threadId, 'execution_log', { step: i, result: output })记录每步输出。这一步是后续ReplannerNode能基于实际结果修正计划的前提。


















