会话与记忆
会话工具
目标:提供一套小巧、不易误用的工具集,使代理能够列出会话、获取历史记录以及向另一个会话发送消息。
工具名称
sessions_listsessions_historysessions_sendsessions_spawn
关键模型
- 主要的直接聊天存储桶始终是字面键
"main"(解析为当前代理的主键)。 - 群聊 使用
agent:::group:或agent:::channel:(传递完整键)。 - 定时任务使用
cron:<job.id>。 - 钩子使用
hook:,除非显式设置。 - 节点会话使用
node-,除非显式设置。
global 和 unknown 是保留值,永远不会被列出。如果 session.scope = "global",我们将其在所有工具中别名为 main,因此调用者永远不会看到 global。
sessions_list
将会话以行数组形式列出。参数:
kinds?: string[]过滤器:可以是"main" | "group" | "cron" | "hook" | "node" | "other"中的任意值limit?: number最大行数(默认值:服务器默认值,例如限制为 200)activeMinutes?: number仅列出在 N 分钟内更新过的会话messageLimit?: number0 = 不包含消息(默认 0);>0 = 包含最后 N 条消息
行为:
messageLimit > 0会获取每个会话的chat.history并包含最后 N 条消息。- 工具结果在列表输出中被过滤掉;使用
sessions_history获取工具消息。 - 在沙盒化的代理会话中运行时,会话工具默认采用仅限生成会话可见性(见下文)。
行结构(JSON):
key: 会话键(字符串)kind:main | group | cron | hook | node | otherchannel:whatsapp | telegram | discord | signal | imessage | webchat | internal | unknowndisplayName(群组显示标签,如果可用)updatedAt(毫秒)sessionIdmodel,contextTokens,totalTokensthinkingLevel,verboseLevel,systemSent,abortedLastRunsendPolicy(如果设置了会话覆盖)lastChannel,lastTodeliveryContext(规范化后的{ channel, to, accountId },当可用时)transcriptPath(从存储目录 + sessionId 派生的最佳路径)messages?(仅当messageLimit > 0时)
sessions_history
获取单个会话的转录记录。参数:
sessionKey(必需;接受会话键或来自sessions_list的sessionId)limit?: number最大消息数(服务器限制)includeTools?: boolean(默认 false)
行为:
includeTools=false会过滤掉role: "toolResult"消息。- 以原始转录格式返回消息数组。
- 当给定
sessionId时,OpenClaw 会将其解析为相应的会话键(缺失的 id 会报错)。
sessions_send
向另一个会话发送消息。参数:
sessionKey(必需;接受会话键或来自sessions_list的sessionId)message(必需)timeoutSeconds?: number(默认 >0;0 = 即发即弃)
行为:
timeoutSeconds = 0:将消息加入队列并返回{ runId, status: "accepted" }。timeoutSeconds > 0:等待最多 N 秒以完成,然后返回{ runId, status: "ok", reply }。- 如果等待超时:
{ runId, status: "timeout", error }。运行继续;稍后调用sessions_history。 - 如果运行失败:
{ runId, status: "error", error }。 - 通知传递在主运行完成后运行,并且是尽力而为的;
status: "ok"不保证通知已送达。 - 通过网关
agent.wait(服务器端)进行等待,因此重新连接不会中断等待。 - 代理到代理的消息上下文被注入到主运行中。
- 会话间消息以
message.provenance.kind = "inter_session"持久化,以便转录阅读器能够区分路由的代理指令和外部用户输入。 - 主运行完成后,OpenClaw 运行一个回复循环:
- 第 2 轮及以后在请求代理和目标代理之间交替进行。
- 精确回复
REPLY_SKIP以停止乒乓式来回。 - 最大轮次为
session.agentToAgent.maxPingPongTurns(0–5,默认 5)。
- 循环结束后,OpenClaw 运行