智能体意图识别的开发笔记
前言
如何能用最快,最简单的方法实现用户意图的精准识别、智能体任务的高效匹配与路由,并提供实时仲裁与权限控制能力?
设计系统通过 MySQL + Elasticsearch + 业务层管理服务 + 大模型推理,形成动态 prompt 构建、意图识别与响应统一管理体系。这个意图识别的架构目的是迎合业务层需要响应快,业务多变和未定的需求,实际有很多不完善的地方。
一、业务需求
- 意图精准识别:结合规则与大模型推理,理解用户指令,提取核心任务。
- 智能体匹配与路由:根据任务类型与智能体能力,实现自动路由。
- 实时仲裁与监督:保障多智能体并发任务执行中的一致性与稳定性。
- 可配置意图与路由:支持新增智能体、意图样例和权限的配置化管理。
- 动态 Prompt 构建:根据用户权限动态生成多智能体 Prompt,支持多样化调用。
- 高性能与可扩展性:支持缓存、异步队列、配置热更新,保证系统高并发性能。
二、技术方案
系统采用模块化设计,核心依赖如下:
- MySQL:存储智能体配置与意图元数据
- Elasticsearch(ES):存储意图样例和推理链条,支持快速检索
- 业务层管理服务(权限系统):控制用户可访问智能体范围
- 大模型服务:接收动态 Prompt 与示例,输出意图识别结果
- 意图识别服务:聚合 MySQL + ES + 权限信息,构建 Prompt 并调用大模型完成意图识别
三、架构设计
1. 系统总体架构
flowchart TD
User[用户] -->|发起请求| BMS[业务层管理服务]
BMS -->|权限过滤| IR[Intention Recognition Service]
IR -->|查询智能体配置| MySQLDB[MySQL]
IR -->|检索样例| ESDB[Elasticsearch]
IR -->|构建Prompt并调用| LLM[大模型服务]
LLM -->|意图编号| IR
IR -->|映射意图名称| BMS
BMS -->|路由任务| AgentPool[智能体池]- 用户请求通过业务层管理服务发起
- 意图识别服务整合权限、智能体配置与历史样例
- 大模型生成意图编号并映射为意图名称
- 业务层根据意图路由任务到对应智能体
2. 核心功能模块
| 模块 | 功能描述 |
|---|---|
| 意图管理模块(MySQL) | 管理智能体配置、意图信息,为 Prompt 构建提供数据源 |
| 意图库(ES) | 存储用户 query、推理链条(CoT)及意图编号,支持样例推荐与检索 |
| 权限管理模块(业务层管理服务) | 控制用户可访问智能体范围,传递权限信息给识别服务 |
| 意图识别服务 | 构建动态 Prompt、检索示例、调用大模型、映射意图编号并返回结果 |
3. 时序设计
sequenceDiagram
participant User as 用户
participant BMS as 业务层管理服务
participant IR as 意图识别服务
participant MySQL as MySQL
participant ES as Elasticsearch
participant LLM as 大模型服务
User->>BMS: 发起意图识别请求
BMS->>IR: 提交用户Query + 权限智能体列表
IR->>MySQL: 查询智能体配置
IR->>ES: 检索历史问答样例
IR->>LLM: 构建Prompt并调用
LLM-->>IR: 返回意图编号
IR-->>BMS: 映射意图名称
BMS->>User: 返回识别结果4. Prompt 构建示例
目标:选择智能体的目标
智能体编号:1
智能体名称:智能体1
智能体描述:智能体1擅长文本分析
智能体编号:2
智能体名称:智能体2
智能体描述:智能体2擅长数据处理
用户指令:生成本周报告
- 动态构建 Prompt,将用户指令、可用智能体信息和历史样例融合
- 支持多智能体调用和权限控制
四、意图识别流程
-
智能体配置
- 管理员通过业务层管理服务配置智能体信息(存储 MySQL)
- 提供相关问答样例(存储 ES)
-
用户请求
- 系统检查用户权限
- 生成可访问智能体列表,并提交给意图识别服务
-
识别执行
- 查询 MySQL 构建 Prompt
- 检索 ES 样例数据
- 调用大模型完成意图推理
-
返回结果
- 映射意图编号为意图名称
- 返回给业务层管理服务进行任务路由
五、安全与治理
- 权限隔离:确保用户仅能访问有权限的智能体
- 数据安全:MySQL 和 ES 访问需认证与授权
- 调用隔离:大模型调用走异步队列,防止滥用
- 日志追踪与审计:全流程记录操作与调用,用于问题排查与优化
六、部署与监控
-
服务容器化:Docker + Kubernetes 部署
-
缓存机制:对 MySQL/ES 查询结果缓存,降低 I/O 压力
-
配置热更新:智能体信息动态刷新无需重启
-
异步队列:大模型调用异步执行,提升并发能力
-
监控系统:
- 接口调用和延迟监控
- ES 查询命中率监控
- Prompt 构建异常监控
七、遇到的问题:
- 历史对话过多会让模型更容易产生幻觉
- 存在意图重叠的智能体
- 存在智能体不能回答所属意图的问题
- 高并发下大模型返回速度慢
- 相同的问题在0温度时还是会生成不同的意图
- 存在方言识别问题,例如,倒装句,反问句易识别错误
- 对需要上下文结合理解的问题,意图识别正确率低
- 业务层存在特殊问题的意图,不在大模型的理解能力范围内
- 无效的输入会被理解到意图
- 业务层原因,没能实现收到其他智能体的结果后修正意图的功能