Dreaming(做梦)是一项研究预览功能。申请访问权限以进行试用。
智能体在工作时会写入其记忆存储,但这些写入是局部且增量的:经过多次会话后,记忆存储会累积重复项、矛盾内容和过时条目。
Dreams(梦)让 Claude 能够清理这些内容。一个 dream 会读取现有的记忆存储以及过往的会话记录,然后生成一个经过重新组织的新记忆存储:合并重复项,用最新值替换过时或矛盾的条目,并发掘新的洞察。
输入存储永远不会被修改,因此您可以查看输出结果,如果不满意可以将其丢弃。
所有 Managed Agents API 请求都需要 managed-agents-2026-04-01 beta 标头。Dreams 还额外需要 dreaming-2026-04-21 beta 标头。SDK 会自动设置这些标头。
Dream 是一个异步作业,它接收:
Dream 会生成另一个输出记忆存储,与输入存储相互独立。一旦 dream 开始 running,输出存储 ID 就会出现在 dream 的 outputs[] 中。
dream = client.beta.dreams.create(
inputs=[
{"type": "memory_store", "memory_store_id": store_id},
{"type": "sessions", "session_ids": [session_a, session_b]},
],
model="claude-opus-4-8",
instructions="Focus on coding-style preferences; ignore one-off debugging notes.",
)
print(dream.id) # drm_01...Dreaming 的输入包括已存在的记忆存储和一个会话数组。所选模型将运行 dreaming 流程;在研究预览期间,支持 claude-opus-4-8、claude-opus-4-7 和 claude-sonnet-4-6。您可以选择性地传入 instructions 来引导 dreaming 过程;请参阅使用指令进行引导。
响应是完整的 dream 资源,其 status: "pending":
{
"type": "dream",
"id": "drm_01AbCDefGhIjKlMnOpQrStUv",
"status": "pending",
"inputs": [
{ "type": "memory_store", "memory_store_id": "memstore_01Hx..." },
{ "type": "sessions", "session_ids": ["sesn_01...", "sesn_02..."] }
],
"outputs": [],
"model": { "id": "claude-opus-4-8" },
"instructions": "Focus on coding-style preferences; ignore one-off debugging notes.",
"session_id": null,
"created_at": "2026-04-29T17:04:10Z",
"ended_at": null,
"archived_at": null,
"usage": {
"input_tokens": 0,
"output_tokens": 0,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0
},
"error": null
}如果您只有会话记录而没有现有存储,请先创建一个空的记忆存储,然后将其作为 memory_store 输入传入。
可选的 instructions 字段用于引导 dreaming 流程综合生成的内容。它会在整个流程中应用:包括需要仔细阅读的内容、需要合并或删除的内容,以及如何组织输出存储的结构。
请将 instructions 用于高层次的综合指导,例如关注领域("专注于编码风格偏好")、需要保持不变的内容,或您希望在整个存储中应用的输出规范。该流程是对输入进行综合处理,而不是对存储文本进行编辑,因此针对特定行的命令式指令("将句子 X 改为 Y"、"修正 Z 部分中的计数")通常不会产生任何变化。如需对单个记忆进行针对性编辑,请直接在输出存储上使用 Memory Stores API。
Dreams 异步运行,通常需要几分钟到几十分钟,具体取决于输入大小。通过 ID 轮询 dream 以检查状态:
while dream.status in ("pending", "running"):
time.sleep(10)
dream = client.beta.dreams.retrieve(dream.id)
print(f"status={dream.status} input_tokens={dream.usage.input_tokens}")status | 含义 |
|---|---|
pending | Dream 已成功创建并排队。 |
running | 流程正在处理中。usage 会随着工作进展而更新。 |
completed | 成功完成。outputs[] 中的值即为新的记忆存储。 |
failed | Dreaming 运行因错误而终止。输出记忆存储保持原样,包含失败前已写入的所有内容。 |
canceled | Dreaming 运行已取消。输出记忆存储保持原样。 |
一旦 dream 进入 running 状态,其 session_id 字段会指向执行该流程的底层会话。您可以流式传输该会话的事件,以实时观察 dream 正在读取和写入的内容。当 dream 达到终止状态时,该会话会被归档(而非删除),因此记录在之后仍然可用。
当 status 达到 completed 时,outputs[] 中的 memory_store 条目会引用一个已完全填充的存储。它是您工作区中的一个普通记忆存储。使用 Memory Stores API 或在 Console 中查看它,然后选择以下操作之一:
# After the dream ends, the output holds the rebuilt memory store
output_store_id = next(
output.memory_store_id for output in dream.outputs if output.type == "memory_store"
)
session = client.beta.sessions.create(
agent=agent_id,
environment_id=environment_id,
resources=[
{"type": "memory_store", "memory_store_id": output_store_id},
],
)Dream 本身永远不会删除或修改其输入。在 failed 或 canceled 状态下,输出存储会保留部分内容,以便您检查停止前生成的内容;如果不需要,可通过 Memory Stores API 清理它。
当 dream 处于 pending 或 running 状态时,归档或删除其输出存储会被拒绝并返回 400。在运行过程中归档或删除输入存储或会话将导致 dream 失败,错误为 input_memory_store_unavailable 或 input_session_unavailable。
取消操作会立即将 pending 或 running 状态的 dream 转为 canceled。取消已处于 canceled 状态的 dream 是幂等的空操作;取消 completed 或 failed 状态的 dream 会返回 400。
取消后,dream 的 usage 字段可能会在几秒钟内继续更新,直到进行中的工作逐步结束。如果您需要最终计数,请轮询 dream 直到 usage 稳定。
client.beta.dreams.cancel(dream.id)归档操作会在已达到终止状态(completed、failed 或 canceled)的 dream 上设置 archived_at;status 保持不变。已归档的 dreams 会从默认列表响应中排除,但仍可通过 ID 读取。归档已归档的 dream 是幂等的空操作。归档 pending 或 running 状态的 dream 会返回 400;请先取消它。不支持取消归档。
client.beta.dreams.archive(dream.id)归档 dream 不会影响其输出记忆存储;请通过 Memory Stores API 单独管理它。
返回工作区中所有未归档的 dreams,按最新优先排序。使用 limit(默认 20,最大 100)和 page 游标进行分页。传入 include_archived=true 以包含已归档的 dreams。
for listed_dream in client.beta.dreams.list(limit=20):
print(listed_dream.id, listed_dream.status)以下是可能出现的 dreaming 错误的非详尽列表。
error.type | 发生时机 |
|---|---|
timeout | 流程超出了其运行时间预算。 |
internal_error | 未分类的流程故障。 |
memory_store_org_limit_exceeded | 在流程配置工作存储时,您的组织达到了记忆存储上限。 |
input_memory_store_too_large | 输入记忆存储超出了流程的大小限制。 |
input_memory_store_unavailable | 输入记忆存储在 dream 创建后被归档或删除。 |
input_session_unavailable | 某个输入会话在 dream 创建后被归档或删除。 |
Dreams 按您所选模型的标准 API 令牌费率计费;资源上的 usage 会报告确切的总量。成本大致与输入会话的数量和长度呈线性关系。建议先从少量会话开始,在对整理质量满意后再扩大规模。
| 限制 | 值 |
|---|---|
| 每个 dream 的会话数 | 100 |
instructions 长度 | 4,096 个字符 |
| 支持的模型 | claude-opus-4-8、claude-opus-4-7、claude-sonnet-4-6 |
在此功能处于 beta 阶段期间,dream 创建适用默认速率限制。如果您需要更高的限制,请联系支持团队。
Was this page helpful?