【SpringAIAlibaba新手村系列】(17)百炼 RAG 知识库应用

简介: 本章基于 Spring AI Alibaba 落地百炼 RAG,完成 DashScopeApi、ChatModel、ChatClient 配置,并通过检索器与 DocumentRetrievalAdvisor 组装检索增强问答链路,实现可运行的知识库问答接口。

第十七章 百炼 RAG 知识库应用

版本标注

  • Spring AI: 1.1.2
  • Spring AI Alibaba: 1.1.2.0

章节定位

  • 本章介绍的是阿里云提供的托管式知识库检索能力,也就是把文档管理、索引构建和知识库维护交给云平台。
  • 相比自建 VectorStore RAG,这条路线更适合快速接入和企业场景。

s01 > s02 > s03 > s04 > s05 > s06 > s07 > s08 > s09 > s10 > s11 > s12 > s13 > s14 > s15 > s16 > [ s17 ] > s18

"知识库不是把资料存进去就结束, 而是要让检索真正参与回答" -- 百炼 RAG 的价值在于把专有知识接进模型。


一、什么是百炼 RAG?

1.1 自建 RAG vs 百炼 RAG

我们在第12章学习的 RAG:需要自己

  • 准备文档数据
  • 切分文本
  • 向量化存储到向量数据库
  • 配置检索和生成

阿里云百炼 RAG:提供一站式服务

  • 阿里云帮你管理文档
  • 自动向量化
  • 自动索引优化
  • 只需调用 API 即可检索

1.2 百炼 RAG 的优势

对比项 自建 RAG 百炼 RAG
部署维护 需要自己维护 阿里云全托管
文档管理 需要自己处理 可视化管理
索引优化 需要调优 自动优化
安全性 取决于自身 企业级安全
成本 服务器+运维 按调用量付费

二、核心概念与 API

2.1 DashScopeDocumentRetriever

Spring AI Alibaba 提供了 DashScopeDocumentRetriever,用于连接阿里云百炼知识库:

// 创建百炼文档检索器
DocumentRetriever retriever = new DashScopeDocumentRetriever(
    dashScopeApi,  // 阿里云API客户端
    options        // 配置选项(知识库名称等)
);

2.2 核心配置参数

// 关键配置:知识库名称
DashScopeDocumentRetrieverOptions options = 
    DashScopeDocumentRetrieverOptions.builder()
        .withIndexName("ops")        // 知识库名称
        // .withTopK(3)             // 返回3个最相似的结果
        // .withScoreThreshold(0.7f) // 相似度阈值
        .build();

三、项目代码详解

3.1 配置类(DashScopeConfig)

这一章能跑起来,关键在于先把 DashScopeApiChatModelChatClient 配好。BailianRagController 只是使用这些 Bean。

import com.alibaba.cloud.ai.dashscope.api.DashScopeApi;
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DashScopeConfig {
   

    @Value("${spring.ai.dashscope.api-key}")
    private String apiKey;

    private final String DEEPSEEK_MODEL = "deepseek-v3";

    @Bean
    public DashScopeApi dashScopeApi() {
   
        return DashScopeApi.builder()
                .apiKey(apiKey)
                .build();
    }

    @Bean
    public ChatModel deepSeek(DashScopeApi dashScopeApi) {
   
        return DashScopeChatModel.builder()
                .dashScopeApi(dashScopeApi)
                .defaultOptions(
                        DashScopeChatOptions.builder().withModel(DEEPSEEK_MODEL).build()
                )
                .build();
    }

    @Bean
    public ChatClient chatClient(ChatModel dashscopeChatModel) {
   
        return ChatClient.builder(dashscopeChatModel).build();
    }
}

这段配置的作用是:

  1. dashScopeApi():创建百炼 API 客户端。
  2. deepSeek(...):指定本章使用的聊天模型(deepseek-v3)。
  3. chatClient(...):给控制器提供统一的调用入口。

3.2 application.yml(与配置类对应)

DashScopeConfig 依赖 spring.ai.dashscope.api-key,所以配置文件里至少要有:

spring:
  ai:
    dashscope:
      api-key: ${
   DASHSCOPE_API_KEY}

你当前项目里的 Saa17 还能看到 redis 配置,但本章这条百炼托管知识库链路里并不依赖本地 VectorStore,因此核心仍然是上面的 dashscope.api-key 与知识库名称。

3.3 百炼 RAG 控制器

