本文是“Spring AI 智能体实战”系列第 6/30 篇。项目采用 Java 17、Spring Boot 3.4.3 和课程示例所使用的 Spring AI 版本。不同 Spring AI 版本的依赖名称和部分 API 可能存在差异,请以自己项目的版本为准。

前言

把同步对话改造成 Flux 流式响应,改善长回答场景下的等待体验。

本文将沿用同一个实战项目逐步完成相关功能。所有密钥均使用环境变量表示,复制代码后请在本地配置真实值,不要把 API Key 或数据库密码提交到代码仓库。

本文目标

  • 理解本节功能解决的实际问题。

  • 掌握关键配置、接口与代码结构。

  • 完成可验证的运行结果,为下一节功能做好准备。

流式调用

同步调用需要等待很长时间页面才能看到结果,用户体验不好。为了解决这个问题,我们可以改进调用方式为流式调用。

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

修改刚才ChatController中的chat方法:

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

重启测试,再次访问:

本文总结

使用 stream 方法返回流式内容,并通过响应类型与 UTF-8 编码避免前端乱码。

建议在进入下一篇之前亲自运行本文代码,并记录请求参数、控制台日志和最终响应。遇到问题时,优先检查依赖版本、模型名称、环境变量和包名是否一致。

下一篇预告

下一篇:System Prompt实战:给Spring AI设定身份与行为

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