当前位置: 首页 > news >正文

Spring AI 代码分析(一)--工程结构

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 采用分层架构设计,从底层到上层依次是:基础层 → 抽象层 → 实现层 → 自动配置层。这种设计让代码既灵活又易于扩展。
image.png

技术栈说明

  • 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。核心接口之间的关系如下:
image.png

关键入口类说明

  • 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 生态,上手会非常快。

http://www.rkmt.cn/news/54499.html

相关文章:

  • Cursor接入飞书MCP
  • linux framebuffer
  • Spring AI 代码分析(二)--Model 领域
  • Mars项目与TensorFlow集成指南
  • Luogu P6234 [eJOI 2019] T 形覆盖 题解 [ 紫 ] [ 图论建模 ] [ 分类讨论 ] [ 基环树 ]
  • gemini3-思考模式 测评
  • ssh登录报错Permission denied(publickey,gssapi-keyex,gssapi-with-mic,password
  • 人工智能之编程进阶 Python高级:第六章 文件类模块
  • 国产数据库替代MongoDB的技术实践过程:金仓多模数据库在电子证照框架中的深度应用
  • 用USB BLASTER II 下载sof文件没有问题,debug波形也没有问题。但是下载jic问题异常?
  • AI浪潮下的机遇与挑战:从巨头动态看未来趋势
  • linux for 死循环
  • 注册表禁用/启用Windows系统更新
  • PID 文件不一致导致 REDIS 一直重启
  • Linux for OneNote
  • linux for in seq
  • 高级程序语言设计第6次
  • 深入解析:Flink 实验性特性把“已预分区”的 DataStream 重新解释为 KeyedStream
  • 2025密炼机厂家实力榜:大连华韩领衔 四大品牌凭技术与口碑领跑橡塑机械行业
  • 2025矿物铸件厂家推荐排行榜:头部企业实力领跑,四星厂商凭细分优势站稳脚跟
  • Python 中 pymysql 操作 MySQL 数据库实操指南
  • 如何优雅地看着电脑为你打工? - Magic
  • 告别内网限制!用StirlingPDF+cpolar打造可远程访问的PDF程序站
  • 用localStorage 模拟SharedWorker
  • 千问快速review评审Java工程代码与异步代码智能体
  • 石油天然气行业OT/ICS安全:守护全球经济命脉的关键防线
  • trae编译器前端agent提示词
  • 2025 年最新http 代理服务商权威推荐排行榜:百万级 IP 资源 + 国际认证高可用率,爬虫 / 动态 / 高匿代理优选指南不限量 http 代理/独享 http 代理平台推荐
  • 安装部署opengauss
  • 视频汇聚平台EasyCVR如何通过可视化管理与远程运维赋能安防“一张网”