存储和方案

此页介绍 Oracle Agent Memory SDK 使用的核心存储抽象和方案控制。

存储 API

存储写入语义

存储写入在应用程序存储的文本与存储用于检索的有效负载之间保持清晰的分隔。大多数应用程序可以使用内存级和线程级 API,让存储为向量、关键字或混合检索准备所需的搜索行。较低级别的存储 API 公开了 index_texts、index_text、embeddings 和 embedding 以进行高级集成,这些集成已经知道应使用哪些文本或向量进行检索。

把每个写成两个相关的部分:

update() 还接受 text 作为已过时的兼容性参数。在新代码中使用 content;提供 text 将发出弃用警告。

如果未提供搜索覆盖或显式嵌入,存储将使用解析的存储文本作为检索文本。配置分块时,存储将分块非空文本。空文本存储记录文本,但不提供检索文本。

下表介绍了在考虑显式向量有效负载之前如何选择检索文本。

存储级别检索有效负载

输入 add() update()
省略 index_texts 或 index_text 每个记录都使用其解析的 contents 值进行检索。 替换 content 值用于检索。如果还省略了 content,则仅嵌入更新会重用记录的现有检索文本行。
字符串 index_texts 条目或字符串 index_text 该字符串将替换该记录的检索文本。存储可以在写入检索行之前将其分块。 该字符串将替换该记录的检索文本。存储可以在写入检索行之前将其分块。
list[str] index_texts 条目或 list[str] index_text 该列表被视为调用方拥有的块。每个非空字符串都写为一个检索行,并且存储不会再次将其分块。 该列表被视为调用方拥有的块。每个非空字符串都写为一个检索行,并且存储不会再次将其分块。
None index_texts 条目或 index_text=None 外部 index_texts 列表中的 None 表示“将存储的内容用于此记录”。 除非还提供了 content,否则 index_text=None 将清除检索行,同时将存储的内容保持不变。
空字符串或空块列表 存储记录内容,不提供该记录的检索文本。 在提供 content 时更新记录内容,并清除该记录的检索文本。

显式嵌入是可选的。如果省略了本地向量存储,则当配置本地向量存储时,存储将从检索文本派生本地向量;关键字或混合存储也可以使用仅文本检索行。当提供显式 embeddings 或 embedding 值时,存储将直接写入这些向量,并且不会为这些向量调用其嵌入器。

在 add() 中,embeddings=None 的行为类似于省略 embeddings。在 update() 中,embedding=None 是显式的:存储根据 content 和 index_text 保留或重写检索文本,但存储没有本地向量的行。如果同时省略 content 和 index_text,则会从现有检索行中清除向量。

向量形状告诉商店调用方正在获取多少块所有权:

某些组合被拒绝,因此存储的文本、检索文本和向量不会分开。通过 content=None 将清除存储的内容和检索行,因此不能将其与非空的 index_text 或 embedding 值组合使用;操作者概要信息记录不支持 content=None。弃用的 text 参数具有相同的行为。在 update() 中传递 index_text=None 表示“清除检索行”,因此不允许在同一调用中执行非空的显式嵌入。多个显式向量需要显式块文本,除非更新仅嵌入且现有检索行已提供块文本。

class oracleagentmemory.core.OracleMemoryStore

基础:IMemoryStore

OracleAgentMemory 使用的公用存储接口。

存储实施负责持久保存文本记录并对它们执行相似性搜索。定义了同步和异步入口点,以便更高级别的 API 可以在不复制特定于存储的逻辑的情况下公开匹配的同步/异步曲面。

method add

将记录添加到商店。

注释

当调用方已具有一个或多个 PendingRecordBatch 对象时,请使用 add_batches()。

method add_agent(抽象)

添加代理概要记录。

method add_agent_async(异步)

异步添加代理概要信息记录。

method add_async(异步)

将面向行的记录异步添加到存储中。

接受相同的参数并返回与 add() 相同的标识符。

method add_batches

将调用者准备的逻辑批处理添加到存储。

示例

store.add_batches(
    [
        PendingRecordBatch(
            contents=["pizza batch"],
            record_type="memory",
            record_ids="mem-batch-docs",
        )
    ]
)
['mem-batch-docs']

