camel.storages.graph_storages 包

本页内容

camel.storages.graph_storages 包#

子模块#

camel.storages.graph_storages.base 模块#

class camel.storages.graph_storages.base.BaseGraphStorage[来源]#

基类: ABC

图存储系统的抽象基类。

abstract add_triplet(subj: str, obj: str, rel: str) None[来源]#

在数据库中的两个实体之间添加关系(三元组)。

Parameters:
  • subj (str) - 主体实体的标识符。

  • obj (str) – 对象实体的标识符。

  • rel (str) – 主体与对象之间的关系。

abstract delete_triplet(subj: str, obj: str, rel: str) None[来源]#

从图中删除一个特定的三元组,包含主体、客体和关系。

Parameters:
  • subj (str) – 主体实体的标识符。

  • obj (str) – 对象实体的标识符。

  • rel (str) - 主体与客体之间的关系。

abstract property get_client: Any#

获取底层图存储客户端。

abstract property get_schema: str#

获取图存储的架构

abstract property get_structured_schema: Dict[str, Any]#

获取图存储的结构化模式

abstract query(query: str, params: Dict[str, Any] | None = None) List[Dict[str, Any]][来源]#

使用语句和参数查询图存储。

Parameters:
  • query (str) – 要执行的查询语句。

  • params (Optional[Dict[str, Any]]) – 用于查询的参数字典。默认为None

Returns:

字典列表,每个

字典代表查询结果中的一行数据。

Return type:

List[Dict[str, Any]]

abstract refresh_schema() None[来源]#

刷新图形模式信息。

camel.storages.graph_storages.graph_element 模块#

class camel.storages.graph_storages.graph_element.GraphElement(*, nodes: List[节点], relationships: List[关系], source: Element)[来源]#

基类:BaseModel

一个包含节点和关系列表的图形元素。

nodes#

图中的节点列表。

Type:

列表[节点]

relationships#

图中关系的列表。

Type:

列表[Relationship]

source#

从中获取图形信息的元素。

Type:

元素

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}#

模型的配置,应该是一个符合[ConfigDict][pydantic.config.ConfigDict]的字典。

nodes: List[节点]#
relationships: List[关系]#
source: Element#
class camel.storages.graph_storages.graph_element.Node(*, id: str | int, type: str = 'Node', properties: dict = <factory>)[来源]#

基类:BaseModel

表示图中具有关联属性的节点。

id#

节点的唯一标识符。

Type:

联合类型[str, int]

type#

关系的类型。

Type:

字符串

properties#

与节点关联的其他属性和元数据。

Type:

字典

id: str | int#
model_config: ClassVar[ConfigDict] = {}#

模型的配置,应该是一个符合[ConfigDict][pydantic.config.ConfigDict]的字典。

properties: dict#
type: str#
class camel.storages.graph_storages.graph_element.Relationship(*, subj: ~camel.storages.graph_storages.graph_element.Node, obj: ~camel.storages.graph_storages.graph_element.Node, type: str = 'Relationship', timestamp: str | None = None, properties: dict = <factory>)[来源]#

基类:BaseModel

表示图中两个节点之间的有向关系。

subj#

关系的主题/源节点。

Type:

Node

obj#

关系的对象/目标节点。

Type:

Node

type#

关系的类型。

Type:

字符串

timestamp#

关系的时间戳。

Type:

字符串, 可选

properties#

与关系关联的其他属性。

Type:

字典

model_config: ClassVar[ConfigDict] = {}#

模型的配置,应该是一个符合[ConfigDict][pydantic.config.ConfigDict]的字典。

obj: 节点#
properties: dict#
subj: 节点#
timestamp: str | None#
type: str#

camel.storages.graph_storages.neo4j_graph 模块#

class camel.storages.graph_storages.neo4j_graph.Neo4jGraph(url: str, username: str, password: str, database: str = 'neo4j', timeout: float | None = None, truncate: bool = False)[来源]#

基类:BaseGraphStorage

提供连接到Neo4j数据库以进行各种图操作。

关于Neo4j的详细信息可在以下位置获取: Neo4j https://neo4j.com/docs/getting-started

本模块参考了Langchian和Llamaindex的工作。

Parameters:
  • url (str) – Neo4j数据库服务器的URL。

  • username (str) - 用于数据库认证的用户名。

  • password (str) - 用于数据库认证的密码。

  • database (str) – 要连接的数据库名称。默认为neo4j

  • timeout (Optional[float]) - 事务超时时间,单位为秒。 可用于终止长时间运行的查询。默认为None

  • truncate (bool) – 一个标志,用于指示是否从结果中移除元素数量超过LIST_LIMIT的列表。默认为False

