站点图标 高效码农

RAGentA框架深度解析:多智能体如何打造高可信问答系统?

 

RAGentA:多智能体检索增强生成框架详解

在信息爆炸的时代,如何快速、准确地回答用户提问,并且确保答案真实可信,是构建智能问答系统的核心挑战。RAGentA(Retrieval-Augmented Generation Agent)正是为此而生:它采用多智能体协同、混合检索与严谨的引用追踪机制,帮助开发者打造覆盖度高、关联度强且完全可溯源的问答体验。


目录

  1. RAGentA 简介
  2. 核心特性
  3. 安装与配置
    • 环境准备
    • 克隆与依赖安装
    • AWS 与环境变量配置
  4. 快速上手
    • 单问题运行示例
    • 批量处理示例
  5. 系统架构详解
    1. 多智能体协同流程
      • 预测器(Agent 1)
      • 评判器(Agent 2)
      • 最终生成器(Agent 3)
      • 断言分析器(Agent 4)
    2. 混合检索机制
    3. 自适应阈值法
    4. 追问与补充系统
  6. 参数与配置选项
  7. 使用示例
  8. 常见问题(FAQ)
  9. HowTo:在项目中集成 RAGentA
  10. 评价指标
  11. 版权与致谢

RAGentA 简介

RAGentA 是一个面向“可溯源问答”(Attributed Question Answering)的多智能体检索增强生成(RAG)框架。它的设计目标是:

  • 答案覆盖度:确保答案内容全面覆盖提问要点
  • 关联度与准确度:答案严格基于检索到的文档信息,不“瞎编”
  • 可溯源性:自动跟踪引用来源,透明呈现每一条信息依据

RAGentA 由四个功能专长的智能体(Agent)协同完成完整问答流程,显著提升了答案的可信度与质量。


核心特性

  • 多智能体架构
    不同任务由不同智能体处理:从候选答案生成,到文档相关性评估,再到最终答案整合和断言分析。

  • 混合检索(Hybrid Retrieval)

    • 语义检索(Dense):使用向量数据库(Pinecone)进行深度语义匹配
    • 关键词检索(Sparse):基于 OpenSearch 的传统关键词匹配
    • 加权融合:通过 α 参数平衡两者得分
  • 引用追踪(Citation Tracking)
    所有生成内容均自动插入 [X] 格式引用,方便用户核验来源。

  • 断言分析(Claim Analysis)
    逐条拆解答案断言,评估覆盖度并自动生成针对遗漏部分的后续提问。

  • 追问补充(Follow‑Up Processing)
    对未完全回答的子问题生成新提问,检索额外文档并在答案中补充。

  • 标准化评测指标
    包含 MRR、Recall、Precision、F1 等多种 RAG 评测方法。


安装与配置

环境准备

  • 操作系统:Linux / macOS / Windows
  • Python:3.8 及以上
  • 深度学习:PyTorch ≥ 2.0.0
  • GPU:支持 CUDA(推荐)
  • 云服务:AWS OpenSearch、Pinecone(需账号)

克隆与依赖安装

git clone git@github.com:tobiasschreieder/LiveRAG.git
cd LiveRAG
python -m venv env
source env/bin/activate          # Windows: env\Scripts\activate
pip install -r requirements.txt

AWS 与环境变量配置

  1. 创建 AWS 凭证目录并编辑凭证:

    mkdir -p ~/.aws
    

    ~/.aws/credentials 文件:

    [sigir-participant]
    aws_access_key_id = YOUR_ACCESS_KEY
    aws_secret_access_key = YOUR_SECRET_KEY
    

    ~/.aws/config 文件:

    [profile sigir-participant]
    region = us-east-1
    output = json
    
  2. 增加环境变量(加入 shell 配置文件或 CI/CD):

    export AWS_PROFILE=sigir-participant
    export AWS_REGION=us-east-1
    export HUGGING_FACE_HUB_TOKEN=your_hf_token
    

快速上手

单问题运行示例

