ComoRAG是一个为解决长篇文档和多文档叙事理解而设计的检索增强生成(RAG)系统。传统的RAG方法在处理长篇故事或小说时,由于情节复杂、人物关系不断演变,常常会遇到困难。 这是因为它们大多采用无状态、单次检索的方式,难以捕捉长距离的上下文关联。 ComoRAG的设计灵感来源于人类的认知过程,它认为叙事推理不是一次完成的,而是一个动态的、不断发展的过程,需要将新获取的证据与已有的知识进行整合。 当遇到推理困难时,ComoRAG会启动一个迭代推理循环。 它会生成探测式问题来探索新的线索,并将新检索到的信息整合到一个全局记忆池中,逐步为最初的问题构建一个连贯的上下文。 这种“推理→探测→检索→整合→解决”的循环模式,使其在处理需要全局理解的复杂问题时表现尤其出色。
Funktionsliste
- 认知记忆框架:模仿人类大脑处理信息的方式,通过迭代推理循环处理复杂问题,实现动态、有状态的推理过程。
- Unterstützung mehrerer Modelle:集成并支持多种大型语言模型(LLM)和嵌入模型,用户可以连接到OpenAI API,也可以部署本地的vLLM服务器和嵌入模型。
- 图增强检索:利用图结构进行检索和推理,更好地捕捉和理解实体之间的复杂关系。
- 灵活的数据处理:提供文档分块工具,支持按token、单词、句子等多种方式进行切分。
- Modularer Aufbau:系统采用模块化和可扩展的设计,方便用户进行二次开发和功能扩展。
- Automatisierte Bewertung:自带评估脚本,支持F1、EM(精确匹配)等多种指标,方便对问答效果进行量化评估。
Hilfe verwenden
ComoRAG 是一个功能强大的检索增强生成框架,主要用于处理长篇叙事文本的理解和推理。它通过独特的认知迭代循环,显著提升了模型在长文本问答、信息抽取等任务上的表现。
环境配置与安装
在开始使用之前,你需要先配置好运行环境。
- Python-Version:建议使用
Python 3.10
oder höher. - Installation von Abhängigkeiten:克隆项目代码后,在项目根目录下通过以下命令安装所有必需的依赖包。推荐使用GPU环境以获得更好的性能。
pip install -r requirements.txt
- Umgebungsvariable:如果你计划使用OpenAI的API,需要设置相应的环境变量
OPENAI_API_KEY
。如果使用本地模型,则需要配置模型的路径。
Vorbereitung der Daten
ComoRAG 需要特定格式的数据文件才能运行。你需要准备语料库文件和问答文件。
- 语料库文件 (corpus.jsonl):这个文件包含了所有需要被检索的文档。文件为
jsonl
格式,每一行是一个JSON对象,代表一篇文档。id
: 文档的唯一标识符。doc_id
: 文档所属的组或书籍的标识。title
: 文档标题。contents
: 文档的原始内容。
Beispiel:
{"id": 0, "doc_id": 1, "title": "第一章", "contents": "很久很久以前..."}
- 问答文件 (qas.jsonl):这个文件包含了需要模型回答的问题。同样,每一行是一个JSON对象。
id
: 问题的唯一标识符。question
: 具体的问题。golden_answers
: 问题的标准答案列表。
Beispiel:
{"id": "1", "question": "故事的主角是谁?", "golden_answers": ["灰姑娘"]}
Chunking von Dokumenten
由于长文档无法被模型直接处理,需要先将其切分成小块。项目提供了 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
--input_path
: 原始语料库文件的路径。--output_path
: 分块后文件的保存路径。--chunk_by
: 分块依据,可以是token
undword
vielleichtsentence
.--chunk_size
: 每个分块的大小。--tokenizer_name_or_path
: 指定用于计算token的分词器路径。
两种运行模式
ComoRAG 提供了两种主流的运行方式:使用OpenAI API或使用本地部署的vLLM服务器。
模式一:使用OpenAI API
这是最简单快捷的启动方式。
- 修改配置: Öffnen
main_openai.py
Datei, finden Sie dieBaseConfig
部分进行修改。config = BaseConfig( llm_base_url='https://api.openai.com/v1', # 通常无需修改 llm_name='gpt-4o-mini', # 指定使用的OpenAI模型 dataset='cinderella', # 数据集名称 embedding_model_name='/path/to/your/embedding/model', # 指定嵌入模型的路径 embedding_batch_size=32, need_cluster=True, # 启用语义/情景增强 output_dir='result/cinderella', # 结果输出目录 ... )
- laufendes Programm:配置完成后,直接运行该脚本。
python main_openai.py
模式二:使用本地vLLM服务器
如果你拥有足够的计算资源(如GPU),并希望在本地运行模型以保证数据隐私和降低成本,可以选择此模式。
- 启动vLLM服务器:首先,你需要启动一个与OpenAI API兼容的vLLM服务器。
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
--model
: 你本地大语言模型的路径。--served-model-name
: 为你的模型服务指定一个名称。--tensor-parallel-size
: 使用的GPU数量。
- 检查服务器状态:你可以用
curl http://localhost:8000/v1/models
命令来检查服务器是否成功启动。 - 修改配置: Öffnen
main_vllm.py
文件,修改其中的配置。# vLLM服务器配置 vllm_base_url = 'http://localhost:8000/v1' served_model_name = '/path/to/your/model' # 与vLLM启动时指定的模型路径一致 config = BaseConfig( llm_base_url=vllm_base_url, llm_name=served_model_name, llm_api_key="EMPTY", # 本地服务器不需要真实的API Key dataset='cinderella', embedding_model_name='/path/to/your/embedding/model', # 本地嵌入模型路径 ... )
- laufendes Programm:配置完成后,运行脚本。
python main_vllm.py
Bewertungsergebnisse
当程序运行结束后,生成的结果会保存在 result/
目录下。你可以使用 eval_qa.py
脚本来自动评估模型的表现。
python script/eval_qa.py /path/to/result/<dataset>/<subset>
该脚本会计算EM(精确匹配率)和F1分数等指标,并生成 results.json
usw.
Anwendungsszenario
- 长篇小说/剧本分析
对于作家、编剧或文学研究者,ComoRAG可以作为一个强大的分析工具。用户可以导入整部小说或剧本,然后提出关于情节发展、人物关系演变或特定主题的复杂问题,系统能够通过整合全文信息给出深刻的见解。 - 企业级知识库问答
企业内部通常有大量的技术文档、项目报告和规章制度。ComoRAG可以处理这些长篇、复杂且互相关联的文档,构建一个智能问答系统。员工可以直接用自然语言提问,例如“在第三季度的项目中,A方案和B方案的技术实现有哪些关键差异和风险?”,系统能够整合多个报告,提供精准答案。 - 法律文书和案件卷宗研读
律师和法务人员需要阅读大量冗长的法律文书和历史卷宗。ComoRAG可以帮助他们快速梳理案件时间线,分析不同证据之间的关联,并回答需要综合多份文件才能得出结论的复杂问题,极大地提升了案件分析的效率。 - 科学研究与文献综述
科研人员在进行文献综述时,需要阅读和理解大量的学术论文。ComoRAG可以辅助研究人员对一个领域内的多篇论文进行提问,抽取关键信息,并构建知识图谱,帮助他们快速掌握研究领域的全局动态和核心挑战。
QA
- ComoRAG与传统的RAG方法有什么核心区别?
核心区别在于ComoRAG引入了一个受认知科学启发的动态迭代推理过程。 传统RAG通常是一次性的、无状态的检索,而ComoRAG在遇到难以解答的问题时,会主动生成新的探索性问题,进行多轮检索和信息整合,形成一个不断丰富的“记忆池”来辅助最终的推理。 - 使用本地vLLM服务器有什么要求?
使用vLLM本地服务器通常需要配备性能较好的NVIDIA GPU和足够的显存,具体要求取决于你所加载模型的大小。同时,需要安装CUDA工具包。这种方式虽然初始设置复杂,但可以提供更高的数据安全性和更快的推理速度。 - 我可以替换自己的嵌入模型吗?
可以。ComoRAG的架构是模块化的,你可以方便地在embedding_model
目录下添加对新嵌入模型的支持。只需要确保你的模型能够将文本转换为向量,并适配系统的数据加载和调用接口即可。 - 这个框架支持处理图片或音视频等多模态数据吗?
从项目的基本介绍来看,ComoRAG目前主要专注于处理长文本叙事,例如长文档和多文档问答。 虽然其模块化设计为未来扩展多模态能力提供了可能,但当前版本的核心功能是围绕文本数据构建的。