[这是基于一个脚手架的后续开发,非常感谢脚手架的开发者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. 用户管理

  • 用户实体:包含用户基本信息
  • 服务层UserDomainServiceUserApplicationService提供用户相关功能

5. 消息管理

  • 消息实体:存储用户和AI助手的对话消息
  • 服务层MessageDomainServiceMessageRepository提供消息存储和查询

6. 订单集成

  • 远程调用:通过OpenFeign调用外部订单服务
  • 订单操作:支持订单查询、取消和完成等功能

四、系统架构

(1)项目架构

采用经典的六边形架构(端口适配器模式):

  1. 应用层(Application)

    • 服务接口:DocumentLoaderServiceUserApplicationServiceWorkflowApplicationService
    • 工作流配置:IntelligentCustomerServiceWorkflowConfig
  2. 领域层(Domain)

    • 实体:UserMessage
    • 领域服务:UserDomainServiceMessageDomainService
    • 仓库:MessageRepository
  3. 基础设施层(Infrastructure)

    • 配置:LLMConfiguration
    • 客户端:OrderClient
    • 控制器:OrderControllerUserControllerWorkflowController

(2)六边形架构

1. 六边形架构基础知识
1.1 什么是六边形架构

六边形架构(Hexagonal Architecture),也称为端口和适配器架构(Ports and Adapters Architecture),是由Alistair Cockburn在2005年提出的一种软件架构模式。它的核心思想是: 将应用程序的核心业务逻辑与外部依赖(如数据库、UI、外部服务等)解耦 ,使核心业务逻辑能够独立于外部实现细节而存在和演进。

六边形架构通过定义清晰的边界,将应用程序分为三个主要部分:

  • 内部核心 :包含领域模型和业务逻辑
  • 端口(Ports) :定义了核心与外部世界交互的接口
  • 适配器(Adapters) :实现端口接口,将外部系统的请求转换为核心能够理解的形式,或者将核心的响应转换为外部系统能够理解的形式
1.2 核心原则

六边形架构遵循以下核心原则:

  1. 依赖反转原则 :核心业务逻辑不依赖于外部实现,而是通过接口(端口)定义依赖
  2. 关注点分离 :将业务逻辑、技术实现和外部依赖清晰分离
  3. 可测试性 :核心业务逻辑可以独立于外部系统进行测试
  4. 可扩展性 :可以轻松添加新的外部系统或替换现有外部系统,而不需要修改核心业务逻辑
  5. 以领域为中心 :核心是领域模型和业务逻辑,所有外部系统都围绕核心展开
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 架构优势

六边形架构具有以下优势:

  1. 松耦合 :核心业务逻辑与外部依赖解耦,提高代码的可维护性和可扩展性
  2. 可测试性 :核心业务逻辑可以独立于外部系统进行测试,提高测试效率和质量
  3. 业务聚焦 :核心业务逻辑更加清晰,不受外部技术实现的影响
  4. 技术灵活性 :可以轻松替换外部技术栈,而不需要修改核心业务逻辑
  5. 团队协作 :不同团队可以独立开发核心业务逻辑和外部适配器,提高开发效率
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 依赖关系分析

智能客服项目的依赖关系严格遵循了六边形架构的依赖反转原则:

  1. 内部依赖外部:核心领域层不依赖任何外部实现,只依赖于抽象接口
  2. 外部依赖内部:基础设施层(适配器)依赖于领域层的接口和实体
  3. 应用层作为桥梁:应用层依赖于领域层,同时被基础设施层依赖

这种依赖关系确保了核心业务逻辑的独立性和可测试性,同时也使得外部系统的变更不会影响核心业务逻辑。

4. 六边形架构与传统三层架构对比

对比维度 六边形架构 传统三层架构
核心思想 业务逻辑与外部依赖解耦 数据流向分层,以技术实现为中心
依赖方向 外部依赖核心,核心不依赖外部 上层依赖下层,下层不依赖上层
扩展性 易于扩展,支持多种适配器 扩展受限,需要修改现有层
测试性 核心业务逻辑可独立测试 难以独立测试,依赖外部系统
业务价值 突出业务逻辑,关注业务领域 关注技术实现,业务逻辑分散

五、工作流程

  1. 启动流程

    • 应用启动时自动加载CSV知识库到Redis向量数据库
    • 初始化聊天模型和工作流引擎
  2. 对话流程

    • 用户发送消息到后端API
    • 后端获取用户聊天历史
    • 调用工作流引擎处理对话
    • 工作流引擎根据配置的节点执行对话逻辑
    • 返回AI助手的回复给用户
    • 保存对话历史到数据库

六、知识库实现

  1. 知识库格式:CSV文件(qa/QA.csv)
  2. 加载机制:应用启动时异步加载
  3. 向量转换:将问题和答案转换为向量存储到Redis
  4. 检索方式:基于向量相似度的Top-K查询

七、前端界面

前端采用Vue 3实现,主要组件包括:

  • 聊天界面ChatInterface.vue
  • 订单管理OrderManagement.vue
  • 注册模态框RegisterModal.vue

八、配置要点

  1. AI模型配置:通过application.yml配置DashScope API和模型参数
  2. 向量数据库:配置Redis索引和初始化参数
  3. 知识库:配置CSV文件路径和向量检索参数
  4. 日志:详细的日志配置便于调试和监控

九、扩展点

  1. 对话节点扩展:可在工作流配置中添加更多自定义节点
  2. 知识库格式扩展:支持更多文档格式(如PDF、Word)
  3. 多模型支持:可扩展支持其他LLM模型
  4. 情感分析:可集成情感分析功能提升用户体验
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