Spring Boot框架构建的企业AI智能Agent

AgenticCoding·十二月创作之星挑战赛 8.8w人浏览 117人参与

LLM AI Agent 核心功能实现文档

0. 总体介绍

0.1 系统概述

LLM AI Agent 是一个基于Spring Boot框架构建的企业级智能对话系统,专注于提供智能化的多轮对话服务。该系统整合了先进的大语言模型(LLM)能力,通过智能意图识别、槽位填充、场景化配置等核心技术,实现了自然语言与业务逻辑的无缝转换。

0.2 核心价值

  • 智能对话能力: 基于LLM的多轮对话上下文管理,支持自然流畅的人机交互
  • 业务场景适配: 通过配置化的场景模板,快速适配不同业务领域需求
  • 数据智能查询: 自然语言转SQL技术,让非技术用户也能进行复杂数据查询
  • 灵活扩展架构: 支持多种LLM提供商接入,可根据业务需求灵活切换
  • 安全可靠设计: 严格的SQL生成控制机制,确保业务数据安全

0.3 主要功能模块

  1. 智能对话引擎: 多轮对话状态管理和上下文维护
  2. 意图识别系统: 基于LLM的智能意图分析和场景路由
  3. 槽位填充机制: 自动提取和验证业务参数信息
  4. 文本转SQL: 自然语言到数据库查询的智能转换
  5. 业务API服务: 对外提供标准化的业务能力接口
  6. 场景配置管理: 动态加载和配置业务场景模板

0.4 技术优势

  • 模块化架构: 分层设计,职责明确,便于维护和扩展
  • 多LLM适配: 统一接口设计,支持OpenAI、阿里等多种LLM提供商
  • 智能状态管理: 上下文感知的多轮对话机制
  • 安全控制机制: 严格的输入验证和SQL生成安全控制
  • 配置化驱动: 基于JSON配置的场景和流程管理

0.5 应用场景

  • 企业智能客服: 基于企业知识库的智能问答系统
  • 数据分析助手: 自然语言查询数据库的BI工具
  • 工单处理系统: 智能化工单信息收集和处理流程
  • 业务咨询平台: 专业领域的智能咨询和决策支持

通过以上核心能力,LLM AI Agent为企业提供了全方位的AI智能化解决方案,能够显著提升用户体验和业务效率。

1. 系统架构概览

用户请求
ChatController
BusinessApiController
DialogueEngineService
LLMGatewayService
FineTunedLLMService
UtilityTools工具
LLM提供商
ConversationContext
场景配置
业务查询接口

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调用服务
ServiceLLMGatewayServiceLLM API大模型API发送消息请求构建消息格式HTTP请求返回结果带令牌请求返回结果alt[OpenAI模式][九田模式]标准化响应ServiceLLMGatewayServiceLLM API大模型API

实现代码:

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 槽位填充算法

用户输入
获取当前场景配置
构建信息抽取提示词
调用LLM API
解析抽取结果
更新槽位数据
槽位是否完整?
识别缺失参数
生成用户询问
返回询问消息
验证槽位有效性
验证通过?
触发业务执行
返回错误提示
执行业务逻辑
返回业务结果
等待用户响应

关键代码:

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. 技术亮点

  1. 智能对话引擎: 基于LLM的多轮对话状态管理
  2. 场景化配置: 动态加载业务场景,支持快速定制
  3. 意图连续性: 智能判断对话相关性,保持上下文连贯
  4. 安全SQL生成: 严格控制SQL生成,确保数据库安全
  5. 多LLM适配: 统一接口适配不同LLM提供商

7. 应用场景

  • 智能客服: 基于业务知识的智能问答
  • 数据查询: 自然语言转SQL的数据分析
  • 工单处理: 智能化的信息收集和业务流程
  • 业务助手: 专业领域的智能咨询

该系统通过模块化设计和智能算法,实现了灵活、可扩展的AI对话平台,为企业级应用提供了强大的智能化支撑。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值