基于 Spring AI Alibaba 的多智能体协作检索增强生成系统

Agentic RAG Demo

基于 Spring AI Alibaba 的多智能体协作检索增强生成系统

架构概览

三层协作模型

  1. RAG 执行单元(顺序协作)

    • 查询重写 -> 多路检索 -> 答案生成
    • 单独执行一个完整的 RAG 流程
  2. 检查者 Agent(循环协作)

    • 多维评分(相关性、准确性、完整性、时效性)
    • 评分不达标时提供改进建议
    • 支持最多 3 次重试
  3. 监督者 Agent(监督者协作)

    • 任务拆解:复杂问题分解为子查询
    • 并行执行:多个 RAG 单元并行处理
    • 结果汇总:整合子答案为最终答案
    • 质量监督:检查并优化最终结果

技术栈

  • Java 17+
  • Spring Boot 3.4.4
  • Spring AI Alibaba 1.1.2.0
  • DashScope(千问大模型)
  • Chroma(向量数据库)

快速开始

1. 配置环境

设置 DashScope API Key:

export DASHSCOPE_API_KEY=your-api-key

2. 启动向量数据库(可选)

docker run -d --name chroma -p 8000:8000 chromadb/chroma

3. 运行项目

mvn spring-boot:run

API 接口

简单 RAG 模式

curl -X POST http://localhost:8081/api/rag/simple \
  -H "Content-Type: application/json" \
  -d '{"query": "Spring AI 是什么?"}'

检查者 RAG 模式

curl -X POST http://localhost:8081/api/rag/checker \
  -H "Content-Type: application/json" \
  -d '{"query": "Spring AI 和 LangChain 有什么区别?"}'

监督者 RAG 模式

curl -X POST http://localhost:8081/api/rag/supervisor \
  -H "Content-Type: application/json" \
  -d '{"query": "比较 Spring AI 和 LangChain4j 的优缺点"}'

项目结构

src/main/java/com/example/agenticrag/
├── AgenticRagApplication.java        # 主应用程序
├── config/
│   └── GraphConfig.java              # 图配置
├── controller/
│   └── AgenticRagController.java     # API 控制器
├── service/
│   └── AgenticRagService.java        # 业务服务
└── graph/
    ├── RagGraph.java                 # RAG 执行图
    ├── CheckerGraph.java             # 检查者图
    ├── SupervisorGraph.java          # 监督者图
    ├── state/
    │   └── RagState.java             # 状态对象
    └── node/
        ├── QueryRewriteNode.java     # 查询重写节点
        ├── MultiRetrievalNode.java   # 多路检索节点
        ├── AnswerGenerateNode.java   # 答案生成节点
        ├── ScoreNode.java            # 评分节点
        ├── TaskDecompositionNode.java # 任务拆解节点
        └── ResultAggregationNode.java # 结果汇总节点

配置说明

agentic-rag:
  checker:
    pass-score: 80      # 通过分数
    max-retries: 3      # 最大重试次数

扩展指南

添加新的节点类型

  1. graph/node 包下创建新的节点类
  2. 实现 apply(RagState state) 方法
  3. 在图定义中添加节点

添加新的评分维度

修改 ScoreNode 类,添加新的评分维度

集成其他向量数据库

修改 MultiRetrievalNode 类,实现其他检索方式

posted @ 2026-03-19 22:14  神秘园欢迎您  阅读(3)  评论(0)    收藏  举报