YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
政务/应急文档问答系统
基于 RAG (Retrieval-Augmented Generation) 的文档问答系统,支持政务和应急任务的文档检索与问答。
功能特性
- 🔍 智能文档检索:基于 Embedding 的语义检索,支持多文档并行处理
- 📄 多格式文档支持:支持 docx、pdf、txt 等多种文档格式
- 🚀 高性能推理:使用 vLLM 进行模型推理,支持并发处理
- ⚡ 异步处理:支持异步并发处理多个问题,提高处理效率
- 🎯 任务切换:支持政务(zw)和应急(yj)两种任务模式
环境要求
- Python 3.10
- CUDA 支持的 GPU(推荐多卡)
- 足够的 GPU 显存(建议 24GB+)
安装步骤
1. 创建虚拟环境
conda create -n mars python=3.10
conda activate mars
2. 安装依赖
pip install -r requirements.txt
注意:
textract可能需要安装系统级依赖,如libmagicvllm和torch建议根据 CUDA 版本安装对应版本
3. 准备模型和数据
确保以下目录结构存在:
.
├── models/
│ ├── Qwen3-zw/ # 政务任务模型
│ └── Qwen3-Embedding-0.6B/ # Embedding 模型
├── data/
│ ├── zw/ # 政务任务数据
│ │ ├── testa.xlsx 或 testa.csv
│ │ └── rag/ # RAG 文档目录
│ └── yj/ # 应急任务数据(可选)
│ ├── testa.xlsx 或 testa.csv
│ └── rag/
└── code/
├── main.py
├── llm.py
├── embedding.py
├── utils.py
└── serve.sh
使用方法
1. 启动 vLLM 服务
cd code
bash serve.sh
服务配置说明:
- 默认启动政务任务模型(
../models/Qwen3-zw) - 如需切换为应急任务,修改
serve.sh中的模型路径为../models/Qwen3-yj(或其他应急模型路径) - 服务默认运行在
http://localhost:8000/v1
serve.sh 参数说明:
CUDA_VISIBLE_DEVICES: 指定使用的 GPU 设备--tensor-parallel-size: 张量并行大小,根据 GPU 数量调整--gpu-memory-utilization: GPU 内存利用率--max-model-len: 最大模型长度
2. 运行推理
python main.py
任务切换:
- 默认任务:政务任务(
TASK = 'zw') - 切换为应急任务:修改
main.py中的全局变量TASK = 'yj'
配置说明
main.py 主要配置参数
TASK = 'zw' # 任务类型:'zw'(政务)或 'yj'(应急)
MAX_CHUNK_SIZE = 2048 # 文本分块大小
CHUNK_OVERLAP = 256 # 分块重叠大小
K_NUM = 3 # 检索 top-k 数量
CONCURRENCY_LEVEL = 16 # 并发处理级别
MODEL_NAME = "qwen" # 模型名称(需与 serve.sh 中的 --served-model-name 一致)
数据路径配置
- 测试数据:
../data/{TASK}/testa.xlsx或../data/{TASK}/testa.csv - RAG 文档目录:
../data/{TASK}/rag/ - Embedding 模型:
../models/Qwen3-Embedding-0.6B - 输出结果:
../result.csv
项目结构
code/
├── main.py # 主程序入口
├── llm.py # LLM 调用接口(基于 OpenAI API)
├── embedding.py # Embedding 检索器
├── utils.py # 工具函数(文件读取、数据处理等)
└── serve.sh # vLLM 服务启动脚本
工作流程
- 文档加载:从 RAG 目录加载所有文档(支持 docx、pdf、txt 等格式)
- 文本分割:使用
RecursiveCharacterTextSplitter将文档分割成块 - 构建索引:使用 Embedding 模型对文档块进行向量化并缓存
- 问题检索:对每个问题检索最相关的 top-k 文档块
- 生成答案:将检索到的文档块和问题一起发送给 LLM 生成答案
- 结果输出:将结果保存为 CSV 文件
注意事项
- GPU 显存:确保有足够的 GPU 显存运行 vLLM 服务和 Embedding 模型
- 服务端口:确保 8000 端口未被占用,或修改
llm.py中的base_url - 文档格式:不支持
.wps格式,其他常见格式均可处理 - 并发控制:根据 GPU 显存和性能调整
CONCURRENCY_LEVEL - 模型路径:确保模型路径正确,且模型文件完整
输出格式
结果文件 result.csv 包含以下字段:
ID: 问题 IDanswer: 生成的答案
常见问题
Q: 服务启动失败?
A: 检查 GPU 显存是否足够,CUDA 环境是否正确配置,模型路径是否存在。
Q: 推理速度慢?
A: 可以调整 CONCURRENCY_LEVEL 和 K_NUM,或增加 GPU 数量。
Q: 内存不足?
A: 减小 MAX_CHUNK_SIZE、CONCURRENCY_LEVEL 或 --gpu-memory-utilization。
依赖说明
主要依赖包:
vllm: 高性能 LLM 推理引擎torch: PyTorch 深度学习框架openai: OpenAI API 客户端(用于调用本地 vLLM 服务)langchain-text-splitters: 文本分割工具pandas: 数据处理python-docx: Word 文档处理textract: 文档文本提取tqdm: 进度条显示
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support