Agentic-RAG

Agentic-RAG

An MCP-based multi-agent retrieval-augmented generation system that enables question answering over academic papers with hybrid search, knowledge graph multi-hop reasoning, and source-cited answers.

Category
访问服务器

README

Agentic-RAG

Agentic RAG: An MCP-Based Multi-Agent Retrieval-Augmented Generation System

把论文变成可问答、可溯源知识库的检索增强生成(RAG)智能体:混合检索 + 知识图谱多跳推理 + 多 Agent 编排,按 MCP 协议对外提供工具,并用 RAGAS 做标准评估。

Python License RAG


这是什么

输入一篇 PDF 论文,系统能:

  • 解析论文成结构化文本(图表 / 公式 / 标题分离)
  • 建向量库 + 知识图谱 + 层次摘要三层索引
  • 回答关于论文的问题(事实 / 关系 / 总结),答案带来源页码和章节
  • 多跳推理("A 和 B 是什么关系")
  • 理解论文里的图表(多模态)
  • 自检答案可信度(反思 + token 级幻觉检测)

和"直接调 LLM"的区别:这个系统不靠 LLM 硬背,而是先从论文里检索证据再生成,答案可溯源、幻觉可控。


效果

在 4 篇不同领域的公开论文上跑端到端问答,用金标准关键词命中率算 F1:

论文 领域 F1
bge_paper Embedding 模型 91 ~ 100%
MiniMax-M1 技术报告 LLM 83%
Attention Is All You Need NLP 经典 100%
ResNet CV 经典 94%

用 ragas 0.2.15 原版(LLM-as-judge,不是自定义指标)评 RAGAS 标准指标:

指标 含义 总体
Context Recall 金标准事实被检索回来的比例 97.9%
Faithfulness 答案断言被证据支撑的比例(越高幻觉越低) 95.2%

检索效果 RAGAS 指标 4 篇论文 F1


快速开始

1. 环境

Python 3.12,建议建虚拟环境:

python3.12 -m venv env
source env/bin/activate        # Windows: env\Scripts\activate

2. 安装依赖

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

(requirements.txt 顶部注释里也有阿里云 / 华为云 / 豆瓣源,任选。)

3. 下载模型

两个模型要从 HuggingFace 下载(体积大,所以没放进仓库):

# Embedding 模型 bge-m3
git clone https://huggingface.co/BAAI/bge-m3 models/Xorbits/bge-m3

# 重排序模型 bge-reranker-v2-m3
git clone https://huggingface.co/BAAI/bge-reranker-v2-m3 models/bge-reranker-v2-m3

国内访问 HF 慢的话,用 ModelScope:

pip install modelscope
modelscope download --model BAAI/bge-m3 --local_dir models/Xorbits/bge-m3
modelscope download --model BAAI/bge-reranker-v2-m3 --local_dir models/bge-reranker-v2-m3

4. 配置 API Key

在项目根目录建一个 .env 文件(已在 .gitignore 里,不会被上传):

MINIMAX_API_KEY=你的_MiniMax_API_Key
MINIMAX_API_HOST=https://api.minimaxi.com/v1

MiniMax API Key 在 https://platform.minimaxi.com 注册获取。代码里的 LLM 调用走 MiniMax-M3 的 OpenAI 兼容接口。

5. (可选)启动 Neo4j

知识图谱用内置内存图就能跑,不装 Neo4j 也行。想要 Neo4j 的话:

docker-compose up -d

默认连接 bolt://localhost:7687,账号密码在 docker-compose.yml.env 里改。

6. 跑起来

# ① 入库:解析 data/ 下所有 PDF → 切块 → 向量化存进 ChromaDB
python script/run_embed_all.py

# ② 建知识图谱(以 bge_paper 为例)
python script/08_kg_extractor.py data/bge_paper.pdf
python script/09_kg_builder.py output/kg_triples/bge_paper.pdf.json

# ③ 直接 RAG 问答
python script/06_rag_query.py "what is bge-m3"

# ④ Agent 编排问答(推荐,走完整 路由→检索→推理→反思 链路)
python script/16_agent_orchestrator.py "what does MiniMax-M1 use"

# ⑤ 跑评估
python script/17_eval_framework.py

# ⑥ 起 Web 界面
python script/19_web_app.py

各脚本都支持 --help 看参数。每个 test_XX_accuracy.py 可单独验证对应模块的正确率。


系统架构

系统架构

系统分五层:

  • 用户层:Gradio Web 界面 / FastAPI / 知识图谱可视化
  • MCP 协议层:FastMCP 把能力封装成标准工具,可被 Claude 等 MCP 客户端直接调用
  • Agent 编排层:路由 → 检索 → 推理 → 反思,Corrective RAG 范式
  • 检索层:向量 + 知识图谱 + 层次摘要三路召回,Cross-Encoder 两阶段精排
  • 数据层:ChromaDB / 内存图(可切 Neo4j)/ bge-m3 / bge-reranker

核心技术

1. 混合检索:向量 + BM25 + RRF + HyDE

纯向量检索有个老问题:对专有名词和数字不敏感。查"用了多少 H800 GPU",向量可能召回一堆讲 GPU 的片段,漏掉那句"用了 512 张 H800"。

解法是逐步叠加策略:

纯向量(语义召回)→ +BM25(精确匹配)+RRF 融合 → +HyDE(假设答案检索)→ +Cross-Encoder 精排
  • RRF(Reciprocal Rank Fusion):向量分是 cosine(0~1),BM25 分是非归一化的,量纲不同没法直接加。RRF 只看排名不看绝对分:score(d) = Σ 1/(k + rank),k 取 60。
  • HyDE(Hypothetical Document Embeddings):query 太短、chunk 太长,直接算相似度吃亏。先让 LLM 生成一个假设答案,用假设答案的向量去检索——它和 chunk 都是"答案形态",语义更接近。

2. Cross-Encoder 两阶段精排

双塔(Bi-Encoder):query 和 doc 分别编码算 cosine,快但精度有上限,两个向量没交互。

Cross-Encoder:query 和 doc 拼一起喂入 transformer 做交叉注意力,输出相关性分。精度高一个量级,但慢(每次都要过模型)。

所以走两阶段:

双塔粗召回 top-N  →  Cross-Encoder(bge-reranker-v2-m3)精排 top-5
   (快,可预计算)        (准,实时打分)

3. GraphRAG:让 RAG 会多跳推理

向量检索只能找"相似片段",但"A 的作者还用过什么技术"这种问题答案分散在多个段落,靠相似度找不到。

解法是把论文里的实体关系抽成图,用图遍历做多跳推理:

论文文本 → LLM 抽三元组 → 实体消歧 → 建图 → text2cypher 查询

实体消歧是最难的环节("MiniMax-M1"、"M1"、"the model" 可能是同一个实体),用了三层策略:子串包含 → 相似度阈值 → LLM 仲裁。

text2cypher(类比 text2SQL):LLM 把自然语言翻译成图查询语句。Neo4j 连不上时,内置了一个内存图后端降级,本地也能跑。

4. 多 Agent 编排(Corrective RAG)

路由器(12) → 检索器(13) → 推理器(14) → 反思器(15)
  • 路由器:判定问题类型(事实 / 关系 / 总结)、该用哪些工具(向量 / 图谱 / 摘要)、跳数。规则优先,规则拿不准再请 LLM 仲裁。
  • 检索器:按路由策略多路召回 → RRF 融合 → MMR 多样性去重 → cross-encoder 精排。
  • 推理器:extraction-then-generation——先让 LLM 枚举片段中所有相关术语,再据此写答案,关键术语逐字保留。多次采样取忠实度最高的(自一致性)。
  • 反思器:把答案拆成原子断言,每条回检索片段找证据。有个"主语共指宽容"细节:答案里"它用了 lightning attention"和片段里"MiniMax-M1 用了 lightning attention","它"=MiniMax-M1,不该判幻觉。

5. MCP 协议工具层

