支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


接入SpringAI实现流式对话

发布日期:2025-04-26 23:39:45 浏览次数: 1523 作者:小研说技术
推荐语

掌握Java后端开发的你不容错过,本文手把手教你如何使用SpringAI技术实现流式对话。

核心内容:
1. 引入SpringAI依赖,简化模型使用和管理
2. 配置API和SpringBoot工程,一键启动对话应用
3. 编写AI应用,实现基于DeepSeek模型的流式对话

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家
前面有讲到Python对接DeepSeek实现对话,但基于现状,从事后端开发,侧重于Java,此次演示以SpringAI技术实现。
步骤一:引入依赖
一定要引入SpringAI的管理依赖,可以方便的使用其他模型及Client!
<dependencyManagement>        <dependencies>            <!-- Spring AI的管理依赖 -->            <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:  port8080spring:  application:    name: ai-demo  ai:   openai:     base-url: https://api.deepseek.com     api-key: 个人key     chat:       options:         model: deepseek-chat         temperature0.7  
此次使用的模型仍为DeepSeek,支持国产!
API接口文档:https://api-docs.deepseek.com/zh-cn/
步骤三:编写AI应用
由于需要使用SpringAI自带的ChatClient,如果没有添加配置或用构造方法初始化,会报以下错误。
简易版
ChatConfig
@Componentpublic class ChatConfig {    /**     * 默认形式     * @param model     * @return     */    @Bean    public ChatClient chatClient(OpenAiChatModel model) {        return ChatClient.builder(model).build();    }}
ChatController
@RequiredArgsConstructor@RestController@RequestMapping("/ai")@Slf4jpublic class ChatController {    private final ChatClient chatClient;
    /**     * 聊天对话-阻塞式     * @param message     * @return     */    @RequestMapping("/chat")    public String chat(@RequestParam("message") String message) {        return chatClient.prompt()                .user(message)                .call()                .content();
    }}
使用Apifox测试该接口
     /**     * 聊天对话-流式     *     * @param message     * @return     */    @RequestMapping(value = "/stream",produces = "text/html;charset=utf-8")    public Flux<StringchatStream(@RequestParam("message"String message) {        log.info("流式测试...");        return chatClient.prompt()                .user(message)                .stream()                .content();
    }
由于默认方式为GET,浏览器接口测试
增强版
添加提示词功能,代码如下,重启后才可生效!
ChatConfig
    /**     * 添加提示词 已通过     * @param model     * @return    */    @Bean    public ChatClient chatClient(OpenAiChatModel model) {        return ChatClient                .builder(model)                .defaultSystem("你的名字是小明,身份为学生,请以学生的语气回答问题.")                .build();    }
对话效果
升华版
添加日志以及会话记忆功能,代码如下
ChatConfig
    /**     * 会话日志     * @param model     * @return     */    @Bean    public ChatClient chatClient(OpenAiChatModel model, ChatMemory chatMemory) {        return ChatClient                .builder(model)                .defaultSystem("你的名字是小明,身份为学生,请以学生的语气回答问题.")                .defaultAdvisors(                        new SimpleLoggerAdvisor(),                        new MessageChatMemoryAdvisor(chatMemory)                )                .build();    }
    /**     * 会话记忆 基于内存-缓存     * @return     */    @Bean    public ChatMemory chatMemory() {        return new InMemoryChatMemory();    }
ChatController
    /**     * 会话记忆 已通过     * @param message     * @param chatId     * @return     */    @RequestMapping(value = "/memoryChat",produces = "text/html;charset=utf-8")    public Flux<StringmemoryChat(@RequestParam("message"String message, String chatId) {        log.info("流式测试...");        return chatClient.prompt()                .user(message)                .advisors(a-> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId))                .stream()                .content();
    }
apifox接口测试
此次新增chatId字段,目的是为一次会话添加唯一标识,基于该标识存储会话记忆,目前使用的内存记忆功能,可以尝试使用向量数据库,永久有效。
再次测试(test again)
至此,java对接SpringAI的基本功能已实现。

本人正在打造技术交流群,欢迎志同道合的朋友一起探讨,一起努力,通过自己的努力,在技术岗位这条道路上走得更远。QQ群号:914683950 备注:技术交流 即可通过!
dify的聊天助手API(实战篇)" data-itemshowtype="0" target="_blank" linktype="text" data-linktype="2">上一篇:java对接Dify的聊天助手API(实战篇)


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询