Appearance
智能体核心组件
智能体类型
agent/chatbot 当前包含三类主要执行器:
| 类 | 作用 |
|---|---|
GenerationAgent | 面向内容生成的直接执行器 |
ToolCallAgent | 以工具调用为中心的执行器 |
AutoPlanningAgent | 负责意图识别、任务规划和循环执行的主执行器 |
公共抽象位于 agent/core:Agent、BaseAgent、AgentMemory 和 AgentMessage。Agent 的数据库定义由 AiAgentEntity 表示,运行时配置通过 AgentConfig、LlmModelConfig 和 OfficialSkillMountConfig 组装。
自主规划 Agent 的主图和循环子图已经拆成独立专题,见智能体执行引擎。本页保留组件边界和调度关系,阅读源码时应从 AutoPlanningAgent 进入,而不是从某个工具节点反向推测全局流程。
一条消息的执行顺序
AiChatbotAgentController校验 Agent、用户和 session。AgentChatServiceImpl创建AgentMessage并提交队列,HTTP 请求不会等待整个模型响应。CentralizedAgentMessageDispatcher从队列取消息,按 session 获取或创建单线程虚拟线程执行器。- 执行器读取
ChatSession、运行控制状态和响应通道。 AutoPlanningAgent运行 LangGraph 节点:LoadAgentConfigNode、IntentRecognitionNode、PlanningNode、AgenticTaskExecutionNode和TaskEndNode。- 循环执行节点根据任务类型调用
LlmGenerateNode、RagNode、SkillCallNode、ToolCallNode、SubAgentCallNode或SandboxNode。 StreamHandler接收 token、节点完成、工具结果、错误和结束事件;持久化监听器同步记录 Trace 和会话账本。
AutoPlanningAgent 的实际主图还包含 web_search_prefetch:它位于意图识别和规划之间,完成预取后才决定进入 planning 或直接 task_end。有执行步骤时,agentic_loop 不是普通方法调用,而是以 TaskExecutionState 编译出的可 checkpoint 子图运行。
并发与顺序
- 同一 session 的消息在同一个单线程执行器中 FIFO 串行。
- 不同 session 使用不同执行器,可以并行处理。
- 队列实现由
AgentMessageQueue抽象,可切换内存、Redis 或 RocketMQ。 - 队列满时需要关注背压和拒绝策略;不能无限制增加 worker 数量掩盖模型或工具的慢调用。
- 外部 IM 的回复目标保存在接入节点内存中,因此
submitLocal会把消息投递到当前节点的 session 执行器,跨节点场景必须设计路由保持。
暂停、恢复和取消
PauseCoordinator、RunControlStore 和 dispatcher 的 active worker 记录共同维护运行控制:
- 暂停保存当前运行状态,后续由 resume 消息恢复。
- 取消会记录 run version,并中断活动执行线程;session 本身不会被删除。
- 分支由会话持久化层管理,创建分支后可切换活动分支再继续执行。
不要用“HTTP 请求是否返回”判断 Agent 是否结束,应读取运行状态或等待 onComplete 事件。
取消与恢复必须带上 runVersion。旧运行的迟到消息不能覆盖新运行;高风险工具的审批也不能通过重新发送普通聊天消息代替,应使用同一 session 的 resume 命令。