import com.alibaba.cloud.ai.advisor.DocumentRetrievalAdvisor;
import com.alibaba.cloud.ai.dashscope.api.DashScopeApi;
import com.alibaba.cloud.ai.dashscope.rag.DashScopeDocumentRetrievalAdvisor;
import com.alibaba.cloud.ai.dashscope.rag.DashScopeDocumentRetriever;
import com.alibaba.cloud.ai.dashscope.rag.DashScopeDocumentRetrieverOptions;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.document.DocumentReader;
import org.springframework.ai.rag.retrieval.search.DocumentRetriever;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

/**
 * 百炼RAG知识库控制器
 * 展示如何调用阿里云百炼知识库服务
 */
@RestController
public class BailianRagController
{
   
    @Resource
    private ChatClient chatClient;

    @Resource
    private DashScopeApi dashScopeApi;

    @GetMapping("/bailian/rag/chat")
    public Flux<String> chat(@RequestParam(name = "msg", defaultValue = "00000错误信息") String msg)
    {
   
        DocumentRetriever retriever = new DashScopeDocumentRetriever(dashScopeApi,
                DashScopeDocumentRetrieverOptions.builder()
                        .withIndexName("ops")
                        .build()
        );

        return chatClient.prompt()
                .user(msg)
                .advisors(new DocumentRetrievalAdvisor(retriever))
                .stream()
                .content();
    }
}

控制器里的执行顺序可以概括为:

  1. DashScopeDocumentRetriever 指定知识库(ops)。
  2. DocumentRetrievalAdvisor 把检索能力接入对话链路。
  3. ChatClient 在生成回答前先检索,再把检索结果注入模型上下文。

四、知识库创建(阿里云平台)

4.1 创建流程

要在阿里云百炼平台使用RAG,需要:

  1. 登录阿里云百炼控制台
  2. 创建知识库
    • 选择文档类型(PDF、Word、TXT等)
    • 上传文档
    • 等待向量化完成
  3. 获取 API Key 和知识库名称
  4. 在代码中配置使用

4.2 支持的文档格式

格式 说明
PDF 文档型
Word (.docx) 文档型
TXT 文本型
HTML 网页型
Markdown 文本型

五、本章小结

5.1 核心概念

概念 说明
DashScopeDocumentRetriever 阿里云知识库文档检索器
DashScopeDocumentRetrieverOptions 检索器配置选项
DocumentRetrievalAdvisor 文档检索增强组件
知识库名称 百炼平台创建的知识库标识

5.2 使用流程

1. 在阿里云百炼平台创建知识库、上传文档
2. 在application.yml配置API Key
3. 创建DashScopeDocumentRetriever并指定知识库名称
4. 注册DocumentRetrievalAdvisor
5. ChatClient自动完成检索+生成

5.3 自建RAG vs 百炼RAG对比

特性 自建RAG 百炼RAG
部署 Docker/K8S 阿里云托管
文档管理 需代码实现 平台可视化
索引优化 手动调参 自动优化
数据安全 自行保证 企业级保障
适用场景 定制化强 快速上手

💡 TIP:什么时候选百炼知识库路线?

如果你的目标是快速搭建知识库问答,而不想自己维护向量库、切分流程和索引细节,那么百炼知识库路线会更省事。

1. 运维成本

  • 自建RAG需要:向量数据库维护+分词/向量化服务+索引优化+7x24监控
  • 百炼RAG:开箱即用,零运维

2. 检索链路更省心

  • 自建RAG效果依赖算法调优,需要专业知识
  • 百炼知识库:平台已经把文档管理、索引和检索流程集成好了

3. 安全合规

  • 企业敏感数据如何存储?自建需要额外安全措施
  • 百炼RAG:阿里云提供完善的数据安全合规认证

4. 扩展性

  • 自建RAG:要根据业务增长扩容向量数据库
  • 百炼RAG:按量付费,弹性伸缩

但如果你的业务有特殊需求(如完全私有化部署、特定分词规则),自建RAG仍然是更好的选择。

本章重点

  1. 理解百炼RAG服务的优势
  2. 掌握DashScopeDocumentRetriever的用法
  3. 能够在代码中集成阿里云知识库

下章剧透(s18):

学会了阿里云百炼RAG后,最后一章我们将学习 Agent(智能体)——结合所有技术构建真正的AI应用!


📝 编辑者:Flittly
📅 更新时间:2026年4月
🔗 相关资源阿里云百炼RAG文档

目录
相关文章
|
27天前
|
人工智能 运维 Java
【SpringAIAlibaba新手村系列】(12)RAG 检索增强生成技术
本文深入探讨 RAG 技术在 AiOps 场景中的应用,以基于 ops.txt 构建运维知识库为例,讲解了如何通过将文本切分、向量化并存入向量数据库,实现 AI 故障查询。内容涵盖 EmbeddingModel、VectorStore 的基本概念,以及利用 Redis 的 SETNX 机制防止知识库重复导入的工程实践。核心在于让 AI 结合外部知识库,更准确地回答运维问题。
299 0
|
21天前
|
人工智能 Java API
【SpringAIAlibaba新手村系列】(18)Agent 智能体与今日菜单应用
本章以 ReactAgent 为入口,将本地菜单工具与 MCP 外部工具合并注册,统一通过 /eatAgent 执行任务,展示 Agent 在多工具协同下的意图理解、工具调用与结果整合能力。
263 3
|
2月前
|
人工智能 前端开发 Java
【SpringAIAlibaba新手村系列】(4)流式输出与响应式编程
本文围绕 Spring AI 中的流式输出与响应式编程展开,重点解释了传统一次性响应与流式返回的差异,以及 Flux 在异步数据流中的核心作用。文章结合 ChatModel.stream() 与 ChatClient 的多种代码示例,说明如何实现 AI 内容的边生成边返回,并帮助读者理解流式调用在用户体验、性能和长文本场景中的实际价值。
645 4
【SpringAIAlibaba新手村系列】(4)流式输出与响应式编程
|
1月前
|
NoSQL Java 数据库
【SpringAIAlibaba新手村系列】(11)Embedding 向量化与向量数据库
本文围绕 Embedding 与向量数据库展开,讲解了文本向量化、相似度检索和 VectorStore 的基本用法,并结合 SimpleVectorStore 示例说明了 Spring 中自动装配与手动注册 Bean 的区别,为后续学习 RAG 打下基础。
421 4
【SpringAIAlibaba新手村系列】(11)Embedding 向量化与向量数据库
|
25天前
|
人工智能 Java 定位技术
【SpringAIAlibaba新手村系列】(14)MCP 本地服务与工具集成
本章从 MCP Server 视角出发,说明如何将本地天气查询能力整理并暴露为标准化工具服务。内容涵盖 @Tool、ToolCallbackProvider、MethodToolCallbackProvider 的作用,以及 Streamable-HTTP 协议下服务端的能力注册与对外提供逻辑。
303 13
|
25天前
|
人工智能 JSON 编解码
【SpringAIAlibaba新手村系列】(15)MCP Client 调用本地服务
本章从 MCP Client 视角说明如何连接上一章提供的本地服务,并把远端工具接入 ChatClient。重点讲解 Streamable-HTTP 配置、ToolCallbackProvider 的注入方式,以及模型如何通过 JSON-RPC 消息完成工具调用与结果回传。
285 21
|
25天前
|
人工智能 Java 定位技术
【SpringAIAlibaba新手村系列】(16)调用百度 MCP 服务
本章展示如何在客户端接入第三方百度 MCP 服务。通过 spring-ai-starter-mcp-client、application.yml 与 mcp-server.json5 完成 stdio 方式连接,自动发现并注册远端工具到 ChatClient,实现天气、IP 归属地、路线规划等能力调用。
310 9
|
20天前
|
人工智能 NoSQL Java
【SpringAIAlibaba新手村系列】(8)持久化会话与 Redis 内存管理
本文详解 Spring AI 的会话记忆机制,从内存版 MemorySaver 到 Redis 版 RedisSaver,实现 AI 对话的上下文连续性。文章以 ReactAgent 为核心,讲解如何通过 threadId 管理会话线程,并将 Agent 状态持久化到 Redis 中。
435 4
|
人工智能 JavaScript Java
【SpringAIAlibaba新手村系列】(1)初识 Spring AI Alibaba 框架
本文介绍了SpringAIAlibaba框架的基本概念和使用方法。作为Spring官方AI框架的阿里云实现版本,它简化了Java开发者调用AI模型的过程。文章详细讲解了核心概念如ChatModel、ChatClient,以及阿里云百炼平台的功能。通过HelloWorld项目示例,展示了如何配置APIKey、编写控制层代码,实现普通调用和流式输出两种AI交互方式。重点阐述了SpringAI与SpringAIAlibaba的关系,以及自动配置机制的工作原理,帮助开发者快速上手这一框架。
2504 4
|
1月前
|
人工智能 JSON Java
【SpringAIAlibaba新手村系列】(7)结构化输出与对象映射
本文详解 Spring AI 结构化输出功能,通过 Java Record 与 .entity() 方法,实现 AI 的 JSON 响应自动映射为 Java 对象,解决纯文本难以集成的问题。文中还对比了 Lambda 写法并提供 Prompt 设计最佳实践。
255 3

热门文章

最新文章