一、前言
在 AI 应用开发中,RAG(检索增强生成)是解决大模型知识滞后、私有知识问答的核心方案。Spring AI Alibaba 为阿里云百炼大模型提供了一站式适配 Starter,无需复杂封装,可快速对接百炼平台私有知识库,实现基于自有文档的智能问答、流式响应输出。
本文基于 Spring Boot + Spring AI Alibaba 实战搭建百炼 DashScope RAG 问答服务,实现知识库检索 + 流式对话输出完整功能,开箱即用,适合新手入门和项目落地。
二、项目环境依赖
2.1 核心依赖
项目基于 Spring Boot 基础 Web 环境,引入 Spring AI Alibaba 百炼 DashScope 自动化启动器,无需手动封装 API 请求,原生支持 RAG 知识库检索能力。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring AI Alibaba 百炼DashScope 核心依赖 -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
</dependency>
2.2 全局配置文件 application.properties
配置端口、全局编码、百炼 API-key、应用名称等核心参数,API-key 可在阿里云百炼平台个人中心获取。
# 服务端口
server.port=8017
# 全局UTF-8编码配置
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
server.servlet.encoding.charset=UTF-8
# 应用名称
spring.application.name=SAA-17BailianRAG
# 百炼DashScope API密钥(建议配置环境变量,避免硬编码泄露)
spring.ai.dashscope.api-key=${aliQwen-api}
注意事项:生产环境请勿直接填写明文 API-key,建议通过系统环境变量、配置中心、Nacos 等方式注入,防止密钥泄露。
三、核心配置类:DashScope 客户端初始化
通过自定义配置类初始化 DashScopeApi 客户端,指定工作空间ID,同时注入 ChatClient 对话客户端,为后续 RAG 问答提供基础能力支撑。
package com.zzyy.study.config;
import com.alibaba.cloud.ai.dashscope.api.DashScopeApi;
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;
/**
* 百炼DashScope客户端配置
* 初始化API客户端、对话客户端
*/
@Configuration
public class DashScopeConfig {
@Value("${spring.ai.dashscope.api-key}")
private String apiKey;
/**
* 构建DashScope API核心客户端
* @return DashScopeApi
*/
@Bean
public DashScopeApi dashScopeApi() {
return DashScopeApi.builder()
.apiKey(apiKey)
// 个人百炼工作空间ID
.workSpaceId("*****")
.build();
}
/**
* 构建通用对话客户端,用于问答交互
* @param dashscopeChatModel 百炼对话模型
* @return ChatClient
*/
@Bean
public ChatClient chatClient(ChatModel dashscopeChatModel) {
return ChatClient.builder(dashscopeChatModel).build();
}
}
配置说明:
DashScopeApi:百炼平台核心客户端,承载所有模型调用、知识库检索请求workSpaceId:阿里云百炼平台专属工作空间ID,对应个人/企业知识库空间ChatClient:Spring AI 统一对话客户端,简化问答、流式响应、参数配置等操作
四、RAG 流式问答接口实现
通过 DashScopeDocumentRetriever 绑定百炼平台指定知识库,结合 DocumentRetrievalAdvisor 实现检索增强生成,最终返回流式文本响应,实现打字机效果问答输出。
package com.zzyy.study.controller;
import com.alibaba.cloud.ai.advisor.DocumentRetrievalAdvisor;
import com.alibaba.cloud.ai.dashscope.api.DashScopeApi;
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.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;
/**
* RAG流式问答接口
* @param msg 用户提问内容
* @return Flux<String> 流式响应结果
*/
@GetMapping("/bailian/rag/chat")
public Flux<String> chat(@RequestParam(name = "msg", defaultValue = "00000错误信息") String msg) {
// 1、配置RAG检索参数:绑定百炼平台知识库名称
DashScopeDocumentRetrieverOptions documentRetrieverOptions = DashScopeDocumentRetrieverOptions.builder()
.withIndexName("*****") // 对应百炼平台创建的知识库名称
.build();
// 2、初始化知识库检索器
DocumentRetriever retriever = new DashScopeDocumentRetriever(dashScopeApi, documentRetrieverOptions);
// 3、构建问答请求,开启RAG检索+流式输出
return chatClient.prompt()
.user(msg)
// 挂载RAG检索增强处理器,优先从知识库检索内容再生成回答
.advisors(new DocumentRetrievalAdvisor(retriever))
.stream()
.content();
}
}
五、核心功能原理详解
5.1 RAG 执行流程
- 用户提问 :前端传入用户问题
msg - 知识库检索 :通过
DashScopeDocumentRetriever从百炼平台myerror知识库中检索相似文档片段 - 检索增强 :
DocumentRetrievalAdvisor将检索到的上下文拼接至用户提问中 - 模型生成:百炼大模型基于私有知识库内容生成专属答案
- 流式响应 :通过
Flux分段返回文本,实现实时打字机效果
5.2 核心类说明
| 类名 | 作用 |
|---|---|
DashScopeDocumentRetrieverOptions |
RAG 检索配置类,主要用于指定知识库索引名称 |
DashScopeDocumentRetriever |
百炼专属知识库检索器,对接云端知识库 |
DocumentRetrievalAdvisor |
AI 增强切面,自动完成检索、上下文注入、问答优化 |
Flux<String> |
Reactor 流式响应,适配前端实时渲染场景 |
六、总结
本文从零搭建了一个基于 Spring AI Alibaba + 阿里云百炼 DashScope 的 RAG 流式问答服务,核心代码仅需一个配置类和一个控制器,即可实现私有知识库检索增强与流式输出。整套方案极大简化了 AI 应用开发流程,开发者只需替换知识库名称和工作空间ID,便可快速上线自己的智能问答系统。希望本教程能为你带来启发,欢迎交流探讨。