AI个人学习
和实操指南
豆包Marscode1

HippoRAG:基于长时记忆的多跳知识检索框架

综合介绍

HippoRAG 是俄亥俄州立大学 OSU-NLP 小组开发的一个开源框架,灵感来源于人类长时记忆机制。它结合检索增强生成(RAG)、知识图谱和个性化 PageRank 技术,帮助大语言模型(LLM)从外部文档中持续整合知识。HippoRAG 2 是其最新版本,已在 NeurIPS 2024 大会上展示。它提升了模型在多跳检索和复杂上下文理解上的能力,同时保持低成本和低延迟的特点。相比 GraphRAG 等方案,它在离线索引时资源占用更少。用户可通过 GitHub 获取代码,免费部署使用。

HippoRAG:基于长时记忆的多跳知识检索框架-1

HippoRAG2 实现方法


 

功能列表

  • 文档索引:将外部文档转化为可检索的知识结构,支持持续更新。
  • 多跳检索:通过知识关联,回答需要多步推理的问题。
  • 问答生成:根据检索结果生成准确的回答。
  • 模型支持:兼容 OpenAI 模型和本地 vLLM 部署的 LLM。
  • 高效处理:在线检索速度快,离线索引资源需求低。
  • 实验验证:提供数据集和脚本,支持研究复现。

 

使用帮助

安装流程

HippoRAG 的安装过程简单,适合有 Python 基础的用户。以下是详细步骤:

  1. 创建虚拟环境
    在终端输入以下命令,创建 Python 3.10 环境:
conda create -n hipporag python=3.10

然后激活环境:

conda activate hipporag
  1. 安装 HippoRAG
    在激活的环境中运行:
pip install hipporag
  1. 配置环境变量
    根据你的硬件和需求,设置以下变量。例如,使用多块 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 模型。以下是操作步骤:

  1. 准备文档
    创建一个文档列表,例如:
docs = [
"张三是一名医生。",
"李四住在北京。",
"北京是中国的首都。"
]
  1. 初始化 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)
    
  2. 索引文档
    输入文档进行索引:

    hipporag.index(docs=docs)
    
  3. 提问与回答
    输入问题获取答案:

    queries = ["张三做什么工作?", "李四住在哪里?"]
    rag_results = hipporag.rag_qa(queries=queries)
    print(rag_results)
    

    输出可能是:

    • 张三是一名医生。
    • 李四住在北京。

使用本地 vLLM 模型

想本地部署?可以用 vLLM 运行 HippoRAG。步骤如下:

  1. 启动 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
    
  2. 初始化 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')
    
  3. 索引与问答
    操作与 OpenAI 模型一致,输入文档和问题即可。

特色功能操作

多跳检索

HippoRAG 的亮点是多跳检索。例如,问“李四住在哪个国家的首都?” 系统会先找到“李四住在北京”,再关联“北京是中国的首都”,回答“中国”。使用时只需输入问题:

queries = ["李四住在哪个国家的首都?"]
rag_results = hipporag.rag_qa(queries=queries)
print(rag_results)

实验复现

想验证论文结果?HippoRAG 提供了复现工具。

  1. 准备数据集
    从 GitHub 或 HuggingFace 下载数据集(如 sample.json),放入 reproduce/dataset 目录。
  2. 运行实验
    在终端输入:

    python main.py --dataset sample --llm_base_url https://api.openai.com/v1 --llm_name gpt-4o-mini --embedding_name nvidia/NV-Embed-v2
    
  3. 查看结果
    检查输出,验证多跳检索和问答效果。

离线批处理

vLLM 支持离线模式,索引速度可提升 3 倍以上。操作如下:

  1. 运行离线批处理
    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
    
  2. 后续操作
    完成后,回到在线模式运行 vLLM 服务和问答流程。

注意事项

  • 内存不足:若 GPU 内存不够,调整 max_model_len 或 gpu-memory-utilization
  • 调试:用 reproduce/dataset/sample.json 测试环境。
  • 清理文件:重跑实验前,清空旧数据:
    rm -rf outputs/sample/*
    
CDN1
未经允许不得转载:首席AI分享圈 » HippoRAG:基于长时记忆的多跳知识检索框架

首席AI分享圈

首席AI分享圈专注于人工智能学习,提供全面的AI学习内容、AI工具和实操指导。我们的目标是通过高质量的内容和实践经验分享,帮助用户掌握AI技术,一起挖掘AI的无限潜能。无论您是AI初学者还是资深专家,这里都是您获取知识、提升技能、实现创新的理想之地。

联系我们
zh_CN简体中文