代理内存
本页介绍具体的 Oracle AI Agent Memory 实施。
Oracle 代理内存
注:OracleAgentMemory.delete_thread() 是线程范围级联清除支持的路径。它将删除线程以及关联的消息、持久存储和托管检索数据。这比 OracleThread.delete_message() 更宽,后者仅删除原始消息行。在删除线程之前,它将等待此客户机已知的该线程的先前接受的后台提取。在删除过程中,它不会序列化同一线程的每个并发操作。
class oracleagentmemory.core.OracleAgentMemory
基础:IAgentMemory
由 Oracle DB 或呼叫方提供的存储支持的代理内存客户机。
创建内存客户机。
- 参数:
- store
OracleMemoryStore- 可选的预配置存储实例。如果提供,客户机将直接使用此存储,而不是实例化自己的存储。当调用者需要OracleAgentMemory公开的构造器选项之外的存储配置时,这非常有用。 - connection
object- 可选的 Oracle DB 连接/池。如果提供,则使用数据库存储。通过原始连接可为此客户机实例启用单会话模式,因此并发请求应改用连接池。省略时,调用者必须传递显式store。 - embedder
IEmbedder | str- 嵌入器实现实例或 LiteLLM 嵌入模型标识符。如果省略,则不附加嵌入。然后,仅向量数据库搜索需要通过较低级别的存储 API 进行预计算向量,而关键字数据库搜索可以直接从查询文本运行。混合数据库搜索需要OracleDBEmbedder实例,因此托管混合索引和主嵌入器使用相同的数据库内模型。 - LLM
ILlm- 线程用于内存提取和/或上下文汇总的可选 LLM 适配器。默认情况下,从此客户机创建或加载的线程需要 LLM,因此可以挖掘最近的消息以获得持久的内存。在此处传递llm,稍后在create_thread中提供,或者使用memory_extraction_config=MemoryExtractionConfig(extract_memories=False)禁用自动提取。 - memory_extraction_config
MemoryExtractionConfig- 可选的客户机级内存提取配置。使用它来控制自动内存提取设置,例如提取模式、摘要行为和提取限制。省略的字段使用 SDK 默认值。 - schema_policy
SchemaPolicy | str- 仅当从connection构造数据库存储时才使用的数据库方案设置策略。默认值为SchemaPolicy.REQUIRE_EXISTING。首次在现有方案上启用关键字或混合搜索时,或者打开受支持的较早已发布的托管方案时,请使用SchemaPolicy.CREATE_IF_NECESSARY,以便 SDK 可以应用非破坏性方案升级并添加所需的文本搜索对象。应改为重新创建已声明当前发行版配置的开发或部分更新的方案。 - memory_store_id
str- 仅当从connection构造数据库存储时才使用的托管数据库内存存储的稳定 ID。重用同一 ID 重新打开同一托管存储。ID 联接到带下划线的托管数据库对象名称,因此它必须以字母开头,仅包含字母、数字和下划线,并且最多 16 个字符。传递 this 或table_name_prefix,而不是两者。如果省略,则在同时省略table_name_prefix时,数据库存储将使用table_name_prefix或无前缀默认值。 -
table_name_prefix
str-仅当从
connection构造数据库存储时才使用的可选数据库表/索引前缀。传递 this 或memory_store_id,而不是两者。信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_store_id。 - search_strategy
SearchStrategy-SearchStrategy值,用于从connection构造数据库存储时选择 DB-search 后端。使用SearchStrategy.VECTOR(默认值)进行仅向量检索,使用SearchStrategy.HYBRID在存储的搜索文本上查询托管的 Oracle 混合向量索引,使用SearchStrategy.KEYWORD在没有向量融合的情况下按关键字/文本匹配对存储的搜索文本进行排名。KEYWORD不需要嵌入。HYBRID要求embedder为OracleDBEmbedder。当与现有方案一起使用不兼容的策略时,客户机启动失败,因为该方案可能不包含策略所需的存储搜索状态。 - search_index_sync
SearchIndexSyncMode- 选择SearchStrategy.HYBRID和SearchStrategy.KEYWORD的托管搜索索引刷新行为的SearchIndexSyncMode值。SearchIndexSyncMode.ON_COMMIT是默认值,使写入事务处理提交后立即可搜索记录。SearchIndexSyncMode.MANUAL将刷新保留为显式数据库端同步操作。SearchIndexSyncMode.AUTO允许 Oracle 异步刷新托管混合索引,并且仅支持SearchStrategy.HYBRID;关键字搜索拒绝AUTO。 -
extract_memories
bool-True时,此客户机创建或装入的线程需要 LLM,并且自动内存提取仍处于启用状态。设置为False可禁用自动内存提取,并允许这些线程在没有 LLM 的情况下运行。默认值为True,因此缺少提取 LLM 会快速失败。信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
memory_extraction_custom_instructions
str-对于此客户机创建或装入的线程,附加到自动内存提取系统提示符的可选定制说明。传递给
create_thread、get_thread或update_thread的每线程值优先。信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 - memory_retention_config
MemoryRetentionConfig- 仅当从connection构造数据库存储时才使用的可选内存保留配置。MemoryRetentionConfig.default_ttl_days将应用于写入调用省略ttl_days的新消息和内存。MemoryRetentionConfig.max_ttl_days将显式每记录持续时间夹在配置的最大值之上,并发出警告,如果设置,则使ttl_days=None使用该最大值,而不是创建非过期记录。使用SchemaPolicy.CREATE_IF_NECESSARY时,显式配置会刷新现有最新托管方案上存储的元数据,但不会更新现有到期日期;省略该配置会保留现有设置。如果显式配置将default_ttl_days或max_ttl_days留在NOT_SET_MARKER,SDK 将在比较或存储方案元数据之前将该属性解析为其默认值 (None)。根据记录中存储的预期信息、应用程序保留它的原因以及任何应用程序或监管保留承诺选择此配置。
- store
警告:SchemaPolicy.CREATE_IF_NECESSARY 可能比普通客户端启动贵,因为它可能会在初始化成功之前应用托管方案 DDL 和尽力重写数据。在旧托管方案包含多个行时,将首次打开的托管方案计划为迁移或维护操作。
如果方案设置必须创建托管的过期记录清除作业,但数据库用户缺少调度程序 - 作业权限,则初始化将警告并继续。过期的消息和记忆不会被读取和搜索隐藏,但是在具有 CREATE JOB 或等效调度程序权限的用户创建作业之前,这些消息和记忆不会被物理清除。
当 SchemaPolicy.CREATE_IF_NECESSARY 首次在现有方案上创建托管混合索引时,Oracle 会扫描存储的搜索文本,并从配置的数据库内模型构建托管混合索引状态。客户机启动将等待该 DDL 完成,因此,请计划第一次将混合升级作为大型方案的迁移或维护操作。SearchIndexSyncMode 控制索引存在后正在进行的维护;它不会使第一个索引构建异步。
- 引发:ValueError - 如果提供了冲突的存储配置,例如传递
store和connection、不带数据库连接的特定于数据库的选项,或者同时忽略store和connection。 - 参数:
- store
OracleMemoryStore - connection(连接)
object - embedder(嵌入式)
IEmbedder | str - llm
ILlm - memory_extraction_config
MemoryExtractionConfig - schema_policy
SchemaPolicy | str - memory_store_id
str - table_name_prefix
str - search_strategy
SearchStrategy - search_index_sync
SearchIndexSyncMode - extract_memories
bool - memory_extraction_custom_instructions
str - memory_retention_config
MemoryRetentionConfig
- store
示例
from oracleagentmemory.core import (
MemoryExtractionConfig,
SearchIndexSyncMode,
OracleAgentMemory,
SchemaPolicy,
SearchStrategy,
)
client = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
llm=llm,
)
read_only_client = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
memory_extraction_config=MemoryExtractionConfig(extract_memories=False),
)
使用数据库内嵌入模型利用 Oracle 混合索引搜索:
from oracleagentmemory.core.embedders import OracleDBEmbedder
db_embedder = OracleDBEmbedder(
connection=db_pool,
model="DOC_MODEL",
embedding_dimension=768,
)
hybrid_client = OracleAgentMemory(
connection=db_pool,
embedder=db_embedder,
schema_policy=SchemaPolicy.CREATE_IF_NECESSARY,
search_strategy=SearchStrategy.HYBRID,
search_index_sync=SearchIndexSyncMode.ON_COMMIT,
)
method add_agent
将座席概要信息记录添加到门店。
- 参数:
- agent_id
str- 代理标识符。 - information
str- 关于代理的自由格式信息。 - metadata
dict[str, Any] | None- 存储在代理配置文件行上的可选元数据映射。
- agent_id
- 返回:存储的代理配置文件的标识符。
- 返回类型: str
注
代理概要信息记录存储在客户端级存储中,并有意取消范围。返回的记录标识符与应用程序用作 agent_id 的公共标识符相同。
示例
from oracleagentmemory.core import OracleAgentMemory
client = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
llm=llm,
)
client.add_agent(
"a1",
"Support assistant",
metadata={"source": "catalog"},
)
'a1'
method add_memory
在内存系统中添加内存,该内存归属于指示的用户、代理和线程。
- 参数:
- content
str- 要持久保留的内存内容。 - memory_type
Literal['memory', 'guideline', 'fact', 'preference'] | ~oracleagentmemory._notset._NotSetMarker- 要存储的内存类别。支持的值包括"memory"、"fact"、"guideline"和"preference"。如果省略,内容将存储为常规"memory"。 - user_id
str- 与存储的内存关联的可选范围标识符。 - agent_id
str- 与存储的内存关联的可选作用域标识符。 - thread_id
str- 与存储的内存关联的可选作用域标识符。 - memory_id
str- 可选的调用方为此内存行提供的稳定标识符。 - metadata
dict[str, Any] | None- 可与存储的内存一起保留的可选元数据。 - timestamp
str | None- 用于保存此内存的可选时间戳。它表示创建内存的时间。省略或None时,存储将使用当前时间。如果ttl_anchor为TimeToLiveAnchor.TIMESTAMP,则不带时区的 ISO-8601 时间戳将视为 UTC。 - ttl_days
int | None- 可选的生存时间持续时间(天)。省略此参数以使用模式默认的生存时间持续时间。PassNoneto useMemoryRetentionConfig.max_ttl_dayswhen the retention configuration sets one, or to store a non-expiring memory when it does not.MemoryRetentionConfig.max_ttl_days以上的值将夹到该最大值并显示警告。 - ttl_anchor
TimeToLiveAnchor- 可选的生存时间锚。使用TimeToLiveAnchor.CREATED_AT表示数据库创建时间,使用TimeToLiveAnchor.TIMESTAMP表示内存时间戳。没有时区的 ISO-8601 时间戳将视为 UTC。 - **store_kwargs ( Any )- 转发到后备存储的特定于存储的写入选项。
- content
- 返回:插入的内存记录的标识符。
- 返回类型: str
示例
from oracleagentmemory.core import OracleAgentMemory
client = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
llm=llm,
)
memory_id = client.add_memory("User likes pizza", memory_id="mem-1")
memory_id
'mem-1'
method add_memory_async(异步)
将内存记录异步添加到客户机。
- 参数:
- content
str- 要存储为内存的文本内容。 - memory_type
Literal['memory', 'guideline', 'fact', 'preference'] | ~oracleagentmemory._notset._NotSetMarker- 要存储的内存类别。支持的值包括"memory"、"fact"、"guideline"和"preference"。如果省略,内容将存储为常规"memory"。 - user_id
str- 与内存关联的可选用户标识符。 - agent_id
str- 与内存关联的可选代理标识符。 - thread_id
str- 与内存关联的可选线程标识符。 - memory_id
str- 可选的调用方提供的稳定标识符。如果省略,存储将生成一个。 - metadata
dict[str, Any] | None- 与内存行一起保留的可选元数据。 - timestamp
str | None- 用于保存此内存的可选时间戳。它表示创建内存的时间。省略或None时,存储将使用当前时间。 - ttl_days
int | None- 可选的生存时间持续时间(天)。省略此参数以使用模式默认的生存时间持续时间。传递None以存储不会过期的内存。 - ttl_anchor
TimeToLiveAnchor- 可选的生存时间锚。使用TimeToLiveAnchor.CREATED_AT表示数据库创建时间,使用TimeToLiveAnchor.TIMESTAMP表示内存时间戳。 - **store_kwargs ( Any )- 特定于实施的写入选项,转发到后备存储。
- content
- 返回:插入的内存记录的标识符。
- 返回类型: str
method add_user
将用户概要信息记录添加到门店。
- 参数:
- user_id
str- 用户标识符。 - information
str- 关于用户的自由格式信息。 - metadata
dict[str, Any] | None- 存储在用户配置文件行上的可选元数据映射。
- user_id
- 返回:存储的用户配置文件的标识符。
- 返回类型: str
注
用户概要信息记录存储在客户端级存储中,并且有意取消范围。返回的记录标识符与应用程序用作 user_id 的公共标识符相同。
示例
from oracleagentmemory.core import OracleAgentMemory
client = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
llm=llm,
)
client.add_user(
"u1",
"Prefers concise answers.",
metadata={"source": "crm"},
)
'u1'
method close
关闭代理内存组件。
关闭将停止接受新的后台提取工作,并等待暂挂的后台内存提取以完成到配置的超时。如果该超时到期,即使某些后台提取工作仍未完成,close() 也会返回。方法是幂等的。
- 参数:timeout
float | None- 等待接受的后台提取工作的可选最大秒数。默认为300。传递None以无限期等待。 - 返回类型:无
示例
client = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
schema_policy=SchemaPolicy.CREATE_IF_NECESSARY,
memory_extraction_config=MemoryExtractionConfig(extract_memories=False),
)
client.close()
method close_async(异步)
异步关闭代理内存组件。
此方法遵循与 close() 相同的关闭行为。如果超时到期,则可以在后台提取工作仍在运行时返回。
- 参数:timeout
float | None- 等待接受的后台提取工作的可选最大秒数。默认为300。传递None以无限期等待。 - 返回类型:无
示例
await client.close_async()
method create_thread
创建并注册线程。
- 参数:
- thread_id
str- 线程标识符。如果省略,将生成一个新的。 - user_id
str- 附加到此线程记录的用户标识符。如果省略,将生成一个新的。 - agent_id
str- 附加到此线程记录的代理标识符。如果省略,将生成一个新的。 - metadata
dict[str, Any] | None- 类 JSON 的可选元数据保留在对话线程中。 - LLM
ILlm- 此线程的可选 LLM 覆盖。如果省略,则使用在构建时配置的客户机级 LLM。缺省情况下,客户机或线程必须提供 LLM,以便可以运行自动内存提取。在此处或客户端上设置memory_extraction_config=MemoryExtractionConfig(extract_memories=False)以选择退出该要求。 - max_message_token_length
int- 内存提取和上下文摘要更新期间截断或汇总之前的最大提示时间消息大小。存储的消息内容保持不变。省略时,默认为15_000标记。 - message_shortening_input_token_limit
int- 缩短超大提示时间消息复制时发送到 LLM 的消息摘录的最大大小(以令牌表示)。省略时,默认为30_000标记。 - memory_extraction_config
MemoryExtractionConfig- 可选的每线程内存提取配置。省略的字段从代理内存组件继承。解析的配置与线程一起存储,因此以后加载将保留创建时行为。 - context_card_token_limit
int- 用于构建上下文卡中包括的摘要和主题列表的 LLM 提示符的最大输入令牌预算。如果省略,则默认为100_000。 - context_card_type_search_concurrency
int- 使用min_relevant_results_by_type构建上下文卡时要同时运行的最大内存类记录搜索数。如果省略,则默认为5。 -
extract_memories
bool-用于自动内存提取的可选每线程覆盖。当
True时,此线程需要 LLM,因此可以运行自动提取。设置为False可对此线程禁用自动提取并允许在没有 LLM 的情况下执行操作。省略时,将使用客户机级extract_memories设置。信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
memory_extraction_window
int-内存提取期间要包含的最近消息数。设置为
-1可使用新添加的全部消息批对每个add_messages调用执行一次提取。如果省略,则默认为-1。信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
context_summary_update_frequency
int-上下文汇总刷新的频率。设置为
-1可使用新添加的全部消息批对每个add_messages调用执行一次摘要更新。如果省略,则默认为-1。信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
memory_extraction_frequency
int-内存提取更新的频率。设置为
-1可使用新添加的全部消息批对每个add_messages调用执行一次提取。如果省略,则默认为-1。信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
memory_extraction_token_limit
int-用于内存提取和运行摘要更新的 LLM 提示的最大大小(以标记为单位)。如果省略,则默认为
100_000。信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
memory_extraction_custom_instructions
str-附加到此线程的内存提取系统提示符的可选定制说明。如果提供,解析的值将保留在线程运行时配置中。
信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
memory_extraction_inherit_message_metadata
bool | Sequence[str]-从源消息复制到自动提取的存储器上的元数据的可选每线程覆盖。
信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
enable_context_summary
bool-是否为此线程保留正在运行的上下文摘要。
信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 - **kwargs ( Any )- 其他特定于实现的线程选项。
- thread_id
- 返回:
OracleThread实例。 - 返回类型:OracleThread
- 引发:ValueError - 如果没有 LLM 可用于自动内存提取,并且线程和客户机未配置
memory_extraction_config=MemoryExtractionConfig(extract_memories=False)。
示例
from oracleagentmemory.core import OracleAgentMemory
client = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
llm=llm,
)
thread = client.create_thread(thread_id="c1", user_id="u1")
thread.thread_id
'c1'
method delete_agent
按标识符删除代理概要记录。
- 参数:
- agent_id
str- 应删除其配置文件的代理标识符。 - cascade
bool- 当True(缺省值)时,还将删除限定到此代理的记录。这包括删除拥有的线程本身、使用这些线程删除的消息和类似内存的记录,以及所有剩余的直接代理范围的记录,例如消息、内存、准则、事实或首选项。当匹配的代理概要文件行已经缺失时,此范围清除仍会运行。设置为False以仅删除概要信息记录。
- agent_id
- 返回值:已删除的代理概要文件行数(
0或1)。在级联清除期间删除了作用域行时,这可能仍为0。 - 返回类型: int
- 引发:TimeoutError - 在内部删除等待超时之前,当已知的已拥有线程的已接受后台提取未完成时引发。
注
级联删除是在后备存储内计划和执行的,因此概要信息删除和所有范围的子删除都在一个存储操作中发生。在运行级联删除之前,此方法将等待先前已通过此代理内存组件接受的所有线程的后台提取。它不等待等待等待开始后接受的工作,也不等待其他代理内存组件或进程启动的工作。不支持在删除过程中同时使用操作者范围。
示例
from oracleagentmemory.core import OracleAgentMemory
client = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
llm=llm,
)
client.add_agent("a-delete", "Support assistant")
'a-delete'
client.delete_agent("a-delete")
1
method delete_memory
按标识符删除类似内存的记录(例如,内存、事实、首选项或准则)。
- 参数:memory_id
str- 内存标识符。标识符可以引用存储的memory、guideline、fact或preference记录。 - 返回:已删除的类似内存的行数(
0或1)。 - 返回类型: int
示例
client = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
llm=llm,
)
memory_id = client.add_memory("Temporary memory", memory_id="mem-delete")
client.delete_memory(memory_id)
1
method delete_memory_async(异步)
按标识符异步删除类似内存的记录(例如,内存、事实、首选项或准则)。
- 参数:memory_id
str- 要删除的类似内存记录的标识符。 - 返回:已删除类似内存的记录数。
- 返回类型: int
method delete_thread
删除与线程标识符关联的所有记录。
- 参数:thread_id
str- 要删除的线程标识符。 - 返回数:已删除的对话线程数(
0或1)。 - 返回类型: int
- 引发:TimeoutError - 在内部删除等待超时之前未完成此线程早期接受的后台提取时引发。
注
需要保留完成删除线程时,请使用此操作。后备存储将删除线程以及关联的线程范围消息、持久存储器和托管检索数据。This differs from OracleThread.delete_message(), which removes only the raw message record and does not cascade to derived memories created from that message. 在删除线程之前,此方法将等待已通过此代理内存组件为该线程接受的早期后台提取。它不会等待等待等待开始后接受的后台工作,也不会等待其他代理内存组件或进程启动的工作。不支持在删除过程中同时使用同一线程。
示例
from oracleagentmemory.core import OracleAgentMemory
client = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
llm=llm,
)
thread = client.create_thread(thread_id="c-delete")
client.delete_thread(thread.thread_id)
1
method delete_user
按标识符删除用户概要记录。
- 参数:
- user_id
str- 应删除其配置文件的用户标识符。 - cascade
bool- 当True(缺省值)时,还将删除限定到此用户的记录。这包括删除拥有的线程本身、使用这些线程删除的消息和类似内存的记录,以及任何剩余的直接用户范围记录,例如消息、内存、准则、事实或首选项。当匹配的用户配置文件行已经缺失时,此范围清除仍会运行。设置为False以仅删除概要信息记录。
- user_id
- 返回值:已删除的用户配置文件行数(
0或1)。在级联清除期间删除了作用域行时,这可能仍为0。 - 返回类型: int
- 引发:TimeoutError - 在内部删除等待超时之前,当已知的已拥有线程的已接受后台提取未完成时引发。
注
级联删除是在后备存储内计划和执行的,因此概要信息删除和所有范围的子删除都在一个存储操作中发生。在运行级联删除之前,此方法将等待先前已通过此代理内存组件接受的所有线程的后台提取。它不等待等待等待开始后接受的工作,也不等待其他代理内存组件或进程启动的工作。不支持在删除过程中同时使用操作者范围。
示例
from oracleagentmemory.core import OracleAgentMemory
client = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
llm=llm,
)
client.add_user("u-delete", "Prefers concise answers.")
'u-delete'
client.delete_user("u-delete")
1
method get_thread
检索以前创建的线程。
- 参数:
- thread_id
str- 创建线程时使用的标识符。 - LLM
ILlm- 重新打开的线程的可选 LLM 覆盖。省略时,将使用在构建时配置的客户机级 LLM。 - max_message_token_length
int- 内存提取和上下文摘要更新期间截断或汇总之前的最大提示时间消息大小的可选覆盖。存储的消息内容保持不变。 - message_shortening_input_token_limit
int- 在缩短超大提示时间消息复制时发送到 LLM 的消息摘录的最大大小(以令牌表示)的可选覆盖。 - memory_extraction_config
MemoryExtractionConfig- 返回的OracleThread实例的可选分组提取配置。省略的字段从存储的线程配置和代理内存组件继承。覆盖仅适用于返回的OracleThread实例,不会写回存储的对话线程配置。 - context_card_token_limit
int- 返回的OracleThread实例的可选覆盖。它设置用于构建上下文卡中包括的汇总和主题列表的 LLM 提示的输入令牌预算。 - context_card_type_search_concurrency
int- 返回的OracleThread实例的可选覆盖。它设置在使用min_relevant_results_by_type构建上下文卡时要同时运行的类似内存的记录搜索数。 -
extract_memories
bool-在重新打开的线程上自动提取内存的可选覆盖。省略时,将使用客户机级
extract_memories设置。信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
memory_extraction_window
int-内存提取期间使用的最近消息数的可选覆盖。
信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
context_summary_update_frequency
int-上下文汇总刷新频率的可选覆盖。
信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
memory_extraction_frequency
int-内存提取更新频率的可选覆盖。
信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
memory_extraction_token_limit
int-用于内存提取和运行摘要更新的 LLM 提示的最大大小(以令牌为单位)的可选覆盖。
信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
memory_extraction_custom_instructions
str | None-自定义内存提取指令的可选覆盖。通过
None将清除返回的OracleThread实例的线程级别定制指令,而不更新存储的对话线程配置;配置客户机级别默认值时仍适用。信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
memory_extraction_inherit_message_metadata
bool | Sequence[str]-从源消息复制到自动提取的存储器上的元数据的可选覆盖。覆盖仅适用于返回的
OracleThread实例。信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
enable_context_summary
bool-用于重新打开的线程是否应保留正在运行的上下文摘要的可选覆盖。
信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。
- thread_id
- 返回:基于存储元数据重建的
OracleThread实例。 - 返回类型:OracleThread
- 增加:
- KeyError - 如果此客户机实例不知道线程 ID。
- ValueError - 如果没有 LLM 可用于自动内存提取,并且客户机未配置
memory_extraction_config=MemoryExtractionConfig(extract_memories=False)。
注
显式每次调用覆盖优先。省略运行时覆盖时,重新打开的线程将在可用时使用持久运行时配置,然后再回退到 SDK 默认值。
示例
from oracleagentmemory.core import OracleAgentMemory
client = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
llm=llm,
)
created = client.create_thread(thread_id="c1", user_id="u1")
loaded = client.get_thread("c1")
loaded.user_id
'u1'
method search
同步搜索与查询相关的记录。
- 参数:
- query
str- 自然语言查询字符串。 - user_id
str | None- 用户标识符过滤器。OracleAgentMemory 客户机搜索需要显式的用户范围,除非随scope一起提供。将具体user_id传递给目标用户,或将None传递给仅目标未定义范围的用户记录。 - agent_id
str | None- 可选代理标识符过滤器。在提供scope时忽略。 - thread_id
str | None- 可选线程标识符过滤器。在提供scope时忽略。 - exact_user_match
bool- 用户匹配是否应严格。OracleAgentMemory 客户机搜索需要精确的用户匹配并拒绝False。在提供scope时忽略。 - exact_agent_match
bool- 代理匹配是否应严格。在提供scope时忽略。 - exact_thread_match
bool- 线程匹配是否应严格。在提供scope时忽略。 - max_results
int- 返回的最大可选结果数量。提供时,它必须至少为1。省略此参数时使用缺省值10。这是上限:当筛选器限制过多、存在较少的非失效匹配记录或由于特定于实施的搜索行为时,调用返回的结果可能少于max_results。 - record_types
list[str]- 要包括的记录类型的可选列表,例如"memory"或"message"。 -
metadata_filter
dict[str, Any] | None-在范围和记录类型筛选之后用作附加筛选器的可选元数据筛选器映射。
metadata_filter中的条目与 AND 语义组合。值不是字段级运算符字典的条目使用完全匹配语义:所请求的关键字必须存在于存储的记录元数据中。嵌套字典以递归方式匹配嵌套元数据对象。标量和列表值必须完全匹配;列表顺序和长度也必须匹配。省略此参数或传递None以在不进行元数据筛选的情况下进行搜索。示例包括metadata_filter={"source": "profile_import"}(表示标量字段)、metadata_filter={"prefs": {"category": "travel"}}(表示嵌套字段)和metadata_filter={"tags": ["survey", "travel"]}(表示完全匹配列表)。组合条件以要求所有条件:metadata_filter={ "source": "profile_import", "prefs": {"category": "travel"}, "tags": ["survey", "travel"], }要测试数组成员关系,请使用字段级运算符字典。
"$array_contains"匹配一个值或列表中的所有值。"$array_contains_any"匹配列表中的至少一个值。"$not"否定同一字段中的另一个字段级表达式,包括运算符字典或原始完全匹配值。如果正表达式失败(包括缺少的字段),则负数表达式匹配;负数数组成员资格也匹配非数组字段:metadata_filter={ "source": "profile_import", "tags": { "$array_contains": "travel", "$not": {"$array_contains": "archived"}, }, } - scope
SearchScope- 可选的预生成搜索范围。请提供scope或显式标识符和完全匹配参数,而不是两者。OracleAgentMemory 客户机搜索要求解析的范围包含带有exact_user_match=True的显式user_id。使用user_id=None仅针对未界定的用户记录。
- query
- 退货:按相关性降低排序的搜索结果。该列表可以包含少于
max_results个条目。 - 返回类型: list[SearchResult]
- 引发:ValueError - 如果
scope与显式标识符或完全匹配参数组合,如果max_results小于1,如果metadata_filter不是字典或None,或者实施拒绝解析的客户机搜索范围。OracleAgentMemory 客户机搜索会拒绝省略的用户范围并拒绝exact_user_match=False。
注
显式 None 范围值仍遵循已解析的确切匹配规则:exact_*_match=False 保持该维不受约束,而 exact_*_match=True 仅匹配该维上未定义的记录。
method search_async(异步)
异步搜索与查询相关的记录。
- 参数:
- query
str- 自然语言查询字符串。 - user_id
str | None- 用户标识符过滤器。OracleAgentMemory 客户机搜索需要显式的用户范围,除非随scope一起提供。将具体user_id传递给目标用户,或将None传递给仅目标未定义范围的用户记录。 - agent_id
str | None- 可选代理标识符过滤器。在提供scope时忽略。 - thread_id
str | None- 可选线程标识符过滤器。在提供scope时忽略。 - exact_user_match
bool- 用户匹配是否应严格。OracleAgentMemory 客户机搜索需要精确的用户匹配并拒绝False。在提供scope时忽略。 - exact_agent_match
bool- 代理匹配是否应严格。在提供scope时忽略。 - exact_thread_match
bool- 线程匹配是否应严格。在提供scope时忽略。 - max_results
int- 返回的最大可选结果数量。提供时,它必须至少为1。省略此参数时使用缺省值10。 - record_types
list[str]- 要包括的记录类型的可选列表,例如"memory"或"message"。 -
metadata_filter
dict[str, Any] | None-在范围和记录类型筛选之后用作附加筛选器的可选元数据筛选器映射。
metadata_filter中的条目与 AND 语义组合。值不是字段级运算符字典的条目使用完全匹配语义:所请求的关键字必须存在于存储的记录元数据中。嵌套字典以递归方式匹配嵌套元数据对象。标量和列表值必须完全匹配;列表顺序和长度也必须匹配。省略此参数或传递None以在不进行元数据筛选的情况下进行搜索。示例包括metadata_filter={"source": "profile_import"}(表示标量字段)、metadata_filter={"prefs": {"category": "travel"}}(表示嵌套字段)和metadata_filter={"tags": ["survey", "travel"]}(表示完全匹配列表)。组合条件以要求所有条件:metadata_filter={ "source": "profile_import", "prefs": {"category": "travel"}, "tags": ["survey", "travel"], }要测试数组成员关系,请使用字段级运算符字典。
"$array_contains"匹配一个值或列表中的所有值。"$array_contains_any"匹配列表中的至少一个值。"$not"否定同一字段中的另一个字段级表达式,包括运算符字典或原始完全匹配值。如果正表达式失败(包括缺少的字段),则负数表达式匹配;负数数组成员资格也匹配非数组字段:metadata_filter={ "source": "profile_import", "tags": { "$array_contains": "travel", "$not": {"$array_contains": "archived"}, }, } - scope
SearchScope- 可选的预生成搜索范围。请提供scope或显式标识符和完全匹配参数,而不是两者。OracleAgentMemory 客户机搜索要求解析的范围包含带有exact_user_match=True的显式user_id。使用user_id=None仅针对未界定的用户记录。
- query
- 退货:按相关性降低排序的搜索结果。
- 返回类型: list[SearchResult]
- 引发:ValueError - 如果
scope与显式标识符或完全匹配参数组合,如果max_results小于1,如果metadata_filter不是字典或None,或者实施拒绝解析的客户机搜索范围。OracleAgentMemory 客户机搜索会拒绝省略的用户范围并拒绝exact_user_match=False。
注
显式 None 范围值仍遵循已解析的确切匹配规则:exact_*_match=False 保持该维不受约束,而 exact_*_match=True 仅匹配该维上未定义的记录。
method update_memory
按标识符更新存储的类似内存的记录。
- 参数:
- memory_id
str- 要更新的类似内存的记录标识符。 - content
str- 可选替换内容。提供一个字符串以替换存储的内容。如果省略,将保留存储的内容。不支持传递None;省略content以保留当前值,或者使用delete_memory()删除记录。 - metadata
dict[str, Any] | None- 可选的替换元数据映射。省略时,将保留存储的元数据。如果提供,它将替换存储的元数据对象;此 API 不深入合并元数据。 - timestamp
str | None- 此内存的可选新时间戳。它表示创建内存的时间。省略时,将保留存储的时间戳。传递None以清除保存的时间戳并使用在存储中创建记录的时间。如果ttl_anchor为TimeToLiveAnchor.TIMESTAMP,则不带时区的 ISO-8601 时间戳将视为 UTC。 - ttl_days
int | None- 可选的到期刷新(天)。除非提供ttl_anchor,否则省略此参数以保持当前失效不变。PassNoneto useMemoryRetentionConfig.max_ttl_dayswhen the retention configuration sets one, or to clear expiration when it does not.MemoryRetentionConfig.max_ttl_days以上的值将夹到该最大值并显示警告。过期的内存对此客户端 API 不可用,无法刷新。 - ttl_anchor
TimeToLiveAnchor- 用于到期刷新的可选生存时间锚。将TimeToLiveAnchor.CREATED_AT用于内存创建时间,将TimeToLiveAnchor.TIMESTAMP用于在同一更新中提供的替换timestamp,或者在省略timestamp时使用存储的事件时间戳。提供不带ttl_days的ttl_anchor将使用方案默认生存时间持续时间。刷新期间省略ttl_anchor时,客户机将使用TimeToLiveAnchor.CREATED_AT。没有时区的 ISO-8601 时间戳将视为 UTC。 - **kwargs ( Any )- 意外关键字参数将被拒绝。
- memory_id
- 返回:更新的类似内存的记录标识符。
- 返回类型: str
注
省略的字段将从存储的记录中保留。存储的范围保持不变。元数据替换是整个对象替换,而不是递归 JSON 合并。
method update_memory_async(异步)
按标识符异步更新存储的类似内存的记录。
- 参数:
- memory_id
str- 要更新的类似内存的记录标识符。 - content
str- 可选替换内容。提供一个字符串以替换存储的内容。如果省略,将保留存储的内容。不支持传递None;省略content以保留当前值,或者使用delete_memory()删除记录。 - metadata
dict[str, Any] | None- 可选的替换元数据映射。省略时,将保留存储的元数据。如果提供,它将替换存储的元数据对象;此 API 不深入合并元数据。 - timestamp
str | None- 此内存的可选新时间戳。它表示创建内存的时间。省略时,将保留存储的时间戳。传递None以清除保存的时间戳并使用在存储中创建记录的时间。 - ttl_days
int | None- 可选的到期刷新(天)。将此参数与ttl_anchor一起省略,以使当前失效保持不变。传递None以清除到期。 - ttl_anchor
TimeToLiveAnchor- 用于到期刷新的可选生存时间锚。将TimeToLiveAnchor.CREATED_AT用于内存创建时间,将TimeToLiveAnchor.TIMESTAMP用于在同一更新中提供的替换timestamp,或者在省略timestamp时使用存储的事件时间戳。提供不带ttl_days的ttl_anchor将使用方案默认生存时间持续时间。刷新期间省略ttl_anchor时,存储将使用TimeToLiveAnchor.CREATED_AT。 - **kwargs ( Any )- 意外关键字参数将被拒绝。
- memory_id
- 返回:更新的类似内存的记录标识符。
- 返回类型: str
注
省略的字段保持不变。此 API 不支持范围更新。元数据替换是整个对象替换,而不是递归 JSON 合并。
method update_thread
持久保存线程元数据和持久的运行时配置更新。
- 参数:
- thread_id
str- 要更新的线程的标识符。 - metadata
dict[str, Any] | None- 对话线程的可选元数据更新。省略时,存储的元数据保持不变。显式传递None将清除存储的元数据。提供映射时,它将替换存储的元数据对象。 - LLM
ILlm- 返回的OracleThread实例的可选 LLM 覆盖。这不会保留,但会参与与get_thread和create_thread相同的验证规则。 -
extract_memories
bool-自动内存提取的可选持久覆盖。
信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 - max_message_token_length
int- 提取和汇总期间使用的最大提示时消息大小的可选持久覆盖。 - message_shortening_input_token_limit
int- 对于缩短超大消息时发送到 LLM 的最大摘录大小的可选持久覆盖。 -
memory_extraction_window
int-提取窗口大小的可选持久覆盖。
信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
context_summary_update_frequency
int-附加的消息数触发上下文汇总刷新的可选持久覆盖。
信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
memory_extraction_frequency
int-可选的持久覆盖,表示附加的消息数会触发自动内存提取。
信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
memory_extraction_token_limit
int-用于提取和运行汇总提示预算的可选持久覆盖。
信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 - context_card_token_limit
int- 用于构建上下文卡中包含的摘要和主题列表的 LLM 提示符的输入令牌预算的可选持久覆盖。 -
enable_context_summary
bool-用于运行上下文汇总是否保持启用状态的可选持久覆盖。
信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
memory_extraction_custom_instructions
str | None-附加到内存提取系统提示符的可选持久定制说明。通过
None将清除任何存储的线程级别定制指令;配置客户机级别缺省值时仍适用。信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 -
memory_extraction_inherit_message_metadata
bool | Sequence[str]-从源消息复制到自动提取的存储器上的元数据的可选持久覆盖。
信息:自版本 26.6.0 起已废弃:此参数在 26.6.0 中已废弃,将在 27.1 中删除。请改用
memory_extraction_config。 - memory_extraction_config
MemoryExtractionConfig- 可选的分组持久提取配置更新。提供的字段将写入存储的线程配置中,供以后加载的OracleThread实例和后台提取作业使用。 - **kwargs ( Any )- 其他特定于实现的选项。
OracleAgentMemory当前拒绝未知关键字参数。
- thread_id
- 返回:更新了反映持久元数据和运行时配置的
OracleThread实例。 - 返回类型:OracleThread
- 增加:
- KeyError - 如果此客户机实例不知道线程 ID。
- ValueError - 如果在解析有效的运行时配置后没有 LLM 可用于自动内存提取。
注
运行时配置通过存储的对话线程解析,加上传递给此调用的显式覆盖,匹配 get_thread 语义,然后再保留结果。省略的元数据和运行时配置更新是从存储的数据(而不是从任何以前加载的 OracleThread 实例)解析的,并且仅写入显式提供的元数据更新或持久的运行时配置覆盖。元数据替换是整个对象替换,而不是递归 JSON 合并。线程所有权通过此 API 不可变,因此 user_id 和 agent_id 保持不变。可变运行时状态(例如提取计数器)保持不变。
示例
from oracleagentmemory.core import OracleAgentMemory
client = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
llm=llm,
)
updated = client.update_thread(
"c1",
metadata={"flags": {"vip": True}},
message_shortening_input_token_limit=12_000,
)
updated.message_shortening_input_token_limit
12000
method wait_for_memory_extraction
等待此客户机启动更早的后台内存提取。
此方法等待已通过此 OracleAgentMemory 实例在此代理内存组件拥有的所有线程中启动的后台提取。它不等待此等待开始后启动提取,不等待其他代理内存组件启动提取,也不等待在另一个进程中运行的提取。此等待的提取失败计数为已完成。
- 参数:timeout
float | None- 可选的最大等待秒数。默认为300。传递None以等待此代理内存组件没有暂挂提取。 - 引发:TimeoutError - 在较早的后台提取完成之前超时到期时引发。
- 返回类型:无
示例
client = OracleAgentMemory(
connection=db_pool,
embedder=embedder,
memory_extraction_config=MemoryExtractionConfig(extract_memories=False),
)
client.wait_for_memory_extraction(timeout=10)
method wait_for_memory_extraction_async(异步)
异步等待更早的后台内存提取。
此方法遵循与 wait_for_memory_extraction() 相同的行为。
- 参数:timeout
float | None- 可选的最大等待秒数。默认为300。传递None以无限期等待。 - 引发:TimeoutError - 在较早的后台提取完成之前超时到期时引发。
- 返回类型:无
示例
await client.wait_for_memory_extraction_async(timeout=10)
内存提取
class oracleagentmemory.core.MemoryExtractionConfig
基准:object
用于自动内存提取的分组设置。
将此对象传递到 OracleAgentMemory、create_thread、get_thread 或 update_thread 以配置自动提取。省略的字段从下一个更广泛的设置继承。例如,不使用 memory_extraction_frequency 创建的线程使用代理内存组件默认值,组件默认值回退到 SDK 默认值。
- 参数:
- memory_extraction_window
int- 用于提取提示的“最近消息”窗口。-1表示提取提示仅使用新添加的消息。省略此字段以继承该值。 - context_summary_update_frequency
int- 运行上下文 - 摘要刷新之间的附加消息数。每次附加后,0下面的值都会刷新。省略此字段以继承该值。 - memory_extraction_frequency
int- 运行内存提取之间的附加消息数。每次附加后0提取下面的值。省略此字段以继承该值。 - memory_extraction_token_limit
int- 用于提取和摘要提示的输入令牌预算。低于1的值将禁用提示预算限制。省略此字段以继承该值。 - extract_memories
bool- 是否启用自动内存提取。设置为False可禁用自动提取,并允许在不使用提取 LLM 的情况下执行操作。省略此字段以继承该值。 - enable_context_summary
bool- 提取提示是否维护和使用正在运行的上下文摘要。省略此字段以继承该值。 - memory_extraction_custom_instructions
str | None- 附加到提取系统提示符的可选调用方指令。在update_thread上传递None以清除存储的线程级别指令。省略此字段以继承该值。 - memory_extraction_inherit_message_metadata
bool | collections.abc.Sequence[str]- 控制从源消息复制到提取的内存中的元数据。True复制所有源消息元数据,False不复制任何内容,而序列仅复制匹配的顶层元数据键。省略此字段以继承该值。 - extraction_mode
oracleagentmemory.core.extractors.memoryextractionconfig.MemoryExtractionMode-MemoryExtractionMode.INLINE在写入方法返回之前运行自动提取。原始写入成功后,MemoryExtractionMode.BACKGROUND将返回,并尝试在后台执行适当的提取工作。在后台模式下,派生的记忆可能稍后出现,可能暂时过时,或者如果后台工作无法完成,可能永远不会写入。例如,update_message()可以在以后读取的内存反映更新的消息内容之前返回。省略此字段以继承该值。未配置更广泛的值时,有效模式为INLINE。 - background_extraction_queue_full_behavior
oracleagentmemory.core.extractors.memoryextractionconfig.BackgroundExtractionQueueFullBehavior- 在后台模式下,控制自动提取无法立即排队时发生的情况。DROP记录警告并继续,无需等待。WAIT_THEN_DROP将等待队列容量直到配置的超时,然后记录警告并继续。WAIT_THEN_RAISE等待队列容量,直到配置的超时,然后在原始写入成功后引发TimeoutError。省略此字段以继承该值。未配置更宽的值时,有效默认值为DROP。 - background_extraction_queue_put_timeout_seconds
float- 在后台模式下,当background_extraction_queue_full_behavior为WAIT_THEN_DROP或WAIT_THEN_RAISE时,自动提取等待队列容量的最大秒数。省略此字段以继承该值。未配置更宽的值时,有效默认值为300.0秒。
- memory_extraction_window
示例
from oracleagentmemory.core import MemoryExtractionConfig, MemoryExtractionMode
config = MemoryExtractionConfig(
extract_memories=True,
extraction_mode=MemoryExtractionMode.BACKGROUND,
)
class oracleagentmemory.core.MemoryExtractionMode
基础:str、Enum
控制自动内存提取工作何时运行。
INLINE 在写入方法返回之前运行自动提取。原始写入成功后,BACKGROUND 将返回,并尝试在后台执行适当的提取工作。背景提取是最好的努力:派生的记忆可能稍后出现,或者如果背景工作无法完成,可能永远不会写。
后台 = ‘ BACKGROUND ’
原始消息持久化后返回,并在后台工作中运行尽力提取。
内嵌 = ‘ INLINE ’
在 write 方法返回之前运行提取。
class oracleagentmemory.core.BackgroundExtractionQueueFullBehavior
基础:str、Enum
控制在后台提取无法及时排队时发生的情况。
删除 = ‘ DROP ’
记录警告,并在队列容量不可用时立即继续。
WAIT_THEN_DROP = ‘ WAIT_THEN_DROP ’
等待队列容量达到配置的超时,然后记录警告并继续。
WAIT_THEN_RAISE = ‘ WAIT_THEN_RAISE ’
等待队列容量达到配置的超时,然后引发 TimeoutError。