把检索 / 图谱 / 多模态 / 联网搜索封装成标准 MCP(Model Context Protocol)工具。任何支持 MCP 的客户端(Claude Desktop、其他 Agent)都能直接调用,不用手写 API 集成。


项目结构

.
├── script/                      # 全部代码(按流水线顺序编号)
│   ├── 01_config.py             # 全局配置
│   ├── 02_pdf_parser.py         # PDF 解析(多栏 / 图表 / 公式 / 标题)
│   ├── 03_chunker.py            # 文本分块 + 章节归属
│   ├── 04_embedder.py           # bge-m3 向量化 + ChromaDB
│   ├── 05_llm_client.py         # MiniMax-M3 客户端封装
│   ├── 06_rag_query.py          # 混合检索(向量+BM25+RRF+HyDE+rerank)
│   ├── 07_mcp_server.py         # MCP 工具服务
│   ├── 08_kg_extractor.py       # LLM 三元组抽取
│   ├── 09_kg_builder.py         # 实体消歧 + 建图
│   ├── 10_kg_query.py           # text2cypher + 图查询
│   ├── 11_summary_indexer.py    # 层次摘要(document/section/paragraph)
│   ├── 12_router_agent.py       # 路由 Agent
│   ├── 13_retriever_agent.py    # 检索 Agent(多路+MMR+rerank)
│   ├── 14_reasoning_agent.py    # 推理 Agent(自一致性)
│   ├── 15_reflection_agent.py   # 反思 Agent(幻觉检测)
│   ├── 16_agent_orchestrator.py # Agent 编排器
│   ├── 17_eval_framework.py     # RAGAS 评估框架
│   ├── 17b_ragas_official.py    # ragas 原版(LLM-as-judge 对照)
│   ├── 18_eval_dataset.json     # 评测数据集
│   ├── 19_web_app.py            # Gradio Web 界面
│   ├── 20_api_server.py         # FastAPI
│   ├── 21_kg_visualizer.py      # 知识图谱可视化
│   ├── _reranker.py             # Cross-Encoder 重排模块
│   ├── _memory_graph.py         # 内存图后端(Neo4j 降级)
│   ├── _kg_gold.py              # 测试金标准数据
│   ├── _eval_helpers.py         # 评测工具函数
│   ├── run_embed_all.py         # 一键入库脚本
│   └── test_*.py                # 各模块准确率测试
├── data/                        # 4 篇测试论文 PDF
├── images/                      # 架构图与结果图
├── requirements.txt
├── docker-compose.yml           # Neo4j(可选)
├── LICENSE
└── README.md

核心模块速查

模块 关键函数 作用
02_pdf_parser parse_pdf, detect_all_figures, is_real_table 三层图表检测(位图/矢量/标注)+ 假表格过滤
06_rag_query retrieve, rrf_fuse, generate_hyde, rerank_with_llm 混合检索主流程
09_kg_builder disambiguate_entities, normalize_triples 三层实体消歧 + 关系归一化 + 引文过滤
10_kg_query nl_to_cypher, standardize_projection, graph_search 自然语言 → Cypher → 执行 → 答案投影
11_summary_indexer extractive_summary, retrieve_hierarchical 关键句抽取式摘要 + 三层 RRF 检索
13_retriever_agent retrieve, mmr_rerank 多路召回 + MMR 多样性重排
15_reflection_agent verify_answer, _claim_supported token 级幻觉检测(命名实体/数字从严)
16_agent_orchestrator answer 端到端编排:路由→检索→推理→反思

技术栈

组件 选型 用在哪
LLM MiniMax-M3 推理 / 三元组抽取 / text2cypher
Embedding bge-m3 文本向量化
Reranker bge-reranker-v2-m3 Cross-Encoder 精排
向量库 ChromaDB 语义检索
知识图谱 NetworkX(内存图)/ Neo4j 多跳推理
工具协议 FastMCP 标准化工具调用
界面 Gradio / FastAPI Web / REST API
评估 ragas 0.2.15 RAGAS 标准指标

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选