method add_batches_async(异步)

将呼叫者准备的逻辑批处理异步添加到存储中。

接受相同的参数并返回与 add_batches() 相同的标识符。

method add_relations(抽象)

存储一个或多个定向关系。

标量值在源 - 记录批中广播。列表值必须具有相同的长度。一个端点对只能存储一个方向。使用 opposite_relation_types 描述反向视图,而不是添加第二个反向关系。实施可能会限制它们保留的端点记录类型和关系标签。

示例

store.add_relations(
    "new", "memory", "old", "memory", "supersedes"
)
['relation-id']

method add_relations_async(异步)

异步存储一个或多个定向关系。

标量值在源 - 记录批中广播。列表值必须具有相同的长度。一个端点对只能存储一个方向。使用 opposite_relation_types 描述反向视图,而不是添加第二个反向关系。

示例

await store.add_relations_async(
    "new", "memory", "old", "memory", "supersedes"
)
['relation-id']

method add_user(抽象)

添加用户概要记录。

method add_user_async(异步)

异步添加用户概要信息记录。

method delete(抽象)

按标识符删除一个存储的记录。

method delete_async(异步)

按标识符异步删除一个存储的记录。

method delete_relations(抽象)

按标识符删除关系。

将根据保留的关系重新计算生命周期状态。

示例

store.delete_relations("relation-id")
1

method delete_relations_async(异步)

按标识符异步删除关系。

将根据保留的关系重新计算生命周期状态。

示例

await store.delete_relations_async("relation-id")
1

method delete_thread(抽象)

删除线程及其关联的存储数据。

注释

这是用于删除存储管理的线程和线程范围记录的存储级别操作。当保留要求同时调用删除源消息和派生的线程范围内存数据时,首选线程删除,因为消息级别的删除并不意味着删除单独保留的派生记录。

method delete_thread_async(异步)

异步删除线程及其关联的存储数据。

注释

这是用于删除存储管理的线程和线程范围记录的存储级别操作。当保留要求同时调用删除源消息和派生的线程范围内存数据时,首选线程删除,因为消息级别的删除并不意味着删除单独保留的派生记录。

method get(抽象)

按类型和标识符检索一个存储的记录。

method get_async(异步)

按类型和标识符异步检索一个存储的记录。

method get_relation(抽象)

在存储的源到目标方向中返回一个关系。

单独提供 relation_id,或者提供一个完整的源到目标端点元组。

示例

store.get_relation(relation_id="relation-id")
RecordRelation(...)
store.get_relation(
    "source-id", "memory", "target-id", "fact", "supports"
)
RecordRelation(...)

method get_relation_async(异步)

按 ID 或端点元组异步检索一个关系。

单独提供 relation_id,或者提供一个完整的源到目标端点元组。

示例

await store.get_relation_async(relation_id="relation-id")
RecordRelation(...)

method list(抽象)

列出一种记录类型的存储记录。

method list_async(异步)

异步列出一种记录类型的存储记录。

method list_relations(抽象)

按从源到目标的方向列出存储的关系。

示例

store.list_relations(
    source_record_id="current-memory",
    relation_type="supports",
    metadata_filter={"source": "manual"},
)
[RecordRelation(...)]

method list_relations_async(异步)

以源到目标为方向异步列出关系。

示例

await store.list_relations_async(
    source_record_id="current-memory", relation_type="supports"
)
[RecordRelation(...)]

method list_thread_messages(抽象)

列出存储于一个线程的消息历史记录。

method list_thread_messages_async(异步)

异步列出存储为一个线程的消息历史记录。

method search(抽象)

按相似性搜索记录。

示例

store.add(
    ["Searchable abstract memory"],
    record_type="memory",
    record_ids="mem-search-abstract-docs",
)
['mem-search-abstract-docs']
store.search("Searchable", 1, record_types={"memory"})[0][0].id
'mem-search-abstract-docs'

对标量元数据值进行筛选:

store.add(
    ["pizza release"],
    record_type="memory",
    record_ids="mem-search-meta-source-docs2",
    metadata={"source": "slack"},
)
['mem-search-meta-source-docs2']
any(
    record.id == "mem-search-meta-source-docs2"
    for record, _ in store.search(
        "pizza",
        k=3,
        metadata_filter={"source": "slack"},
    )
)
True

