第十七章 百炼 RAG 知识库应用
版本标注
- Spring AI:
1.1.2- Spring AI Alibaba:
1.1.2.0章节定位
- 本章介绍的是阿里云提供的托管式知识库检索能力,也就是把文档管理、索引构建和知识库维护交给云平台。
- 相比自建
VectorStoreRAG,这条路线更适合快速接入和企业场景。
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)
这一章能跑起来,关键在于先把 DashScopeApi、ChatModel、ChatClient 配好。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();
}
}
这段配置的作用是:
dashScopeApi():创建百炼 API 客户端。deepSeek(...):指定本章使用的聊天模型(deepseek-v3)。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();
}
}
控制器里的执行顺序可以概括为:
- 用
DashScopeDocumentRetriever指定知识库(ops)。 - 用
DocumentRetrievalAdvisor把检索能力接入对话链路。 ChatClient在生成回答前先检索,再把检索结果注入模型上下文。
四、知识库创建(阿里云平台)
4.1 创建流程
要在阿里云百炼平台使用RAG,需要:
- 登录阿里云百炼控制台
- 创建知识库
- 选择文档类型(PDF、Word、TXT等)
- 上传文档
- 等待向量化完成
- 获取 API Key 和知识库名称
- 在代码中配置使用
4.2 支持的文档格式
| 格式 | 说明 |
|---|---|
| 文档型 | |
| 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仍然是更好的选择。
本章重点:
- 理解百炼RAG服务的优势
- 掌握DashScopeDocumentRetriever的用法
- 能够在代码中集成阿里云知识库
下章剧透(s18):
学会了阿里云百炼RAG后,最后一章我们将学习 Agent(智能体)——结合所有技术构建真正的AI应用!
📝 编辑者:Flittly
📅 更新时间:2026年4月
🔗 相关资源:阿里云百炼RAG文档