ChatNode处理流程 调用 compiledGraph.invoke START 记录开始时间 识别意图 判断意图类型 是 否 普通聊天 其他意图 解析用户消息 检查特殊问题 是 否 获取响应 是 获取工具结果 生成最终响应 否 直接输出 返回响应 处理完成 记录结束时间 返回 提取文本/图片 ChatNode 是否匹配特殊问题? 返回预设答案 调用大模型 是否需要工具调用? 执行工具调用 将结果返回大模型 构建响应对象 用户请求
ChatMessagesBO AgentServiceImpl.chat 状态图执行 StartRecordNode IntentNode IntentDispatcher 是否需要澄清? DirectOutputNode 意图类型? 其他节点 EndRecordNode 构建最终响应 ChatMessagesDTO
流程图说明
1. 请求入口阶段
- 用户请求: 用户通过前端发送聊天请求,包含会话ID、查询消息等信息
- AgentServiceImpl.chat(): 作为服务入口,接收ChatMessagesBO参数并调用编译好的状态图
2. 图执行阶段
- 状态图执行: 从START节点开始执行预定义的图流程
- StartRecordNode: 记录会话开始时间
- IntentNode: 进行意图识别,判断用户请求类型
- IntentDispatcher : 根据意图识别结果分发到不同节点
- 如果需要澄清,直接进入DirectOutputNode
- 根据意图类型分发到对应的处理节点(如ChatNode处理普通聊天)
3. ChatNode处理阶段
- 解析用户消息: 提取用户消息中的文本和图片内容
- 检查特殊问题 : 匹配预定义的特殊问题配置
- 如果匹配,直接返回预设答案
- 如果不匹配,继续调用大模型
- 调用大模型: 使用配置的系统提示词和用户消息调用大模型
- 处理工具调用 :
- 如果大模型返回需要工具调用,执行相应的工具调用
- 获取工具调用结果并返回给大模型
- 大模型根据工具结果生成最终响应
- 构建响应对象: 整合所有结果,构建ChatMessagesDTO响应对象
4. 结束处理阶段
- EndRecordNode: 记录会话结束时间
- 构建最终响应: 整合所有节点的处理结果
- 返回响应: 将ChatMessagesDTO返回给调用方
技术要点
1. 图结构组织
- 使用Alibaba Cloud AI Graph框架构建状态图
- 通过AgentConfig配置节点和边的关系
- 支持条件分支和异步执行
2. 节点职责
- StartRecordNode/EndRecordNode: 会话生命周期管理
- IntentNode: 意图识别
- ChatNode: 核心聊天处理,包含大模型调用和工具调用逻辑
- DirectOutputNode: 直接输出内容(如澄清请求)
3. 工具调用机制
- 大模型可动态调用注册的工具
- 支持多轮工具调用和结果处理
- 工具调用结果自动整合到最终响应中
4. 特殊问题处理
- 支持通过配置文件定义特殊问题和预设答案
- 优先使用预设答案,提高响应速度和准确性
配置说明
1. Graph配置
- 在AgentConfig.java中定义图结构
- 配置节点间的流转关系和条件分支
2. ChatNode配置
- 通过application.yml配置系统提示词
- 通过Apollo配置特殊问题列表
3. 意图配置
- 在IntentDispatcher中定义意图分发逻辑
- 支持动态扩展意图类型和处理节点
关键类说明
| 类名 | 职责 | 位置 |
|---|---|---|
| AgentServiceImpl | 服务入口,调用状态图 | agent/impl/AgentServiceImpl.java |
| AgentConfig | 配置状态图结构 | config/agent/AgentConfig.java |
| ChatNode | 核心聊天处理节点 | graph/node/ChatNode.java |
| IntentDispatcher | 意图分发器 | graph/dispatcher/IntentDispatcher.java |
| IntentNode | 意图识别节点 | graph/node/IntentNode.java |
使用说明
- 查看完整流程: 使用支持Mermaid语法的编辑器打开此文件
- 理解调用路径: 从用户请求到响应的完整路径
- 分析节点职责: 了解每个节点的具体处理逻辑
- 扩展功能: 根据需要在图中添加新节点或修改流转关系
sequenceDiagram
participant Client as 用户端
participant Agent as AgentServiceImpl
participant Graph as 状态图
participant Intent as IntentNode
participant Dispatcher as IntentDispatcher
participant Chat as ChatNode
participant Model as 大模型
participant Tool as 工具
participant End as EndRecordNode
Client->>Agent: 发送聊天请求
Agent->>Graph: 调用状态图
Graph->>Intent: 执行IntentNode
Intent->>Dispatcher: 意图识别
Dispatcher->>Chat: 分发到ChatNode
Chat->>Model: 调用大模型
Model-->>Chat: 返回响应
alt 需要工具调用
Chat->>Tool: 执行工具调用
Tool-->>Chat: 返回工具结果
Chat->>Model: 提交工具结果
Model-->>Chat: 生成最终响应
end
Chat->>End: 返回响应
End->>Graph: 记录结束时间
Graph->>Agent: 返回处理结果
Agent->>Client: 返回最终响应