综合介绍
HippoRAG 是俄亥俄州立大学 OSU-NLP 小组开发的一个开源框架,灵感来源于人类长时记忆机制。它结合检索增强生成(RAG)、知识图谱和个性化 PageRank 技术,帮助大语言模型(LLM)从外部文档中持续整合知识。HippoRAG 2 是其最新版本,已在 NeurIPS 2024 大会上展示。它提升了模型在多跳检索和复杂上下文理解上的能力,同时保持低成本和低延迟的特点。相比 GraphRAG 等方案,它在离线索引时资源占用更少。用户可通过 GitHub 获取代码,免费部署使用。
HippoRAG2 实现方法
功能列表
- 文档索引:将外部文档转化为可检索的知识结构,支持持续更新。
- 多跳检索:通过知识关联,回答需要多步推理的问题。
- 问答生成:根据检索结果生成准确的回答。
- 模型支持:兼容 OpenAI 模型和本地 vLLM 部署的 LLM。
- 高效处理:在线检索速度快,离线索引资源需求低。
- 实验验证:提供数据集和脚本,支持研究复现。
使用帮助
安装流程
HippoRAG 的安装过程简单,适合有 Python 基础的用户。以下是详细步骤:
- 创建虚拟环境
在终端输入以下命令,创建 Python 3.10 环境:
conda create -n hipporag python=3.10
然后激活环境:
conda activate hipporag
- 安装 HippoRAG
在激活的环境中运行:
pip install hipporag
- 配置环境变量
根据你的硬件和需求,设置以下变量。例如,使用多块 GPU:
export CUDA_VISIBLE_DEVICES=0,1,2,3
export HF_HOME=<你的 Huggingface 目录路径>
export OPENAI_API_KEY=<你的 OpenAI API 密钥> # 使用 OpenAI 模型时需要
再次激活环境,确保生效:
conda activate hipporag
使用 OpenAI 模型
想快速上手 HippoRAG?可以用 OpenAI 模型。以下是操作步骤:
- 准备文档
创建一个文档列表,例如:
docs = [
"张三是一名医生。",
"李四住在北京。",
"北京是中国的首都。"
]
- 初始化 HippoRAG
在 Python 中设置参数:from hipporag import HippoRAG save_dir = 'outputs' llm_model_name = 'gpt-4o-mini' embedding_model_name = 'nvidia/NV-Embed-v2' hipporag = HippoRAG(save_dir=save_dir, llm_model_name=llm_model_name, embedding_model_name=embedding_model_name)
- 索引文档
输入文档进行索引:hipporag.index(docs=docs)
- 提问与回答
输入问题获取答案:queries = ["张三做什么工作?", "李四住在哪里?"] rag_results = hipporag.rag_qa(queries=queries) print(rag_results)
输出可能是:
- 张三是一名医生。
- 李四住在北京。
使用本地 vLLM 模型
想本地部署?可以用 vLLM 运行 HippoRAG。步骤如下:
- 启动 vLLM 服务
在终端启动本地服务,例如用 Llama 模型:export CUDA_VISIBLE_DEVICES=0,1 export VLLM_WORKER_MULTIPROC_METHOD=spawn export HF_HOME=<你的 Huggingface 目录路径> conda activate hipporag vllm serve meta-llama/Llama-3.3-70B-Instruct --tensor-parallel-size 2 --max_model_len 4096 --gpu-memory-utilization 0.95
- 初始化 HippoRAG
在 Python 中指定本地服务地址:hipporag = HippoRAG(save_dir='outputs', llm_model_name='meta-llama/Llama-3.3-70B-Instruct', embedding_model_name='nvidia/NV-Embed-v2', llm_base_url='http://localhost:8000/v1')
- 索引与问答
操作与 OpenAI 模型一致,输入文档和问题即可。
特色功能操作
多跳检索
HippoRAG 的亮点是多跳检索。例如,问“李四住在哪个国家的首都?” 系统会先找到“李四住在北京”,再关联“北京是中国的首都”,回答“中国”。使用时只需输入问题:
queries = ["李四住在哪个国家的首都?"]
rag_results = hipporag.rag_qa(queries=queries)
print(rag_results)
实验复现
想验证论文结果?HippoRAG 提供了复现工具。
- 准备数据集
从 GitHub 或 HuggingFace 下载数据集(如sample.json
),放入reproduce/dataset
目录。 - 运行实验
在终端输入:python main.py --dataset sample --llm_base_url https://api.openai.com/v1 --llm_name gpt-4o-mini --embedding_name nvidia/NV-Embed-v2
- 查看结果
检查输出,验证多跳检索和问答效果。
离线批处理
vLLM 支持离线模式,索引速度可提升 3 倍以上。操作如下:
- 运行离线批处理
export CUDA_VISIBLE_DEVICES=0,1,2,3 export HF_HOME=<你的 Huggingface 目录路径> export OPENAI_API_KEY='' python main.py --dataset sample --llm_name meta-llama/Llama-3.3-70B-Instruct --openie_mode offline --skip_graph
- 后续操作
完成后,回到在线模式运行 vLLM 服务和问答流程。
注意事项
- 内存不足:若 GPU 内存不够,调整
max_model_len
或gpu-memory-utilization
。 - 调试:用
reproduce/dataset/sample.json
测试环境。 - 清理文件:重跑实验前,清空旧数据:
rm -rf outputs/sample/*