记录管理器#

class langchain_core.indexing.base.RecordManager(namespace: str)[source]#

表示记录管理器接口的抽象基类。

记录管理器抽象由langchain索引API使用。

记录管理器跟踪哪些文档已写入向量存储以及它们何时被写入。

索引API为每个文档计算哈希值,并将哈希值与写入时间和源ID一起存储在记录管理器中。

在后续的索引运行中,索引API可以检查记录管理器以确定哪些文档已经被索引,哪些还没有。

这允许索引API避免重新索引已经索引过的文档,并且只索引新文档。

这种抽象的主要好处是它适用于许多向量存储。要得到支持,向量存储只需要支持通过ID添加和删除文档的能力。使用记录管理器,索引API将能够删除过时的文档,并避免对已经索引的文档进行冗余索引。

这种抽象的主要限制是:

  1. 它依赖于时间戳来确定哪些文档已被索引,哪些尚未被索引。这意味着时间戳必须是单调递增的。时间戳应该是服务器测量的时间戳,以最小化问题。

  2. 记录管理器目前是与向量存储分开实现的,这意味着整个系统变得分布式,并可能产生一致性问题。例如,写入记录管理器成功,但相应的写入向量存储失败。

初始化记录管理器。

Parameters:

namespace (str) – 记录管理器的命名空间。

方法

__init__(namespace)

初始化记录管理器。

acreate_schema()

异步创建记录管理器的数据库模式。

adelete_keys(keys)

异步从数据库中删除指定的记录。

aexists(keys)

异步检查提供的键是否存在于数据库中。

aget_time()

异步获取当前服务器时间作为高分辨率时间戳。

alist_keys(*[, before, after, group_ids, limit])

根据提供的过滤器异步列出数据库中的记录。

aupdate(keys, *[, group_ids, time_at_least])

异步将记录更新或插入到数据库中。

create_schema()

为记录管理器创建数据库模式。

delete_keys(keys)

从数据库中删除指定的记录。

exists(keys)

检查提供的键是否存在于数据库中。

get_time()

获取当前服务器时间作为高分辨率时间戳!

list_keys(*[, before, after, group_ids, limit])

根据提供的过滤器列出数据库中的记录。

update(keys, *[, group_ids, time_at_least])

将记录插入或更新到数据库中。

__init__(namespace: str) None[source]#

初始化记录管理器。

Parameters:

namespace (str) – 记录管理器的命名空间。

Return type:

abstract async acreate_schema() None[source]#

异步创建记录管理器的数据库模式。

Return type:

abstract async adelete_keys(keys: Sequence[str]) None[source]#

异步从数据库中删除指定的记录。

Parameters:

keys (Sequence[str]) – 要删除的键列表。

Return type:

abstract async aexists(keys: Sequence[str]) list[bool][source]#

异步检查提供的键是否存在于数据库中。

Parameters:

keys (Sequence[str]) – 要检查的键列表。

Returns:

一个布尔值列表,指示每个键的存在。

Return type:

列表[布尔]

abstract async aget_time() float[source]#

异步获取当前服务器时间作为高分辨率时间戳。

从服务器获取这一点非常重要,以确保单调时钟,否则在清理旧文档时可能会出现数据丢失!

Returns:

当前服务器时间作为浮点时间戳。

Return type:

浮点数

abstract async alist_keys(*, before: float | None = None, after: float | None = None, group_ids: Sequence[str] | None = None, limit: int | None = None) list[str][source]#

根据提供的过滤器异步列出数据库中的记录。

Parameters:
  • before (float | None) – 过滤以列出在此时间之前更新的记录。

  • after (float | None) – 过滤以列出在此时间之后更新的记录。

  • group_ids (Sequence[str] | None) – 过滤以列出具有特定组ID的记录。

  • limit (int | None) – 可选的返回记录数量限制。

Returns:

匹配记录的键列表。

Return type:

列表[字符串]

abstract async aupdate(keys: Sequence[str], *, group_ids: Sequence[str | None] | None = None, time_at_least: float | None = None) None[来源]#

异步地将记录插入或更新到数据库中。

Parameters:
  • keys (Sequence[str]) – 要插入或更新的记录键列表。

  • group_ids (Sequence[str | None] | None) – 与键对应的组ID列表。

  • time_at_least (float | None) –

    可选的时间戳。实现可以使用这个 来可选地验证时间戳至少是这个时间 在存储数据的系统中。

    例如,用于验证postgres数据库中的时间 是否等于或大于给定的时间戳,如果不是 则引发错误。

    这是为了帮助防止时间漂移问题,因为 时间可能不是单调递增的!

Raises:

ValueError – 如果keys的长度与group_ids的长度不匹配。

Return type:

abstract create_schema() None[来源]#

为记录管理器创建数据库模式。

Return type:

abstract delete_keys(keys: Sequence[str]) None[source]#

从数据库中删除指定的记录。

Parameters:

keys (Sequence[str]) – 要删除的键列表。

Return type:

abstract exists(keys: Sequence[str]) list[bool][source]#

检查提供的键是否存在于数据库中。

Parameters:

keys (Sequence[str]) – 要检查的键列表。

Returns:

一个布尔值列表,指示每个键的存在。

Return type:

列表[布尔]

abstract get_time() float[source]#

获取当前服务器时间作为高分辨率时间戳!

从服务器获取这一点非常重要,以确保单调时钟,否则在清理旧文档时可能会出现数据丢失!

Returns:

当前服务器时间作为浮点时间戳。

Return type:

浮点数

abstract list_keys(*, before: float | None = None, after: float | None = None, group_ids: Sequence[str] | None = None, limit: int | None = None) list[str][来源]#

根据提供的过滤器列出数据库中的记录。

Parameters:
  • before (float | None) – 过滤以列出在此时间之前更新的记录。

  • after (float | None) – 过滤以列出在此时间之后更新的记录。

  • group_ids (Sequence[str] | None) – 过滤以列出具有特定组ID的记录。

  • limit (int | None) – 可选的返回记录数量限制。

Returns:

匹配记录的键列表。

Return type:

列表[字符串]

abstract update(keys: Sequence[str], *, group_ids: Sequence[str | None] | None = None, time_at_least: float | None = None) None[source]#

将记录插入或更新到数据库中。

Parameters:
  • keys (Sequence[str]) – 要插入或更新的记录键列表。

  • group_ids (Sequence[str | None] | None) – 与键对应的组ID列表。

  • time_at_least (float | None) –

    可选的时间戳。实现可以使用这个 来可选地验证时间戳至少是这个时间 在存储数据的系统中。

    例如,用于验证postgres数据库中的时间 是否等于或大于给定的时间戳,如果不是 则引发错误。

    这是为了防止时间漂移问题,因为 时间可能不是单调递增的!

Raises:

ValueError – 如果keys的长度与group_ids的长度不匹配。

Return type: