【第四十七周】HippoRAG 2 复现与分析(一):环境部署与代码分析

article/2025/7/30 13:50:59

目录

  • 摘要
  • Abstract
  • 安装依赖
  • 试运行
    • HippoRAG 初始化
    • 文档索引
    • QA
    • 运行脚本
  • 总结

摘要

本周对HippoRAG 2系统进行核心功能测试,通过构建小型结构化文档库(如人物职业、童话事件、地理关系),验证其索引构建、动态增删、多轮检索问答及评估流程的完整性。这一阶段工作为后续完整复现提供了关键基准:既确认了系统基础能力(如66.67%的答案精确匹配率、动态索引稳定性),又暴露了潜在问题(如模型名称有效性、字符串匹配敏感性),为后续大规模实验的模型选型、数据预处理和评估标准制定提供了可复用的测试框架与调试经验。

Abstract

This week, we conducted core functionality tests on the HippoRAG 2 system by building a small structured document library (e.g., character professions, fairy-tale events, geographic relationships) to verify its indexing, dynamic updates, multi-round retrieval & QA, and evaluation processes.This phase establishes a critical baseline for future full-scale replication: it confirms the system’s core capabilities (e.g., 66.67% exact answer matching, stable dynamic indexing) while revealing potential issues (e.g., model name validity, string-matching sensitivity). These findings provide a reusable testing framework and debugging insights for future large-scale experiments, guiding model selection, data preprocessing, and evaluation criteria.

安装依赖

conda create -n hipporag python=3.10
conda activate hipporag
pip install hipporag

注意:一定要安装对应版本Pyhton

试运行

我们需要运行tests_openai.py测试一下是否可以正常运行。

tests_openai.py是HippoRAG的核心功能测试脚本,覆盖了索引构建、检索、问答生成、动态更新和评估全流程。

HippoRAG 初始化

hipporag = HippoRAG(save_dir='outputs/openai_test',       # 存储索引和模型的目录llm_model_name='gpt-4o-mini',         # OpenAI模型embedding_model_name='text-embedding-3-small'  # 文本嵌入模型
)

作者给我们提供的嵌入模型有text-embedding-3-small、NV-Embed、GritLM和Contriever。text-embedding-3-small是OpenAI提供的一种嵌入模型,使用Deepseek API后无法调用text-embedding-3-small,所以我们要将这个更换为:

embedding_model_name = ‘text-embedding-3-small’ # Embedding model name (NV-Embed, GritLM or Contriever for now)

embedding_model_name = 'nvidia/NV-Embed-v2'  # Embedding model name (NV-Embed, GritLM or Contriever for now)

这里我想把项目中的OpenAI更换为Deepseek,因为Deepseek采用了OpenAI兼容模式,可以像调用OpenAI API那样去调用。如果你有OpenAI API key,就只需设置好环境变量中的API key即可。

tests_openai.py脚本开头加入如下代码:

import os
os.environ["OPENAI_API_KEY"] = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # deepseek API
os.environ["OPENAI_BASE_URL"] = "https://api.deepseek.com/v1" # deepseek API 调用 URL(OpenAI不用此行)
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com" # 需要用到huggingface中的嵌入模型,设置镜像网站

在实例化hipporag的时候将llm_model_name改为deepseek-chat,也就是:

hipporag = HippoRAG(save_dir='outputs/openai_test',       # 存储索引和模型的目录llm_model_name='deepseek-chat',         # OpenAI模型embedding_model_name='nvidia/NV-Embed-v2'  # 文本嵌入模型
)

文档索引

hipporag.index(docs=docs)
  • 输入:docs列表包含9个虚构的短文本(如人物职业、童话情节、地理信息)。
  • 功能:将文档分块、生成嵌入向量,并构建可检索的索引。

QA

results = hipporag.rag_qa(queries=queries,          # 问题列表gold_docs=gold_docs,      # 每个问题的标准相关文档gold_answers=answers      # 标准答案
)
print(results[-2:])           # 输出最后两个评估结果(召回率和答案质量)

评估逻辑:

  • 召回率(Recall@k):检查检索到的文档是否包含gold_docs。
  • 答案质量:对比生成答案与gold_answers的精确匹配(ExactMatch)和F1分数。