add_graph_elements(graph_elements: List[GraphElement], include_source: bool = False, base_entity_label: bool = False) None[来源]#

将来自GraphElement对象列表的节点和关系添加到图存储中。

Parameters:
  • graph_elements (List[GraphElement]) – 包含要添加到图中的节点和关系的GraphElement对象列表。每个GraphElement应封装图的部分结构,包括节点、关系以及源元素信息。

  • include_source (bool, optional) – 如果为True,会存储源元素并通过MENTIONS关系将其链接到图中的节点。这对于追溯数据来源很有用。如果源元素元数据中有id属性,则基于该属性合并源元素;否则会计算page_content的MD5哈希值用于合并过程。默认为False

  • base_entity_label (bool, optional) - 如果为True,每个新创建的节点会获得一个额外的BASE_ENTITY_LABEL标签,该标签会被索引并能提高导入速度和性能。默认为False

add_triplet(subj: str, obj: str, rel: str, timestamp: str | None = None) None[来源]#

在数据库中的两个实体之间添加带有时间戳的关系(三元组)。

Parameters:
  • subj (str) – 主体实体的标识符。

  • obj (str) – 对象实体的标识符。

  • rel (str) – 主体与对象之间的关系。

  • timestamp (Optional[str]) – 该关系的时间戳。默认为None。

common_neighbour_aware_random_walk(graph_name: str, sampling_ratio: float, start_node_ids: List[int], node_label_stratification: bool = False, relationship_weight_property: str | None = None) Dict[str, Any][来源]#

运行Common Neighbour Aware Random Walk (CNARW)采样算法。

Parameters:
  • graph_name (str) – 图目录中原图的名称。

  • sampling_ratio (float) - 原始图中要被采样的节点比例。

  • start_node_ids (List[int]) – 原始图中随机游走采样起始的初始节点集ID列表。

  • node_label_stratification (bool, optional) – 如果为true,则保留原始图的节点标签分布。默认为False

  • relationship_weight_property (Optional[str], optional) – 用作权重的 关系属性名称。如果未指定, 算法将按未加权方式运行。默认为 None

Returns:

包含CNARW采样结果的字典

采样。

Return type:

字典[字符串, 任意类型]

delete_triplet(subj: str, obj: str, rel: str) None[来源]#

从图中删除一个特定的三元组,包含主体、客体和关系。

Parameters:
  • subj (str) – 主体实体的标识符。

  • obj (str) – 对象实体的标识符。

  • rel (str) – 主体与对象之间的关系。

property get_client: Any#

获取底层图存储客户端。

property get_schema: str#

获取Neo4jGraph存储的模式结构。

Parameters:

refresh (bool) – 一个标志,指示是否强制从Neo4jGraph存储中刷新架构,无论其是否已被缓存。默认为False

Returns:

Neo4jGraph存储的架构。

Return type:

字符串

property get_structured_schema: Dict[str, Any]#

返回该图的结构化模式

Returns:

该图的结构化模式。

Return type:

字典[字符串, 任意类型]

get_triplet(subj: str | None = None, obj: str | None = None, rel: str | None = None) List[Dict[str, Any]][来源]#

查询三元组信息。如果未指定subj、obj或rel参数,则返回所有匹配的三元组。

Parameters:
  • subj (可选[str]) – 主体节点的ID。 如果为None,则匹配任意主体节点。 (默认值: None)

  • obj (Optional[str]) – 对象节点的ID。 如果为None,则匹配任何对象节点。 (default: None)

  • rel (可选[str]) - 关系类型。 如果为None,则匹配任何关系类型。 (默认值: None)

Returns:

匹配的三元组列表,

每个包含subj、obj、rel和时间戳。

Return type:

List[Dict[str, Any]]

query(query: str, params: Dict[str, Any] | None = None) List[Dict[str, Any]][来源]#

在数据库中执行Neo4j Cypher声明式查询。

Parameters:
  • query (str) – 要执行的Cypher查询语句。

  • params (Optional[Dict[str, Any]]) – 用于查询的参数字典。默认为None

Returns:

字典列表,每个

字典代表Cypher查询结果的一行。

Return type:

List[Dict[str, Any]]

Raises:

ValueError - 如果执行的Cypher查询语法无效。

random_walk_with_restarts(graph_name: str, sampling_ratio: float, start_node_ids: List[int], restart_probability: float = 0.1, node_label_stratification: bool = False, relationship_weight_property: str | None = None) Dict[str, Any][来源]#

