admin管理员组文章数量:1130349
概述
在人工智能浪潮下,Java 程序员迎来了新的机遇与挑战。SpringAI 和阿里巴巴 AI(SpringAiAlibaba) 的推出,为我们打开了通往智能应用开发的大门。为了更好地学习和掌握 Spring AI Alibaba 项目的搭建与使用,我将通过本文详细记录整个学习过程。本次主要聚焦于多轮对话功能的实现,后续会逐步增加更多实用内容,也欢迎大家提出宝贵意见,共同完善。
依赖
- 开发工具:IntelliJ IDEA(推荐使用最新版本,以获得更好的兼容性和功能支持)
- JDK:17 及以上版本(可利用 IDEA 自带的 JDK,安装便捷且配置简单)
- 阿里云百炼平台:阿里百炼平台(提供强大的 AI 模型支持和训练服务)
- 如果大家在基础环境搭建方面遇到困难,可以参考我之前分享的一篇文章,里面详细介绍了搭建步骤,点击即可查看:学习 Spring AI Alibaba项目(一):搭建Hello world
流程:
配置 ChatMemory
在 Spring Boot 启动类 Application 中添加如下代码,用于创建一个基于内存的聊天模型,该模型将用于存储和管理多轮对话的上下文信息,确保对话的连贯性和逻辑性:
@SpringBootApplication
public class HelloSpringAiApplication {
public static void main(String[] args) {
SpringApplication.run(HelloSpringAiApplication.class, args);
}
/**
* 创建一个基于内存的聊天模型
*/
@Bean
public ChatMemory chatMemory() {
return new InMemoryChatMemory();
}
}
创建controller文件 : ChatMemoryController
这里面注意这里可以设置用户ID等信息,咱们也就可以根据这个ID设置用户ID,以及会话ID,确保上下文连贯啦
// 调用 chatClient.prompt() 方法开始构建聊天请求
ChatClient.CallResponseSpec response = chatClient.prompt()
// 调用 .user(input) 方法,将用户输入作为聊天请求的内容
.user(input)
// 调用 .advisors 方法,传入一个 Lambda 表达式,配置聊天顾问的参数
.advisors(spec -> spec.param(AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY, userId)
// 继续在 Lambda 表达式中调用 .param 方法,设置聊天记忆的检索大小为 100
.param(AbstractChatMemoryAdvisor.CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100))
// 调用 .call() 方法执行聊天请求并获取响应规格
.call();
全文如下:
@Slf4j
@RestController
@RequestMapping("/ai/v1")
public class ChatMemoryController {
private final ChatClient chatClient;
// 构造器中注入 ChatModel(底层与 AI 模型交互)和 ChatMemory(对话记忆实现)
public ChatMemoryController(ChatModel chatModel, ChatMemory chatMemory) {
// 使用 ChatClient.Builder 构建 ChatClient,同时加入对话记忆 Advisor
this.chatClient = ChatClient.builder(chatModel)
.defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory))
.build();
}
/**
* 多轮对话接口
* 每次调用时自动加载和更新该会话的历史记录。
*/
@GetMapping("/multi/chat")
public String chat(@RequestParam(value = "userId",defaultValue = "1001") String userId,
@RequestParam("input") String input) {
log.info("/multi/chat input: [{}]", input);
// 调用 chatClient.prompt() 方法开始构建聊天请求
ChatClient.CallResponseSpec response = chatClient.prompt()
// 调用 .user(input) 方法,将用户输入作为聊天请求的内容
.user(input)
// 调用 .advisors 方法,传入一个 Lambda 表达式,配置聊天顾问的参数
.advisors(spec -> spec.param(AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY, userId)
// 继续在 Lambda 表达式中调用 .param 方法,设置聊天记忆的检索大小为 100
.param(AbstractChatMemoryAdvisor.CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100))
// 调用 .call() 方法执行聊天请求并获取响应规格
.call();
return response.content();
}
}
-
通过以上代码,我们成功创建了一个对外接口:
http://127.0.0.1:8080/ai/v1/multi/chat。该接口接受两个参数:- userId:代表用户 ID,在实际项目中,建议将其设置为用户 ID 与会话 ID 的组合,以便更精准地区分不同用户的对话。
- input:用户输入的问题或消息。
激动人心的时刻
我们来看看效果吧,马上启动服务,然后,就可以调用接口查看效果了
为了测试是否可以连续对话,我们继续提问这些诗人的出生地
看样子确实可以连续提问了,那么我们再验证下,换个用户来提问,是否会“串线”呢?我们把用户1001改为1002试试
结果显示,AI 并未出现“串线”现象,对于新用户的提问,它无法获取之前用户的对话信息,只能要求我们提供更详细的资料,这证明了我们的多轮对话系统在不同用户间是相互独立且安全的。
补充点内容
本次分享主要聚焦于多轮对话功能的实现,帮助大家快速搭建起基本的对话系统。下一篇内容,将研究实现“可持久化的多轮对话”,让对话记录能够长期保存,进一步提升项目的实用性和用户体验。相信这一功能会对大家的实际开发工作带来更大的帮助,让我们一起期待吧!
如果你在学习过程中有任何疑问、建议,或者想要交流更多关于 Spring AI Alibaba 项目的心得,欢迎在评论区留言。你的支持和反馈,将是我不断前进的动力!
概述
在人工智能浪潮下,Java 程序员迎来了新的机遇与挑战。SpringAI 和阿里巴巴 AI(SpringAiAlibaba) 的推出,为我们打开了通往智能应用开发的大门。为了更好地学习和掌握 Spring AI Alibaba 项目的搭建与使用,我将通过本文详细记录整个学习过程。本次主要聚焦于多轮对话功能的实现,后续会逐步增加更多实用内容,也欢迎大家提出宝贵意见,共同完善。
依赖
- 开发工具:IntelliJ IDEA(推荐使用最新版本,以获得更好的兼容性和功能支持)
- JDK:17 及以上版本(可利用 IDEA 自带的 JDK,安装便捷且配置简单)
- 阿里云百炼平台:阿里百炼平台(提供强大的 AI 模型支持和训练服务)
- 如果大家在基础环境搭建方面遇到困难,可以参考我之前分享的一篇文章,里面详细介绍了搭建步骤,点击即可查看:学习 Spring AI Alibaba项目(一):搭建Hello world
流程:
配置 ChatMemory
在 Spring Boot 启动类 Application 中添加如下代码,用于创建一个基于内存的聊天模型,该模型将用于存储和管理多轮对话的上下文信息,确保对话的连贯性和逻辑性:
@SpringBootApplication
public class HelloSpringAiApplication {
public static void main(String[] args) {
SpringApplication.run(HelloSpringAiApplication.class, args);
}
/**
* 创建一个基于内存的聊天模型
*/
@Bean
public ChatMemory chatMemory() {
return new InMemoryChatMemory();
}
}
创建controller文件 : ChatMemoryController
这里面注意这里可以设置用户ID等信息,咱们也就可以根据这个ID设置用户ID,以及会话ID,确保上下文连贯啦
// 调用 chatClient.prompt() 方法开始构建聊天请求
ChatClient.CallResponseSpec response = chatClient.prompt()
// 调用 .user(input) 方法,将用户输入作为聊天请求的内容
.user(input)
// 调用 .advisors 方法,传入一个 Lambda 表达式,配置聊天顾问的参数
.advisors(spec -> spec.param(AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY, userId)
// 继续在 Lambda 表达式中调用 .param 方法,设置聊天记忆的检索大小为 100
.param(AbstractChatMemoryAdvisor.CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100))
// 调用 .call() 方法执行聊天请求并获取响应规格
.call();
全文如下:
@Slf4j
@RestController
@RequestMapping("/ai/v1")
public class ChatMemoryController {
private final ChatClient chatClient;
// 构造器中注入 ChatModel(底层与 AI 模型交互)和 ChatMemory(对话记忆实现)
public ChatMemoryController(ChatModel chatModel, ChatMemory chatMemory) {
// 使用 ChatClient.Builder 构建 ChatClient,同时加入对话记忆 Advisor
this.chatClient = ChatClient.builder(chatModel)
.defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory))
.build();
}
/**
* 多轮对话接口
* 每次调用时自动加载和更新该会话的历史记录。
*/
@GetMapping("/multi/chat")
public String chat(@RequestParam(value = "userId",defaultValue = "1001") String userId,
@RequestParam("input") String input) {
log.info("/multi/chat input: [{}]", input);
// 调用 chatClient.prompt() 方法开始构建聊天请求
ChatClient.CallResponseSpec response = chatClient.prompt()
// 调用 .user(input) 方法,将用户输入作为聊天请求的内容
.user(input)
// 调用 .advisors 方法,传入一个 Lambda 表达式,配置聊天顾问的参数
.advisors(spec -> spec.param(AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY, userId)
// 继续在 Lambda 表达式中调用 .param 方法,设置聊天记忆的检索大小为 100
.param(AbstractChatMemoryAdvisor.CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100))
// 调用 .call() 方法执行聊天请求并获取响应规格
.call();
return response.content();
}
}
-
通过以上代码,我们成功创建了一个对外接口:
http://127.0.0.1:8080/ai/v1/multi/chat。该接口接受两个参数:- userId:代表用户 ID,在实际项目中,建议将其设置为用户 ID 与会话 ID 的组合,以便更精准地区分不同用户的对话。
- input:用户输入的问题或消息。
激动人心的时刻
我们来看看效果吧,马上启动服务,然后,就可以调用接口查看效果了
为了测试是否可以连续对话,我们继续提问这些诗人的出生地
看样子确实可以连续提问了,那么我们再验证下,换个用户来提问,是否会“串线”呢?我们把用户1001改为1002试试
结果显示,AI 并未出现“串线”现象,对于新用户的提问,它无法获取之前用户的对话信息,只能要求我们提供更详细的资料,这证明了我们的多轮对话系统在不同用户间是相互独立且安全的。
补充点内容
本次分享主要聚焦于多轮对话功能的实现,帮助大家快速搭建起基本的对话系统。下一篇内容,将研究实现“可持久化的多轮对话”,让对话记录能够长期保存,进一步提升项目的实用性和用户体验。相信这一功能会对大家的实际开发工作带来更大的帮助,让我们一起期待吧!
如果你在学习过程中有任何疑问、建议,或者想要交流更多关于 Spring AI Alibaba 项目的心得,欢迎在评论区留言。你的支持和反馈,将是我不断前进的动力!
版权声明:本文标题:一起学习 Spring AI Alibaba项目(二):多轮对话 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/jiaocheng/1754605925a2707800.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论