本课目标
- 搭好 Spring AI 项目最小骨架
- 理解 ChatModel 与 ChatClient 的职责分界
- 跑通第一次对话
Java 程序员搞 AI,第一反应常常是"我要不要学 Python?"。不,你不需要。Spring AI 让 Java 生态跟大模型对话就像调一个 Service 一样自然。本讲不写 Demo——直接搭一个能跑的项目骨架,让它说出第一句话。
核心内容
依赖与配置:少即是多
Spring Boot 3.4+ 加上 spring-ai-openai-spring-boot-starter 就够了。Spring AI 兼容所有 OpenAI 协议接口的模型提供商——DeepSeek、通义千问、智谱、Ollama 本地模型都是同一个接口。换模型 = 改两行配置。
这个兼容性是 Spring AI 最大的工程价值之一。你今天用 DeepSeek 做开发(便宜),明天上线切 GPT-4(稳定),代码一行不动。
两层 API:ChatModel vs ChatClient
Spring AI 给你两层选择:
- ChatModel:底层 API,精细控制每次请求的参数。适合需要定制请求行为的场景。
- ChatClient:Fluent API,链式调用。你 90% 的代码应该在这一层。通过 Builder 注入,跟 Spring 的 DI 体系无缝集成。
直觉:ChatModel 是方向盘+油门+离合,ChatClient 是自动挡。日常开车用自动挡,赛道日用方向盘。别一上来就纠结底层。
第一次对话:比你想的简单
注入 ChatClient,.prompt().call().content(),三行代码模型就跟你说话了。复杂吗?不复杂。但这三行背后 Spring AI 做了:序列化请求、处理 HTTP、解析响应、错误重试。
三个"别在这栽跟头"
- API Key 别写死在代码里。
application.yml或环境变量,这是安全底线。 - 初期的 token 消耗比你想象的大。每次调用不只是你的那句 prompt——Spring AI 会自动注入 system message 和 conversation history。打日志看实际发送的 payload。
- 开发环境用便宜的模型。DeepSeek 或本地 Ollama 跑通逻辑,上线再切贵的。别用 GPT-4 调 Bug。
动手练习
搭一个 Spring Boot 项目,跑通一次对话。把 application.yml 中的 API Key 改成环境变量引用。然后分别用 ChatModel 和 ChatClient 各写一遍"请用一句话介绍你自己",对比两者的代码量和可读性。