当前位置: 首页 > news >正文

【SpringAI 10】对话机器人快速入门


结合之前我们讨论过的低延迟大模型推理网关、Netty高性能网络通信的技术背景,以下是SpringAI对话机器人的快速入门全流程,适配Spring Boot生态,可快速搭建出具备上下文记忆的可用对话机器人:

一、前置环境准备

基础依赖‌:JDK 17+、Spring Boot 3.x 版本,适配Spring AI的自动配置特性。
大模型服务‌:提前部署Ollama本地大模型,或准备好OpenAI、DeepSeek等大模型的API密钥。

二、项目初始化与依赖配置

新建Spring Boot项目,在pom.xml中引入Spring AI核心依赖,以Ollama对接为例:

1,SpringAI使用ollama

<dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-M4</version><!--请使用最新的稳定版本或里程碑版本--><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId><version>1.0.0-M4</version></dependency></dependencies>

2,SpringAI使用使用OpenAI

<dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-M4</version><!--请使用最新的稳定版本或里程碑版本--><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId></dependency></dependencies>

三,模型配置

在application.yml中配置大模型连接信息:

1,SpringAI使用ollama

spring:ai:ollama:base-url:http://localhost:11434chat:options:model:deepseek-r1:latest

2,SpringAI使用使用OpenAI

application.yml

spring:ai:openai:base-url:https://dashscope.aliyuncs.com/compatible-mode api-key:${OPENAI_API_KEY}# 从环境变量读取,避免硬编码 chat:options:model:gpt-4o # 指定使用的模型,如 gpt-4o,gpt-3.5-turbo,qwen-max等 temperature:0.7# 控制生成的随机性 值越大,输出结果越随机

或者在 application.properties 中配置:

spring.ai.openai.base-url=https://dashscope.aliyuncs.com/compatible-mode spring.ai.openai.api-key=${OPENAI_API_KEY} spring.ai.openai.chat.options.model=gpt-4o spring.ai.openai.chat.options.temperature=0.7

注意‌:在启动应用前,需确保环境中已设置 OPENAI_API_KEY 变量,例如在终端执行 export OPENAI_API_KEY=sk-xxxxxx。

  1. 代码实现与调用
    Spring AI 提供了自动配置的 ChatClient 或具体的 OpenAiChatModel Bean,可直接注入使用。

四、核心功能快速实现

1,ollama方式

方式一:
配置对话上下文记忆‌
通过内置组件实现对话历史留存,保障多轮对话的上下文连贯性:

