【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文档

目录
相关文章
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
32698 79
如何保证分布式文件系统的数据一致性
|
前端开发 容器
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局(上)
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局
17753 20
|
设计模式 存储 监控
设计模式(C++版)
看懂UML类图和时序图30分钟学会UML类图设计原则单一职责原则定义:单一职责原则,所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。bad case:IPhone类承担了协议管理(Dial、HangUp)、数据传送(Chat)。good case:里式替换原则定义:里氏代换原则(Liskov 
36684 19
设计模式(C++版)
|
存储 编译器 C语言
抽丝剥茧C语言(初阶 下)(下)
抽丝剥茧C语言(初阶 下)
|
机器学习/深度学习 人工智能 自然语言处理
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
24758 14
|
机器学习/深度学习 弹性计算 监控
重生之---我测阿里云U1实例(通用算力型)
阿里云产品全线降价的一力作,2023年4月阿里云推出新款通用算力型ECS云服务器Universal实例,该款服务器的真实表现如何?让我先测为敬!
36662 15
重生之---我测阿里云U1实例(通用算力型)
|
SQL 存储 弹性计算
Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
|
存储 算法 Java
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务
随着互联网的快速发展,越来越多的应用程序需要处理大量的请求。如果没有限制,这些请求可能会导致应用程序崩溃或变得不可用。因此,限流器是一种非常重要的技术,可以帮助应用程序控制请求的数量和速率,以保持稳定和可靠的运行。
29838 52

热门文章

最新文章

下一篇
开通oss服务