news 2026/4/18 5:22:27

使用SpringAI实现对话机器人

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用SpringAI实现对话机器人

一、spring-ai实现对话机器人

step1.引入spring-ai的依赖管理项

<dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

在项目pom.xml中添加spring-ai的版本信息:

<spring-ai.version>1.1.2</spring-ai.version>

step2.引入模型对应的依赖
如:引入spring-ai-ollama的依赖:

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId></dependency>

SpringAI完全适配了SpringBoot的自动装配功能,而且给不同的大模型提供了不同的starter,比如:

模型/平台starter
Anthropic<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-anthropic-spring-boot-starter</artifactId> </dependency>
Azure OpenAI<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId> </dependency>
DeepSeek<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency>
Hugging Face<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-huggingface-spring-boot-starter</artifactId> </dependency>
Ollama<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-ollama-spring-boot-starter</artifactId> </dependency>
OpenAI<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency>

step3.配置模型

以ollama为例,我们将application.properties修改为application.yaml,然后添加下面的内容:

spring: application: name: ai-demo ai: ollama: base-url: http://localhost:11434 # ollama服务地址, 这就是默认值 chat: model: deepseek-r1:7b # 模型名称 options: temperature: 0.8 # 模型温度,影响模型生成结果的随机性,越小越稳定

以openai为例,添加下面的内容:

spring: ai: openai: base-url: https://dashscope.aliyuncs.com/compatible-mode api-key: ${OPENAI_API_KEY} chat: options: model: qwen-max-latest #模型名称 temperature: 0.8 #模型温度,值越大,输出结果越随机

step4.配置客户端
ChatClient中封装了与AI大模型对话的各种API,同时支持同步式或响应式交互。

不过,在使用之前,首先我们需要声明一个ChatClient。
在config包下新建一个Configuration类:

importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;importorg.springframework.ai.ollama.OllamaChatModel;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassCommonConfiguration{// 注意参数中的model就是使用的模型,这里用了Ollama,也可以选择OpenAIChatModel@BeanpublicChatClientchatClient(OllamaChatModelmodel){returnChatClient.builder(model)// 创建ChatClient工厂.build();// 构建ChatClient实例}}

step5. 同步调用

我们定义一个Controller,在其中接收用户发送的提示词,然后把提示词发送给大模型,交给大模型处理,拿到结果后返回。

importlombok.RequiredArgsConstructor;importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;@RequiredArgsConstructor@RestController@RequestMapping("/ai")publicclassChatController{privatefinalChatClientchatClient;@RequestMapping("/chat")publicStringchat(@RequestParam(defaultValue="讲个笑话")Stringprompt){returnchatClient.prompt(prompt)// 传入user提示词.call()// 同步请求,会等待AI全部输出完才返回结果.content();//返回响应内容}}

注意,基于call()方法的调用属于同步调用,需要所有响应结果全部返回后才能返回给前端。

step6.流式调用

在SpringAI中使用了WebFlux技术实现流式调用。

修改ChatController中的chat方法:

// 注意看返回值,是Flux<String>,也就是流式结果,另外需要设定响应类型和编码,不然前端会乱码@RequestMapping(value="/chat",produces="text/html;charset=UTF-8")publicFlux<String>chat(@RequestParam(defaultValue="讲个笑话")Stringprompt){returnchatClient.prompt(prompt).stream()// 流式调用.content();}

step7.System设定
在SpringAI中,设置System信息非常方便,不需要在每次发送时封装到Message,而是创建ChatClient时指定即可。
我们修改Configuration中的代码,给ChatClient设定默认的System信息:

@BeanpublicChatClientchatClient(OllamaChatModelmodel){returnChatClient.builder(model)// 创建ChatClient工厂实例.defaultSystem("").defaultAdvisors(newSimpleLoggerAdvisor()).build();// 构建ChatClient实例}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 2:07:35

JiyuTrainer支持自定义Loss函数:深度集成PyTorch

JiyuTrainer支持自定义Loss函数&#xff1a;深度集成PyTorch 在当前AI模型日益复杂的背景下&#xff0c;一个看似微小的设计选择——损失函数的灵活性——往往能决定整个项目的成败。比如&#xff0c;在医疗影像分割任务中&#xff0c;如果只用标准交叉熵损失&#xff0c;模型可…

作者头像 李华
网站建设 2026/4/18 2:07:29

【毕业设计】基于SpringBoot的高校综合医疗健康服务管理系统设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/18 2:04:41

AI初创团队必看:用PyTorch镜像快速构建MLOps流水线

AI初创团队必看&#xff1a;用PyTorch镜像快速构建MLOps流水线 在AI产品迭代节奏越来越快的今天&#xff0c;一个现实问题摆在许多初创团队面前&#xff1a;为什么我们的算法工程师花了整整三天才跑通第一个训练脚本&#xff1f;答案往往不是模型写错了&#xff0c;而是环境没配…

作者头像 李华
网站建设 2026/4/18 2:07:30

HuggingFace Dataset加载本地数据:配合PyTorch训练

HuggingFace Dataset加载本地数据&#xff1a;配合PyTorch训练 在现代深度学习项目中&#xff0c;一个常见的挑战是&#xff1a;如何在保证高性能的同时&#xff0c;快速、安全地将本地数据接入模型训练流程&#xff1f;尤其是在企业级NLP场景下&#xff0c;数据往往不能上传至…

作者头像 李华
网站建设 2026/4/18 2:06:34

清华镜像站提供PyTorch历史版本归档

清华镜像站提供 PyTorch 历史版本归档&#xff1a;重塑 AI 开发环境的稳定性与可复现性 在深度学习项目开发中&#xff0c;你是否曾遇到过这样的场景&#xff1f;一篇论文代码标注“基于 PyTorch 1.12 CUDA 11.6”&#xff0c;但当你满怀期待地运行时&#xff0c;却因本地环境…

作者头像 李华
网站建设 2026/4/18 2:06:28

语义分割:Unet、Unet++、Swin UNet等变体模型网络及算法开发部署

语义分割图像分割Unet Unet swin unet transformer 等变体模型网络 语义分割模型改进&#xff0c;语义分割模型优化 Unet Unet DeepLab TransUnet SwinUnet等 语义分割paddleseg各算法开发以及落地&#xff0c;c&#xff0c;c#部署最近在医疗影像分割的项目里折腾了一圈&#x…

作者头像 李华