为何选择Spring AI Alibaba开发智能客服平台?

news/2024/11/14 23:10:56/文章来源:https://www.cnblogs.com/JavaEdge/p/18537253

0 前言

本文来看如何使用Spring AI Alibaba构建Agent应用。

1 需求

智能客服平台,可帮助用户完成机票预定、问题解答、机票改签、取消等动作,具体要求:

  • 基于 AI 大模型与用户对话,理解用户自然语言表达的需求
  • 支持多轮连续对话,能在上下文中理解用户意图
  • 理解机票操作相关的术语与规范并严格遵守,如航空法规、退改签规则等
  • 在必要时可调用工具辅助完成任务

2 技术架构

2.1 接入AI大模型

不过是用 Spring Boot 开发普通 Java 应用,要能持续接收用户提问,解决机票相关问题,叫它Agent应用是因为这应用可与 AI 交互,由 AI 帮助应用理解用户问题并为用户做决策,简化分解后的架构:

2.2 利用RAG增加机票退改签规则

应用由 AI 模型理解用户问题,决策下一步动作、驱动业务流程。但任一通用大模型都能解决机票相关问题吗?依赖模型的决策是可靠的吗?如有用户提出机票改签的诉求,模型一定能很好理解用户意图,没疑问。但:

  • 它咋知当前用户符不符合退票规则?毕竟每个航空公司改签规则都不同
  • 它咋知改签手续费的规定?在这样一个可能带来经济纠纷、法律风险的应用场景下,AI模型必须要知道改签规则的所有细节,并逐条确认用户信息复合规则后,才能最终作出是否改签的决策

显然,单纯依赖 AI 模型本身不能满足需求,就要用到RAG模式。通过 RAG 将机票退改签相关领域知识输入给应用和 AI 模型,让 AI 结合这些规则与要求辅助决策,增加 RAG 后的架构:

有了RAG,应用才真正成为智能化的机票问题专家,就像一个经公司业务培训的客服代表,既能人性化与用户对话,又能根据规则引导用户行为。

2.3 使用Function Calling执行业务动作

AI Agent可帮应用理解用户需求并决策,但没法代替应用完成决策执行,决策执行还是要由应用自己完成,这点和传统应用无区别,不论智能化的还是预先编排好的应用,都是要由应用本身去调用函数修改数据库记录实现数据持久化。

通过 Spring AI 框架,可将模型的决策转换为对某个具体函数的调用,从而完成机票的最终改签或者退票动作,将用户数据写入数据库,即Function Calling模式。

2.4 使用 Chat Memory 增加多轮对话能力

大模型是无状态的,它看到的只有当前这轮对话的内容。因此若要支持多轮对话效果,需应用每次都将之前对话上下文保留,并与最新问题一并作为 prompt 发送给模型。这时,我们可以利用 Spring AI Alibaba 提供的内置 Conversation Memory 支持,方便的维护对话上下文。

至此,让我们总结在这个智能客服平台应用使用到的

3 Spring AI Alibaba 核心能力

  1. 基本模型对话能力,通过 Chat Model API 与通义模型交互
  2. Prompt 管理能力
  3. Chat Memory 聊天记忆,支持多轮对话
  4. RAG、Vector Store,机票预定、改签、退票等相关规则

4 使用 ChatClient 完成编码

Spring AI Alibaba 不止提供了以上原子能力抽象,还提供了高阶 “智能体” API 抽象 ChatClient,让我们可以非常方便的使用流式 Fluent API 把多个组件组装起来,成为一个AI Agent。

具体使用:

