Spring AI的教程大多直奔代码。你复制依赖、粘贴配置、调用ChatClient,然后发现能跑通了。但真要做点东西——一个能记住对话的聊天机器人,或者能基于自有文档回答问题的API——你就卡住了。因为你不知道底层到底在干什么。

Spring AI本质上是一层抽象。它让你把大语言模型(LLM)接入Spring Boot应用,同时不硬编码任何特定AI服务商。OpenAI、Google Gemini、Anthropic Claude,还有本地跑的Ollama——Spring AI用同一套API跟它们对话。换服务商不用改业务逻辑,这是它的核心价值,其他功能都建在这之上。

打开网易新闻 查看精彩图片

ChatClient:最常用入口

ChatClient是你打交道最多的组件。它位于栈顶,用流式API处理与LLM的实际请求-响应周期。类似RestTemplate或WebClient,只不过不是调REST端点,而是发送提示词(prompt)并取回响应。底层连接细节、请求格式化、响应解析,它都包办了。

设计上的亮点是流式构造器风格。你不是全局配置一次就完事,每次调用都可组合——设置系统提示词、附加顾问(advisor)、传入用户输入、控制输出格式,全在一条可读链里完成。它还区分了两件常被混为一谈的事:启动时设置的默认配置(系统提示词、默认顾问、模型参数),与调用时应用的单次请求配置。生产环境里,不同端点需要对同一底层客户端有不同行为,这种分离很关键。

PromptTemplate:怎么正确跟LLM对话

直接把原始字符串塞进LLM不叫提示词。真正的提示词是有占位符、上下文和指令的结构化文本,PromptTemplate就是Spring AI处理这个的方式。

思路很简单:定义带变量的模板,运行时填充。不用Java字符串拼接——那很快会乱成一团——你把提示词的形状跟注入的数据分开。好处有三:提示词可读可维护;"问什么"和"注入什么数据"分离,跟代码库其他地方的一致性原则一致;提示词版本化成为可能。需要调整时,你改的是模板,不是在业务逻辑里翻找。

PromptTemplate还会生成一个正式的Prompt对象,同时携带人类消息和系统消息。系统提示词(指令)与用户提示词(实际查询)的区分,对控制LLM行为至关重要。