# Graphiti 自定义实体关系：限定设备、场所与安装关系，检查模型误连类型

已核对真实Graphiti add_episode实体/edge_type_map参数并构造有字段的Pydantic schema；未执行实体关系抽取或图数据库写入。

## 运行

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

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

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

## 1. 先写实体与关系定义

只定义Device、Location和Device→Location的InstalledAt。关系名称相同但端点倒过来不应默认为等价。

## 2. 验证反向端点反例

audit.py接受Device安装到Location，拒绝Location安装到Device。这个检查只验证作者类型表，不证明LLM抽取不会漏项。

## 3. 为实体添加明确属性

在Pydantic模型中定义设备编号、地点名称等字段及提取描述；不要只写空类。导出schema留档，来源文本仍需单独保存。

## 4. 把edge_type_map传入Graphiti

按当前SDK把实体模型和允许端点组合交给add_episode；先核对安装版方法参数。普通JSON校验与关系抽取约束不是同一个步骤。

## 5. 导入含干扰表述的episode

给材料加入“地点包含设备”等容易反向理解的句子。保存模型实际抽出的类型与原句，不把作者正确三元组预填成结果。

## 6. 回读每条边的端点类型

检查source/target UUID对应什么类型、属性是否缺失、关系是否被错误反转。类型合格也不能代替事实正确。

## 7. 交付schema与误连清单

输出类型模型、映射、原文及实际抽取差异；未执行抽取时只交作者合同。本包不声称已验证Graphiti模型抽取正确率。

## 官方依据

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