python run_RAGentA.py \
  --model tiiuae/Falcon3-10B-Instruct \
  --n 0.5 \
  --alpha 0.65 \
  --top_k 20 \
  --single_question "什么是知识图谱?"

批量处理示例

python run_RAGentA.py \
  --model tiiuae/Falcon3-10B-Instruct \
  --n 0.5 \
  --alpha 0.65 \
  --top_k 20 \
  --data_file questions.jsonl \
  --output_format jsonl

参数说明请见下表:

参数 含义 默认值
--model 模型名称或路径 tiiuae/falcon-3-10b-instruct
--n 自适应阈值调整因子 0.5
--alpha 语义 vs 关键词检索权重 0.65
--top_k 检索文档数量 20
--data_file JSON / JSONL 格式的问题文件
--single_question 单条问题文本
--output_format 输出格式(json, jsonl, debug) jsonl
--output_dir 结果保存目录 results

系统架构详解

多智能体协同流程

  1. 检索阶段

    • 查询发给混合检索模块,返回 Top‑K 文档
    • 语义检索(Pinecone)与关键词检索(OpenSearch)并行执行
    • 最终得分:score = α × semantic_score + (1−α) × keyword_score
  2. 初步生成阶段(Agent 1:Predictor)

    • 对每个文档单独生成候选答案
    • Input:<Query> + <Document>
    • Output:仅基于该文档的片段化答案
  3. 相关性评判阶段(Agent 2:Judge)

    • 计算每个候选答案的相关性分数
    • Score = log P(Yes) − log P(No)
    • 构建自适应阈值 τq = μ − n·σ(μ、σ 分别为平均值和标准差)
    • 仅保留分数 ≥ τq 的文档
  4. 终极整合阶段(Agent 3:Final‑Predictor)

    • 汇总已筛选文档,生成最终答案并自动插入 [X] 引用
    • 多文档拼接,确保逻辑连贯与引用准确
  5. 断言分析阶段(Agent 4:Claim Judge)

    • 拆解答案为独立断言,验证覆盖度
    • 对遗漏部分生成后续提问
    • 如有需要,重新检索并补充答案

混合检索机制

  • 语义检索

    • 向量数据库:Pinecone
    • Embedding 模型:intfloat/e5-base-v2
  • 关键词检索

    • 引擎:AWS OpenSearch
    • 精确匹配与布尔逻辑支持
  • 加权融合公式

    final_score = α × semantic_score + (1−α) × keyword_score
    

自适应阈值法

自适应阈值(Adaptive Judge Bar)能够根据当前查询难度动态调整筛选标准,防止过松或过严:

  1. 计算所有文档的相关性分数平均值 μ 与标准差 σ
  2. 阈值:τq = μ − n × σ
  3. 保留分数 ≥ τq 的文档进入下一阶段

追问与补充系统

  • 问题结构分析:判断是否存在多重子问题
  • 断言映射:将每条断言映射到对应子问题
  • 覆盖度评估:标记“完全”、“部分”、“未回答”
  • 后续提问:自动生成针对“未回答”部分的独立问题
  • 增量检索:对新问题再次检索并补充到最终答案

参数与配置选项

配置项 描述
AWS_PROFILE AWS 凭证配置名称
AWS_REGION AWS 区域
HUGGING_FACE_HUB_TOKEN 访问 Hugging Face 模型的 Token
--n 自适应阈值 σ 调整系数
--alpha 混合检索权重
--top_k Top‑K 检索数量

使用示例

# 设置环境变量
export AWS_PROFILE=sigir-participant
export AWS_REGION=us-east-1

# 运行单条问题
python run_RAGentA.py \
  --model tiiuae/Falcon3-10B-Instruct \
  --n 0.5 \
  --alpha 0.7 \
  --top_k 15 \
  --single_question "什么是多智能体检索增强生成?"

执行后会输出类似格式(JSONL):