对嵌套元数据进行过滤:

store.add(
    ["pizza review"],
    record_type="memory",
    record_ids="mem-search-meta-review-docs2",
    metadata={"review": {"status": "open"}},
)
['mem-search-meta-review-docs2']
any(
    record.id == "mem-search-meta-review-docs2"
    for record, _ in store.search(
        "pizza",
        k=3,
        metadata_filter={"review": {"status": "open"}},
    )
)
True

完全匹配列表值,包括顺序:

store.add(
    ["pizza tags"],
    record_type="memory",
    record_ids="mem-search-meta-tags-docs2",
    metadata={"tags": ["prod", "urgent"]},
)
['mem-search-meta-tags-docs2']
any(
    record.id == "mem-search-meta-tags-docs2"
    for record, _ in store.search(
        "pizza",
        k=5,
        metadata_filter={"tags": ["prod", "urgent"]},
    )
)
True

当元数据数组包含值时进行筛选:

any(
    record.id == "mem-search-meta-tags-docs2"
    for record, _ in store.search(
        "pizza",
        k=5,
        metadata_filter={"tags": {"$array_contains": "prod"}},
    )
)
True

组合多个元数据条件。记录必须满足每个键:

store.add(
    ["pizza rollout"],
    record_type="memory",
    record_ids="mem-search-meta-combined-docs2",
    metadata={
        "source": "slack",
        "review": {"status": "open"},
        "tags": ["prod", "urgent"],
    },
)
['mem-search-meta-combined-docs2']
any(
    record.id == "mem-search-meta-combined-docs2"
    for record, _ in store.search(
        "pizza",
        k=5,
        metadata_filter={
            "source": "slack",
            "review": {"status": "open"},
            "tags": ["prod", "urgent"],
        },
    )
)
True

method search_async(异步)

按语义相似性异步搜索记录。

method update(抽象)

更新存储的记录内容,嵌入数据、元数据、时间戳或到期。

method update_async(异步)

异步更新存储的记录内容,嵌入数据、元数据、时间戳或到期。

method update_relations(抽象)

更新存储关系上的可变值。

省略的字段保持不变,但更改为内置内存关系类型会将其反向标签替换为固定反向。数据库支持的内存存储还会在关系类型更改后重新计算端点生命周期状态。

示例

store.update_relations(
    "relation-id", relation_types="supports"
)
['relation-id']

method update_relations_async(异步)

异步更新存储关系上的可变值。

省略的字段保持不变,但更改为内置内存关系类型会将其反向标签替换为固定反向。数据库支持的内存存储还会在关系类型更改后重新计算端点生命周期状态。

示例

await store.update_relations_async(
    "relation-id", relation_types="supports"
)
['relation-id']

Oracle DB 存储

class oracleagentmemory.core.OracleDBMemoryStore

基础:OracleMemoryStore

数据库支持的消息、文档、内存和角色概要信息持久性。

创建 Oracle DB 存储。

警告:SchemaPolicy.CREATE_IF_NECESSARY 可能比正常存储启动贵,因为它可能会在初始化成功之前修复托管方案对象。当方案可能包含多个行时,计划修复工作将作为维护操作。旧方案版本上的存储需要在初始化之前进行程序包方案升级。

如果方案设置必须创建托管的过期记录清除作业,但数据库用户缺少调度程序 - 作业权限,则初始化将警告并继续。过期的消息和记忆不会被读取和搜索隐藏,但是在具有 CREATE JOB 或等效调度程序权限的用户创建作业之前,这些消息和记忆不会被物理清除。

当 SchemaPolicy.CREATE_IF_NECESSARY 首次在现有方案上创建托管混合索引时,Oracle 会扫描存储的搜索文本,并从配置的数据库内模型构建托管混合索引状态。存储初始化等待该 DDL 完成,因此,请将第一次混合升级计划为大型方案的迁移或维护操作。SearchIndexSyncMode 控制索引存在后正在进行的维护;它不会使第一个索引构建异步。

