理解 Agent 的"记忆"是如何工作的
会话就像 Agent 的"工作记忆"。当你和 Agent 对话时,它需要记住你之前说了什么、做了什么。OpenClaw 的会话系统支持多种模式:
用户直接交互的主对话,保持完整的上下文历史。
场景: 日常聊天、问答
独立的临时会话,不影响主对话。
场景: 定时任务、后台工作
由主 Agent 派生的子代理,可并行执行。
场景: 复杂任务分解、并行处理
持久化的会话,可跨多次交互保持状态。
场景: 长期项目、持续跟踪
# 获取所有可见会话
sessions = sessions_list(
kinds=["main", "isolated", "subagent"],
limit=10,
activeMinutes=60, # 最近60分钟活跃的
includeLastMessage=True
)
# 按标签过滤
sessions = sessions_list(label="seo-task")
# 获取会话历史记录
history = sessions_history(
sessionKey="main",
limit=20,
includeTools=True # 包含工具调用记录
)
# 向其他会话发送消息
sessions_send(
sessionKey="seo-work",
message="请生成今日SEO报告",
timeoutSeconds=30
)
# 通过 agentId 发送
sessions_send(
agentId="miaoquai",
message="查看今日任务进度"
)
# 创建子代理执行任务
sub = sessions_spawn(
task="搜索今日AI新闻并生成日报",
taskName="daily-news",
runtime="subagent",
mode="run", # 一次性执行
timeoutSeconds=300
)
# 等待子代理完成
sessions_yield(message="等待子代理完成...")
| 上下文类型 | 说明 | 容量 |
|---|---|---|
| 对话历史 | 用户与Agent的消息记录 | 受 context window 限制 |
| 工具结果 | 工具调用的返回值 | 自动截断过长内容 |
| 文件内容 | 通过 read/load 加载的文件 | 按需加载 |
| 系统提示 | SOUL.md、USER.md 等配置 | 固定注入 |
| 长期记忆 | MEMORY.md 中的持久信息 | 按需检索 |
# 会话状态流转
创建 → 活跃 → 空闲 → 过期 → 清理
│ │ │ │
▼ ▼ ▼ ▼
init active idle expired
│
├── 接收消息 → 处理中 → 响应完成
├── 调用工具 → 等待结果 → 继续对话
└── 派生子代理 → 等待完成 → 合并结果
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 上下文丢失 | 会话过期或被清理 | 使用命名会话保持状态 |
| 响应缓慢 | 上下文过长 | 定期清理历史、使用压缩 |
| 子代理超时 | 任务过复杂 | 增加 timeoutSeconds 或拆分任务 |
| 会话冲突 | 多会话同时写入 | 使用隔离会话避免干扰 |