记忆存储接口复用以下 Scope、Agent Scope、Scope Filter、Message 和 Metadata 数据结构。
Scope
Scope 表示记忆数据的归属层级,由四级字段组成。
|
字段 |
类型 |
说明 |
|
|
string |
应用标识。 |
|
|
string |
租户或用户标识。 |
|
|
string |
Agent 标识。 |
|
|
string |
会话、运行或任务标识。 |
不同接口对 Scope 字段的必填性和通配符 * 支持规则不同。
|
场景 |
Scope 规则 |
|
写入( |
|
|
检索( |
|
|
查询短期消息( |
四级字段全部必填,不允许使用 |
|
获取、更新、删除单条长期记忆 |
|
|
精确文件操作 |
四级字段全部必填,不允许使用 |
|
应用管理文件的列表和范围操作 |
|
|
批量删除文件版本(DeleteItemVersions) |
|
|
|
|
|
其他列表查询 |
Scope 可按层级指定;省略的字段按 |
一旦某个层级使用 *,后续层级也必须使用 * 或省略。例如 app-001/user-001/*/* 有效,app-001/*/assistant/* 无效。
{
"appId": "app-001",
"tenantId": "user-001",
"agentId": "assistant",
"runId": "session-001"
}
Agent Scope
Wiki 使用三段 Agent Scope,只包含 appId、tenantId 和 agentId。三个字段均必填、最长 128 字节,不能包含 /,不允许使用 *。Wiki 请求不能传入 runId。
同一 Agent Scope 在一个记忆库中只有一个 Wiki,不同 runId 的会话共享该 Wiki。
Scope Filter
SearchMemories、ListMemories 和 ListMemoryStoreScopes 支持使用 filter 对 Scope 做结构化过滤。scope 与 filter 同时提供时,两者按 AND 关系生效。filter 仅匹配 Scope,不匹配记忆正文或 Metadata。
|
|
字段 |
说明 |
|
|
|
|
|
|
|
|
|
|
|
精确匹配字符串。虚拟字段 |
|
|
|
匹配字符串数组中的任意一个值, |
|
|
|
匹配包含该字段的 Scope。 |
可过滤字段包括 scopeType、scopeKey、appId、tenantId、agentId、runId、wikiId 和虚拟字段 text。conversation Scope 使用 agentId、runId,Wiki Scope 使用 wikiId。普通字段只支持精确匹配;不支持 prefix、wildcard 和 range 操作符。
text 在 Scope 的字段值中进行短片段匹配,仅支持 op: "eq"。其 value 可使用 * 匹配任意长度的字符序列、使用 ? 匹配一个 Unicode 字符,例如 *abc*。模式不能为空,最长 32 个 Unicode 字符;除 * 外的字符总数不能超过 4。
{
"op": "and",
"conditions": [
{ "op": "eq", "field": "appId", "value": "app-001" },
{ "op": "eq", "field": "text", "value": "*abc*" }
]
}
filter 最多嵌套 8 层,最多包含 64 个叶子条件。分页请求必须保持 scope 和 filter 不变,不能将同一个 nextToken 用于其他查询条件。
filter 依赖目标记忆库的 Scope 查询能力。部分存量记忆库不支持 filter,或不支持 text 虚拟字段。返回 INVALID_PARAMETER 时,请改用精确或通配 Scope;返回 SERVICE_UNAVAILABLE 时请先退避重试,如 text 条件持续不可用,再改用普通字段的 eq、in、exists 条件。
Message
AddMemories 接口的 messages 字段使用以下结构。
|
字段 |
类型 |
必填 |
说明 |
|
|
string |
是 |
消息角色,例如 |
|
|
string |
是 |
消息内容。 |
|
|
string |
否 |
消息 ID,最长 256 个字符。 |
|
|
string |
否 |
RFC3339 格式时间。 |
|
|
object |
否 |
消息级元数据,键和值均为字符串。 |
Metadata
Metadata 为字符串键值对,用于附加业务标签。在 SearchMemories 中,Metadata 用于完整字符串的精确匹配过滤;传入多个键值对时,结果必须同时匹配全部条件。*、?、逗号和等号等字符按普通字符处理,不表示通配。
|
限制项 |
取值 |
|
单个 Metadata 对象最多键数 |
16 个 |
|
键长度上限 |
64 个 Unicode 字符 |
|
单个 Metadata 对象的 JSON 大小上限 |
65536 字节(UTF-8,64 KiB) |
AddMemories 的顶层 metadata,以及顶层与每条消息的 metadata 合并后得到的消息级 Metadata,均需分别满足上述限制。写入的单个值没有单独的 1024 字符上限;但 SearchMemories.metadata 中每个查询值最多为 1024 个 Unicode 字符。超过该长度的已存值可以读取,但不能作为 Metadata 检索条件。
{
"source": "chat",
"topic": "preference"
}
outputTypes 包含 structured 的记忆库支持上述完整精确匹配,适合检索 UUID、追踪 ID 等长值。