创建该托管混合索引还会创建由托管方案命名的 DBMS_VECTOR_CHAIN 向量器首选项。该首选项存储已配置的 OracleDBEmbedder 模型中的轻量向量器配置元数据。可以使用 Oracle Text 首选项视图(例如 CTX_USER_PREFERENCES 和 CTX_USER_PREFERENCE_VALUES)对其进行检查。

method add

将记录添加到 Oracle DB 存储。

示例

store.add(
    ["Index this stored text"],
    record_type="memory",
    record_ids="mem-db-add-docs",
)
['mem-db-add-docs']
store.add(
    ["Stored text"],
    record_type="memory",
    index_texts=["Search this text"],
    record_ids="mem-db-index-text-docs",
)
['mem-db-index-text-docs']
store.add(
    ["Short-lived event"],
    record_type="memory",
    record_ids="mem-db-ttl-docs",
    timestamps="2026-01-01T12:00:00+00:00",
    ttl_days=7,
    ttl_anchor=TimeToLiveAnchor.TIMESTAMP,
)
['mem-db-ttl-docs']

method add_agent

添加代理概要记录。

注释

代理概要信息记录未受影响。插入的公共记录标识符与 agent_id 传递的值相同。

示例

store.add_agent("a-docs-agent", "Support assistant")
'a-docs-agent'

method add_agent_async(异步)

异步添加代理概要信息记录。

method add_async(异步)

将面向行的记录异步添加到存储中。

接受相同的参数并返回与 add() 相同的标识符。

method add_batches

将调用者准备的逻辑批处理添加到存储。

示例

store.add_batches(
    [
        PendingRecordBatch(
            contents=["pizza batch"],
            record_type="memory",
            record_ids="mem-batch-docs",
        )
    ]
)
['mem-batch-docs']

method add_batches_async(异步)

将呼叫者准备的逻辑批处理异步添加到存储中。

接受相同的参数并返回与 add_batches() 相同的标识符。

method add_relations

以原子方式存储一个或多个内存到内存的关系。

标量值在源 ID 批中广播;列表必须对齐。一个端点对只能存储一个关系方向。内置内存链接标签会收到固定的反向标签,生命周期标签会更新同一事务处理中的端点状态。

示例

store.add_relations(
    "new-memory", "memory", "old-memory", "memory", "supersedes"
)
['relation-id']

method add_relations_async(异步)

异步存储一个或多个定向关系。

标量值在源 - 记录批中广播。列表值必须具有相同的长度。一个端点对只能存储一个方向。使用 opposite_relation_types 描述反向视图,而不是添加第二个反向关系。

示例

await store.add_relations_async(
    "new", "memory", "old", "memory", "supersedes"
)
['relation-id']

method add_user

添加用户概要记录。

注释

用户概要信息记录未受限制。插入的公共记录标识符是显式或推断的 user_id。

示例

store.add_user("u-docs-profile", "Prefers concise answers.")
'u-docs-profile'

method add_user_async(异步)

异步添加用户概要信息记录。

method delete

按标识符删除一个托管行及其块行。

注释

该操作在一个事务处理内运行。为支持的顶层目标启用 cascade 时,将一起提交或回退概要信息删除和所有范围子删除。

示例

store.add(["Delete me"], record_type="memory", record_ids="mem-delete-docs")
['mem-delete-docs']
store.delete("memory", "mem-delete-docs")
1

method delete_async(异步)

按标识符异步删除一个存储的记录。

method delete_relations

按标识符删除关系并重新计算生命周期状态。

示例

store.delete_relations("relation-id")
1

method delete_relations_async(异步)

按标识符异步删除关系。

将根据保留的关系重新计算生命周期状态。

示例

await store.delete_relations_async("relation-id")
1

method delete_thread

删除线程及其关联的存储行。

注释

需要线程范围级联清除时使用此操作。在数据库支持的存储中,删除该线程将删除托管线程行以及关联的消息和内存行以及为检索而维护的搜索数据。这比仅删除原始消息行的消息级别删除更广泛。线程删除将删除从属消息和内存行及其在同一事务处理中的关联检索数据。

示例

store.delete_thread("c1")
0

method delete_thread_async(异步)

异步删除线程及其关联的存储数据。

注释

这是用于删除存储管理的线程和线程范围记录的存储级别操作。当保留要求同时调用删除源消息和派生的线程范围内存数据时,首选线程删除,因为消息级别的删除并不意味着删除单独保留的派生记录。

