数据模型与模式定义
数据模型与模式
相关源文件
以下文件为本维基页面的生成提供了上下文:
graphiti_core/edges.pygraphiti_core/graphiti_types.pygraphiti_core/models/edges/edge_db_queries.pygraphiti_core/models/nodes/node_db_queries.pygraphiti_core/nodes.pygraphiti_core/prompts/eval.pygraphiti_core/prompts/models.pygraphiti_core/utils/maintenance/community_operations.pygraphiti_core/utils/maintenance/graph_data_operations.py
本文档记录了 Graphiti 中所有表示数据结构的 Pydantic 模型。系统使用三类模型:
- 图模型 - 持久化到图数据库的节点和边类型。
- 提示响应模型 - 来自大语言模型(LLM)提取、去重和评估提示的结构化输出。
- 配置模型 - 搜索、实体类型和边类型的设置。
有关概念架构,请参阅知识图谱数据模型。有关时间语义,请参阅时间感知与双时态模型。
枚举
EpisodeType
graphiti_core/nodes.py:54-77
指定 EpisodicNode 中原始内容的格式。该枚举决定了使用哪种提取提示变体。
| 值 | 字符串 | 预期内容格式 |
|---|---|---|
message | "message" | "actor: content",例如 "user: Hello" graphiti_core/nodes.py:64-67 |
json | "json" | JSON 序列化的字符串对象 graphiti_core/nodes.py:68-69 |
text | "text" | 纯非结构化文本 graphiti_core/nodes.py:70-71 |
fact_triple | "fact_triple" | 结构化的主语-谓语-宾语三元组 graphiti_core/nodes.py:77 |
静态方法 from_str(episode_type: str) 将字符串值转换为枚举成员 graphiti_core/nodes.py:79-91。
GraphProvider
graphiti_core/driver/driver.py:31-36(在 graphiti_core/nodes.py:29-32 中导入)
标识图数据库后端。所有节点和边方法都根据此枚举分支,以生成特定于提供商的查询 graphiti_core/nodes.py:118-166。
| 值 | 数据库 | 特殊特性 |
|---|---|---|
NEO4J | Neo4j | 原生列表支持,事务操作 graphiti_core/nodes.py:119-130 |
FALKORDB | FalkorDB(Redis) | RedisSearch 全文语法 graphiti_core/nodes.py:157-165 |
KUZU | Kuzu(嵌入式) | EntityEdge 存储为中间节点模式 graphiti_core/nodes.py:132-156 |
NEPTUNE | Amazon Neptune | 列表存储为分隔字符串 graphiti_core/models/nodes/node_db_queries.py:32-38 |
来源:graphiti_core/nodes.py:54-91, graphiti_core/driver/driver.py:31-36, graphiti_core/models/nodes/node_db_queries.py:30-66
节点模型
类型层次结构图
来源:graphiti_core/nodes.py:93-858
Node(抽象基类)
graphiti_core/nodes.py:93-109
所有节点类型都继承自 Node,它既是 pydantic.BaseModel 又是 ABC。所有节点共有的字段:
| 字段 | 类型 | 默认值 | 描述 |
|---|---|---|---|
uuid | str | uuid4() | 唯一标识符 graphiti_core/nodes.py:94 |
name | str | 必填 | 人类可读的名称 graphiti_core/nodes.py:95 |
group_id | str | 必填 | 图分区键 graphiti_core/nodes.py:96 |
labels | list[str] | [] | 图数据库标签 graphiti_core/nodes.py:97 |
created_at | datetime | utc_now() | 入库时间戳 graphiti_core/nodes.py:98 |
EpisodicNode
graphiti_core/nodes.py:307-325
表示单条原始输入(一个"记忆片段")。它包含关于来源和业务时间(valid_at)的元数据。
EntityNode
graphiti_core/nodes.py:484-500
表示一个去重后的持久化实体。它存储了大语言模型(LLM)生成的 summary 和一个用于向量搜索的 name_embedding。
CommunityNode
graphiti_core/nodes.py:666-682
表示通过社区检测发现的、相关 EntityNode 的集群。
SagaNode
graphiti_core/nodes.py:844-858
一个分组节点,将相关片段链接成一个命名的序列("saga")。
来源:graphiti_core/nodes.py:93-109, graphiti_core/nodes.py:307-325, graphiti_core/nodes.py:484-500, graphiti_core/nodes.py:666-682, graphiti_core/nodes.py:844-858
边模型
类型层次结构图
来源:graphiti_core/edges.py:49-946
Edge(抽象基类)
graphiti_core/edges.py:49-57
所有边共有的字段:
| 字段 | 类型 | 描述 |
|---|---|---|
uuid | str | 唯一标识符 graphiti_core/edges.py:50 |
group_id | str | 图分区键 graphiti_core/edges.py:51 |
source_node_uuid | str | 源节点的 UUID graphiti_core/edges.py:52 |
target_node_uuid | str | 目标节点的 UUID graphiti_core/edges.py:53 |
created_at | datetime | 入库时间戳 graphiti_core/edges.py:54 |
EntityEdge
graphiti_core/edges.py:263-288
表示两个 EntityNode 之间的 RELATES_TO 关系。
| 字段 | 类型 | 描述 |
|---|---|---|
name | str | 关系名称(例如 "WORKS_AT")graphiti_core/edges.py:264 |
fact | str | 自然语言陈述 graphiti_core/edges.py:265 |
fact_embedding | list[float] | None | fact 的向量嵌入 graphiti_core/edges.py:266 |
episodes | list[str] | 提及此边的 EpisodicNode 的 UUID graphiti_core/edges.py:267 |
expired_at | datetime | None | 被取代时的系统时间 graphiti_core/edges.py:268 |
valid_at | datetime | None | 事实变为真时的业务时间 graphiti_core/edges.py:269 |
invalid_at | datetime | None | 事实停止为真时的业务时间 graphiti_core/edges.py:270 |
双时态字段
EntityEdge 实现了双时态模型,以同时跟踪业务时间和系统时间。
来源:graphiti_core/edges.py:263-283
完整图模式
Graphiti 节点和边类型到数据库模式的映射
来源:graphiti_core/nodes.py:307-858, graphiti_core/edges.py:143-946
提示响应模型
大语言模型(LLM)提示返回结构化响应,这些响应被解析为 Pydantic 模型,以确保一致的数据提取和评估。
节点提取与摘要
用于社区操作中合并实体知识 graphiti_core/utils/maintenance/community_operations.py:147-151, 163-167。
| 类 | 字段 | 类型 | 描述 |
|---|---|---|---|
Summary | summary | str | 多个节点的合并摘要 graphiti_core/prompts/summarize_nodes.py:15 |
SummaryDescription | description | str | 基于摘要的社区短名称 graphiti_core/prompts/summarize_nodes.py:15 |
评估模型
graphiti_core/prompts/eval.py:25-49
这些模型在图构建和问答评估期间结构化大语言模型(LLM)的反馈。
| 类 | 字段 | 类型 | 描述 |
|---|---|---|---|
QueryExpansion | query | str | 为数据库搜索重新表述的查询 graphiti_core/prompts/eval.py:25-26 |
QAResponse | ANSWER | str | 大语言模型(LLM)从检索到的上下文中生成的答案 graphiti_core/prompts/eval.py:29-30 |
EvalResponse | is_correct | bool | 对响应与黄金标准的评分 graphiti_core/prompts/eval.py:33-34 |
EvalAddEpisodeResults | candidate_is_worse | bool | 基线提取与候选提取的比较 graphiti_core/prompts/eval.py:40-44 |
社区检测模型
graphiti_core/utils/maintenance/community_operations.py:25-28
在 label_propagation 算法中用于跟踪节点邻接关系 graphiti_core/utils/maintenance/community_operations.py:76-78。
| 类 | 字段 | 类型 | 描述 |
|---|---|---|---|
Neighbor | node_uuid | str | 相邻实体节点的 UUID graphiti_core/utils/maintenance/community_operations.py:26 |
Neighbor | edge_count | int | 连接的权重 graphiti_core/utils/maintenance/community_operations.py:27 |
来源:graphiti_core/utils/maintenance/community_operations.py:25-28, graphiti_core/prompts/eval.py:25-49
系统上下文模型
消息
graphiti_core/prompts/models.py:23-25
一个简单的 Pydantic 模型,用于提示生成中的大语言模型(LLM)聊天消息。
| 字段 | 类型 | 描述 |
|---|---|---|
role | str | 消息发送者的角色(system、user、assistant)graphiti_core/prompts/models.py:24 |
content | str | 消息的内容 graphiti_core/prompts/models.py:25 |
GraphitiClients
graphiti_core/graphiti_types.py:26-34
一个容器,用于系统中使用的各种提供商客户端。
| 字段 | 类型 | 描述 |
|---|---|---|
driver | GraphDriver | 数据库抽象层 graphiti_core/graphiti_types.py:27 |
llm_client | LLMClient | 语言模型接口 graphiti_core/graphiti_types.py:28 |
embedder | EmbedderClient | 向量嵌入服务 graphiti_core/graphiti_types.py:29 |
tracer | Tracer | 遥测与追踪 graphiti_core/graphiti_types.py:31 |
来源:graphiti_core/prompts/models.py:23-25, graphiti_core/graphiti_types.py:26-34
数据检索辅助函数
系统使用工厂函数从数据库记录中实例化模型对象。
| 函数 | 返回类型 | 特定于提供商的逻辑 |
|---|---|---|
get_episodic_node_from_record | EpisodicNode | 否 graphiti_core/nodes.py:990 |
get_entity_node_from_record | EntityNode | 是(属性解析)graphiti_core/nodes.py:1012 |
get_community_node_from_record | CommunityNode | 否 graphiti_core/nodes.py:1044 |
get_episodic_edge_from_record | EpisodicEdge | 否 graphiti_core/edges.py:950 |
get_entity_edge_from_record | EntityEdge | 是(属性解析)graphiti_core/edges.py:960 |
来源:graphiti_core/nodes.py:990-1052, graphiti_core/edges.py:950-1001