记录管理器#
- class langchain_core.indexing.base.RecordManager(namespace: str)[source]#
表示记录管理器接口的抽象基类。
记录管理器抽象由langchain索引API使用。
记录管理器跟踪哪些文档已写入向量存储以及它们何时被写入。
索引API为每个文档计算哈希值,并将哈希值与写入时间和源ID一起存储在记录管理器中。
在后续的索引运行中,索引API可以检查记录管理器以确定哪些文档已经被索引,哪些还没有。
这允许索引API避免重新索引已经索引过的文档,并且只索引新文档。
这种抽象的主要好处是它适用于许多向量存储。要得到支持,向量存储只需要支持通过ID添加和删除文档的能力。使用记录管理器,索引API将能够删除过时的文档,并避免对已经索引的文档进行冗余索引。
这种抽象的主要限制是:
它依赖于时间戳来确定哪些文档已被索引,哪些尚未被索引。这意味着时间戳必须是单调递增的。时间戳应该是服务器测量的时间戳,以最小化问题。
记录管理器目前是与向量存储分开实现的,这意味着整个系统变得分布式,并可能产生一致性问题。例如,写入记录管理器成功,但相应的写入向量存储失败。
初始化记录管理器。
- Parameters:
namespace (str) – 记录管理器的命名空间。
方法
__init__
(namespace)初始化记录管理器。
异步创建记录管理器的数据库模式。
adelete_keys
(keys)异步从数据库中删除指定的记录。
aexists
(keys)异步检查提供的键是否存在于数据库中。
异步获取当前服务器时间作为高分辨率时间戳。
alist_keys
(*[, before, after, group_ids, limit])根据提供的过滤器异步列出数据库中的记录。
aupdate
(keys, *[, group_ids, time_at_least])异步将记录更新或插入到数据库中。
为记录管理器创建数据库模式。
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 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 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:
无