A unified research framework for comparing RAG and MCP approaches in question-answering systems
   
______________________________________________________________________
概述
该项目实现了统一的LangGraph工作流 并行RAG和MCP分支 它们同时执行并将结果合并到 单个JSON输出 用于直接比较。
主要特点
| 特性 | 描述 |
|---|---|
| 并行执行 | RAG和MCP同时运行 asyncio.gather() |
| 上下文隔离 | 每种方法都保持自己的上下文(从不混合) |
| 统一输出 | 每个配置一个JSON文件,包含两个结果 |
| 独立鉴定 | 每种方法单独计算的RAGAS指标 |
| 公平比较 | 相同的提示、模型和执行条件 |
建筑
User Prompt
│
┌──────────────┴──────────────┐
↓ ↓
RAG Branch MCP Branch
(Retrieve → Generate → Eval) (Search → Generate → Eval)
↓ ↓
└──────────────┬──────────────┘
↓
Merge Results
↓
Single Unified JSON
(Contains both RAG and MCP results)______________________________________________________________________
项目结构
mcp-vs-rag/
├── config/
│ └── docker-compose.yml # Qdrant configuration
├── src/
│ ├── rag/ # RAG implementations (Naive & Hybrid)
│ ├── mcp/ # MCP client for tool integration
│ ├── models/ # LLM factory (GPT-5, Gemini 2.5 Pro)
│ ├── evaluation/ # RAGAS evaluator
│ └── workflow/ # LangGraph workflow orchestration
├── data/
│ ├── knowledge_base/ # RAG data (chunks, embeddings, originals)
│ └── outputs/ # Experiment results (JSON files)
├── requirements.txt
├── .env.example
├── run_experiment.py # Main experiment runner
├── README.md # This file
└── copilot-instructions.md # Development guide______________________________________________________________________
快速开始
1.安装依赖项
pip install -r requirements.txt2.配置环境
cp .env.example .env编辑 .env 使用API密钥:
OPENAI_API_KEY--GPT-5GOOGLE_API_KEY--适用于Gemini 2.5 ProTAVILY_API_KEY--Tavily MCP工具
3.启动Qdrant数据库
cd config
docker-compose up -d4.运行实验
python run_experiment.py这将执行实验 所有问题 从地面实况数据集中,运行 8种配置 对于每个问题:
| 型号 | RAG类型 | MCP工具 |
|---|---|---|
| GPT-5(OpenAI) | 天真 | 塔维利 |
| Gemini 2.5 Pro(谷歌) | 混合动力 | DuckDuckGo |
命令行选项
| 命令 | 描述 |
|---|---|
python run_experiment.py | 带所有问题运行(默认) |
python run_experiment.py 5 | 随机回答5个问题 |
python run_experiment.py 1 | 随机回答1个问题 |
结果保存到 data/outputs/ 作为两个主要的JSON文件。
______________________________________________________________________
输出文件
当运行多个问题的实验时,系统会生成 只有两个主文件:
| 文件 | 描述 |
|---|---|
experiment_summary.json | 完整的实验总结,包括所有问题和配置的所有结果 |
consolidated_analysis.json | 所有问题的全局比较分析,指标按模型、RAG类型、MCP服务器和问题绩效分组 |
______________________________________________________________________
输出格式
每个实验产生一个 统一JSON文件 包含RAG和MCP结果:
View JSON Structure
{
"execution_id": "uuid",
"timestamp": "2025-11-03T10:30:00",
"configuration": {
"model": "gpt-5",
"rag_type": "naive",
"mcp_server": "tavily"
},
"prompt": "What are the latest AI developments?",
"rag_results": {
"retrieved_context": ["Context from Qdrant..."],
"generated_answer": "Based on knowledge base...",
"ragas_metrics": {
"answer_relevancy": 0.87,
"faithfulness": 0.92
}
},
"mcp_results": {
"retrieved_context": ["Web search from Tavily..."],
"generated_answer": "Based on web sources...",
"ragas_metrics": {
"answer_relevancy": 0.82,
"faithfulness": 0.89
}
}
}______________________________________________________________________
配置
实验配置
系统运行中定义的8种组合 run_experiment.py:
View Configurations
CONFIGURATIONS = [
{"model": "gpt-5", "rag_type": "naive", "mcp_server": "tavily"},
{"model": "gpt-5", "rag_type": "naive", "mcp_server": "duckduckgo"},
{"model": "gpt-5", "rag_type": "hybrid", "mcp_server": "tavily"},
{"model": "gpt-5", "rag_type": "hybrid", "mcp_server": "duckduckgo"},
{"model": "gemini-2.5-pro", "rag_type": "naive", "mcp_server": "tavily"},
{"model": "gemini-2.5-pro", "rag_type": "naive", "mcp_server": "duckduckgo"},
{"model": "gemini-2.5-pro", "rag_type": "hybrid", "mcp_server": "tavily"},
{"model": "gemini-2.5-pro", "rag_type": "hybrid", "mcp_server": "duckduckgo"},
]定制
修改 run_experiment.py 致:
- 更改测试提示
- 添加/删除配置
- 调整输出格式
- 修改评估指标
______________________________________________________________________
技术栈
| 类别 | 技术 |
|---|---|
| 编排 | LangGraph(并行工作流执行) |
| 向量数据库 | Qdrant(Docker) |
| MCP工具 | Tavily&DuckDuckGo(网络搜索) |
| 评估 | RAGAS(答案相关性+可信度) |
| LLM模型 | GPT-5(OpenAI)、Gemini 2.5 Pro(谷歌) |
| 语言 | Python 3.8+ |
______________________________________________________________________
分析与比较
运行实验后,您可以分析:
| 分析类型 | 要回答的问题 |
|---|---|
| RAG与MCP性能 | 哪种方法的相关性/忠诚度得分更好? |
| 模型比较 | GPT-5或Gemini 2.5 Pro的表现更好吗? |
| RAG战略评估 | 混合RAG的表现优于纯RAG吗? |
| MCP工具选择 | Tavily或DuckDuckGo是否提供了更好的上下文? |
______________________________________________________________________
发展
有关详细的开发说明,请参阅 copilot-instructions.md.
代码输入点
from src.workflow.main_workflow import execute_unified_workflow
result = await execute_unified_workflow(
prompt="Your question here",
model_name="gpt-5",
rag_type="naive",
mcp_server="tavily"
)运行测试
View Test Example
python -c "
import asyncio
from src.workflow.main_workflow import execute_unified_workflow
async def test():
result = await execute_unified_workflow(
prompt='What is quantum computing?',
model_name='gpt-5',
rag_type='naive',
mcp_server='tavily'
)
print(result)
asyncio.run(test())
"______________________________________________________________________
需求
| 要求 | 详细信息 |
|---|---|
| python | 3.8+ |
| 码头工人 | 对于Qdrant |
| API密钥 | OpenAI、谷歌、塔维利 |
MCP服务器
# Tavily
docker run -i --rm -e TAVILY_API_KEY mcp/tavily
# DuckDuckGo
docker run -i --rm mcp/duckduckgo______________________________________________________________________
贡献
- 克隆该仓库
- 创建要素分支
- 进行更改
- 彻底测试
- 提交拉取请求
______________________________________________________________________
许可证
______________________________________________________________________
