本地Ollama+Spring AI alibaba智能客服(飞机票预定示例Demo)Mac版
前言:之前了解到很多AI智能体项目都是利用Python开发的,本人想利用Java进行开发,于是发现了Spring AI Alibaba框架,再加上本地是使用Ollama安装了llama3.2:3b,为此就结合本地模型,跑了一下官网的飞机票预订的智能体示例,其中也遇到了一些问题,特此记录一下。
一、简介:Spring AI alibaba
Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。想要了解更多请参考Spring AI alibaba官网。
二、核心概念
- 模型(比如:DeepSeek R1、ChatGPT3等)
- 提示词(比如:设定系统角色告知对话的背景)
- 提示词模版(比如:今天的日期是 {current_date}),利用了 {current_date}进行占位
- 嵌入(比如:将文本文字进行向量化表示)
- token(将一句话或一段文本进行转换为token)
- 结构化输出(在提示词中要求返回固定JSON)
三、Demo实战
3.1环境要求
1、本地要安装Ollama、下载模型llama3.2:3b
ollama run llama3.2:3b
2、下载JDK17
3、配置Maven
3.2目录结构
3.3 代码仓库
3.4 核心逻辑
四、测试结果
4.1对话查询详情
#查询预定信息
GET 127.0.0.1:8080/api/bookings
#对话
POST 127.0.0.1:8080/api/assistant/chat?chatId=1&userMessage=104,王通义,预定详情
4.2取消预定飞机票
#对话
POST 127.0.0.1:8080/api/assistant/chat?chatId=4&userMessage=取消预定
#对话
POST 127.0.0.1:8080/api/assistant/chat?chatId=4&userMessage=yes
#查询预定信息
GET 127.0.0.1:8080/api/bookings
4.3查看运行日志
注:可以看到对话过程中有调用工具
五、QA
Q:对话的controller中不知道为啥不能使用流式返回,如果使用流式返回的话就好像不能去调用执行工具?
A:
public String chat(String chatId, String userMessageContent) {
return this.chatClient.prompt()
.system(s -> s.param("current_date", LocalDate.now().toString()))
.user(userMessageContent)
.advisors(a -> a
.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)
.param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100)
)
.call()
.content();
}