@BeanpublicChatMemorychatMemory(){returnnewInMemoryChatMemory();// 会将所有历史消息全量传入模型,易导致 Token 溢出 。 已经过时,弃用,已经被重构了 InMemoryChatMemoryRepository 替代}
packagecom.example.chatai.config;importorg.springframework.ai.chat.memory.ChatMemory;importorg.springframework.ai.chat.memory.InMemoryChatMemoryRepository;importorg.springframework.ai.chat.memory.MessageWindowChatMemory;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassChatMemoryConfig{/** * 配置基于内存的消息仓库 * 生产环境建议替换为 RedisChatMemoryRepository 或 JdbcChatMemoryRepository */@BeanpublicInMemoryChatMemoryRepositorychatMemoryRepository(){returnnewInMemoryChatMemoryRepository();}/** * 配置聊天记忆实例 * maxMessages: 设置保留最近的消息数量,避免上下文过长导致费用增加或超出模型限制 */@BeanpublicChatMemorychatMemory(InMemoryChatMemoryRepositoryrepository){returnMessageWindowChatMemory.builder().chatMemoryRepository(repository).maxMessages(10)// 保留最近10条消息.build();}}

构建对话引擎‌
整合AI客户端、对话模板和记忆组件,生成核心对话处理单元:

@BeanpublicChatEnginechatEngine(AiClientaiClient,ChatMemorymemory){returnChatEngine.builder(aiClient).memory(memory).build();}

暴露Web交互接口‌
快速编写REST接口,实现用户请求的接收与回复返回:

@RestController@RequestMapping("/api/chat")publicclassChatController{@AutowiredprivateChatEnginechatEngine;@PostMappingpublicStringchat(@RequestParamStringquestion){returnchatEngine.chat(question);}}

方式二:

@BeanpublicChatClientchatClient(OllamaChatModelmodel){returnChatClient.builder(model).defaultSystem("你是可爱的助手,名字叫小团团").build();}
@RestController@RequestMapping("/chat")publicclassChatController{privatefinalChatClientchatClient;// 直接注入我们配置好的ChatClientpublicChatController(ChatClientchatClient){this.chatClient=chatClient;}@GetMapping(produces=MediaType.TEXT_EVENT_STREAM_VALUE)publicFlux<String>chat(@RequestParamStringuserInput){// 自动带上"小团团"的人设,返回流式响应returnchatClient.prompt().user(userInput).stream().content();}}

2,使用OpenAI方式

方式一:使用通用的 ChatClient(推荐)
ChatClient 是 Spring AI 提供的高级抽象,支持流式输出和更灵活的提示词构建。

importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importreactor.core.publisher.Flux;@RestControllerpublicclassChatController{privatefinalChatClientchatClient;// 注入自动配置的 ChatClient.BuilderpublicChatController(ChatClient.BuilderchatClientBuilder){this.chatClient=chatClientBuilder.build();}@GetMapping("/ai/chat")publicStringchat(@RequestParam(value="message",defaultValue="Hello!")Stringmessage){returnchatClient.prompt().user(message).call().content();}@GetMapping("/ai/chat/stream")publicFlux<String>chatStream(@RequestParam(value="message",defaultValue="Hello!")Stringmessage){returnchatClient.prompt().user(message).stream().content();}}

方式二:直接使用 OpenAiChatModel
如果需要更底层的控制,可以直接注入 OpenAiChatModel。

importorg.springframework.ai.openai.OpenAiChatModel;importorg.springframework.ai.chat.model.ChatResponse;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassLegacyChatController{privatefinalOpenAiChatModelchatModel;publicLegacyChatController(OpenAiChatModelchatModel){this.chatModel=chatModel;}@GetMapping("/ai/generate")publicStringgenerate(@RequestParam(value="message",defaultValue="Tell me a joke")Stringmessage){returnchatModel.call(message);}}

常见问题排查
‌401 Unauthorized 错误‌:通常意味着 API Key 未正确加载。检查环境变量是否生效,或确认 application.yml 中的占位符 ${OPENAI_API_KEY} 是否被正确解析。启用调试日志 logging.level.org.springframework.ai=DEBUG 可查看属性绑定详情。
‌版本冲突‌:确保 spring-ai-openai-spring-boot-starter 的版本与 Spring Boot 版本兼容。Spring Boot 3.2+ 通常对应 Spring AI 0.8.1+ 或 1.0.0+。
‌网络问题‌:如果在国内访问 OpenAI API,可能需要配置代理。可以通过设置 JVM 参数 -Dhttp.proxyHost 和 -Dhttp.proxyPort 或在配置类中自定义 OpenAiApi 的 RestTemplate 来实现。

五、启动验证

启动Spring Boot应用,调用http://localhost:8080/api/chat?question=你好,即可收到大模型返回的对话回复,完成基础对话机器人的搭建。

http://www.jsqmd.com/news/1196036/

相关文章:

  • 社交媒体危机公关:从品牌营销边界到舆情管理实战
  • 2026临沂楼顶漏水、卫生间漏水、外墙、地下室、阳台+阳光房渗漏不用愁!3家靠谱公司(7月) - 防水企业百科
  • 武汉爱彼回收价格查询和靠谱平台实测排行(2026年7月最新) - 诚收名表回收平台
  • 亲测义乌1688代入驻,2026复盘分享 - 花开富贵112
  • LTC4417IUF#TRPBF是一款36V 工业级防反灌电源控制器
  • RTX5090 32G 八卡算力集群技术特性与全行业落地应用场景详解
  • Python agent-eval 包详解:功能、安装、语法与实战案例
  • 从g到ODR:深入解读加速度传感器关键参数与选型指南
  • 安卓15_ROM修改定制化_____修改设置菜单中的中文名称
  • 计算机毕业设计之jsp球鞋商城系统
  • 2026暑假一家三口去新疆旅游需要多少钱?真实预算明细+避坑攻略 - 旅行分享
  • 现代C++ TOML解析器toml++:从使用到贡献代码的完整指南
  • 杭州欧米茄回收价格查询及靠谱回收平台实测排行(2026年7月最新) - 天价名表回收平台
  • 2026北京卫生间漏水、外墙、楼顶、地下室渗漏怎么办?3家正规防水公司推荐(7月) - 防水企业百科
  • 2026 年|杭州定制化家居服务企业做GEO服务商哪个好?本地服务商实力排名与选型指南 - 企业新闻快传
  • 鸿蒙ArkUI实战:建立浅色与深色主题的颜色映射
  • 杭州GEO公司哪家好?中小企业入门级GEO服务商TOP6推荐 - 资讯纵览
  • 基于STM32单片机汽车电动车RFID刷卡充电扣费TFT彩屏设计DIY-T135
  • 电脑屏幕共享给手机怎么操作 电脑屏幕共享给手机的软件
  • 2026黄冈外墙渗漏、卫生间漏水、楼顶、地下室、阳台渗漏?3家靠谱服务商测评(7月) - 防水企业百科
  • 鸿蒙 AI 自动化开发:让 AI 学会自己编译、自己调试
  • STM32F103实战:USB虚拟串口(CDC)的配置、调试与性能优化
  • 基于libqrencode的C++二维码生成库:从原理到嵌入式实践
  • 为什么程序员不再只用 GPT-4?多模型协作怎么选?2026最新选型攻略与避坑盘点
  • 【LE Audio】CSIS精讲[2]: 服务核心运作逻辑
  • 2026年GEO服务商实力横评:答序科技综合测评位列第一,全栈自研与闭环交付能力断层领先 - 天涯视角
  • 【数据结构与算法 | 第一篇】时间复杂度和空间复杂度
  • 烟台SEO优化公司|长尾词矩阵建设,烟台SEO全案外包服务商解读 - 招财兔数字员工
  • 基于STM32单片机TF卡Mp3音频音乐频谱音箱播放器显示设计DIY-T163
  • Java Web | 世界杯赛事网站开发