什么是 Spring AI 框架?它有哪些核心特性?
- 标签:后端、编程导航
🏛 业务架构师
Spring AI 是 Spring 官方的 AI 应用开发框架,把"Java 工程接大模型"这件事标准化。核心特性我按它解决的问题讲:
- ChatClient 统一 API:一个编程模型对接 OpenAI、Anthropic、国产模型等——换模型不改业务代码,这是防供应商锁定的架构保险,模型市场激烈变化的今天尤其值钱;
- Advisor 链:请求/响应的拦截管道(记忆、RAG、安全审查像过滤器一样插入)——AI 能力组件化,组合而非硬编码;
- 结构化输出:模型输出直接映射为 Java 对象——让 AI 输出能进业务流程(下游存库、调接口),从聊天玩具变成生产组件的关键;
- Embedding + VectorStore 抽象:向量化和向量库(PGVector/Milvus/Redis)接口统一;
- Tool Calling:把 Java 方法声明为工具供模型调用;
- MCP 支持:接入模型上下文协议生态;
- ChatMemory:多轮对话记忆的管理抽象。
业务架构视角的判断:没有 Spring AI 之前,每个 Java 团队自己封装 HTTP 调用、流式解析、重试降级——重复造轮子的成本全行业累加;框架出现后这些成为公共资产。我的选型理由与当年选 Spring Boot 一致:生态红利(社区维护、漏洞修复、模型适配跟进)远大于单点的性能差异。同时保留清醒:框架迭代快(1.0 前后 API 多次破坏性变更),业务代码要通过自己的薄适配层隔离框架 API,避免升级地狱。
🏗 系统架构师
Spring AI 是 Spring 官方的 AI 应用开发框架,把大模型接入抽象成统一的编程模型,像 Spring Data 统一数据库访问一样统一 AI 能力接入。核心特性我按模块讲:
- 统一模型抽象:ChatModel/ChatClient 接口抹平 OpenAI、Azure、Anthropic、Ollama、通义、DeepSeek 等厂商差异,切换模型只换依赖和配置——供应商解耦是最大价值;
- Prompt 模板:PromptTemplate 与占位符变量,SystemTemplate/UserTemplate 分角色管理;
- 结构化输出:
BeanOutputConverter把模型输出自动映射为 Java 对象(POJO/ List/Map),内部通过提示词约束 + JSON 解析实现; - 对话记忆:ChatMemory 抽象(InMemory/JDBC/Redis 等存储),多轮对话自动携带历史;
- Advisor 链:请求/响应的拦截器机制(类比 AOP/Filter),RAG 增强、记忆注入、重读(ReReading)、日志都以 Advisor 插入调用链——可组合的横切增强;
- RAG 全家桶:ETL 管道(文档读取/切分/向量化/入库)+ VectorStore 抽象(pgvector/Milvus/Redis/ES)+ 检索增强;
- 工具调用:@Tool 注解方法直接暴露给模型 function calling;
- MCP 支持:McpClient/McpServer 把模型接入 MCP 生态;
- 观测与评估:与 Micrometer 集成打点 token/耗时。
架构定位:它解决的是"AI 能力的 Spring 化"——依赖注入、自动配置、生态整合,让 Java 工程师以熟悉的编程模型构建 AI 应用。
💻 全栈开发专家
Spring AI = Spring 官方的 AI 应用开发框架,把大模型的各种能力抽象成统一的 Spring 编程模型,2024 年发布里程碑版本,口号是"让 AI 像接数据库一样接进 Spring 项目"。
核心特性我按"项目里用到什么"讲:
- 统一模型抽象:
ChatModel/ChatClient一套 API 背后可切 OpenAI、DeepSeek、Ollama、Azure 等,换模型只改配置——类似当年 Spring Data 统一 ORM 的思路。
java
String answer = chatClient.prompt()
.user("总结这段文字")
.call().content();- Prompt 模板:
PromptTemplate+{variable}占位,配合 SystemMessage 管理; - 结构化输出:
.entity(MyRecord.class)直接映射 JSON 到 Java 对象; - Tool Calling:
@Tool注解把本地方法暴露给模型调用; - Advisor 链:类似 Servlet Filter 的拦截链,对话记忆、RAG、安全审查都做成 Advisor 插拔;
- RAG 全家桶:ETL(DocumentReader/Splitter/MetadataEnricher)+ VectorStore 抽象(PGVector/Milvus/Redis...);
- ChatMemory:多轮对话记忆接口 + 多存储实现;
- MCP 支持:官方 starter 做 MCP Client/Server。
我的使用体会:它最大的价值是解耦——业务代码面向 ChatClient 编程,模型、向量库、记忆实现都可以替换;坑是版本迭代快(M1 到 1.0 GA 之间 API 改动不小),依赖版本要锁死并跟进 release note。