method get

按标识符检索存储的记录。

示例

store.add(["Remember this"], record_type="memory", record_ids="mem-get-docs")
['mem-get-docs']
store.get("memory", "mem-get-docs").id
'mem-get-docs'

method get_async(异步)

按类型和标识符异步检索一个存储的记录。

method get_relation

返回由 ID 或完整端点元组标识的一个关系。

单独提供 relation_id,或者提供一个完整的源到目标端点元组。

示例

store.get_relation(relation_id="relation-id")
RecordRelation(...)
store.get_relation(
    "source-id", "memory", "target-id", "fact", "supports"
)
RecordRelation(...)

method get_relation_async(异步)

按 ID 或端点元组异步检索一个关系。

单独提供 relation_id,或者提供一个完整的源到目标端点元组。

示例

await store.get_relation_async(relation_id="relation-id")
RecordRelation(...)

method(方法)list

枚举记录类型的持久记录。

注释

"user_profile" 和 "agent_profile" 是不受限制的记录类型。对于这些记录类型,将忽略 thread_id、user_id 和 agent_id,角色标识保留在 record.id 中。"thread" 记录将线程标识符公开为 record.id 和 record.thread_id。

示例

store.add(
    ["First listed", "Second listed"],
    record_type="memory",
    record_ids=["mem-list-docs-1", "mem-list-docs-2"],
)
['mem-list-docs-1', 'mem-list-docs-2']
[record.id for record in store.list("memory", limit=2)]
['mem-list-docs-1', 'mem-list-docs-2']
store.add_user("u-list-docs", "Prefers concise answers.")
'u-list-docs'
any(
    record.id == "u-list-docs"
    for record in store.list("user_profile", user_id=None, limit=10)
)
True

method list_async(异步)

异步列出一种记录类型的存储记录。

method list_relations

按从源到目标的方向列出关系。

示例

store.list_relations(
    source_record_id="current-memory",
    relation_type="supports",
    metadata_filter={"source": "manual"},
)
[RecordRelation(...)]

method list_relations_async(异步)

以源到目标为方向异步列出关系。

示例

await store.list_relations_async(
    source_record_id="current-memory", relation_type="supports"
)
[RecordRelation(...)]

method list_thread_messages

返回一个话题持续的消息。

示例

store.list_thread_messages("c1")
[]

method list_thread_messages_async(异步)

异步列出存储为一个线程的消息历史记录。

按相似性搜索记录。

活动搜索后端取决于存储配置的 SearchStrategy。SearchStrategy.VECTOR 根据存储的记录向量对查询向量进行排名。SearchStrategy.HYBRID 在 Oracle 托管混合索引中查询存储的搜索文本及其托管索引状态。SearchStrategy.KEYWORD 仅按与存储的搜索文本匹配的文本进行排名。

示例

store.add(
    ["pizza preference"],
    record_type="memory",
    record_ids="mem-search-docs",
    thread_ids="c-search-docs",
)
['mem-search-docs']
results = store.search(
    "pizza",
    1,
    thread_id="c-search-docs",
    exact_thread_match=True,
    record_types={"memory"},
)
results[0][0].id
'mem-search-docs'

对标量元数据值进行筛选:

store.add(
    ["pizza release"],
    record_type="memory",
    record_ids="mem-search-meta-source-docs",
    metadata={"source": "slack"},
)
['mem-search-meta-source-docs']
any(
    record.id == "mem-search-meta-source-docs"
    for record, _ in store.search(
        "pizza",
        k=3,
        metadata_filter={"source": "slack"},
    )
)
True

对嵌套元数据进行过滤:

store.add(
    ["pizza review"],
    record_type="memory",
    record_ids="mem-search-meta-review-docs",
    metadata={"review": {"status": "open"}},
)
['mem-search-meta-review-docs']
any(
    record.id == "mem-search-meta-review-docs"
    for record, _ in store.search(
        "pizza",
        k=3,
        metadata_filter={"review": {"status": "open"}},
    )
)
True

完全匹配列表值,包括顺序:

