返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

接入SpringAI实现流式对话

[复制链接]
链载Ai 显示全部楼层 发表于 3 小时前 |阅读模式 打印 上一主题 下一主题
前面有讲到Python对接DeepSeek实现对话,但基于现状,从事后端开发,侧重于Java,此次演示以SpringAI技术实现。
步骤一:引入依赖
一定要引入SpringAI的管理依赖,可以方便的使用其他模型及Client!
<dependencyManagement><dependencies><!--SpringAI的管理依赖--><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>
SpringAI的核心依赖,此次使用openai
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>${spring-ai.version}</version></dependency>
此次基于SpringBoot工程演示,没有用到框架,一键启动,真方便。
<properties><java.version>17</java.version><spring-ai.version>1.0.0-M5</spring-ai.version></properties>
注意:SpringBoot版本需要大于3版本
步骤二:配置API
server:port:8080spring:application:name:ai-demoaipenai:base-url:https://api.deepseek.comapi-key:个人keychatptions:model:deepseek-chattemperature:0.7
此次使用的模型仍为DeepSeek,支持国产!
API接口文档:https://api-docs.deepseek.com/zh-cn/
步骤三:编写AI应用
由于需要使用SpringAI自带的ChatClient,如果没有添加配置或用构造方法初始化,会报以下错误。
简易版
ChatConfig
@ComponentpublicclassChatConfig{ /**  * 默认形式  *@parammodel  *@return  */ @Bean publicChatClientchatClient(OpenAiChatModel model) {   returnChatClient.builder(model).build();  }}
ChatController
@RequiredArgsConstructor@RestController@RequestMapping("/ai")@Slf4jpublicclassChatController{ privatefinalChatClient chatClient;
/** * 聊天对话-阻塞式 *@parammessage *@return */ @RequestMapping("/chat") publicString chat(@RequestParam("message")String message) { returnchatClient.prompt() .user(message) .call() .content();
}}
使用Apifox测试该接口
  /**  * 聊天对话-流式  *  *@parammessage  *@return  */ @RequestMapping(value ="/stream",produces ="text/html;charset=utf-8") publicFlux<String>chatStream(@RequestParam("message")Stringmessage) {    log.info("流式测试...");   returnchatClient.prompt()        .user(message)        .stream()        .content();
}
由于默认方式为GET,浏览器接口测试
增强版
添加提示词功能,代码如下,重启后才可生效!
ChatConfig
/***添加提示词已通过*@parammodel*@return*/@BeanpublicChatClientchatClient(OpenAiChatModelmodel){returnChatClient.builder(model).defaultSystem("你的名字是小明,身份为学生,请以学生的语气回答问题.").build();}
对话效果
升华版
添加日志以及会话记忆功能,代码如下
ChatConfig
 /**  * 会话日志  *@parammodel  *@return  */ @Bean publicChatClientchatClient(OpenAiChatModel model, ChatMemory chatMemory) {   returnChatClient        .builder(model)        .defaultSystem("你的名字是小明,身份为学生,请以学生的语气回答问题.")        .defaultAdvisors(           newSimpleLoggerAdvisor(),           newMessageChatMemoryAdvisor(chatMemory)        )        .build();  }
/** * 会话记忆 基于内存-缓存 *@return */ @Bean publicChatMemorychatMemory() { returnnewInMemoryChatMemory(); }
ChatController
 /**  * 会话记忆 已通过  *@parammessage  *@paramchatId  *@return  */ @RequestMapping(value ="/memoryChat",produces ="text/html;charset=utf-8") publicFlux<String>memoryChat(@RequestParam("message")Stringmessage,StringchatId) {    log.info("流式测试...");   returnchatClient.prompt()        .user(message)        .advisors(a-> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId))        .stream()        .content();
}
apifox接口测试
此次新增chatId字段,目的是为一次会话添加唯一标识,基于该标识存储会话记忆,目前使用的内存记忆功能,可以尝试使用向量数据库,永久有效。
再次测试(test again)
至此,java对接SpringAI的基本功能已实现。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