[错误]: SimplePropertyGraphStore.get_rel_map 在图中存在循环时返回重复的三元组
QQ 错误描述
“ simpropertyGraphStore.get rel map” 按深度走出图表深度, 在“ seen triplets” 中访问到的轨道, 但可见的设置开始为空, 并且仅用 * next * 深度的 三进制进行更新 :
图形 三相=自. get 三相( ids=[gn.id 对于gn在图 节点]) .
已看到( T) = set ()
而len(graph triplets) > 0 和 cur 深度 < 深度 :
三进制. extend (graph 三进制)
图表 三相=自.get 三相(实体 名称=[t[2].id 对于t在图 三相]).
图表 三相=[t for t in sphol 三相 如果 str (t) 不在可见 三相]
saw triplets.update ([t (t) for t in gital triplets]) (中文(简体) ).
粗略页 1
任何循环回已经访问的深度的路径——双向关系,自跳或任何更长时间的循环——都会在后入深度再次被收集,因为开始的三胞胎从未被记录为所见. 使用一对简单的 A <- > B,深度=2 返回每对三胞胎两次(见Steps to Reproduce).
鼠标图由属性图子检索器直接输入到LLM的上下文(indices/property graph/sub retrievers/llm synym.py',vector.py'),因此每份副本都是重复的关系文本:被浪费的指使符和图的扭曲相片.
建议的固定:种子 " 见 " 三分点 " 有起步的三分点,因此每个三分点最多一次收集到所有深度。 一行加回归测试 - 很高兴发送PR.
翻译:
LLaMA-index-core 0.14.24(也经过当前主机,fd4a517)
- 重现步骤
[Python] 从 lama index.core.graph stores.simp labeled 导入 简单PropertyGraphStore 从 alama index.core.graph stores.types 导入实体节点,关系
存储 = 简单的PropertyGraphStore () a=实体节点(名称为"a") b=实体节点(名="b"). c=实体节点(名称="c"). store.upsert 节点([a,b,c]) store.upsert relations([ 关系(label="nows", source id=a.id,目标 id=b.id),, 关系(label="nows", source id=b.id,目标 id=a.id),, 关联( label="likes", source id=b.id, target id=c.id),, ) )
rel map = socket.get rel map([a],深度=2,极限=30) t 在 rel map 中: 打印(t[0].name,t[1].id,t[2].name)
产出(5个三胞胎,两个 " 知道 " 关系各出两次;预期3个独特):
页:1
一个知道b
b 认识a
b 喜欢c
一个知道b
b 认识a
内容来源: run-llama/llama_index