I. 核心架构 - 3. Context 管理
📍 课程位置
阶段 :I. 核心架构
课序 :第 3 课
前置知识 :I-2. Agent Loop
后续课程:I-4. Session 管理
🎯 本课核心问题
如果你问我:"为什么 Agent 能'记得'之前聊了什么?它的'记忆力'是怎么工作的?为什么有时会说'上下文太长'?"
我会这样回答 :这就是 Context(上下文)管理------Agent 的"工作台",它决定了 Agent"此刻知道什么"。
📚 Context 的三层结构
第一层:System Prompt(系统提示词)
是什么:告诉 Agent "你是谁"、"你该怎么做"的指令
类比:
- 就像员工的岗位职责说明书
- "你是一个助手,要礼貌、专业、有耐心"
- "你不应该透露敏感信息"
- "遇到问题要先确认再执行"
包含的内容:
System Prompt =
meta(你是谁) +
goal(你的目标) +
constraints(限制条件) +
role(角色设定)
关键点:
- 系统提示词在每个对话开始时加载
- 可以在配置中自定义
- 影响整个对话的行为
第二层:History(对话历史)
是什么:之前聊过的内容,Agent 的"记忆"
类比:
- 就像会议的会议记录
- 之前聊过什么,Agent 都能看到
- 但不是全部记住,会"遗忘"很早以前的内容
关键点:
- 存在 Session 文件中
- 有长度限制(Context Window)
- 太长会被压缩(Compaction)
第三层:Tools(可用工具)
是什么:Agent 现在能用的"工具清单"
类比:
- 就像工人的工具箱
- 告诉 Agent:"你现在有这些工具可以用"
- 每个工具都有"说明书"(Schema)
关键点:
- 工具的 Schema 会消耗 Context 空间
- 工具越多,消耗越大
- 可以通过配置优化
🔢 Context 的成本问题
为什么 Context 不是免费的?
- Token 是钱:每次调用 AI 模型,都要付 Token 费用
- 越长越贵:Context 越长,费用越高
- 有上限:AI 模型有 Context Window 限制(如 200K tokens)
成本计算公式
Context 成本 ≈
System Prompt tokens +
History tokens +
Tools Schema tokens
一个具体例子
假设:
- System Prompt:1,000 tokens
- History(最近 50 条消息):50,000 tokens
- Tools(10 个工具):10,000 tokens
- 总计:61,000 tokens
如果用 Claude Sonnet 4.5($3/1M 输出 tokens),
每次调用仅 Context 成本 ≈ $0.18
🎯 Context 管理的目标
两个目标:
- 让 Agent 知道足够多 - 不遗忘重要信息
- 让成本可控 - 不超出预算和限制
平衡的艺术:
- 给太少 → Agent "失忆",不知道之前聊过啥
- 给太多 → 成本太高,甚至超出限制
🔧 如何优化 Context
1. Compaction(压缩)
是什么:当 Context 太长时,自动压缩历史
怎么做:
- 保留重要信息
- 删除冗余内容
- 总结早期对话
后续课程会详细讲:I-6. Compaction
2. 工具精简
是什么:只加载需要的工具
怎么做:
- 禁用不需要的工具
- 使用工具组
- 按需加载
3. System Prompt 精简
是什么:不要让 System Prompt 太冗长
怎么做:
- 简洁明了的指令
- 避免重复
- 只保留必要的约束
4. Session 管理
是什么:定期清理不需要的 Session
怎么做:
- 设置 Session 过期时间
- 定期清理旧 Session
- 使用不同的 Session 隔离不同话题
🔍 实战:配置你的 Context
查看当前的 Context 配置
bash
# 查看 Agent 配置
openclaw config get agents.defaults
# 查看当前 Context 使用情况
# 在日志中查看 token 使用统计
配置示例
json5
{
"agents": {
"defaults": {
// 最大的 Context Window(Tokens)
"contextWindow": "200000",
// 压缩策略
"compaction": {
"mode": "safeguard", // 自动压缩
"reserveTokens": "10000" // 保留 10K tokens 空间
},
// 工具配置
"tools": {
"enabled": true,
"profile": "default" // 可以选 minimal, messaging 等
}
}
}
}
调整 System Prompt
json5
{
"agents": {
"defaults": {
"systemPrompt": "你是一个专业的技术助手..."
}
}
}
⚠️ 常见陷阱
| 陷阱 | 表现 | 原因 | 解决 |
|---|---|---|---|
| 上下文溢出 | "Context length exceeded" | 历史太长 | 启用 Compaction |
| 工具 Schema 太大 | 大量 tokens 被工具消耗 | 工具太多 | 精简工具列表 |
| System Prompt 太长 | 每次调用成本很高 | 指令冗余 | 精简 Prompt |
| 重要信息丢失 | Agent "忘记"之前说的 | 压缩策略太激进 | 调整保留策略 |
📝 学习心得
我学这一课时的体会
我以前没注意到,Context 是一种"资源",需要精心管理。
最大的收获是:
- Context 不是"越多越好"
- 它有成本,有限制
- 需要在"记忆力"和"成本"之间找平衡
这让我想到:Compaction 是必须的,不然对话一长就会出问题。
与其他课程的关联
- 前置课程:Agent Loop - Context 是第 2 阶段
- 后续课程:Session 管理 - 存储历史的地方
- 配合课程:Compaction - 压缩 Context 的技术
✅ 你现在应该理解的
- 说出 Context 的三层结构
- 解释每层做什么
- 理解 Context 的成本问题
- 知道如何优化 Context
- 能配置基本的 Context 参数
📚 快速参考表
| 层级 | 名称 | 作用 | 成本影响 |
|---|---|---|---|
| 第一层 | System Prompt | 告诉 Agent 规则 | 中(通常固定) |
| 第二层 | History | 之前的对话 | 高(会累积) |
| 第三层 | Tools | 可用工具列表 | 中(取决于数量) |
🔗 相关资源
官方文档:
- Context:https://docs.openclaw.ai/concepts/context
- Compaction:https://docs.openclaw.ai/concepts/compaction
相关课程:
- 上一课:I-2. Agent Loop
- 下一课:I-4. Session 管理
- 相关课:I-6. Compaction
📊 本课总结
最关键的 3 点:
-
三层结构
- System Prompt + History + Tools
- 每层都有不同的作用
-
成本意识
- Context 不是免费的
- 需要在"记忆力"和"成本"之间平衡
-
优化方法
- Compaction 压缩
- 工具精简
- Prompt 优化
现在你应该理解了 Agent 的"工作台"是什么。下一课会讲如何管理多个用户的对话(Session 管理)。