store.add(
    ["pizza tags"],
    record_type="memory",
    record_ids="mem-search-meta-tags-docs",
    metadata={"tags": ["prod", "urgent"]},
)
['mem-search-meta-tags-docs']
any(
    record.id == "mem-search-meta-tags-docs"
    for record, _ in store.search(
        "pizza",
        k=3,
        metadata_filter={"tags": ["prod", "urgent"]},
    )
)
True

当元数据数组包含值时进行筛选:

any(
    record.id == "mem-search-meta-tags-docs"
    for record, _ in store.search(
        "pizza",
        k=3,
        metadata_filter={"tags": {"$array_contains": "prod"}},
    )
)
True

组合多个元数据条件。记录必须满足每个键:

store.add(
    ["pizza rollout"],
    record_type="memory",
    record_ids="mem-search-meta-combined-docs",
    metadata={
        "source": "slack",
        "review": {"status": "open"},
        "tags": ["prod", "urgent"],
    },
)
['mem-search-meta-combined-docs']
any(
    record.id == "mem-search-meta-combined-docs"
    for record, _ in store.search(
        "pizza",
        k=5,
        metadata_filter={
            "source": "slack",
            "review": {"status": "open"},
            "tags": ["prod", "urgent"],
        },
    )
)
True

method search_async(异步)

按语义相似性异步搜索记录。

method update

更新存储的记录内容、搜索状态、元数据和时间戳值。

示例

store.add(["Original note"], record_type="memory", record_ids="mem-update-docs")
['mem-update-docs']
store.update("memory", "mem-update-docs", content="Updated note")
1
store.get("memory", "mem-update-docs").content
'Updated note'

method update_async(异步)

异步更新存储的记录内容,嵌入数据、元数据、时间戳或到期。

method update_relations

更新可变关系字段并重新计算端点生命周期状态。

省略的字段保持不变。内置内存链接标签始终保留其派生的反向标签。

示例

store.update_relations("relation-id", relation_types="supports")
['relation-id']

method update_relations_async(异步)

异步更新存储关系上的可变值。

省略的字段保持不变,但更改为内置内存关系类型会将其反向标签替换为固定反向。数据库支持的内存存储还会在关系类型更改后重新计算端点生命周期状态。

示例

await store.update_relations_async(
    "relation-id", relation_types="supports"
)
['relation-id']

关联

OracleDBMemoryStore 可以存储类似内存的记录(memory、fact、guideline 和 preference)之间的定向关系。当集成需要较低级别的关系 API 时,请使用 add_relations()、get_relation()、list_relations()、update_relations() 和 delete_relations()。客户端和线程 API 为支持的内存关系类型提供 link_records()、update_record_link() 和 delete_record_link()。

要检索一种关系,请单独提供 relation_id 或完整存储的端点元组:源记录 ID 和类型、目标记录 ID 和类型以及关系类型。部分元组和与任何元组字段组合的关系 ID 无效,因为两者都不能明确地标识所请求的关系。

使用 list_relations() 按创建顺序列举关系。按源或目标记录 ID 和类型进行筛选,或者按定向关系标签进行筛选。它使用商店的正常安全列表限制,除非您通过 limit=None。其 metadata_filter 使用与 list() 相同的完全匹配、嵌套对象、数组成员关系和否定语义;通过 metadata_filter=None 仅返回没有元数据的关系。

生命周期关系类型(supersedes、refines 和 duplicates)会在存在链接时将其目标内存标记为无效。删除或更改最后一个此类链接会将目标恢复为有效状态。搜索 API 可以排除具有 include_invalid_results=False 的无效记录。

class oracleagentmemory.apis.relations.RecordRelation

基准:object

描述两个记录之间存储的定向关系。

搜索策略

class oracleagentmemory.core.dbsearch.SearchStrategy

基础:Enum

Oracle DB 存储的搜索行为。

数据库存储初始化使用所选策略来选择托管方案搜索功能。VECTOR 搜索存储本地嵌入。KEYWORD 搜索存储可搜索文本和文本索引。HYBRID 搜索存储可搜索文本以及 Oracle 管理的混合向量索引状态。数据库存储会在启动时验证此方案功能,因此不兼容的策略不会无提示地返回未完成的结果。