运行脚本

直接在终端输入python tests_openai.py,等待程序从huggingface下载好嵌入模型即可运行。

请添加图片描述
请添加图片描述

我们可以看到一下各类指标均正常生成,证明我们环境已经成功搭建好了。

({'Recall@1': 0.6111, 'Recall@2': 0.8889, 'Recall@5': 1.0, 'Recall@10': 1.0, 'Recall@20': 1.0, 'Recall@30': 1.0, 'Recall@50': 1.0, 'Recall@100': 1.0, 'Recall@150': 1.0, 'Recall@200': 1.0}, {'ExactMatch': 0.6667, 'F1': 0.6667})

总结

本周重点完成了HippoRAG 2系统的核心功能测试工作,通过构建结构化测试数据集,全面验证了系统的文档索引、动态更新、多轮问答检索等核心功能模块的运行效果。测试结果既证实了系统在基础检索和答案生成方面的可靠性(66.67%的精确匹配率),也发现了模型配置和字符串匹配等需要优化的环节,为后续系统迭代升级和大规模应用部署奠定了重要基础,提供了明确的技术改进方向。


http://www.hkcw.cn/article/CrqpUCuDwM.shtml

相关文章

【js逆向_AES】全国二手房指数数据爬取

目标:请求参数signcode,请求结果data。 网址:aHR0cDovL3d3dy5jY2hpbmRleC5jb20vSG9tZS9pbmRleA 查看载荷 查看响应数据 点击xhr,发现所有请求参数都是一个signCode,还是加密后的结果,对应结果中数据data也…

郑钦文社媒:人都应该有梦 刷新赛会最佳战绩

北京时间6月1日晚,在法网女单1/8决赛中,郑钦文战胜俄罗斯选手萨姆索诺娃,职业生涯首次跻身法网女单八强,刷新个人赛会最佳战绩。这也是中国选手时隔14年再次闯进法网八强。赛后,郑钦文在社交媒体上写道:“人都应该有梦,有梦就别怕痛,是一颗宝石就该闪烁。”她还祝所有的…

【第16届蓝桥杯 | 软件赛】CB组省赛第二场

个人主页:Guiat 归属专栏:算法竞赛 文章目录 A. 密密摆放(5分填空题)B. 脉冲强度之和(5分填空题)C. 25 之和D. 旗帜E. 数列差分F. 树上寻宝G. 翻转硬币H. 破解信息 正文 总共8道题。 A. 密密摆放&#xff0…

在线音乐服务器测试报告

1.项目背景 此项目主要用于模拟市面上主流的音乐软件的主要功能,提高自己的开发和测试能力。此项目采用的技术栈是SpringBoot MyBatis SpringMVC Mysql实现的,为了实现简单,方便测试,此项目没有注册功能,数据提前存…

球展世界,筑梦中原,2025郑州台球展会,年中招商即将开启

-壹肆柒2025中国(郑州)国际台球产业博览会暨全国台球产业链发展大会,将于2025年08月15-17日,在郑州中原国际会展中心盛大举办。本届博览会主题:同聚中原共赢未来,四个展馆,42000㎡的展览面积&am…

58、辣椒种植学习

辣椒(学名:Capsicum annuum)属于茄科辣椒属,是一种重要的蔬菜兼调味作物,具有较高的经济价值和营养价值。其果实富含维生素C、辣椒素等成分,既可鲜食,也可加工成干辣椒、辣椒粉、辣椒酱等产品&a…

SCSAI平台面向对象建模技术的设计与实现

一、核心设计思想 SCSAI平台的核心目标是通过元建模(Meta-Modeling)技术实现面向对象建模的零编码化。其核心思想为: 自反性设计:定义ObjectClassInfo (OCI)为元类(Meta-Class),所有对象类均为…

三个细节 带你看懂中方在这届香会上的行动

这两天,谭主在第22届香格里拉对话会现场,参加了多场全体会议和平行会议。谭主在现场留意到三个细节,带你看懂中方在这届香会上的行动。细节一:中方提问美菲防长获东盟共鸣在昨天上午的第一场全体会议上,来自国防大学的张弛教授提问美国国防部长将如何处理美国联盟与东盟国…

