Spring AI 工程分析文档
请关注微信公众号:阿呆-bot
1. 工程结构概览
Spring AI 是一个大型的多模块 Maven 项目,采用模块化设计,主要分为核心模块、模型实现、向量存储、自动配置等几大类。下面我们来看看主要的目录结构(已排除 spec、doc 等文档相关文件夹):
spring-ai-main/
├── spring-ai-commons/ # 基础公共模块,无其他 Spring AI 依赖
├── spring-ai-model/ # AI 能力抽象层(ChatModel、EmbeddingModel 等)
├── spring-ai-vector-store/ # 向量数据库统一抽象
├── spring-ai-client-chat/ # 高级对话 AI API(ChatClient)
├── spring-ai-rag/ # 检索增强生成框架
├── spring-ai-retry/ # 重试机制
├── spring-ai-bom/ # 依赖管理 BOM
│
├── models/ # AI 模型实现
│ ├── spring-ai-openai/ # OpenAI 实现
│ ├── spring-ai-anthropic/ # Anthropic Claude 实现
│ ├── spring-ai-azure-openai/ # Azure OpenAI 实现
│ ├── spring-ai-ollama/ # Ollama 本地模型
│ └── ... (20+ 个模型实现)
│
├── vector-stores/ # 向量数据库实现
│ ├── spring-ai-pgvector-store/ # PostgreSQL/PGVector
│ ├── spring-ai-chroma-store/ # Chroma
│ ├── spring-ai-pinecone-store/ # Pinecone
│ ├── spring-ai-qdrant-store/ # Qdrant
│ └── ... (20+ 个向量存储实现)
│
├── auto-configurations/ # Spring Boot 自动配置
│ ├── models/ # 模型自动配置
│ ├── vector-stores/ # 向量存储自动配置
│ └── mcp/ # MCP 协议自动配置
│
├── document-readers/ # 文档读取器
│ ├── pdf-reader/ # PDF 解析
│ ├── markdown-reader/ # Markdown 解析
│ └── tika-reader/ # 通用文档解析
│
├── memory/repository/ # 对话记忆存储实现
│ ├── spring-ai-model-chat-memory-repository-jdbc/
│ ├── spring-ai-model-chat-memory-repository-mongodb/
│ └── ...
│
└── spring-ai-spring-boot-starters/ # Spring Boot Starters├── spring-ai-starter-model-openai/├── spring-ai-starter-vector-store-pgvector/└── ...
2. 技术体系与模块关系
Spring AI 采用分层架构设计,从底层到上层依次是:基础层 → 抽象层 → 实现层 → 自动配置层。这种设计让代码既灵活又易于扩展。

技术栈说明:
- Java 17 + Spring Boot 3.5.7:现代 Java 企业级开发栈
- Maven:依赖管理和构建工具
- 响应式编程:支持 Reactor 流式处理
- 观察性:集成 Micrometer,提供指标和追踪
3. 关键场景示例代码
3.1 使用 ChatModel 进行对话
这是最基础的用法,直接调用 AI 模型:
@Autowired
private ChatModel chatModel;public String chat(String userMessage) {// 简单调用String response = chatModel.call(userMessage);return response;// 或者使用 Prompt 对象,更灵活Prompt prompt = new Prompt(new UserMessage(userMessage));ChatResponse response = chatModel.call(prompt);return response.getResult().getOutput().getContent();
}
3.2 使用 ChatClient 流式 API
ChatClient 提供了更友好的流式 API,类似 WebClient 的风格:
@Autowired
private ChatModel chatModel;public void streamChat(String question) {ChatClient chatClient = ChatClient.create(chatModel);chatClient.prompt().user(question).stream().content().doOnNext(chunk -> System.out.print(chunk)).blockLast();
}
3.3 使用 VectorStore 进行相似度搜索
向量存储是 RAG 的核心,用于存储和检索文档:
@Autowired
private EmbeddingModel embeddingModel;
@Autowired
private VectorStore vectorStore;public void storeAndSearch() {// 1. 存储文档List<Document> documents = Arrays.asList(new Document("Spring AI 是一个 AI 应用开发框架"),new Document("支持多种 AI 模型和向量数据库"));vectorStore.add(documents);// 2. 相似度搜索List<Document> results = vectorStore.similaritySearch("AI 框架");results.forEach(doc -> System.out.println(doc.getContent()));
}
3.4 RAG 模式:检索增强生成
这是 Spring AI 的杀手级功能,结合向量存储和 AI 模型:
@Autowired
private ChatClient chatClient;
@Autowired
private VectorStore vectorStore;public String ragQuery(String question) {// 使用 QuestionAnswerAdvisor 自动处理 RAGQuestionAnswerAdvisor advisor = new QuestionAnswerAdvisor(vectorStore);return chatClient.prompt().user(question).advisors(advisor).call().content();
}
4. 入口类与关键类关系
Spring AI 的入口主要是各种 AutoConfiguration 类,它们负责自动配置 Bean。核心接口之间的关系如下:

