# Graphiti 双时间记忆：迟到消息按发生时间入图，分开查当前与历史负责人

已用真实Graphiti EntityEdge构造并核对created_at与valid_at双时间字段，另运行作者事件排序；未执行LLM抽取、数据库写入或历史图查询。

## 运行

在本目录使用独立虚拟环境并安装requirements.txt；脚本结果写入results。

```sh
python reference/audit.py
python reference/run_sdk.py
```

fixtures是原创输入与故意失败样本；作者真值、离线合成provider和实际SDK记录各自标明，不是模型正确率。需要真实模型/账号/GPU的步骤按正文另行授权运行。

## 1. 分开发生与入库时间

E-new先入库但10月5日发生，E-late后入库却描述10月1日事件。两个时间字段都保存，不能只按收到消息的先后改当前负责人。

## 2. 复算历史查询真值

audit.py按valid_at排序，10月3日应A、10月6日应B。负例latest_ingested_wins会把A误当当前负责人；此表是作者事件真值。

## 3. 建立隔离Graphiti组

在测试数据库用独立group_id存项目实体及两条episode，记录数据库、SDK版本与模型配置。没有图数据库或模型时不要伪造入图成功。

## 4. 以reference_time提交事件

调用add_episode时把发生时间传reference_time，保留原文与ingested时间。晚到记录不应该被简单等价为当前新事实。

## 5. 检查真实事实有效区间

回读edge的valid_at/invalid_at、episode来源与节点UUID。模型冲突识别可能错，必须逐条核对，不因有时间字段就假设自动正确。

## 6. 分别查询当前和历史

设置合适时间过滤查询同一负责人关系。实际Graphiti结果应能解释来源及有效区间，不能拿作者排序表冒充知识图谱响应。

## 7. 交付迟到事件与查询证据

保存两类时间、事实变化、查询过滤和原始返回。当前包只做事件序列审计，图谱入库、抽取和回答均需真实目标环境补证。

## 官方依据

- Graphiti 官方文档或源码：https://raw.githubusercontent.com/getzep/graphiti/main/mcp_server/src/graphiti_mcp_server.py
