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