ComoRAG
扫码查看

长文档问答与知识图谱构建的智能检索增强生成工具

ComoRAG

综合介绍

ComoRAG 是一个开源的检索增强生成(RAG)系统,专为处理长文档和多文档任务设计。它支持问答、信息提取和知识图谱构建,整合了大语言模型(LLM)、嵌入模型、图增强推理和多种评估工具。系统灵感来源于人类认知的记忆机制,通过迭代推理、动态探查和全局记忆池,解决复杂长篇叙事理解问题。ComoRAG 在超长上下文(20万+ token)基准测试中表现优异,相比传统 RAG 系统提升高达11%,特别适合需要全局理解的复杂查询。它的模块化设计便于扩展,适用于学术研究和实际应用。

功能列表

  • 支持多种大语言模型和本地/远程嵌入模型,灵活适配不同需求。
  • 提供图增强检索与推理,优化长文档信息整合。
  • 灵活的数据预处理与分块,支持按词、句或递归分块。
  • 内置多种评估指标,如 F1 分数、精确匹配(EM),用于结果验证。
  • 模块化架构,易于扩展和自定义,适合研究与生产环境。

使用帮助

安装流程

ComoRAG 的安装简单,适合 Python 3.10 或以上版本。以下是详细步骤:

  1. 安装依赖下载项目后,进入项目根目录,运行以下命令安装依赖:
    pip install -r requirements.txt
    

依赖包括支持大语言模型和嵌入模型的库,推荐使用 GPU(支持 CUDA 12.x)以提升性能。

  1. 设置环境变量
    • 如果使用 OpenAI API,需设置 API 密钥。
    • 如果使用本地 vLLM 服务器,需指定模型路径和服务器地址。
    • 示例环境变量设置:
      export OPENAI_API_KEY="your-openai-api-key"
      export VLLM_MODEL_PATH="/path/to/your/model"
      
  2. 准备硬件GPU 非必须,但推荐使用以加速推理。确保 CUDA 12.x 已安装。

数据准备

ComoRAG 需要两种数据文件:

  • 语料库文件(corpus.jsonl):每行是一个文档,包含 iddoc_idtitle 和 contents 字段。示例:
    {"id": 0, "doc_id": 1, "title": "文档标题", "contents": "文档内容"}
    
  • 问答文件(qas.jsonl):每行是一个问题,包含 idquestion 和 golden_answers 字段。示例:
    {"id": "1", "question": "问题内容", "golden_answers": ["答案1"]}
    

快速开始

ComoRAG 提供两种运行方式:使用 OpenAI API 或本地 vLLM 服务器。

方法 1:使用 OpenAI API

  1. 修改 main_openai.py 中的配置:
    config = BaseConfig(
    llm_base_url='https://api.example.com/v1',
    llm_name='gpt-4o-mini',
    dataset='cinderella',
    embedding_model_name='/path/to/your/embedding/model',
    embedding_batch_size=32,
    need_cluster=True,
    output_dir='result/cinderella',
    save_dir='outputs/cinderella',
    max_meta_loop_max_iterations=5,
    is_mc=False,
    max_tokens_ver=2000,
    max_tokens_sem=2000,
    max_tokens_epi=2000
    )
    
  2. 运行程序:
    python main_openai.py
    

方法 2:使用本地 vLLM 服务器

  1. 启动 vLLM 服务器:
    vllm serve /path/to/your/model \
    --tensor-parallel-size 1 \
    --max-model-len 4096 \
    --gpu-memory-utilization 0.95
    

    或使用 Python 启动:

    python -m vllm.entrypoints.openai.api_server \
    --model /path/to/your/model \
    --served-model-name your-model-name \
    --tensor-parallel-size 1 \
    --max-model-len 32768 \
    --dtype auto
    
  2. 修改 main_vllm.py 中的配置:
    vllm_base_url = 'http://localhost:8000/v1'
    served_model_name = '/path/to/your/model'
    config = BaseConfig(
    llm_base_url=vllm_base_url,
    llm_name=served_model_name,
    llm_api_key="your-api-key-here",
    dataset='cinderella',
    embedding_model_name='/path/to/your/embedding/model',
    embedding_batch_size=4,
    need_cluster=True,
    output_dir='result/cinderella_vllm',
    save_dir='outputs/cinderella_vllm',
    max_meta_loop_max_iterations=5,
    is_mc=False,
    max_tokens_ver=2000,
    max_tokens_sem=2000,
    max_tokens_epi=2000
    )
    
  3. 运行程序:
    python main_vllm.py
    
  4. 检查服务器状态:
    netstat -tlnp | grep 8000
    curl http://localhost:8000/v1/models
    

数据处理与评估

  1. 文档分块使用 chunk_doc_corpus.py 对文档进行分块:
    python script/chunk_doc_corpus.py \
    --input_path dataset/cinderella/corpus.jsonl \
    --output_path dataset/cinderella/corpus_chunked.jsonl \
    --chunk_by token \
    --chunk_size 512 \
    --tokenizer_name_or_path /path/to/your/tokenizer
    

    支持的分块方式包括按词、句或递归分块。

  2. 问答评估使用 eval_qa.py 评估问答结果:
    python script/eval_qa.py result/cinderella
    

    输出结果包括 details 和 results.json,支持 F1、EM 等指标。

核心功能操作

  • 迭代推理循环:ComoRAG 通过“推理-探查-检索-整合-解决”循环处理复杂查询。用户可通过设置 max_meta_loop_max_iterations 控制循环次数。
  • 图增强检索:系统构建知识图谱,整合多文档信息,提升长上下文理解能力。用户可通过 need_cluster=True 启用语义和情节增强。
  • 全局记忆池:新检索的信息会整合到记忆池中,逐步构建查询的完整上下文。用户可在 save_dir 查看记忆池输出。
  • 灵活模型支持:支持多种大语言模型和嵌入模型,用户可通过配置文件指定模型路径或 API。

注意事项

  • 确保数据格式正确,字段缺失可能导致运行错误。
  • 本地 vLLM 服务器需要足够 GPU 内存,推荐至少 16GB。
  • 结果保存在 result/<dataset>/<subset>/ 目录,建议定期清理以节省空间。

应用场景

  1. 学术研究ComoRAG 适合分析长篇学术文献,提取关键信息或构建知识图谱。研究人员可输入多篇论文,生成结构化知识,快速回答复杂问题。
  2. 小说分析对于长篇小说,ComoRAG 可处理复杂情节和人物关系,回答全局性问题,如“某角色在故事中的动机是什么”。
  3. 企业文档管理企业可使用 ComoRAG 处理大量内部文档,提取信息或回答跨文档查询,如合同条款分析或技术文档检索。
  4. 法律文件处理律师可利用 ComoRAG 分析多份法律文件,快速定位相关条款或构建案件知识图谱。

QA

  1. ComoRAG 支持哪些模型?支持多种大语言模型(如 GPT-4o-mini)和嵌入模型,可通过 OpenAI API 或本地 vLLM 服务器运行。
  2. 如何处理超长文档?系统通过分块和图增强检索,将长文档分解为小块,结合全局记忆池整合信息,确保高效处理。
  3. 本地运行需要 GPU 吗?GPU 非必需,但推荐使用以加速推理。至少需要 CUDA 12.x 和 16GB 显存。
  4. 如何评估问答效果?使用 eval_qa.py 脚本,支持 F1、EM 等指标,结果保存在指定输出目录。
微信微博Email复制链接