当前位置: 首页 > news >正文

NodeRAG检索知识图谱复杂数据的启发

知识图谱保存各种类型数据,类型太多太杂,大部分情况做不到数据统一结构化和sql检索。

NodeRAG是近期新出现的基于LLM的知识图谱开源工具。

https://github.com/Terry-Xu-666/NodeRAG

这里通过分析NodeGraph检索过程,尝试构建包含复杂数据类型的知识库检索方案。

1 search源码

以下是NodeRAG search的源码,整体过程分为:

1)基于hnsw向量检索;

2)基于query entity的将缺检索;

3)基于1和2的检索结果进行graph search,借助LLM生成最终答案。

def search(self,query:str):retrieval = Retrieval(self.config,self.id_to_text,self.accurate_id_to_text,self.id_to_type)# HNSW search for enter points by cosine similarityquery_embedding = np.array(self.config.embedding_client.request(query),dtype=np.float32)HNSW_results = self.hnsw.search(query_embedding,HNSW_results=self.config.HNSW_results)retrieval.HNSW_results_with_distance = HNSW_results# Decompose query into entities and accurate search for short words level items.decomposed_entities = self.decompose_query(query)accurate_results = self.accurate_search(decomposed_entities)retrieval.accurate_results = accurate_results# Personlization for graph searchpersonlization = {ids:self.config.similarity_weight for ids in retrieval.HNSW_results}personlization.update({id:self.config.accuracy_weight for id in retrieval.accurate_results})weighted_nodes = self.graph_search(personlization)retrieval = self.post_process_top_k(weighted_nodes,retrieval)return retrieval

2 过程解析

2.1 hnsw search

hnsw是面向向量检索的近似最近邻搜索算法。

https://blog.csdn.net/liliang199/article/details/151312432

在获取到query后,首先通过hnsw.search,获取到与query向量最相似的topk节点。

2.2 accurate search

NodeRAG通过dompose_query请将问题query分解为一个实体list,其中每一项是句子的主要实体,如关键名词或对象。对应LLM prompt如下所示。

decompos_query_Chinese = '''
请将以下问题分解为一个 list,其中每一项是句子的主要实体(如关键名词或对象)。如果你对用户的意图或相关领域知识有充分把握,也可以包含密切相关的术语。如果不确定,请仅从问题中提取实体。请尽量减少囊括常见的名词,请将这些元素整合在一个单一的 list 中输出。
问题:{query}

https://github.com/Terry-Xu-666/NodeRAG/blob/main/NodeRAG/utils/prompt/decompose.py

使用这些获取到的实体进行精确检索,获得与query实体关联的节点。

2.3 graph search

hnsw search获得语义相关的节点,accurate获得实体相关的节点后,NodeGraph通过graph search的方式,查询与这些节点关联的节点。

在此基础上,基于图算法获取最相关的topk节点,组合为回答query问题的基础info,借助于LLM生成最终答案。

prompt示例如下

answer_prompt_Chinese = '''
---角色---
你是一个根据检索到的信息回答问题的细致助手。

---目标---
提供清晰且准确的回答。仔细审查和验证检索到的数据,并结合任何相关的必要知识,全面地解决用户的问题。
如果你不确定答案,请直接说明——不要编造信息。
不要包含没有提供支持证据的细节。

---输入---
检索到的信息:{info}

用户问题:{query}
'''

https://github.com/Terry-Xu-666/NodeRAG/blob/main/NodeRAG/utils/prompt/answer.py

3 关联启示

受限于硬件资源,本地搭建NodeGraph不现实,然后可采用类似NodeRAG的思路搭建知识库。

假设,知识库包含多个mysql表和向量库:

mysql表保存员工表、设备表、设备状态。

向量库保存设备维护规范、培训材料、设备维护文档等。

query = “xxx设备目前是否需要维护,如何维护?”

可以采用类似的策略,高效完成知识库检索。

1)借助LLM先选定与query相关的mysql表和向量库,并将query拆分为实体和条件。

2)基于实体和条件检索mysql表,基于query向量检索向量库。

3)检索结果汇总为info,使用上文提到的answer模版组合成prompt,借助LLM生成答案。

整个过程确保了与query相关的材料都能汇总到info中,目前Deepseek以及类似LLM,是由能力给出合理可靠答案的。而且,整个过程仅需要2-3次LLM调用,tokens消耗相对受控。

reference

---

NodeRAG

https://github.com/Terry-Xu-666/NodeRAG

结合prompt分析NodeRAG的build过程

https://blog.csdn.net/liliang199/article/details/151191138

hnswlib-高维数据近似最近邻搜索示例

https://blog.csdn.net/liliang199/article/details/151312432

http://www.dtcms.com/a/392055.html

相关文章:

  • 卡尔曼滤波对非线性公式建模的详细步骤
  • Microsoft 365 中的 Entitlement Management(基础版)功能深度解析
  • 本科期间的技术回忆(流水账记录)
  • zotero和小绿鲸联合使用
  • Linux系统之logrotate的基本使用
  • 硬核突破!基于 ComfyUI + pyannote 实现 infiniteTalk 多轮对话数字人:从语音端点检测到上下文感知的闭环
  • 【LeetCode 每日一题】2197. 替换数组中的非互质数
  • 城市水资源与水环境:植被如何重塑地球水循环?
  • TransBench:阿里国际等推出的多语言翻译评测体系
  • Windows启动Minio服务
  • 技术原理与癌症筛查的适配性问题
  • 集合通信算法总结
  • AutoDL四周年 ,学会使用AutoDL
  • nginx如果启动失败怎么办?
  • linux使用gunzip来解压.gz文件
  • 硬件(十五)LCD
  • B3clf: 最新的精准预测药物血脑屏障透过能力的开源app
  • 第八章 惊喜10 分享+
  • SMMU 软件指南
  • [x-cmd] Windows 安装和使用 x-cmd 的方法
  • 17.渗透-.Linux基础命令(九)-Linux权限管理(chmod修改文件权限)
  • 测量交流电压,测量直流电压,兼容,ADC采样转换计算有效值
  • 红黑树封装实现map set
  • EMQX和MQTTX的安装
  • AI 大模型入门 四:检索增强生成(RAG),自动生成精准用例!
  • EDR与MITRE ATTCK 详解
  • 特征值和特征向量
  • Gridview:让 HPC 作业管理真正“看得见、点得着、跑得快”
  • C++/初识
  • 进一步理解自适应卡尔曼滤波(AKF)