零、效果
一、启动项目
1.0、前置条件
- Java 17+
- Node.js 18+
- 获取 API key
- 具体文档:获取APP ID和Workspace ID_大模型服务平台百炼(Model Studio)-阿里云帮助中心
1.1、下载代码
Github地址:https://github.com/springaialibaba/spring-ai-alibaba-examples/tree/main/spring-ai-alibaba-agent-example/playground-flight-booking
1.2、启动前端
参看 /frontend/README.md 文件说明
启动成功
打开本地页面
提示报错,是因为后端未启动!
1.3、启动后端
修改图中端口号和 api key
修改端口号,是因为报错的端口是9001,这里设置的是9000,应该是前端的5173端口占用导致吧;
api key如何获取,上面前置条件有链接,免费申请;
1.4、项目启动成功
原来名字太广告了,随机ai了几个名字。
二、项目介绍
2.1、架构图
2.2、核心功能
使用 Spring AI Alibaba 框架开发一个智能机票助手,它可以帮助消费者完成机票预定、问题解答、机票改签、取消等动作,具体要求为:
- 基于 AI 大模型与用户对话,理解用户自然语言表达的需求;
- 支持多轮连续对话,能在上下文中理解用户意图;
- 理解机票操作相关的术语与规范并严格遵守,如航空法规、退改签规则等;
- 在必要时可调用工具辅助完成任务;
2.3、Spring AI
智能机票助手的核心就是 Spring AI,也可以叫做智能体,使应用可以与 AI 交互,由 AI 帮助应用理解用户问题并为用户做决策,它包含有两个API&四个核心功能,正如架构图中所画:
2.3.1、两个API
- Chat Model:对话模型
- Vector Store:向量存储
2.3.2、四个核心功能
- System Prompt :系统提示词
- Conversation Memory: 对话记忆
- **RAG:**检索增强生成
- Function Calling:工具/函数调用
三、两个API & 四个核心功能
3.0、ChatClient
更多介绍参看官网介绍:ChatClient
**ChatClient **提供了与 AI 模型通信的 Fluent API,它支持同步和反应式(Reactive)编程模型。
ChatClient 类似于应用程序开发中的服务层,它为应用程序直接提供 AI 服务
,开发者可以使用 ChatClient Fluent API 快速完成一整套 AI 交互流程的组装。
包括一些基础功能,如:
- 定制和组装模型的输入(Prompt)
- 格式化解析模型的输出(Structured Output)
- 调整模型交互参数(ChatOptions)
还支持更多高级功能:
- 对话记忆(Chat Memory)
- 工具/函数调用(Function Calling)
- 检索增强生成(RAG)
- 日志记录(SimpleLoggerAdvisor)
3.0.1、项目代码
3.1、Chat Model(对话模型)
更多介绍参看官网介绍:对话模型(Chat Model)
对话模型(Chat Model)接收一系列消息(Message)作为输入,与模型 LLM 服务进行交互,并接收返回的聊天消息(Chat Message)作为输出。
Spring AI Alibaba 复用了 Spring AI 抽象的 Model API,并与通义系列大模型服务进行适配(如通义千问、通义万相等),目前支持纯文本聊天、文生图、文生语音、语音转文本等。以下是框架定义的几个核心 API:
- ChatModel,文本聊天交互模型,支持纯文本格式作为输入,并将模型的输出以格式化文本形式返回。
- ImageModel,接收用户文本输入,并将模型生成的图片作为输出返回。
- AudioModel,接收用户文本输入,并将模型合成的语音作为输出返回。
3.2、System Prompt (系统提示词)
更多介绍参看官网介绍:提示词 (Prompt)
Prompt 是引导 AI 模型生成特定输出的输入格式,Prompt 的设计和措辞会显著影响模型的响应。
Prompt 中的主要角色(Role)包括:
- 系统角色(System Role):指导 AI 的行为和响应方式,设置 AI 如何解释和回复输入的参数或规则。这类似于在发起对话之前向 AI 提供说明。
- 用户角色(User Role):代表用户的输入 - 他们向 AI 提出的问题、命令或陈述。这个角色至关重要,因为它构成了 AI 响应的基础。
- 助手角色(Assistant Role):AI 对用户输入的响应。这不仅仅是一个答案或反应,它对于保持对话的流畅性至关重要。通过跟踪 AI 之前的响应(其“助手角色”消息),系统可确保连贯且上下文相关的交互。助手消息也可能包含功能工具调用请求信息。它就像 AI 中的一个特殊功能,在需要执行特定功能(例如计算、获取数据或不仅仅是说话)时使用。
- 工具/功能角色(Tool/Function Role):工具/功能角色专注于响应工具调用助手消息返回附加信息。
Message 接口的各种实现对应 AI 模型可以处理的不同类别的消息。模型根据对话角色区分消息类别。
3.2.1、项目代码
3.3、Chat Memory(对话记忆)
更多介绍参看官网介绍:对话记忆
”大模型的对话记忆”这一概念,根植于人工智能与自然语言处理领域,特别是针对具有深度学习能力的大型语言模型而言,它指的是模型在与用户进行交互式对话过程中,能够追踪、理解并利用先前对话上下文的能力。
Spring AI Alibaba 支持基于Chat Memory的对话记忆,也就是不需要调用显示的记录每一轮的对话历史。
当然,开发者也可以自行实现ChatMemory基于类似于文件、Redis等方式进行上下文内容的存储和记录。
3.3.1、项目代码
定义ChatMemory
注入ChatMemory
3.4、Function Calling (工具/函数调用)
更多介绍参看官网介绍:工具(Function Calling)
“工具(Tool)”或“功能调用(Function Calling)”允许大型语言模型(LLM)在必要时调用一个或多个可用的工具,这些工具通常由开发者定义。
Spring AI 使这一过程变得简单,只需定义一个返回 <font style="color:rgb(53, 56, 65);">java.util.Function</font>
的 @Bean 定义,并在调用 ChatModel 时将 bean 名称作为选项进行注册。在底层,Spring 会用适当的适配器代码包装你的 POJO(即函数),以便与 AI 模型进行交互,免去了编写繁琐的样板代码。
3.4.1、项目代码
Function 定义
Function 注入
3.5、RAG(检索增强生成)
更多介绍参看官网介绍:核心概念
检索增强生成 (RAG) 是一种技术,它结合了信息检索模型与文本生成模型。其中,检索模型负责从数据源中获取相关信息,而生成模型则基于检索到的信息来生成更加精确且富含背景知识的回答。
该方法涉及批处理式的编程模型,其中涉及到:从文档中读取非结构化数据、对其进行转换、然后将其写入矢量数据库。从高层次上讲,这是一个 ETL(提取、转换和加载)管道。矢量数据库则用于 RAG 技术的检索部分。
假设您已将数据加载到中 <font style="color:rgb(53, 56, 65);">VectorStore</font>
,则可以通过向 <font style="color:rgb(53, 56, 65);">ChatClient</font>
提供 <font style="color:rgb(53, 56, 65);">QuestionAnswerAdvisor</font>
实例来执行检索增强生成 (RAG) 。
3.5.1、项目代码
RAG 定义
3.6、Vector Store(向量存储)
更多介绍参看官网介绍:向量存储(Vector Store)
向量存储(<font style="color:rgb(53, 56, 65);">VectorStore</font>
)是一种用于存储和检索高维向量数据的数据库或存储解决方案,它特别适用于处理那些经过嵌入模型转化后的数据。在 VectorStore 中,查询与传统关系数据库不同。它们执行相似性搜索,而不是精确匹配。当给定一个向量作为查询时,VectorStore 返回与查询向量“相似”的向量。
3.6.1、项目代码
初始化向量数据库:VectorStore
自定义数据
进行配置
四、功能新增
在原有项目中增加新增功能,便于更好的理解项目逻辑。
4.1、退订或更改前新增用户确认
4.1.1、原有逻辑
4.1.2、改造后逻辑
4.1.3、实现步骤
将原有提示词进行修改,改为“在更改或退订之前,请先获取预订信息并且⽤户确定信息。”
4.2、新增机票预订功能
4.2.1、实现效果
4.2.2、代码实现
chatClient 进行注册 预定逻辑
定义 Function 接口
预定的具体实现逻辑
五、小天有话说
这个项目目前只是一个简单的演示(Demo),在实际应用中我们会进一步完善和优化,包括但不限于以下方面:
- 向量数据可以存储在 PGvector、RedisVectorStore 或其他持久化库中;
- 增强对项目中异常情况的处理机制;
- 优化高并发场景下的性能表现;
- 在更多应用场景下对提示词进行优化;
- 以及其他方面的持续改进。
尽管只是一个Demo,它已经很好地展示了 Spring AI Alibaba 在构建智能体应用方面的强大潜力。我们相信,未来会有更多的发展空间和可能性等着我们去探索!
题外话
随着人工智能技术的不断进步,它在软件开发和项目改造中的作用越来越重要。通过引入AI技术,传统项目能够实现智能化升级,不仅提高了效率、降低了成本,还增强了项目的整体竞争力。
在智能化改造的过程中,AI可以在以下几个方面发挥积极作用:
- 需求分析:AI通过对大量数据进行深度分析,帮助我们更精准地理解用户需求,为项目改进提供有力指导。
- 设计优化:借助AI的支持,在设计阶段可以利用模拟与预测功能来辅助设计师们创造更加优秀的方案。
- 开发提速:AI能够参与编码过程,自动生成部分代码,这不仅能加快开发速度,还能减少人为错误。
- 质量保证:通过采用AI驱动的自动化测试工具,我们可以更快地识别并解决潜在问题,确保产品质量达到高标准。
- 智能运维:一旦项目上线,AI将继续发挥作用,通过对系统的持续监控及故障预警来提升运维效率。
除此之外,人工智能对于项目的影响远不止于技术层面,还包括了对项目管理方式、决策流程乃至整个业务模式的深刻变革。具体来说:
- 战略规划:基于AI的数据分析能力,企业能制定出更为科学合理的项目战略,更好地把握市场趋势、了解竞争对手情况,并据此调整自身定位与发展路径。
- 资源调配:利用AI进行资源管理与调度,有助于实现人力、物力、财力等各类资源的最佳配置,进而提高使用效率。
- 风险管理:AI可以通过学习历史案例并结合实时监测信息,提前预知可能面临的风险点,并协助团队制定有效的应对措施。
- 决策辅助:在整个项目周期内,AI提供的数据分析服务可以帮助管理层做出更快捷准确的选择。
- 增强用户体验:深入分析客户反馈及市场变化趋势后,AI使我们能够更贴合实际需要地调整产品或服务,从而赢得更高的满意度与忠诚度。
- 激发创新活力:最后但同样重要的是,AI技术本身的发展也推动着新商业模式与创意理念的诞生,鼓励我们在探索未知领域时保持领先优势。
参考
官网地址:https://java2ai.com/docs/dev/practices/playground-flight-booking/
B站机构讲解视频:https://www.bilibili.com/video/BV1RbU5YFEC5