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(需账号)
克隆与依赖安装
AWS 与环境变量配置
-
创建 AWS 凭证目录并编辑凭证:
~/.aws/credentials 文件:
~/.aws/config 文件:
-
增加环境变量(加入 shell 配置文件或 CI/CD):
快速上手
单问题运行示例
批量处理示例
参数说明请见下表:
系统架构详解
多智能体协同流程
-
检索阶段
-
✦ 查询发给混合检索模块,返回 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 -
✦ 精确匹配与布尔逻辑支持
-
-
✦ 加权融合公式
自适应阈值法
自适应阈值(Adaptive Judge Bar)能够根据当前查询难度动态调整筛选标准,防止过松或过严:
-
计算所有文档的相关性分数平均值 μ 与标准差 σ -
阈值:τq = μ − n × σ -
保留分数 ≥ τq 的文档进入下一阶段
追问与补充系统
-
✦ 问题结构分析:判断是否存在多重子问题 -
✦ 断言映射:将每条断言映射到对应子问题 -
✦ 覆盖度评估:标记“完全”、“部分”、“未回答” -
✦ 后续提问:自动生成针对“未回答”部分的独立问题 -
✦ 增量检索:对新问题再次检索并补充到最终答案
参数与配置选项
使用示例
执行后会输出类似格式(JSONL):
常见问题(FAQ)
1. 为什么要同时使用语义检索和关键词检索?
为了兼顾深层语义匹配和精确关键词覆盖,两者互补可显著提升检索质量,避免遗漏关键信息或引入无关文档。
2. 如何调整 `α` 参数?
当文档多为长文本、需要深度语义理解时,可适当提高 `α`(>0.65);若关键词匹配需求更强,则可降低 `α`。
3. 自适应阈值的作用是什么?
它根据当前查询相关性分数分布自动调节筛选门槛,防止过多噪声文档或过度删减重要文档。
4. 如何查看生成答案的引用来源?
答案中所有 `[X]` 标记对应检索结果列表的第 X 篇文档,方便快速定位并人工校验。
HowTo 在项目中集成 RAGentA
-
准备环境
-
✦ 安装 Python 3.8+、PyTorch -
✦ 确保已配置 AWS 与 Pinecone 服务
-
-
拉取代码
-
安装依赖
-
修改检索配置
在config.yaml
(或环境变量)中配置alpha
、top_k
、profile
等。 -
调用示例
-
评估效果
使用RAG_evaluation.py
中的函数计算 MRR、Recall 等指标。
评价指标
-
✦ 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