UDP/TCP协议全解

目录 一. UDP协议 1.UDP协议概念 2.UDP数据报格式 3.UDP协议差错控制 二. TCP协议 1.TCP协议概念 2.三次握手与四次挥手 3.TCP报文段格式(重点) 4.流量控制 5.拥塞控制 一. UDP协议 1.UDP协议概念 当应用层的进程1要向进程2传输报文&#xff…

话题通信之python实现

在机器人操作系统(ROS)中,话题通信是一种常见的通信方式,它允许不同的节点之间通过主题进行数据交换。本文将介绍如何使用Python实现ROS话题通信,包括发布者和订阅者的编写。这种方法与使用C实现类似,但Pyt…

中国高分辨率高质量地面NO2数据集(2008-2023)

时间分辨率:日空间分辨率:1km - 10km共享方式:开放获取数据大小:15.36 GB数据时间范围:2008-01-01 — 2023-12-31元数据更新时间:2024-08-19 数据集摘要 ChinaHighNO2数据集是中国高分辨率高质量近地表空气…

射频通信概述

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

设置堆空间的最大值(-Xmx)应该要考虑哪些因素?

需要根据系统的配置来确定,要给操作系统和JVM其他内存区域(栈、方法区)留下一定的剩余空间。推荐配置系统或容器里可用内存的70%~80%最好。 假设物理内存是8G,设置多大堆内存比较合适? 系统有8G物理内存,系统自己可能会…

wordpress免费主题网站

这是一款WordPress主题,由jianzhanpress开发,可以免费下载。专为中小微企业设计,提供专业的网站建设、网站运营维护、网站托管和网站优化等服务。主题设计简约、现代,适合多种行业需求。 主要特点: 多样化展示&#…

SGLang 无法正常部署

1. 考虑 torch 版本 与 SGLang 不兼容: -> Python环境中的包被更新(如torch, deepspeed, transformers等)导致不兼容 - 参考:Exception: Capture CUDA graph failed: CUDA error: out of memory-CSDN博客 # 虽然锁定了 sg…

【拓扑排序】P6560 [SBCOI2020] 时光的流逝|普及+

本文涉及知识点 C图论 拓扑排序 P6560 [SBCOI2020] 时光的流逝 题目背景 时间一分一秒的过着,伴随着雪一同消融在了这个冬天, 或许,要是时光能停留在这一刻,该有多好啊。 … “这是…我在这个小镇的最后一个冬天了吧。” “嗯…

第13讲、Odoo 18 配置文件(odoo.conf)详细解读

1. 概述 Odoo 配置文件(odoo.conf)是管理 Odoo 服务器行为的核心工具,涵盖了网络、安全、数据库、性能等多方面的关键参数。本文档系统梳理 Odoo 18 配置文件的主要参数,结合实际应用场景,提供权威的配置建议与最佳实…

“大巴黎”欧冠夺冠引发法国多地骚乱

法甲球队巴黎圣日耳曼5月31日晚赢得欧冠联赛冠军奖杯,法国多地球迷彻夜庆祝。据法国内政部消息,狂欢夜有559人因滋事被捕,并发生两起命案。据法国媒体援引法国内政部等信源,在巴黎,一名20岁男子骑摩托车与汽车相撞,导致重伤不治身亡。在法国西南部城市达克斯,一名17岁未…

马斯克最新发声:不想为美政府所做的一切承担责任

当地时间6月1日,美国企业家埃隆马斯克当日在接受美国哥伦比亚广播公司的采访时表示,他不想公开反对美国政府,但也不想为政府所做的一切承担责任。马斯克在采访中表示,他所领导的“政府效率部”成了一切的替罪羊,所有的裁员无论是真是假都被怪罪到了“政府效率部”的头上。…

c++ QicsTable使用实例

效果图&#xff1a; #include <QicsTable.h> #include <QicsDataModelDefault.h> #include <QVBoxLayout> Demo1::Demo1(QWidget *parent) : QWidget(parent) { ui.setupUi(this); const int numRows 10; const int numCols 5; // create th…