关键入口类说明:
- AutoConfiguration 类:位于
auto-configurations/目录,根据 classpath 自动配置相应的 Bean - ChatModel:所有对话模型的统一接口,包括 OpenAI、Anthropic 等
- VectorStore:向量数据库的统一抽象,支持 PGVector、Chroma、Pinecone 等
- ChatClient:高级 API,提供流式、Advisor 等高级特性
5. 外部依赖
Spring AI 的外部依赖主要分为几大类:
5.1 AI 模型提供商 SDK
- OpenAI:官方 Java SDK
- Anthropic:Claude API 客户端
- Azure OpenAI:Azure 服务 SDK
- AWS Bedrock:AWS SDK for Java
- Google GenAI:Google AI SDK
- Ollama:本地模型运行框架
5.2 向量数据库客户端
- PostgreSQL/PGVector:JDBC + pgvector 扩展
- Chroma:Python 服务的 HTTP 客户端
- Pinecone:官方 Java SDK
- Qdrant:REST API 客户端
- Redis:Spring Data Redis
- MongoDB Atlas:MongoDB Java Driver
- Elasticsearch:Elasticsearch Java Client
- 还有 Neo4j、Weaviate、Milvus 等 10+ 种实现
5.3 文档处理
- Apache Tika:通用文档解析
- PDFBox:PDF 处理
- Jsoup:HTML 解析
- CommonMark:Markdown 解析
5.4 构建和测试工具
- Maven:构建工具
- Testcontainers:集成测试容器
- JaCoCo:代码覆盖率
- Checkstyle:代码风格检查
6. 工程总结
Spring AI 这个项目,说白了就是 Spring 生态在 AI 领域的延伸。它的设计理念非常清晰:可移植性 + 模块化 + POJO 优先。
6.1 设计亮点
第一,抽象做得好。不管是 OpenAI 还是 Anthropic,不管是 PGVector 还是 Pinecone,都用统一的接口。这意味着你可以轻松切换提供商,不用改业务代码。
第二,模块化设计。核心抽象和具体实现完全分离,想用哪个模型、哪个向量数据库,引入对应的 starter 就行。这种设计让项目既灵活又不会臃肿。
第三,Spring Boot 深度集成。自动配置、Starters、观察性,该有的都有。用起来就像用 Spring Data 一样自然。
6.2 核心价值
Spring AI 解决的核心问题是:如何把企业数据和 API 连接到 AI 模型。它提供了:
- RAG 框架:让 AI 能"看到"你的数据
- 工具调用:让 AI 能"操作"你的系统
- 对话记忆:让 AI 能"记住"对话历史
- 流式处理:让 AI 响应更流畅
6.3 适用场景
这个框架特别适合:
- 企业内部知识库问答系统
- 文档智能检索和分析
- AI 驱动的业务自动化
- 多模型、多数据源的 AI 应用
总的来说,Spring AI 是一个企业级、生产就绪的 AI 应用开发框架。它把复杂的 AI 集成工作标准化、简单化,让 Java 开发者也能轻松构建 AI 应用。如果你熟悉 Spring 生态,上手会非常快。