运行带重启的随机游走(RWR)采样算法。

Parameters:
  • graph_name (str) – 图目录中原图的名称。

  • sampling_ratio (float) - 原始图中要被采样的节点比例。

  • start_node_ids (List[int]) – 原始图中随机游走采样起始的初始节点集ID列表。

  • restart_probability (float, optional) – 采样随机游走从起始节点之一重新开始的概率。默认为 0.1

  • node_label_stratification (bool, optional) - 如果为true,则保留原始图的节点标签分布。默认为False

  • relationship_weight_property (Optional[str], optional) – 用作权重的 关系属性名称。如果未指定, 算法将按未加权方式运行。默认为 None

Returns:

包含RWR采样结果的字典。

Return type:

字典[字符串, 任意类型]

refresh_schema() None[来源]#

通过查询数据库中的节点属性、关系属性和关系来刷新Neo4j图模式信息。

模块内容#

class camel.storages.graph_storages.BaseGraphStorage[来源]#

基类: ABC

图存储系统的抽象基类。

abstract add_triplet(subj: str, obj: str, rel: str) None[来源]#

在数据库中的两个实体之间添加关系(三元组)。

Parameters:
  • subj (str) – 主体实体的标识符。

  • obj (str) – 对象实体的标识符。

  • rel (str) – 主体与对象之间的关系。

abstract delete_triplet(subj: str, obj: str, rel: str) None[来源]#

从图中删除一个特定的三元组,包含主体、客体和关系。

Parameters:
  • subj (str) – 主体实体的标识符。

  • obj (str) – 对象实体的标识符。

  • rel (str) – 主体与对象之间的关系。

abstract property get_client: Any#

获取底层图存储客户端。

abstract property get_schema: str#

获取图存储的架构

abstract property get_structured_schema: Dict[str, Any]#

获取图存储的结构化模式

abstract query(query: str, params: Dict[str, Any] | None = None) List[Dict[str, Any]][来源]#

使用语句和参数查询图存储。

Parameters:
  • query (str) – 要执行的查询语句。

  • params (Optional[Dict[str, Any]]) – 用于查询的参数字典。默认为None

Returns:

字典列表,每个

字典代表查询结果中的一行数据。

Return type:

List[Dict[str, Any]]

abstract refresh_schema() None[来源]#

刷新图形模式信息。

class camel.storages.graph_storages.GraphElement(*, nodes: List[节点], relationships: List[关系], source: Element)[来源]#

基类:BaseModel

一个包含节点和关系列表的图形元素。

nodes#

图中的节点列表。

Type:

列表[节点]

relationships#

图中关系的列表。

Type:

列表[Relationship]

source#

从中获取图形信息的元素。

Type:

元素

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True}#

模型的配置,应该是一个符合[ConfigDict][pydantic.config.ConfigDict]的字典。

nodes: List[节点]#
relationships: List[关系]#
source: Element#
class camel.storages.graph_storages.NebulaGraph(host, username, password, space, port=9669, timeout=10000)[来源]#

基类:BaseGraphStorage

add_graph_elements(graph_elements: List[GraphElement]) None[来源]#

向图中添加图形元素(节点和关系)。

Parameters:

graph_elements (List[GraphElement]) – 包含节点和关系的图元素列表。

add_node(node_id: str, tag_name: str, time_label: str | None = None) None[来源]#

添加一个具有指定标签和属性的节点。

Parameters:
  • node_id (str) - 节点的ID。

  • tag_name (str) – 节点的标签名称。

  • time_label (str, optional) – 用于设置节点时间标签属性的特定时间戳。如果未提供,则不会添加时间戳。(默认: None)

add_triplet(subj: str, obj: str, rel: str, time_label: str | None = None) None[来源]#

在Nebula Graph数据库中的两个实体之间添加关系(三元组)。

Parameters:
  • subj (str) – 主体实体的标识符。

  • obj (str) – 对象实体的标识符。

  • rel (str) – 主体与对象之间的关系。

  • time_label (str, optional) – 用于设置关系时间标签属性的特定时间戳。如果未提供,则不会添加时间戳。(默认: None)

Raises:
  • ValueError - 如果time_label格式无效。

  • Exception - 如果创建关系失败时抛出。

delete_entity(entity_id: str) None[来源]#

从图中删除一个实体(顶点)。

Parameters:

entity_id (str) – 要删除的实体的标识符。

delete_triplet(subj: str, obj: str, rel: str) None[来源]#

从Nebula Graph数据库中删除特定的三元组(两个实体之间的关系)。

