YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

政务问答系统 - 模块化版本

基于RAG(检索增强生成)架构的政务问答系统,采用模块化设计,代码结构清晰易维护。

目录结构

6/
├── config.py              # 配置管理模块
├── document_loader.py     # 文档加载模块
├── text_processor.py      # 文本处理模块
├── retrieval_engine.py    # 检索引擎模块
├── inference_engine.py    # 推理引擎模块
├── pipeline.py            # 处理流水线模块
├── main.py                # 主入口文件
├── run.sh                 # 启动脚本
├── README.md              # 说明文档(本文件)
├── models/                # 模型目录
│   ├── Qwen3-Embedding-0.6B/  # Embedding模型
│   └── llm/            # 政务LLM模型
├── data/                  # 数据目录
│   ├── test.xlsx          # 测试问题文件
│   └── rag_docs/          # RAG知识库文档
└── output/                # 输出目录(自动创建)
    └── zhengwu_result.csv # 结果文件

模块说明

1. config.py - 配置管理

  • PathManager: 管理所有文件路径(模型、数据、输出)
  • ProcessingConfig: 管理处理参数(分块、检索、并发等)
  • SystemConfiguration: 系统总配置,整合路径和参数

2. document_loader.py - 文档加载

  • DocumentInfo: 文档信息数据类
  • TextCleaner: 文本清理器(移除URL、HTML标签等)
  • DocumentExtractor: 文档提取器(支持多种格式)
  • DocumentLoader: 文档加载器(支持并行加载)

3. text_processor.py - 文本处理

  • ChunkInfo: 文本块信息类
  • ChunkingStrategy: 分块策略接口
  • RecursiveChunkingStrategy: 递归分块策略实现
  • DocumentChunker: 文档分块器
  • TextStatistics: 文本统计工具

4. retrieval_engine.py - 检索引擎

  • EmbeddingEncoder: 嵌入编码器(使用vLLM)
  • VectorIndex: 向量索引(存储和检索)
  • RetrievalResult: 检索结果类
  • RetrievalEngine: 检索引擎(整合编码和检索)

5. inference_engine.py - 推理引擎

  • PromptBuilder: 提示词构建器
  • ResponseCleaner: 响应清理器
  • LLMClient: LLM客户端(异步通信)
  • InferenceEngine: 推理引擎
  • ConcurrentInferenceManager: 并发推理管理器

6. pipeline.py - 处理流水线

  • DataIO: 数据输入输出管理器
  • RAGPipeline: RAG处理流水线(整合所有模块)

7. main.py - 主入口

程序入口,负责初始化和启动流水线。

使用方法

前置条件

  1. 准备模型和数据

    • 将Embedding模型放到 6/models/Qwen3-Embedding-0.6B/
    • 将LLM模型放到 6/models/zhenwu/
    • 将测试文件放到 6/data/test.xlsx
    • 将RAG文档放到 6/data/rag_docs/
  2. 启动vLLM服务

# 在6/目录下启动vLLM服务
cd /mnt/silver/lz/competitions/mars_提交结果/政务/6

# 启动政务模型服务
vllm serve models/zhenwu \
    --port 8000 \
    --tensor-parallel-size 2 \
    --gpu-memory-utilization 0.95
  1. 安装依赖
pip install vllm openai pandas torch textract langchain-text-splitters tqdm

运行系统

cd /mnt/silver/lz/competitions/mars_提交结果/政务/6
python main.py

运行流程

程序会自动执行以下5个阶段:

  1. 阶段1: 加载文档(从 data/rag_docs/)
  2. 阶段2: 文本分块(使用递归分块策略)
  3. 阶段3: 构建向量索引(使用Embedding模型)
  4. 阶段4: 初始化推理引擎(连接vLLM服务)
  5. 阶段5: 批量处理问题(检索+生成)

查看结果

结果保存在:output/zhengwu_result.csv

格式:

ID,answer
ZW_001,答案内容1
ZW_002,答案内容2
...

配置说明

路径配置(使用相对路径)

  • Embedding模型: models/Qwen3-Embedding-0.6B
  • LLM模型: models/zhenwu
  • 测试文件: data/test.xlsx
  • 数据目录: data/rag_docs
  • 结果文件: output/zhengwu_result.csv

处理参数

  • 文本块大小: 2048字符
  • 文本块重叠: 512字符
  • 检索top-k: 4
  • 最大并发数: 16
  • 温度参数: 0.5

修改配置

如需修改配置,编辑 config.py 中的 PathManager 和 ProcessingConfig 类。

设计特点

1. 模块化设计

  • 每个模块职责单一,易于理解和维护
  • 模块之间通过明确的接口通信
  • 支持独立测试和替换

2. 面向对象

  • 使用类封装数据和行为
  • 清晰的继承和组合关系
  • 符合SOLID原则

3. 工厂模式

  • 提供便捷的工厂函数创建对象
  • 降低对象创建的复杂度

4. 异步并发

  • 使用asyncio实现高效并发
  • 信号量控制并发数量
  • 避免资源耗尽

5. 错误处理

  • 完善的异常处理机制
  • 友好的错误提示信息

与参考代码的差异

方面 参考代码(2/daima/main.py) 本版本(6/)
文件组织 单文件 7个模块文件
编程范式 面向对象+单文件 模块化+面向对象
类命名 描述性(如DocumentProcessor) 职责性(如DocumentLoader)
配置方式 dataclass 类+单例模式
路径管理 配置类中混合 独立PathManager类
文档加载 ThreadPoolExecutor直接使用 封装成DocumentLoader类
检索引擎 DocumentRetrievalSystem RetrievalEngine
推理引擎 LLMService+QAProcessor InferenceEngine+Manager
流程控制 QASystem.run() RAGPipeline多阶段

故障排除

问题1: 路径不存在

错误: [错误] XXX不存在: /path/to/file

解决:

  1. 确认6/目录结构正确
  2. 检查models/和data/目录下的文件是否存在
  3. 如需修改路径,编辑config.py中的PathManager类

问题2: vLLM服务未启动

错误: 连接LLM API失败

解决:

cd /mnt/silver/lz/competitions/mars_提交结果/政务/6
vllm serve models/zhenwu --port 8000 --tensor-parallel-size 2 --gpu-memory-utilization 0.95

问题3: 内存不足

错误: CUDA out of memory

解决:

  1. 减少max_concurrent_requests
  2. 调整embedding_gpu_memory参数
  3. 减小chunk_size

性能优化

  1. 并行文档加载: 使用16个线程并行提取文档
  2. 批量向量编码: vLLM批量编码文本块
  3. 异步并发推理: 最多16个并发请求
  4. 高效检索: 使用PyTorch进行向量相似度计算

扩展性

添加新的分块策略

class MyChunkingStrategy(ChunkingStrategy):
    def split(self, text: str) -> List[str]:
        # 实现自定义分块逻辑
        pass

# 使用
strategy = MyChunkingStrategy()
chunker = DocumentChunker(strategy)

修改提示词

编辑 config.py 中的 ProcessingConfig.user_prompt_template

更换Embedding模型

修改 config.py 中的 PathManager.embedding_model

许可证

本代码仅供学习和研究使用。

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support