在RAG(检索增强生成)系统评测中,高质量的问答对数据集是验证系统效果的关键。传统方式依赖人工从文档中逐条编写问题和答案,耗时耗力且难以规模化,成为制约RAG评测效率的主要瓶颈。
本系统通过多Agent协同架构,实现了从PDF文档到问答对的自动化生成。系统利用MinerU API精准解析PDF(支持公式、表格、OCR),采用双Agent并行出题策略,同时生成直白问题和逻辑推理问题两类题型,并基于Jaccard相似度智能去重。整个过程从文档解析、文本切片、题目生成到Excel输出全流程自动化,大幅降低了人工成本,提升了评测数据的生产效率,为RAG系统的快速迭代和效果验证提供了可靠的数据支撑

系统架构
┌──────────────────────────────────────────────────────────────┐
│ PDF智能出题协同环境 │
│ │
│ Step 1: MinerU API ───→ PDF → Markdown │
│ │ │
│ Step 2: 文本切片 ────→ Markdown → 512字符切片 │
│ │ │
│ ┌────┴────┐ │
│ ▼ ▼ │
│ ┌────────────┐ ┌────────────┐ │
│ │ 直白问题 │ │ 逻辑问题 │ ← 并行 (asyncio.gather) │
│ │ Agent │ │ Agent │ │
│ │ (直接回答) │ │ (推理判断) │ │
│ └─────┬──────┘ └─────┬──────┘ │
│ │ │ │
│ └───────┬───────┘ │
│ ▼ │
│ 汇总去重 + Excel输出 │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ MinerU API │ │ 千帆/Ollama │ │
│ │ (PDF解析) │ │ (LLM出题) │ │
│ └─────────────┘ └─────────────┘ │
└──────────────────────────────────────────────────────────────┘协作模式:串行解析 → 并行出题(Fan-out) → 串行汇总
核心理念:
- MinerU解析
:调用在线API将PDF精准转为Markdown(支持公式、表格、OCR) - 完整段落切片
:按512字符切分,保持段落边界完整 - 双Agent并行出题
:直白问题+逻辑问题两类题型同时生成 - 智能去重
:基于Jaccard关键词相似度去重,避免重复题目
项目结构
pdf-question-generator/
├── main.py # 主入口
├── config.py # 全局配置
├── merger.py # 汇总去重+Excel输出
├── core/
│ ├── __init__.py
│ ├── llm_client.py # LLM客户端(千帆+Ollama双后端)
│ ├── pdf_parser.py # MinerU API PDF解析
│ ├── text_splitter.py # 文本切片(512字符+完整段落)
│ └── prompt_loader.py # 提示词模板加载器
├── agents/
│ ├── __init__.py
│ ├── base_agent.py # Agent基类
│ ├── direct_agent.py # 直白问题Agent
│ └── logic_agent.py # 逻辑问题Agent
├── prompts/
│ ├── direct_agent.md # 直白问题提示词
│ └── logic_agent.md # 逻辑问题提示词
├── output/ # 输出目录
└── requirements.txt快速开始
1. 安装依赖
pip install -r requirements.txt2. 运行
# 默认模式:千帆LLM + 本地PDF文件
python3 main.py 'output/train.pdf'
# 通过URL解析PDF
python3 main.py --url https://example.com/paper.pdf
# 切换到Ollama
python3 main.py --ollama 'output/train.pdf'
# 自定义参数
python3 main.py --chunk-size 256 --num-direct 3 --num-logic 3 ./doc.pdf3. 查看帮助
python3 main.py help运行参数
--ollama | ||
--url | ||
--chunk-size N | ||
--num-direct N | ||
--num-logic N |
环境变量配置
LLM_PROVIDER | ||
QIANFAN_API_KEY | ||
QIANFAN_MODEL | ||
OLLAMA_BASE_URL | ||
OLLAMA_MODEL | ||
MINERU_TOKEN | ||
MINERU_MODEL_VERSION | ||
CHUNK_SIZE | ||
NUM_DIRECT_QUESTIONS | ||
NUM_LOGIC_QUESTIONS | ||
SIMILARITY_THRESHOLD |
输出文件
运行后在 output/ 目录下生成:
parsed_content.md | |
{文件名}_questions.xlsx | |
{文件名}_questions.json |
两种题型对比
通过网盘分享的文件:pdf-question-generator.zip
链接: https://pan.baidu.com/s/10_AYlL6-iBL6IdW6m8PxQw?pwd=52z5 提取码: 52z5
--来自百度网盘超级会员v4的分享
夜雨聆风