为Graph-RAG添加时间推理:追踪事实的新鲜度与陈旧度

为Graph-RAG添加时间推理:追踪事实的新鲜度与陈旧度

💡 原文英文,约1900词,阅读约需7分钟。
📝

内容提要

文章介绍为Graph-RAG加入轻量级时间推理层:将传统主谓宾三元组扩展为带时间戳的四元组并存入时间图,用指数衰减计算事实新鲜度权重,按查询日期对冲突事实排序。示例追踪公司CEO变动,展示不同查询日期下答案权重变化,并建议调整半衰期参数。最后提出将时间图接入三层Graph-RAG检索流程,只把最高权重事实传入提示,减少模型猜测。

🔎

延伸解读

时间推理如何解决事实冲突

在传统知识图谱中,事实被存储为无时间戳的三元组,当同一主语和谓语存在多个宾语时,系统无法判断哪个更可信。本文通过为每个事实添加时间戳,并利用指数衰减计算新鲜度权重,使系统能根据查询日期自动排序冲突事实。例如,在CEO变动案例中,查询2023年11月18日时,只有11月17日之前的CEO信息被考虑,Bob以0.9981的高权重成为答案,而Alice因过于陈旧权重仅0.1396。这种方法将时间维度引入检索,减少了模型猜测,提升了回答的准确性。

半衰期参数的选择与影响

半衰期决定了事实权重衰减的速度,默认365天使一年前的事实权重降为0.5。但在快速变化的场景中,如一周内CEO多次变动,过长的半衰期会导致新旧事实权重接近,难以区分。例如,查询2023年12月1日时,Bob(11月21日)权重0.9812,Charlie(11月19日)权重0.9775,差距微小。文章建议将半衰期调整为7天,以更快淘汰陈旧信息。实际应用中,需根据领域变化频率调整该参数,平衡稳定性和时效性。

集成到三层Graph-RAG检索流程

文章提出将时间图接入原有的三层Graph-RAG检索流程。当用户提问时,检索器不再仅获取文本,而是查询时间图,按置信度权重排序事实,并只将最高权重的事实(或少量排名靠前的事实)传入提示上下文。这样,LLM无需自行判断哪个事实最新,减少了幻觉风险。这种集成方式保持了系统的确定性,同时增强了时间感知能力,使RAG系统能更可靠地处理动态信息。

❓

Q&A

Graph-RAG 中如何表示带时间戳的事实?

将标准的主谓宾三元组扩展为四元组,即(主语,谓语,宾语,时间戳),并存储在时间图中。例如,使用 TemporalGraph 类,通过 add_fact 方法添加事实,内部将数据存储为 Subject -> Predicate -> List of (Object, Date)。

如何计算事实的新鲜度权重?

使用指数衰减公式:weight = (0.5) ^ (age_in_days / half_life_days)。其中 age_in_days 是查询日期与事实日期的天数差,half_life_days 是半衰期参数(默认365天)。如果事实日期晚于查询日期,权重上限为1.0。

当查询日期不同时,冲突事实的排序结果如何变化?

查询时只考虑事实日期不晚于查询日期的事实,并按权重降序排序。例如,查询2023年11月18日的CEO,Bob(2023-11-17)权重0.9981排第一,Alice(2021-01-15)权重0.1396排第二;查询2023年12月1日,Bob(2023-11-21)权重0.9812排第一,Charlie(2023-11-19)权重0.9775紧随其后。

半衰期参数如何影响事实权重的衰减?

半衰期决定事实权重衰减到0.5所需的时间。默认365天意味着一年后权重降为0.5。在快速变化的场景中,365天可能太长,导致新旧事实权重接近;可以调小半衰期(如改为7天)使权重衰减更快,更突出最新事实。

如何将时间图集成到三层 Graph-RAG 检索流程中?

在用户向 LLM 发送提示时,检索器不再只获取文本,而是对时间图执行查询,按置信度权重对事实排序,仅将权重最高的事实(或少量排序列表)传入提示上下文。这样可以在提示到达模型前解决事实时效性问题,减少模型猜测。

为什么标准知识图谱需要添加时间推理?

标准知识图谱将事实视为无时间、上下文无关的三元组,但现实世界不断变化,例如公司CEO可能更换。如果不考虑时间上下文,将过时事实提供给LLM容易导致幻觉和错误回答。添加时间推理可以区分新鲜与陈旧事实,提高回答准确性。

🏷️

标签

➡️

继续阅读