大家好,我是小米,一个每天都在 Java 世界里翻滚的 31 岁程序员大哥哥。今天要聊的是一个我最近用完之后疯狂安利的宝藏框架:Spring AI 的 ChatClient API。
前阵子,我在给团队搭一个客服机器人,调了 OpenAI 的 API 半天,代码写得像意大利面条一样乱七八糟。后来一个朋友提醒我: "你怎么不用 Spring AI?"
我:Spring AI?这是 Spring 家出的 AI 框架?
朋友一脸惊讶地说:你居然还没用?
我赶紧撸了一遍官方文档,然后...
只用了一个早上,就把聊天功能整合得干干净净,还支持流式响应、提示模板、内存上下文,甚至还能多模型切换。
今天这篇文章,就带大家全流程撸一遍 Spring AI 的 ChatClient API,告诉你它到底有多香!
开始:创建 ChatClient,三分钟上手!
Spring AI 的 ChatClient 是整个聊天能力的核心,就像你和 OpenAI、Gemini、Claude 打交道的专属话务员。
1. 使用自动配置的 ChatClient.Builder
我们只要添加 Spring AI 的依赖,然后配置 application.yml:
然后就可以直接注入 ChatClient:
这时候你会发现,你连 RestTemplate 都不用写,ChatClient 早就帮你封装好了!
2. 多模型支持,换个 LLM 如切瓜切菜
只要配置多个 ChatModel Bean,就能支持多个模型切换:
然后这样切换:
超级丝滑有没有?
流畅 API:就像写 Java Stream 那么爽
用惯了 Builder 模式的你会觉得 ChatClient 简直是为现代 Javaer 打造的。
我们来看一个经典示例:
一句话就搞定对话,还能链式配置 system message:
这 API 真是给我这样的"懒人程序员"量身定制的。
ChatClient 响应:花样百出,任你选
ChatClient 提供了三种响应方式,满足不同需求。
1. 返回 ChatResponse
最基本的返回值是 ChatResponse,带结构化 metadata:
2. 返回实体对象
你可以直接把返回值映射成 POJO,简直优雅得不行:
3. 流式响应:边说边出字,效果拉满!
想要 ChatGPT 的那种"字一个一个出来"的体验?有!
真的可以边播边写,适合做客服机器人和 AI 写作助手!
提示模板:把 prompt 写进模板,优雅又复用
你是不是经常写 prompt 写到头秃?别怕,Spring AI 帮你抽象成模板了!
1. call() 的返回值支持模板变量
一行搞定上下文填充!告别手搓拼接!
2. stream() 一样支持模板
使用默认值:提示词、角色设定自动套用
你可以提前设好 system message、模板变量,让每次调用都继承下来。
1. 默认系统文本
2. 带参数的默认 system
3. 其他默认值
你还可以设定默认 temperature、maxToken、topP 等参数,一次配置,次次生效。
Advisors:加点"插件",功能立马起飞
ChatClient 的 advisor 系统就像 Spring AOP,可以在聊天前后加逻辑,比如 RAG、日志、缓存等。
1. 配置 Advisor 超简单
2. 检索增强生成(RAG)
加一个 RetrievalAdvisor,就能做到带知识库的问答系统:
结合 VectorStore,就可以构建自己的企业知识助手。
3. 日志记录
可以自定义日志 Advisor,把每次问答都存到数据库或者日志文件:
聊天内存:记住上下文,做一个"有记性"的 AI
聊天机器人最大的问题就是: "上一句你怎么就忘了?"
Spring AI 提供了 Memory 支持,比如 InMemoryChatMemoryStore,可以记录历史对话:
这样,同一个 session 下的用户对话就可以上下文关联了!
总结:Spring AI 的 ChatClient 简直太顶!
从开发者角度来看,Spring AI 做到了:
- 低门槛接入 OpenAI 等大模型;
- ChatClient 封装好链式 prompt,支持 call 和 stream;
- 提示模板、默认值、内存、Advisor 全部一应俱全;
- 适合构建聊天机器人、RAG 应用、代码助手等各种 AI 工具。
我自己用 Spring AI 重构了一版聊天机器人之后,代码清爽了不止一点点,甚至还加了知识库搜索、上下文聊天和流式响应,全靠 ChatClient 的超强扩展能力。
所以朋友们,如果你也在用 Java 开发 AI 应用,别再硬撸 SDK 了,试试 Spring AI 的 ChatClient 吧!
END
我是小米,一个喜欢分享技术的31岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号"软件求生",获取更多技术干货!