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 自动处理 RAG QuestionAnswerAdvisor 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 生态,上手会非常快。