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

举报
HELLO程序员 发表于 2025/12/27 11:27:48 2025/12/27
【摘要】 🧠 为什么 Java 开发者终于在 2025 年开始做 RAG 了?在 2024 年之前,检索增强生成(RAG)还是个 Python 专属的"俱乐部"。Java 开发者只能眼睁睁看着:LangChainLlamaIndexHuggingFacePython 笔记本……做着各种酷炫的 AI 操作但 2025 年彻底改变了这一切。现在有了:Spring AIPgVector / Milvus...

🧠 为什么 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 时刻。别错过!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。