首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >告别 Python 依赖!Spring AI RAG 核心依赖配置指南

告别 Python 依赖!Spring AI RAG 核心依赖配置指南

作者头像
HELLO程序员
发布2026-06-26 21:15:47
发布2026-06-26 21:15:47
1050
举报

🧠 为什么 Java 开发者终于在 2025 年开始做 RAG 了?

在 2024 年之前,检索增强生成(RAG)还是个 Python 专属的 "俱乐部"。

Java 开发者只能眼睁睁看着:

  • LangChain
  • LlamaIndex
  • HuggingFace
  • Python notebooks

…… 做着各种酷炫的 AI 操作

但 2025 年彻底改变了这一切。

现在有了:

  • Spring AI
  • PgVector / Milvus / Chroma
  • 内置在 Spring Boot 中的 Embeddings
  • 简单的向量搜索客户端
  • 本地 LLM 支持
  • …… 你现在可以完全在 Spring Boot 中构建一个生产级别的 RAG 管道。

无需黑客手段。 无需胶水脚本。 无需 Python 依赖。

这份指南将带你构建第一个端到端的 Java RAG 管道,代码简洁且对开发者友好。

让我们开始吧。👇

01

🧩 步骤 1:2025 RAG 架构(Java 版)

大多数公司在生产环境中使用的就是这个架构:

代码语言:javascript
复制
┌──────────────────────────┐
            │       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 只需要三个真正的依赖:

代码语言:javascript
复制
<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 承担了大部分繁重的工作。

03

🧠 步骤 3:创建 Embeddings(Java 代码)

Spring AI 为 Java 提供了最简单的 Embedding API。

代码语言:javascript
复制
@Service
public class EmbeddingService {
    @Autowired
    private EmbeddingClient embeddingClient;

    public List<Double> embed(String text) {
        return embeddingClient.embed(text).getOutput();
    }
}

调用这个方法可以将任何文档转换为向量。

04

🏛️ 步骤 4:将 Embeddings 存储到 PgVector

PgVector 是 Spring Boot 最容易使用的向量数据库,因为它本质上就是 PostgreSQL。

你的表结构:

代码语言:javascript
复制
CREATE TABLE documents (
    id SERIAL PRIMARY KEY,
    content TEXT,
    embedding VECTOR(1536)
);

用 Spring 插入数据:

代码语言:javascript
复制
@Autowired
JdbcTemplate jdbc;
public void saveEmbedding(String content, List<Double> vector) {
    jdbc.update("""
        INSERT INTO documents(content, embedding)
        VALUES (?, ?)
    """, content, vector.toArray());
}
代码语言:javascript
复制

搞定。你现在有了一个 Java 向量数据库。💥

05

🔍 步骤 5:向量搜索(最近邻查询)

这是那个神奇的查询:

代码语言:javascript
复制
SELECT content
FROM documents
ORDER BY embedding <-> :queryVector
LIMIT 3;
代码语言:javascript
复制

代码版本:
代码语言:javascript
复制
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());
}
代码语言:javascript
复制

这赋予了 RAG 强大的能力 —— 语义搜索而非关键词搜索。

06

🤖 步骤 6:使用检索到的上下文询问 LLM

Spring AI 的 ChatClient 让 RAG 变得极其简单:

代码语言:javascript
复制
@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 代码。

07

🚀 步骤 7:暴露为 API

代码语言:javascript
复制
@RestController
@RequestMapping("/rag")
public class RagController {
    @Autowired
    private RagService ragService;

    @GetMapping("/ask")
    public String ask(@RequestParam String q) {
        return ragService.answer(q);
    }
}

调用方式:

代码语言:javascript
复制
GET /rag/ask?q=What 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 时刻。别错过!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HELLO程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档