Skip to content

应用架构图

img

该笔记围绕 “Spring AI Alibaba 智能航空助手项目” 展开,详细介绍了项目资源、架构、环境准备、前后端部署、核心功能实现、关键技术及难点解决方案,旨在为开发者提供完整的项目实战指南。

一、项目基础信息与资源

  1. 核心定位:基于 JAVA+AI 技术开发的智能机票助手,核心功能为机票退订、改订、预订,强调职责分明。
  2. 资源获取
    • 项目代码:百度网盘链接(https://pan.baidu.com/s/1Qu6x4p3rpZfHYQrJ26YG0w,提取码:wswk)。
    • 技术交流:可加入知识星球 “徐庶答疑社区”(星主为徐庶老师),或通过微信搜 “程序员徐庶” 获取更多支持,提供一对一 JAVA+AI 技术解答。

二、项目架构

项目架构涵盖多模块,各模块协同实现智能航空助手功能,核心组成如下:

模块层级具体模块功能说明
交互层User Interface(前端界面)提供用户与系统的交互入口,支持机票相关操作的可视化操作
核心 AI 层Spring AI、System Prompt、ChatGLM Ali Version、ConversationMemory负责 AI 对话逻辑、提示词预设、对话记忆管理,保障交互连贯性
数据处理层Document Ingestion、Vector RAG Store、Document Transformer、Document Reader处理文档数据,包括文档摄入、向量存储(用于 RAG)、文档转换与读取
功能实现层Generative AI、Function Calling、Writer、Service APIs实现 AI 生成、方法回调(如退订 / 改订功能触发)、数据写入及服务接口调用
业务服务层Flight Booking Service、Booking DB封装机票预订相关业务逻辑(退订、改订、查询),Booking DB 存储预订数据

三、环境准备与配置

  1. 基础环境要求
    • Java 17:后端开发与运行的基础环境。
    • Node.js 18+:前端项目(chatgpt-demo)的运行依赖。
  2. API Key 配置

四、前后端部署步骤

(一)前端部署

  1. 下载项目代码后,进入前端目录:cd app/chatgpt-demo
  2. 安装依赖:执行命令 npm i
  3. 启动项目:执行命令 npm run dev;前端环境安装细节可参考有道笔记(https://note.youdao.com/s/AXcWXq3v)。

(二)后端部署核心配置

  1. 依赖与基础配置:配置 ChatClient、创建 Controller,实现流式对话功能。
  2. 长连接问题解决:通过 “加入打印日志拦截器→加入 Advisor→使用 chatClientBuilder 的 defaultAdvisors () 方法注册 Advisor”,解决 SSE 长连接重复请求问题。

五、核心功能实现与关键技术

(一)核心业务功能(基于 FlightBookingService)

该类封装了退订、改订逻辑(暂未操作数据库,重点在业务逻辑):

  • 退订业务规则:超过 2 天无法退订,退订后订单状态改为 “取消”。
  • 改订业务:通过 ChangeBookingDatesRequest 实现,需先获取并确认预订信息。

(二)关键技术与解决方案

1. Function-Call(方法回调):解决业务触发与信息提取

用于实现退订、改订、查询预订信息等功能的触发,核心步骤:

  • 告知大模型 “回调哪个方法”:提供实现 Function 接口的 Bean(调用 apply 方法)。
  • 定义 “什么对话触发回调”:配置 Function 作用(如指定处理退订场景)。
  • 明确 “提取什么关键字”:通过 Function 的第一个泛型指定需提取的变量名(如预订号、客户姓名)。

2. 对话记忆与信息获取:解决用户信息收集问题

  • 规则:处理预订 / 取消预订前,需获取用户的 “预订号、客户姓名”;获取前先检查消息历史记录,避免重复询问。
  • 实现:通过预设提示词强制大模型收集关键信息,再触发后续操作。

3. 温度参数(Temperature):解决大模型 “自主操作” 问题

  • 问题:部分场景下大模型未等用户回复 “确认” 就直接执行退订,需降低模型随机性。
  • 温度参数说明:控制模型输出的随机性,值越低越可控(示例:“天空是___”,0.2 时输出 “蓝色的”,1.0 时可能输出 “草莓味的”)。
  • 行业建议与项目配置:客服场景建议 0.3-0.6,本项目降低温度使大模型更遵循提示词,避免 “自主操作”。

4. RAG(检索增强生成):外挂知识库提升回答准确性

通过向量数据库实现相似性检索,补充业务知识(如 Terms of Service),核心步骤:

  • 向量数据库准备:支持 Redis、ES 等,以 RedisStack 为例:
    • 安装:需禁用本地原有 Redis 避免端口冲突,访问localhost:8001管理(用户名 default,密码 123456)。
    • 依赖与配置:引入相关依赖,配置连接;若项目已用 Redis,需禁用 RedisVectorStoreAutoConfiguration 避免冲突。
  • 文档嵌入(Embedding):VectorStore 对象结合阿里灵积 EmbeddingModel(可替换其他厂家模型),调用vectorStore.add(splitDocuments)将文档转为向量存入数据库。
  • 文档查询:调用vectorStore.similaritySearch(query)时,先将用户提问转为向量,与数据库向量计算余弦相似度获取相关文档。
  • 生效配置:添加QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults()),使用户提问时先查询数据库,拼接相关文档后再让模型生成答案。

六、项目难点与解决思路

难点解决方法
获取当前航班信息(需用户提供姓名、航班号)预设提示词,强制大模型在操作前检查历史记录,缺失则询问用户关键信息
大模型未等用户 “确认” 就执行退订降低 Temperature 参数(按客服场景 0.3-0.6 配置),提升模型可控性
业务知识不足导致回答不准确引入 RAG 技术,外挂知识库(如 Terms of Service),通过向量数据库补充信息
SSE 长连接重复请求加入日志拦截器与 Advisor,通过 chatClientBuilder 注册 Advisor 解决

所有文章版权皆归博主所有,仅供学习参考。