基于SpringAiAlibaba实现的智能客服系统
springaialibaba实现的智能知识库客服系统
[这是基于一个脚手架的后续开发,非常感谢脚手架的开发者B站UP主三更学堂](很多知识点我也是初次接触 解释不好还请谅解 请各位大佬多多指教)
一、项目概述
该项目是一个基于Spring Boot和Spring AI Alibaba实现的智能客服系统,集成了大语言模型(LLM)和向量数据库技术,支持智能对话、知识库查询和订单管理等功能。
二、技术栈
后端技术
- 框架:Spring Boot 3.5.3
- AI集成:Spring AI 1.0.1 + Spring Alibaba AI 1.0.0.4
- LLM模型:通过DashScope API集成(支持通义千问等模型)
- 向量数据库:Redis(用于知识库向量存储)
- 数据库:MySQL + Spring Data JPA
- 远程调用:OpenFeign(用于调用订单服务)
- 工具库:Hutool、EasyExcel、FastJSON2
前端技术
- 框架:Vue 3
- 构建工具:Vite
- 路由:Vue Router
三、核心功能模块
1. 智能对话模块
- 对话处理:基于Spring AI的聊天模型实现智能对话
- 历史记录:使用JDBC存储聊天历史
- 上下文管理:支持多轮对话的上下文维护
2. 工作流引擎
- 状态图设计:使用Spring Alibaba AI的图计算框架实现对话流程编排
- 节点管理:支持异步节点操作,可扩展复杂的对话逻辑
- 流程配置:在
IntelligentCustomerServiceWorkflowConfig中定义对话流程
3. 知识库系统
- 文档加载:通过
DocumentLoaderService在应用启动时异步加载CSV格式的知识库 - 向量存储:使用Redis向量数据库存储知识库向量
- 相似度查询:支持基于向量相似度的知识库检索
4. 用户管理
- 用户实体:包含用户基本信息
- 服务层:
UserDomainService和UserApplicationService提供用户相关功能
5. 消息管理
- 消息实体:存储用户和AI助手的对话消息
- 服务层:
MessageDomainService和MessageRepository提供消息存储和查询
6. 订单集成
- 远程调用:通过OpenFeign调用外部订单服务
- 订单操作:支持订单查询、取消和完成等功能
四、系统架构
(1)项目架构
采用经典的六边形架构(端口适配器模式):
-
应用层(Application):
- 服务接口:
DocumentLoaderService、UserApplicationService、WorkflowApplicationService - 工作流配置:
IntelligentCustomerServiceWorkflowConfig
- 服务接口:
-
领域层(Domain):
- 实体:
User、Message - 领域服务:
UserDomainService、MessageDomainService - 仓库:
MessageRepository
- 实体:
-
基础设施层(Infrastructure):
- 配置:
LLMConfiguration - 客户端:
OrderClient - 控制器:
OrderController、UserController、WorkflowController
- 配置:
(2)六边形架构
1. 六边形架构基础知识
1.1 什么是六边形架构
六边形架构(Hexagonal Architecture),也称为端口和适配器架构(Ports and Adapters Architecture),是由Alistair Cockburn在2005年提出的一种软件架构模式。它的核心思想是: 将应用程序的核心业务逻辑与外部依赖(如数据库、UI、外部服务等)解耦 ,使核心业务逻辑能够独立于外部实现细节而存在和演进。
六边形架构通过定义清晰的边界,将应用程序分为三个主要部分:
- 内部核心 :包含领域模型和业务逻辑
- 端口(Ports) :定义了核心与外部世界交互的接口
- 适配器(Adapters) :实现端口接口,将外部系统的请求转换为核心能够理解的形式,或者将核心的响应转换为外部系统能够理解的形式
1.2 核心原则
六边形架构遵循以下核心原则:
- 依赖反转原则 :核心业务逻辑不依赖于外部实现,而是通过接口(端口)定义依赖
- 关注点分离 :将业务逻辑、技术实现和外部依赖清晰分离
- 可测试性 :核心业务逻辑可以独立于外部系统进行测试
- 可扩展性 :可以轻松添加新的外部系统或替换现有外部系统,而不需要修改核心业务逻辑
- 以领域为中心 :核心是领域模型和业务逻辑,所有外部系统都围绕核心展开
1.3 主要组件 1.3.1 领域层(Domain Layer)
领域层是六边形架构的核心,包含:
-
领域实体(Domain Entities) :表示业务领域中的核心概念,包含业务数据和行为
-
领域服务(Domain Services) :实现跨实体的业务逻辑
-
领域事件(Domain Events) :表示领域中发生的重要事件
-
领域规则(Domain Rules) :定义业务领域中的规则和约束 1.3.2 端口(Ports)
端口定义了核心与外部世界交互的接口: -
入站端口(Inbound Ports) :允许外部系统触发核心业务逻辑的接口
-
出站端口(Outbound Ports) :核心业务逻辑用来与外部系统交互的接口 1.3.3 适配器(Adapters)
适配器实现端口接口,将外部系统的请求转换为核心能够理解的形式,或者将核心的响应转换为外部系统能够理解的形式: -
入站适配器(Inbound Adapters) :接收外部系统的请求,调用核心业务逻辑
-
出站适配器(Outbound Adapters) :实现核心业务逻辑需要的外部系统接口
1.4 架构优势
六边形架构具有以下优势:
- 松耦合 :核心业务逻辑与外部依赖解耦,提高代码的可维护性和可扩展性
- 可测试性 :核心业务逻辑可以独立于外部系统进行测试,提高测试效率和质量
- 业务聚焦 :核心业务逻辑更加清晰,不受外部技术实现的影响
- 技术灵活性 :可以轻松替换外部技术栈,而不需要修改核心业务逻辑
- 团队协作 :不同团队可以独立开发核心业务逻辑和外部适配器,提高开发效率
2. 智能客服项目的六边形架构实现分析
2.1 项目目录结构概览
智能客服项目采用了清晰的六边形架构设计,其目录结构如下:
2.2 领域层实现
领域层是智能客服项目的核心,包含了业务领域的核心概念和逻辑:\
2.2.1 领域实体
- *User实体:表示系统用户,包含用户ID、姓名、手机号等属性,以及注册等业务行为
- Message实体:表示用户与智能客服之间的消息,包含消息ID、用户ID、角色(用户/助手)、内容等属性
2.2.2 领域服务
- UserDomainService:实现用户相关的业务逻辑,如用户注册、用户查询等
- MessageDomainService:实现消息相关的业务逻辑,如添加用户消息、添加助手消息、获取历史消息等
2.2.3 领域仓库
- MessageRepository:定义消息存储和查询的接口,是领域层与外部存储系统交互的出站端口
2.3 端口实现
2.3.1 入站端口
入站端口定义了外部系统(如前端、外部服务)如何与应用程序交互:
- WorkflowController:接收工作流执行请求
- UserController:接收用户注册请求
- OrderController:接收订单相关请求
2.3.2 出站端口
出站端口定义了应用程序如何与外部系统(如数据库、外部服务)交互:
- MessageRepository:定义消息存储和查询的接口
- OrderClient:定义与订单服务交互的接口
2.4 适配器实现
2.4.1 入站适配器
入站适配器实现了入站端口,将外部系统的请求转换为核心业务逻辑能够理解的形式:
- WorkflowController:接收HTTP请求,调用WorkflowApplicationService处理工作流执行
- UserController:接收HTTP请求,调用UserApplicationService处理用户注册
- OrderController:接收HTTP请求,调用OrderClient与订单服务交互
2.4.2 出站适配器
出站适配器实现了出站端口,将核心业务逻辑的请求转换为外部系统能够理解的形式:\
- OrderClient:使用OpenFeign实现与订单服务的通信
- JpaRepository实现:Spring Data JPA自动实现了MessageRepository接口,提供与数据库的交互
- LLMConfiguration:配置与大语言模型的交互
2.5 应用层实现
应用层位于领域层和基础设施层之间,协调领域层的业务逻辑:
-
WorkflowApplicationService:协调工作流执行,调用领域服务处理用户消息
-
UserApplicationService:协调用户注册,调用领域服务处理用户信息
-
DocumentLoaderService:加载知识库文档
-
WorkflowRunCMD:工作流执行请求的数据传输对象
2.6 依赖关系分析
智能客服项目的依赖关系严格遵循了六边形架构的依赖反转原则:
- 内部依赖外部:核心领域层不依赖任何外部实现,只依赖于抽象接口
- 外部依赖内部:基础设施层(适配器)依赖于领域层的接口和实体
- 应用层作为桥梁:应用层依赖于领域层,同时被基础设施层依赖
这种依赖关系确保了核心业务逻辑的独立性和可测试性,同时也使得外部系统的变更不会影响核心业务逻辑。
4. 六边形架构与传统三层架构对比
| 对比维度 | 六边形架构 | 传统三层架构 |
|---|---|---|
| 核心思想 | 业务逻辑与外部依赖解耦 | 数据流向分层,以技术实现为中心 |
| 依赖方向 | 外部依赖核心,核心不依赖外部 | 上层依赖下层,下层不依赖上层 |
| 扩展性 | 易于扩展,支持多种适配器 | 扩展受限,需要修改现有层 |
| 测试性 | 核心业务逻辑可独立测试 | 难以独立测试,依赖外部系统 |
| 业务价值 | 突出业务逻辑,关注业务领域 | 关注技术实现,业务逻辑分散 |
五、工作流程
-
启动流程:
- 应用启动时自动加载CSV知识库到Redis向量数据库
- 初始化聊天模型和工作流引擎
-
对话流程:
- 用户发送消息到后端API
- 后端获取用户聊天历史
- 调用工作流引擎处理对话
- 工作流引擎根据配置的节点执行对话逻辑
- 返回AI助手的回复给用户
- 保存对话历史到数据库
六、知识库实现
- 知识库格式:CSV文件(qa/QA.csv)
- 加载机制:应用启动时异步加载
- 向量转换:将问题和答案转换为向量存储到Redis
- 检索方式:基于向量相似度的Top-K查询
七、前端界面
前端采用Vue 3实现,主要组件包括:
- 聊天界面:
ChatInterface.vue - 订单管理:
OrderManagement.vue - 注册模态框:
RegisterModal.vue
八、配置要点
- AI模型配置:通过
application.yml配置DashScope API和模型参数 - 向量数据库:配置Redis索引和初始化参数
- 知识库:配置CSV文件路径和向量检索参数
- 日志:详细的日志配置便于调试和监控
九、扩展点
- 对话节点扩展:可在工作流配置中添加更多自定义节点
- 知识库格式扩展:支持更多文档格式(如PDF、Word)
- 多模型支持:可扩展支持其他LLM模型
- 情感分析:可集成情感分析功能提升用户体验
更多推荐



所有评论(0)