this.chatClient = modelBuilder.defaultSystem("""您是“Funnair”航空公司的客户聊天支持代理。请以友好、乐于助人且愉快的方式来回复。您正在通过在线聊天系统与客户互动。在提供有关预订或取消预订的信息之前,您必须始终从用户处获取以下信息:预订号、客户姓名。在询问用户之前,请检查消息历史记录以获取此信息。在更改预订之前,您必须确保条款允许这样做。如果更改需要收费,您必须在继续之前征得用户同意。使用提供的功能获取预订详细信息、更改预订和取消预订。如果需要,可以调用相应函数调用完成辅助动作。请讲中文。今天的日期是 {current_date}.""").defaultAdvisors(new PromptChatMemoryAdvisor(chatMemory), // Chat Memorynew VectorStoreChatMemoryAdvisor(vectorStore)),new QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults()), // RAGnew LoggingAdvisor()).defaultFunctions("getBookingDetails", "changeBooking", "cancelBooking") // FUNCTION CALLING.build();

这样ChatClient就为我们屏蔽了所有与大模型交互的细节,只需要把ChatClient注入常规的 Spring Bean 就可以为我们的机票应用加入智能化能力了。

5 运行效果

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化
  • 活动&券等营销中台建设
  • 交易平台及数据中台等架构和开发设计
  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
  • LLM Agent应用开发
  • 区块链应用开发
  • 大数据开发挖掘经验
  • 推荐系统项目

目前主攻市级软件项目设计、构建服务全社会的应用系统。

参考:

  • 编程严选网

本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/829509.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024-2025-1 20241307《计算机基础与程序设计》第七周学习总结

作业信息这个作业属于哪个课程 (2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 (2024-2025-1计算机基础与程序设计第七周作业)这个作业的目标作业正文 (2024-2025-1 学号20241307《计算机基础与程序设计》第七周学习总结)教材学习内容总结 《计算机科学概论》第七版…

思通数科AI平台在智慧城市地面垃圾分类中的项目案例分享

一、系统概述 在当今的城市环境管理中,垃圾分类与识别已成为推动环保与资源回收的重要手段。然而,传统的人工垃圾分类方法耗时、效率低,且容易出错,严重制约了垃圾处理的精细化与可持续发展。思通数科的AI平台专注于解决这一行业痛点。我们的系统通过深度学习和计算机视觉技…

用溯流仪见证伏特台风

用溯流仪见证伏特台风 新知识:wayback machine(网站时光机)题目是一个视频链接,需要找到视频中的报告,但是那个时候的报告已经被篡改了有报告的名字,去搜索因为信息已经被改了,所以需要找到以前的版本 使用网站时光机找到这个报告在4月15号的版本下载文件,并把封底的图…

51单片机实现数码管显示

51单片机实现数码管显示 本次的实现效果方式采用模拟进行,芯片为AT89C51,开发软件为keil5,proteus 上代码 代码如下: #include <reg51.h>void delay(unsigned int i);//延时函数unsigned int i=0;void main() {unsigned char button=0,flag=0;unsigned char digitCodes[…

Linux系统下Makefile,出现make: Nothing to be done for ex19.c.的解决办法

如图所示,在做练习19时出现“make: Nothing to be done for ex19.c.”的错误解决方法:如图所示,先make clean,再make 原因:若文件没有改动,.o文件也没有改动,则Linux认为,我不需要对所有的文件做任何事情。 参考资料:https://blog.csdn.net/gwzz1228/article/details/…

2024-2025-1-《计算机基础与程序设计》20241313刘鸣宇

作业信息 这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计) 这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业) 这个作业的目标 <写上具体方面> 作业正文 ... 本博客链接 教材学习内容总结 《计算…

基于Java+SpringBoot心理测评心理测试系统功能实现十

技术点:SpringBoot+SpringDataJPA+Mysql+Freemaker+Bootstrap+JS+CSS+HTML 部分系统功能角色信息控制器Controller、用户信息控制器Controller、咨询师信息详情控制器Controller、心理测试信息控制器Controller、回顾心理测试试卷信息控制器Controller 免费学习:猿来入此免费…

实验三c

任务一 实验代码 button.hpp1 #pragma once2 3 #include <iostream>4 #include <string>5 6 using std::string;7 using std::cout;8 9 // 按钮类 10 class Button { 11 public: 12 Button(const string &text); 13 string get_label() const; 14 …

基于Java+SpringBoot心理测评心理测试系统功能实现九

技术点:SpringBoot+SpringDataJPA+Mysql+Freemaker+Bootstrap+JS+CSS+HTML 三、部分系统功能咨询师信息控制器Controller、公告信息控制器Controller、试卷测试信息详情控制器Controller、试题类型信息控制器Controller、试题信息控制器Controller 免费下载:猿来入此一、前言…

氧化铝

趋势还没完 至少还有3-5

多校A层冲刺NOIP2024模拟赛20

你叫什么名字?简评:新拉的💩,热乎的。 星际联邦 简要题意 两个点\(i,j(1\le i<j\le n,n\le 10^5)\)之间连边的代价是\(a_j-a_i(\forall i\in [1,n],-300000\le a_i\le 300000)\),求最小生成树。 赛时经历 先打了一个假的(其实是不完整)贪心,然后过掉了小样例,被大…