LLM AI Agent 核心功能实现文档
0. 总体介绍
0.1 系统概述
LLM AI Agent 是一个基于Spring Boot框架构建的企业级智能对话系统,专注于提供智能化的多轮对话服务。该系统整合了先进的大语言模型(LLM)能力,通过智能意图识别、槽位填充、场景化配置等核心技术,实现了自然语言与业务逻辑的无缝转换。
0.2 核心价值
- 智能对话能力: 基于LLM的多轮对话上下文管理,支持自然流畅的人机交互
- 业务场景适配: 通过配置化的场景模板,快速适配不同业务领域需求
- 数据智能查询: 自然语言转SQL技术,让非技术用户也能进行复杂数据查询
- 灵活扩展架构: 支持多种LLM提供商接入,可根据业务需求灵活切换
- 安全可靠设计: 严格的SQL生成控制机制,确保业务数据安全
0.3 主要功能模块
- 智能对话引擎: 多轮对话状态管理和上下文维护
- 意图识别系统: 基于LLM的智能意图分析和场景路由
- 槽位填充机制: 自动提取和验证业务参数信息
- 文本转SQL: 自然语言到数据库查询的智能转换
- 业务API服务: 对外提供标准化的业务能力接口
- 场景配置管理: 动态加载和配置业务场景模板
0.4 技术优势
- 模块化架构: 分层设计,职责明确,便于维护和扩展
- 多LLM适配: 统一接口设计,支持OpenAI、阿里等多种LLM提供商
- 智能状态管理: 上下文感知的多轮对话机制
- 安全控制机制: 严格的输入验证和SQL生成安全控制
- 配置化驱动: 基于JSON配置的场景和流程管理
0.5 应用场景
- 企业智能客服: 基于企业知识库的智能问答系统
- 数据分析助手: 自然语言查询数据库的BI工具
- 工单处理系统: 智能化工单信息收集和处理流程
- 业务咨询平台: 专业领域的智能咨询和决策支持
通过以上核心能力,LLM AI Agent为企业提供了全方位的AI智能化解决方案,能够显著提升用户体验和业务效率。
1. 系统架构概览
2. 核心功能模块
2.1 控制器层 - 对话入口
ChatController: 对话机器人的核心入口
@RestController
@RequestMapping("/v1/api")
public class ChatController {
// 标准多轮对话
@PostMapping("llm/ai/chat")
public String chat(@RequestBody ChatRequest request)
// 场景化对话
@PostMapping("llm/ai/sceneChat")
public String sceneChat(@RequestBody ChatRequest request)
// 文本转SQL查询
@PostMapping("llm/ai/chat2db")
public String chat2db(@RequestBody ChatRequest request)
}
BusinessApiController: 业务接口服务
@RestController
@RequestMapping("/v1/rest")
public class BusinessApiController {
@GetMapping("service/queryStatus")
@GetMapping("service/queryBlackholeRoute")
@GetMapping("service/queryOpticalPower")
}
2.2 核心服务层
2.2.1 DialogueEngineService - 业务逻辑核心
核心实现代码:
public String processMultiQuestion(String chatId, String userInput) {
// 1. 获取或创建对话上下文
ConversationContext chatContext = getOrCreateChatContext(chatId);
// 2. 检查意图连续性
if (!isRelatedToLastIntent(chatContext, userInput)) {
// 重新识别意图
chatContext.setCurrentPurpose(recognizeIntent(chatContext, userInput));
}
// 3. 槽位管理和填充
Map<String, Object> slotMap = updateSlots(chatContext, userInput);
// 4. 检查槽位完整性
if (!isSlotFullyFilled(chatContext)) {
return generateSlotQuery(chatContext);
}
// 5. 执行业务逻辑
return executeBusinessLogic(chatContext, slotMap);
}
2.2.2 LLM调用服务
实现代码:
public String sendMessage(String userInput, String systemPrompt, boolean withHistory) {
// 构建消息格式
JSONArray messages = buildMessages(systemPrompt, userInput);
// 根据配置选择LLM提供商
if ("jiuTian".equals(llmType)) {
return callJiuTianAPI(messages);
} else {
return callOpenAI(messages);
}
}
2.3 上下文管理
2.3.1 ConversationContext - 对话状态
@Data
public class ConversationContext {
private String chatId; // 对话标识
private String currentPurpose; // 当前意图
private List<String> simPurpose; // 相似意图
private JSONArray slotArray; // 槽位数据
private List<JSONObject> memoryList; // 记忆列表
private Map<String, Object> sceneConfigs; // 场景配置
}
2.3.2 记忆管理策略
graph TD
A[新对话消息] --> B[构建消息记录]
B --> C{当前记忆列表长度}
C -->|< 8条记录| D[直接添加到记忆列表]
C -->|≥ 8条记录| E[移除最早3条记录]
E --> F[添加新记录到末尾]
D --> G[更新上下文对象]
F --> G
G --> H[记忆管理完成]
style C fill:#fff3e0
style D fill:#e8f5e8
style E fill:#ffebee
style G fill:#e3f2fd
3. 核心算法实现
3.1 意图识别算法
graph TB
A[用户输入] --> B[加载所有场景配置]
B --> C[构建意图识别提示词]
C --> D[调用LLM API分析]
D --> E[解析LLM返回结果]
E --> F{是否匹配到有效意图?}
F -->|是| G[计算意图置信度]
F -->|否| H[返回默认意图]
G --> I{置信度 ≥ 0.5?}
I -->|是| J[更新为当前意图]
I -->|否| H
H --> K[保持原有意图]
J --> L[更新ConversationContext]
K --> L
L --> M[返回识别结果]
style D fill:#e3f2fd
style F fill:#fff3e0
style I fill:#ffebee
style L fill:#e8f5e8
实现代码:
private String recognizeIntent(ConversationContext chatContext, String userInput) {
// 1. 加载所有场景配置
Map<String, Object> allConfigs = loadAllSceneConfigs();
// 2. 构建意图识别提示词
String prompt = buildIntentPrompt(allConfigs, userInput);
// 3. 调用LLM进行意图识别
String response = llmGatewayService.sendMessage(prompt, null, false);
// 4. 解析和返回识别结果
return extractIntentFromResponse(response);
}
3.2 槽位填充算法
关键代码:
public Map<String, Object> updateSlots(ConversationContext chatContext, String userInput) {
// 1. 获取当前场景配置
String sceneName = chatContext.getCurrentPurpose();
Map<String, Object> sceneConfig = getSceneConfig(sceneName);
// 2. 构建信息抽取提示词
String extractPrompt = buildSlotExtractPrompt(sceneConfig, userInput);
// 3. 调用LLM抽取参数
String extractedData = llmGatewayService.sendMessage(extractPrompt, null, false);
// 4. 解析并更新槽位
Map<String, Object> slotMap = parseSlotData(extractedData);
updateChatContextSlots(chatContext, slotMap);
return slotMap;
}
3.3 文本转SQL算法
graph TB
A[用户自然语言查询] --> B[获取上下文信息]
B --> C[构建SQL生成提示词]
C --> D[调用LLM API生成SQL]
D --> E[解析SQL语句]
E --> F{SQL语法检查}
F -->|不通过| G[返回语法错误提示]
F -->|通过| H{安全检查}
H -->|包含危险关键字| I[拒绝执行,返回警告]
H -->|仅包含SELECT语句| J[验证表名和字段]
J --> K{验证通过?}
K -->|通过| L[执行SQL查询]
K -->|不通过| M[返回权限不足提示]
L --> N[格式化查询结果]
N --> O[返回查询结果]
G --> P[等待用户重新输入]
I --> P
M --> P
O --> Q[完成查询处理]
style D fill:#e3f2fd
style F fill:#fff3e0
style H fill:#ffebee
style K fill:#e8f5e8
style L fill:#c8e6c9
实现代码:
public String processText2db(ConversationContext chatContext, String userInput) {
// 1. 构建SQL生成专用提示词
String sqlPrompt = buildSQLPrompt(userInput, chatContext);
// 2. 调用LLM生成SQL
String generatedSQL = llmGatewayService.sendMessage(sqlPrompt, null, false);
// 3. 安全验证(只允许SELECT语句)
if (!isSafeSQL(generatedSQL)) {
return "生成的SQL语句存在安全风险,已拒绝执行";
}
// 4. 执行SQL并返回结果
return executeQuery(generatedSQL);
}
4. 工具类核心功能
4.1 UtilityTools工具类
场景配置加载:
public static Map<String, Object> loadAllSceneConfigs() {
Map<String, Object> allConfigs = new HashMap<>();
File configDir = new File("config/scenes/");
// 动态加载所有JSON配置文件
File[] jsonFiles = configDir.listFiles((dir, name) -> name.endsWith(".json"));
for (File file : jsonFiles) {
Map<String, Object> config = objectMapper.readValue(file, Map.class);
allConfigs.putAll(config);
}
return allConfigs;
}
槽位管理工具:
// 检查槽位是否完整填充
public static boolean isSlotFullyFilled(ConversationContext chatContext) {
// 根据场景配置验证必要参数
Map<String, Object> sceneConfig = getSceneConfig(chatContext.getCurrentPurpose());
// 实现完整性检查逻辑
}
// 生成缺失参数的询问
public static String getSlotQueryUserJson(ConversationContext chatContext) {
// 生成用户友好的参数询问提示
}
4.2 SceneTemplateManager场景提示词
信息抽取模板:
public static String slotUpdate =
"你是一个信息抽取机器人。\n" +
"当前场景:【%s】\n" +
"从用户输入中提取有用信息到value值,严格提取。\n" +
"返回JSON格式:{\"name\":\"参数名\",\"value\":\"提取的值\"}";
文本转SQL模板:
public static String text2db =
"你是一个专业的SQL生成器。\n" +
"将自然语言转换为数据库可执行的SQL语句。\n" +
"只返回SQL语句,不需要分析过程。\n" +
"注意:只生成查询语句,不允许修改数据。";
5. 核心业务流程
5.1 完整对话流程
5.2 多轮对话状态管理
6. 技术亮点
- 智能对话引擎: 基于LLM的多轮对话状态管理
- 场景化配置: 动态加载业务场景,支持快速定制
- 意图连续性: 智能判断对话相关性,保持上下文连贯
- 安全SQL生成: 严格控制SQL生成,确保数据库安全
- 多LLM适配: 统一接口适配不同LLM提供商
7. 应用场景
- 智能客服: 基于业务知识的智能问答
- 数据查询: 自然语言转SQL的数据分析
- 工单处理: 智能化的信息收集和业务流程
- 业务助手: 专业领域的智能咨询
该系统通过模块化设计和智能算法,实现了灵活、可扩展的AI对话平台,为企业级应用提供了强大的智能化支撑。
1319

被折叠的 条评论
为什么被折叠?



