LangChainLlamaIndexHuggingFacePython notebooks…… 做着各种酷炫的 AI 操作但 2025 年彻底改变了这一切。现在有了Spring AIPgVector / Milvus / Chroma内置在 Spring Boot 中的 Embeddings简单的向量搜索客户端本地 LLM 支持…… 你现在可以完全在 Spring Boot 中构建一个生产级别的 RAG 管道。无需黑客手段。 无需胶水脚本。 无需 Python 依赖。这份指南将带你构建第一个端到端的 Java RAG 管道代码简洁且对开发者友好。让我们开始吧。01 步骤 12025 RAG 架构Java 版大多数公司在生产环境中使用的就是这个架构代码语言javascriptAI代码解释┌──────────────────────────┐ │ Spring Boot │ │ (Spring AI) │ └────────────┬─────────────┘ │ ┌───────────▼────────────┐ │ Embedding Generator │ ← OpenAI / Ollama / Gemini └───────────┬────────────┘ │ ┌───────────▼────────────┐ │ Vector Database (DB) │ ← PgVector / Milvus / Pinecone └───────────┬────────────┘ │ ┌───────────▼────────────┐ │ LLM (Chat / Completion)│ └─────────────────────────┘一个干净、现代的 Java RAG 系统✔ 文档摄取✔ 转换为 Embeddings✔ 存储向量✔ 向量搜索✔ 将相关片段输入 LLM让我们构建每个部分。02 步骤 2添加依赖Spring Boot 3.5你的 pom.xml 只需要三个真正的依赖代码语言javascriptAI代码解释dependencies !-- Spring AI 核心 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-openai-spring-boot-starter/artifactId /dependency !-- 用于 Embeddings 聊天 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-pgvector-store-spring-boot-starter/artifactId /dependency !-- Web API -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency /dependencies就这些。Spring AI 承担了大部分繁重的工作。03 步骤 3创建 EmbeddingsJava 代码Spring AI 为 Java 提供了最简单的 Embedding API。代码语言javascriptAI代码解释Service public class EmbeddingService { Autowired private EmbeddingClient embeddingClient; public ListDouble embed(String text) { return embeddingClient.embed(text).getOutput(); } }调用这个方法可以将任何文档转换为向量。04️ 步骤 4将 Embeddings 存储到 PgVectorPgVector 是 Spring Boot 最容易使用的向量数据库因为它本质上就是 PostgreSQL。你的表结构代码语言javascriptAI代码解释CREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT, embedding VECTOR(1536) );用 Spring 插入数据代码语言javascriptAI代码解释Autowired JdbcTemplate jdbc; public void saveEmbedding(String content, ListDouble vector) { jdbc.update( INSERT INTO documents(content, embedding) VALUES (?, ?) , content, vector.toArray()); }代码语言javascriptAI代码解释搞定。你现在有了一个 Java 向量数据库。05 步骤 5向量搜索最近邻查询这是那个神奇的查询代码语言javascriptAI代码解释SELECT content FROM documents ORDER BY embedding - :queryVector LIMIT 3;代码语言javascriptAI代码解释代码版本代码语言javascriptAI代码解释public ListString searchSimilar(ListDouble vector) { return jdbc.query( SELECT content FROM documents ORDER BY embedding - ? LIMIT 3 , (rs, row) - rs.getString(content), vector.toArray()); }代码语言javascriptAI代码解释这赋予了 RAG 强大的能力 —— 语义搜索而非关键词搜索。06 步骤 6使用检索到的上下文询问 LLMSpring AI 的 ChatClient 让 RAG 变得极其简单代码语言javascriptAI代码解释Autowired ChatClient chatClient; public String answer(String question) { ListDouble queryVector embeddingClient.embed(question).getOutput(); ListString context searchSimilar(queryVector); String prompt Answer the question using ONLY the context below. Context: %s Question: %s .formatted(String.join(\n, context), question); return chatClient.call(prompt); }这就是一个完整的 RAG 管道。没有 LangChain。 没有 Python。 只有干净的 Spring Boot 代码。07 步骤 7暴露为 API代码语言javascriptAI代码解释RestController RequestMapping(/rag) public class RagController { Autowired private RagService ragService; GetMapping(/ask) public String ask(RequestParam String q) { return ragService.answer(q); } }调用方式代码语言javascriptAI代码解释GET /rag/ask?qWhat is the refund policy?你现在有了一个基于 Java 的 RAG 微服务可以直接部署。08 你刚刚构建了什么✔ AI 驱动的答案引擎✔ 语义向量搜索✔ 具备外部知识的 LLM✔ 完全基于 Spring Boot✔ 可部署到任何地方Docker、Kubernetes、ECS、Cloud Run现在各大公司正在使用完全相同的设置客户支持应用内部企业搜索知识库聊天机器人助手代码 / 文档问答LLM 驱动的工作流这就是 2025 年 Java 团队标准化的架构。09 最后思考Spring AI 彻底改变了游戏规则。Java 开发者终于有了一个干净、官方的方式来构建RAG智能体向量搜索多模态应用函数调用系统而且它与 Spring Boot 完美配合。如果你是一名 Java 后端工程师这是属于你的 AI 时刻。别错过