{
  "id": "q123",
  "question": "什么是多智能体检索增强生成?",
  "passages": [
    {
      "passage": "文档内容……",
      "doc_IDs": ["doc1", "doc5"]
    }
  ],
  "final_prompt": "最终用于生成的 Prompt",
  "answer": "生成的带引用答案……"
}

常见问题(FAQ)

1. 为什么要同时使用语义检索和关键词检索?

为了兼顾深层语义匹配和精确关键词覆盖,两者互补可显著提升检索质量,避免遗漏关键信息或引入无关文档。

2. 如何调整 `α` 参数?

当文档多为长文本、需要深度语义理解时,可适当提高 `α`(>0.65);若关键词匹配需求更强,则可降低 `α`。

3. 自适应阈值的作用是什么?

它根据当前查询相关性分数分布自动调节筛选门槛,防止过多噪声文档或过度删减重要文档。

4. 如何查看生成答案的引用来源?

答案中所有 `[X]` 标记对应检索结果列表的第 X 篇文档,方便快速定位并人工校验。


HowTo 在项目中集成 RAGentA

  1. 准备环境

    • 安装 Python 3.8+、PyTorch
    • 确保已配置 AWS 与 Pinecone 服务
  2. 拉取代码

    git clone git@github.com:tobiasschreieder/LiveRAG.git
    cd LiveRAG
    
  3. 安装依赖

    python -m venv env
    source env/bin/activate
    pip install -r requirements.txt
    
  4. 修改检索配置
    config.yaml(或环境变量)中配置 alphatop_kprofile 等。

  5. 调用示例

    from RAGentA import RAGentA
    
    agent = RAGentA(
      model="tiiuae/Falcon3-10B-Instruct",
      n=0.5,
      alpha=0.65,
      top_k=20
    )
    
    answer = agent.answer("什么是知识图谱?")
    print(answer)
    
  6. 评估效果
    使用 RAG_evaluation.py 中的函数计算 MRR、Recall 等指标。


评价指标

from RAG_evaluation import evaluate_corpus_rag_mrr, evaluate_corpus_rag_recall

mrr = evaluate_corpus_rag_mrr(retrieved_docs, golden_docs, k=5)
recall = evaluate_corpus_rag_recall(retrieved_docs, golden_docs, k=20)
print(f"MRR: {mrr:.4f}, Recall: {recall:.4f}")
  • MRR(Mean Reciprocal Rank):衡量正确文档排名平均倒数
  • Recall:检索到的相关文档比例
  • Precision:检索结果中准确文档的比例
  • F1:Precision 与 Recall 的调和平均

版权与致谢

本项目采用 BSD 2-Clause License,更多细节请参阅 LICENSE 文件。

特别感谢以下工作对 RAGentA 的启发与支持:

  • Chang et al.,《MAIN‑RAG: Multi‑Agent Filtering Retrieval‑Augmented Generation》论文链接
  • RAGentA 原始作者:Ines Besrour, Jingbo He, Tobias Schreieder, Michael Färber 等 Besrour2025RAGentA
@misc{Chang2024MAIN-RAG,
  title={MAIN-RAG: Multi-Agent Filtering Retrieval-Augmented Generation},
  author={Chia-Yuan Chang and Zhimeng Jiang and Vineeth Rakesh and Menghai Pan and Chin-Chia Michael Yeh and Guanchu Wang and Mingzhi Hu and Zhichao Xu and Yan Zheng and Mahashweta Das and Na Zou},
  year={2024},
  eprint={2501.00332},
  archivePrefix={arXiv},
  primaryClass={cs.CL},
  url={https://arxiv.org/abs/2501.00332}
}

@misc{Besrour2025RAGentA,
  author={Ines Besrour and Jingbo He and Tobias Schreieder and Michael Färber},
  title={{RAGentA: Multi-Agent Retrieval-Augmented Generation for Attributed Question Answering}},
  year={2025},
  eprint={2506.16988},
  archivePrefix={arXiv},
  primaryClass={cs.IR},
  url={https://arxiv.org/abs/2506.16988}
}

退出移动版