Spring AI 核心概念
Spring AI 是 Spring 生态下的 AI 应用开发框架,旨在将 AI 能力以 Spring 的方式集成到 Java 应用中。本文梳理其核心组件与设计理念。
项目实践: 在云智汇 AI 教育平台中,使用 Spring AI 构建路由工作流 Agent,实现了课程问答、个性化推荐与智能下单的意图识别和任务分发。
ChatClient — 统一入口
ChatClient 是与 LLM 交互的核心接口,屏蔽了不同模型提供商的底层差异:
ChatClient chatClient = ChatClient.builder(chatModel)
.defaultSystem("你是一个专业的助手")
.defaultAdvisors(new SimpleLoggerAdvisor())
.build();Builder 模式设计: Spring AI 使用 Builder 模式构建 ChatClient,支持链式调用配置 System Prompt、Advisor 链、默认参数等。这种设计使得同一个 ChatClient 实例可以在多处复用,同时保持配置的一致性。
Prompt 封装: 对话请求通过 Prompt 对象封装,包含 System Message、User Message 和 ChatOptions(温度、最大 Token 等参数)。返回的 ChatResponse 包含多个 Generation 候选和 ChatResponseMetadata(Token 消耗等元数据)。
Advisor — 拦截器模式
Advisor 是 Spring AI 中最具设计感的组件之一,本质上是一个请求/响应拦截器链。
工作原理:
用户请求 → Advisor.before() → ChatModel 调用 → Advisor.after() → 返回结果每个 Advisor 可以:
- before:修改请求内容(如注入 RAG 检索到的上下文)
- after:修改响应内容(如格式化输出、记录日志)
常用 Advisor:
| Advisor | 功能 |
|---|---|
| QuestionAnswerAdvisor | RAG 检索增强,自动将相关文档注入 Prompt |
| ChatMemoryAdvisor | 管理对话历史,维护上下文连贯性 |
| SimpleLoggerAdvisor | 记录请求/响应日志 |
| RetrievalAugmentationAdvisor | 更高级的 RAG 实现,支持自定义检索策略 |
Advisor 链执行顺序: 多个 Advisor 按 order 值排序执行,数值越小优先级越高。这与 Spring MVC 的 Filter 链和 Spring Security 的 Filter Chain 思路一致。
Tool Calling — 工具调用
Tool Calling 让 LLM 能够调用外部工具(函数),扩展其能力边界:
ChatClient.create(chatModel)
.prompt("北京今天天气怎么样?")
.tools(weatherTool)
.call()
.content();流程:
- 用户提出问题
- LLM 判断需要调用工具,返回
tool_calls请求 - 框架自动执行对应的 Java 方法
- 将执行结果回传给 LLM
- LLM 基于工具返回的结果生成最终回答
工具定义: 通过 @Tool 注解标记方法,框架自动提取方法名、参数名和 JavaDoc 作为工具描述传递给 LLM。
ChatMemory — 对话记忆
ChatMemory 管理多轮对话的上下文,支持多种存储后端:
- InMemoryChatMemory:内存存储,适合开发测试
- CassandraChatMemory:持久化到 Cassandra
- 自定义实现:可对接 MySQL、Redis 等
记忆窗口: 可配置保留最近 N 轮对话,避免超出 LLM 上下文窗口限制。
与 LangChain4j 的对比
| 特性 | Spring AI | LangChain4j |
|---|---|---|
| 设计理念 | Spring 生态集成,声明式配置 | 独立框架,注解驱动 |
| 核心抽象 | ChatClient + Advisor | AiServices + 注解 |
| RAG 实现 | QuestionAnswerAdvisor | ContentRetriever + 注入 |
| 工具调用 | @Tool 注解 | @Tool 注解 |
| 记忆管理 | ChatMemory + Advisor | @MemoryChatMemoryStore |
| 适用场景 | Spring Boot 项目 | 任意 Java 项目 |
一句话总结: Spring AI 更适合已有 Spring Boot 技术栈的团队,而 LangChain4j 更灵活、适用范围更广。两者的核心概念(Chat、RAG、Tool、Memory)基本对齐,只是实现范式不同。