Parameters:
  • subj (str) – 主体实体的标识符。

  • obj (str) – 对象实体的标识符。

  • rel (str) – 主体与对象之间的关系。

ensure_edge_type_exists(edge_type: str, time_label: str | None = None) None[来源]#

确保指定的边类型存在于NebulaGraph数据库中。如果边类型已存在,该方法不执行任何操作。

Parameters:
  • edge_type (str) - 要创建的边类型的名称。

  • time_label (str, optional) - 用于设置时间标签属性默认值的特定时间戳。如果未提供,则不会添加时间戳。(默认值: None)

Raises:

异常 – 如果边类型创建在多次重试尝试后失败,将抛出带有错误消息的异常。

ensure_tag_exists(tag_name: str, time_label: str | None = None) None[来源]#

确保在NebulaGraph数据库中创建一个标签。如果该标签已存在,则不执行任何操作。

Parameters:
  • tag_name (str) - 要创建的标签名称。

  • time_label (str, optional) – 用于设置为时间标签属性默认值的特定时间戳。如果未提供,则不会添加时间戳。(默认值: None)

Raises:

异常 - 如果标签创建在重试后仍然失败,将抛出带有错误信息的异常。

property get_client: Any#

获取底层图存储客户端。

get_indexes()[来源]#

从数据库中获取标签索引。

Returns:

标签索引名称列表。

Return type:

List[str]

get_node_properties() Tuple[List[str], List[Dict[str, Any]]][来源]#

从图中检索节点属性。

Returns:

一个元组,其中第一个

元素是节点模式属性的列表,第二个元素是表示节点结构的字典列表。

Return type:

元组[列表[str], 列表[字典[str, 任意]]]

get_relationship_properties() Tuple[List[str], List[Dict[str, Any]]][来源]#

从图中检索关系(边)的属性。

Returns:

一个元组,其中第一个

元素是关系模式属性的列表,第二个元素是表示关系结构的字典列表。

Return type:

元组[列表[str], 列表[字典[str, 任意]]]

get_relationship_types() List[str][来源]#

从图中检索关系类型。

Returns:

关系(边)类型名称列表。

Return type:

List[str]

get_schema()[来源]#

生成一个描述节点和关系属性及关系的模式字符串。

Returns:

描述模式的字符串。

Return type:

字符串

property get_structured_schema: Dict[str, Any]#

生成一个由节点和关系属性、关系以及包含时间戳的元数据组成的结构化模式。

Returns:

表示结构化模式的字典。

Return type:

字典[字符串, 任意类型]

query(query: str) ResultSet[来源]#

在图存储上执行查询。

Parameters:

query (str) – 要执行的类Cypher查询语句。

Returns:

查询执行的结果集。

Return type:

结果集

Raises:

ValueError – 如果查询执行失败。

refresh_schema() None[来源]#

通过获取最新的架构详情来刷新架构。

class camel.storages.graph_storages.Neo4jGraph(url: str, username: str, password: str, database: str = 'neo4j', timeout: float | None = None, truncate: bool = False)[来源]#

基类:BaseGraphStorage

提供连接到Neo4j数据库以进行各种图操作。

关于Neo4j的详细信息可在以下位置获取: Neo4j https://neo4j.com/docs/getting-started

本模块参考了Langchian和Llamaindex的工作。

Parameters:
  • url (str) – Neo4j数据库服务器的URL。

  • username (str) - 用于数据库认证的用户名。

  • password (str) - 用于数据库认证的密码。

  • database (str) – 要连接的数据库名称。默认为neo4j

  • timeout (Optional[float]) - 事务超时时间,单位为秒。 可用于终止长时间运行的查询。默认为None

  • truncate (bool) – 一个标志,用于指示是否从结果中移除元素数量超过LIST_LIMIT的列表。默认为False

add_graph_elements(graph_elements: List[GraphElement], include_source: bool = False, base_entity_label: bool = False) None[来源]#

将来自GraphElement对象列表的节点和关系添加到图存储中。

Parameters:
  • graph_elements (List[GraphElement]) – 包含要添加到图中的节点和关系的GraphElement对象列表。每个GraphElement应封装图的部分结构,包括节点、关系以及源元素信息。

  • include_source (bool, optional) – 如果为True,会存储源元素并通过MENTIONS关系将其链接到图中的节点。这对于追溯数据来源很有用。如果源元素元数据中有id属性,则基于该属性合并源元素;否则会计算page_content的MD5哈希值用于合并过程。默认为False

  • base_entity_label (bool, optional) - 如果为True,每个新创建的节点会获得一个额外的BASE_ENTITY_LABEL标签,该标签会被索引并能提高导入速度和性能。默认为False