VECTOR
仅按向量相似性搜索。存储使用配置的嵌入器嵌入查询,或使用调用方提供的 query_vector,并按与存储向量的距离对记录进行排名。将此项与为向量搜索配置的数据库方案结合使用。
HYBRID
使用 Oracle 托管混合索引进行搜索。Oracle 将文本匹配与存储的搜索文本与数据库内混合索引中的向量排名相结合。当用户可以按自然语言以及确切的标识符、别名或产品名称进行搜索时,使用此选项。此策略要求存储的主嵌入程序为 OracleDBEmbedder,因此托管索引和存储共享一个数据库内模型。
KEYWORD
仅按关键字/文本匹配在存储的搜索文本上进行搜索。此模式不创建本地查询嵌入,也不需要 Oracle DB 嵌入。当针对现有混合模式打开时,它可以使用该混合索引的文本分支,而无需创建新的混合索引。如果准确的标识符、别名、产品名称或短短短语应驱动检索而无需向量融合,则使用此选项。

HYBRID = ‘ HYBRID ’

KEYWORD = ‘ KEYWORD ’

VECTOR = ‘ VECTOR ’

搜索索引同步模式

class oracleagentmemory.core.dbsearch.SearchIndexSyncMode

基础:Enum

托管数据库搜索索引的刷新行为。

此设置控制 Oracle 何时将新的或更改的搜索文本对数据库支持的文本感知搜索可见。SearchStrategy.HYBRID 使用 Oracle 托管的混合向量索引。SearchStrategy.KEYWORD 使用 Oracle Text 索引。SearchStrategy.VECTOR 不使用此设置。

ON_COMMIT
提交写入事务处理时刷新索引。这是大多数应用程序的默认和最简单的选择,因为记录在成功写入后可立即搜索。它可以添加写入事务的工作,因为索引会立即保持最新状态。
MANUAL
不要自动刷新索引。在您自己运行数据库端索引同步操作之前,新记录或更新的记录可能不会出现在关键字或混合搜索中。这对于要控制刷新工作何时运行的批量加载或维护窗口非常有用。
AUTO
让 Oracle 异步刷新托管混合索引。写入可以避免立即刷新成本,但搜索结果可能会滞后于最近的写入,直到 Oracle 完成后台刷新。此模式仅受 SearchStrategy.HYBRID 支持。

警告:此设置控制托管搜索索引存在后正在进行的维护。它不会使第一个索引构建异步。在现有存储的搜索文本上创建托管混合索引可以长时间运行,因为 Oracle 从该文本构建托管混合索引状态。

AUTO = ‘ AUTO ’

MANUAL = ‘ MANUAL ’

ON_COMMIT = ‘ ON_COMMIT ’

生存时间

class oracleagentmemory.core.retention.MemoryRetentionConfig

基准:object

Oracle DB 支持的记录的方案级别保留设置。

class oracleagentmemory.apis.ttl.TimeToLiveAnchor

基础:Enum

用于计算从生存时间开始的失效时间戳的锚点。

CREATED_AT
从记录的数据库创建时间戳计算到期。当调用方省略 ttl_anchor 时,这是缺省设置。
TIMESTAMP
从记录的存储事件时间戳计算到期。当消息或内存表示较旧的事件并且应相对于该事件时间(而不是插入时间)过期时,使用此选项。

CREATED_AT = ‘ CREATED_AT ’

TIMESTAMP = ‘ TIMESTAMP ’

模式策略

class oracleagentmemory.core.SchemaPolicy

基础:str、Enum

Oracle DB 存储的方案创建策略。

需要现有

验证完整托管方案是否已存在并且是否是最新的。请勿创建或修改数据库对象。

CREATE_IF_EMPTY

如果不存在托管对象,则引导方案。如果对象已存在,则需要完整且最新的托管方案。

需要 CREATE_IF_

创建缺少的托管对象并应用支持的托管方案升级。

重新创建

删除并重新创建所有托管方案对象。这是毁灭性的。

无检查

跳过托管模式验证和创建。当最终用户安全上下文处于活动状态时,请将此策略用于受深度数据安全保护的现有存储。在最终用户上下文下打开的存储需要每个后续数据库操作的活动上下文。其他方案策略拒绝最终用户上下文,因为方案生命周期工作必须通过管理数据库标识运行。