Spring AI Alibaba 云端 RAG 实战:基于百炼 DashScope 构建私有知识库

一、前言

在 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 执行流程

  1. 用户提问 :前端传入用户问题 msg
  2. 知识库检索 :通过 DashScopeDocumentRetriever 从百炼平台 myerror 知识库中检索相似文档片段
  3. 检索增强DocumentRetrievalAdvisor 将检索到的上下文拼接至用户提问中
  4. 模型生成:百炼大模型基于私有知识库内容生成专属答案
  5. 流式响应 :通过 Flux 分段返回文本,实现实时打字机效果

5.2 核心类说明

类名 作用
DashScopeDocumentRetrieverOptions RAG 检索配置类,主要用于指定知识库索引名称
DashScopeDocumentRetriever 百炼专属知识库检索器,对接云端知识库
DocumentRetrievalAdvisor AI 增强切面,自动完成检索、上下文注入、问答优化
Flux<String> Reactor 流式响应,适配前端实时渲染场景

六、总结

本文从零搭建了一个基于 Spring AI Alibaba + 阿里云百炼 DashScope 的 RAG 流式问答服务,核心代码仅需一个配置类和一个控制器,即可实现私有知识库检索增强与流式输出。整套方案极大简化了 AI 应用开发流程,开发者只需替换知识库名称和工作空间ID,便可快速上线自己的智能问答系统。希望本教程能为你带来启发,欢迎交流探讨。

相关推荐
Java成神之路-3 天前
RAG 工程最优解:意图路由分流架构
人工智能·ai应用开发·springaialibaba
Java成神之路-9 天前
基于 Spring AI+MCP 协议实现大模型调用本地自定义工具
java·spring·springaialibaba
Java成神之路-1 个月前
告别大模型幻觉!基于 Spring AI Alibaba 的RAG 运维问答实现
springaialibaba
中间件XL1 个月前
ai-agent框架spring ai alibaba (三)外部调用II-2 分布式MCP
spring ai·springaialibaba·分布式mcp·nacos3
Java成神之路-1 个月前
RAG 文本向量化:文本转向量、向量入库、相似度查询全过程
springaialibaba
Java成神之路-1 个月前
Spring AI Alibaba 实现多轮对话记忆:ChatMemory 与 Redis 持久化实战
java·springaialibaba
Java成神之路-1 个月前
Spring AI 统一结构化返回:ChatModel / ChatClient 两种实现方式
java·springaialibaba
MinggeQingchun1 个月前
AI - Java之Spring AI Alibaba
ai·springai·springaialibaba
中间件XL2 个月前
ai-agent框架spring ai/alibaba 原理源码分析(五)graph III 图执行
graph·ai agent·spring ai·springaialibaba