add_triplet(subj: str, obj: str, rel: str, timestamp: str | None = None) None[来源]#

在数据库中的两个实体之间添加带有时间戳的关系(三元组)。

Parameters:
  • subj (str) – 主体实体的标识符。

  • obj (str) – 对象实体的标识符。

  • rel (str) – 主体与对象之间的关系。

  • timestamp (Optional[str]) – 该关系的时间戳。默认为None。

common_neighbour_aware_random_walk(graph_name: str, sampling_ratio: float, start_node_ids: List[int], node_label_stratification: bool = False, relationship_weight_property: str | None = None) Dict[str, Any][来源]#

运行Common Neighbour Aware Random Walk (CNARW)采样算法。

Parameters:
  • graph_name (str) – 图目录中原图的名称。

  • sampling_ratio (float) - 原始图中要被采样的节点比例。

  • start_node_ids (List[int]) – 原始图中随机游走采样起始的初始节点集ID列表。

  • node_label_stratification (bool, optional) - 如果为true,则保留原始图的节点标签分布。默认为False

  • relationship_weight_property (Optional[str], optional) – 用作权重的 关系属性名称。如果未指定, 算法将按未加权方式运行。默认为 None

Returns:

包含CNARW采样结果的字典

采样。

Return type:

字典[字符串, 任意类型]

delete_triplet(subj: str, obj: str, rel: str) None[来源]#

从图中删除一个特定的三元组,包含主体、客体和关系。

Parameters:
  • subj (str) – 主体实体的标识符。

  • obj (str) – 对象实体的标识符。

  • rel (str) – 主体与对象之间的关系。

property get_client: Any#

获取底层图存储客户端。

property get_schema: str#

获取Neo4jGraph存储的模式结构。

Parameters:

refresh (bool) – 一个标志,指示是否强制从Neo4jGraph存储中刷新架构,无论其是否已被缓存。默认为False

Returns:

Neo4jGraph存储的架构。

Return type:

字符串

property get_structured_schema: Dict[str, Any]#

返回该图的结构化模式

Returns:

该图的结构化模式。

Return type:

字典[字符串, 任意类型]

get_triplet(subj: str | None = None, obj: str | None = None, rel: str | None = None) List[Dict[str, Any]][来源]#

查询三元组信息。如果未指定subj、obj或rel参数,则返回所有匹配的三元组。

Parameters:
  • subj (可选[str]) – 主体节点的ID。 如果为None,则匹配任意主体节点。 (默认值: None)

  • obj (Optional[str]) – 对象节点的ID。 如果为None,则匹配任何对象节点。 (default: None)

  • rel (可选[str]) - 关系类型。 如果为None,则匹配任何关系类型。 (默认值: None)

Returns:

匹配的三元组列表,

每个包含subj、obj、rel和时间戳。

Return type:

List[Dict[str, Any]]

query(query: str, params: Dict[str, Any] | None = None) List[Dict[str, Any]][来源]#

在数据库中执行Neo4j Cypher声明式查询。

Parameters:
  • query (str) – 要执行的Cypher查询语句。

  • params (Optional[Dict[str, Any]]) – 用于查询的参数字典。默认为None

Returns:

字典列表,每个

字典代表Cypher查询结果的一行。

Return type:

List[Dict[str, Any]]

Raises:

ValueError - 如果执行的Cypher查询语法无效。

random_walk_with_restarts(graph_name: str, sampling_ratio: float, start_node_ids: List[int], restart_probability: float = 0.1, node_label_stratification: bool = False, relationship_weight_property: str | None = None) Dict[str, Any][来源]#

运行带重启的随机游走(RWR)采样算法。

Parameters:
  • graph_name (str) – 图目录中原图的名称。

  • sampling_ratio (float) - 原始图中要被采样的节点比例。

  • start_node_ids (List[int]) – 原始图中随机游走采样起始的初始节点集ID列表。

  • restart_probability (float, optional) – 采样随机游走从起始节点之一重新开始的概率。默认为 0.1

  • node_label_stratification (bool, optional) - 如果为true,则保留原始图的节点标签分布。默认为False

  • relationship_weight_property (Optional[str], optional) – 用作权重的 关系属性名称。如果未指定, 算法将按未加权方式运行。默认为 None

Returns:

包含RWR采样结果的字典。

Return type:

字典[字符串, 任意类型]

refresh_schema() None[来源]#

通过查询数据库中的节点属性、关系属性和关系来刷新Neo4j图模式信息。