RAGentA:多智能体检索增强生成框架详解
在信息爆炸的时代,如何快速、准确地回答用户提问,并且确保答案真实可信,是构建智能问答系统的核心挑战。RAGentA(Retrieval-Augmented Generation Agent)正是为此而生:它采用多智能体协同、混合检索与严谨的引用追踪机制,帮助开发者打造覆盖度高、关联度强且完全可溯源的问答体验。
目录
-
RAGentA 简介 -
核心特性 -
安装与配置 -
✦ 环境准备 -
✦ 克隆与依赖安装 -
✦ AWS 与环境变量配置
-
-
快速上手 -
✦ 单问题运行示例 -
✦ 批量处理示例
-
-
系统架构详解 -
参数与配置选项 -
使用示例 -
常见问题(FAQ) -
HowTo:在项目中集成 RAGentA -
评价指标 -
版权与致谢
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 与环境变量配置
-
创建 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
-
增加环境变量(加入 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 |
系统架构详解
多智能体协同流程
-
检索阶段
-
✦ 查询发给混合检索模块,返回 Top‑K 文档 -
✦ 语义检索(Pinecone)与关键词检索(OpenSearch)并行执行 -
✦ 最终得分: score = α × semantic_score + (1−α) × keyword_score
-
-
初步生成阶段(Agent 1:Predictor)
-
✦ 对每个文档单独生成候选答案 -
✦ Input: <Query> + <Document>
-
✦ Output:仅基于该文档的片段化答案
-
-
相关性评判阶段(Agent 2:Judge)
-
✦ 计算每个候选答案的相关性分数 -
✦ Score = log P(Yes) − log P(No) -
✦ 构建自适应阈值 τq = μ − n·σ(μ、σ 分别为平均值和标准差) -
✦ 仅保留分数 ≥ τq 的文档
-
-
终极整合阶段(Agent 3:Final‑Predictor)
-
✦ 汇总已筛选文档,生成最终答案并自动插入 [X]
引用 -
✦ 多文档拼接,确保逻辑连贯与引用准确
-
-
断言分析阶段(Agent 4:Claim Judge)
-
✦ 拆解答案为独立断言,验证覆盖度 -
✦ 对遗漏部分生成后续提问 -
✦ 如有需要,重新检索并补充答案
-
混合检索机制
-
✦ 语义检索
-
✦ 向量数据库:Pinecone -
✦ Embedding 模型: intfloat/e5-base-v2
-
-
✦ 关键词检索
-
✦ 引擎:AWS OpenSearch -
✦ 精确匹配与布尔逻辑支持
-
-
✦ 加权融合公式
final_score = α × semantic_score + (1−α) × keyword_score
自适应阈值法
自适应阈值(Adaptive Judge Bar)能够根据当前查询难度动态调整筛选标准,防止过松或过严:
-
计算所有文档的相关性分数平均值 μ 与标准差 σ -
阈值:τq = μ − n × σ -
保留分数 ≥ τ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
-
准备环境
-
✦ 安装 Python 3.8+、PyTorch -
✦ 确保已配置 AWS 与 Pinecone 服务
-
-
拉取代码
git clone git@github.com:tobiasschreieder/LiveRAG.git cd LiveRAG
-
安装依赖
python -m venv env source env/bin/activate pip install -r requirements.txt
-
修改检索配置
在config.yaml
(或环境变量)中配置alpha
、top_k
、profile
等。 -
调用示例
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)
-
评估效果
使用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}
}