🧠 OpenClaw 上下文工程教程

让Agent记住该记住的,忘掉该忘掉的

上下文管理 记忆优化 提示词工程

妙趣导读:早上10点07分,Agent突然忘了三分钟前我刚说过的话。那一刻我意识到——上下文窗口不是无限大的垃圾桶,你得学会往里面放有价值的东西。上下文工程,就是教你怎么管理Agent的"短期记忆"。

📋 什么是上下文工程?

🎯 核心概念

上下文工程(Context Engineering)是指系统性地设计和管理输入给AI Agent的信息,包括:

  • 系统提示词 - SOUL.md、TOOLS.md等配置文件
  • 对话历史 - 之前的消息记录
  • 工具输出 - 调用工具返回的结果
  • 外部知识 - 通过RAG检索的相关信息
  • 工作记忆 - 临时存储的中间结果

📊 上下文窗口的限制

不同模型的上下文窗口大小不同:

  • GPT-4o - 128K tokens
  • Claude 3.5 Sonnet - 200K tokens
  • 当前模型 - 约200K tokens(约15万字)

⚠️ 注意:上下文窗口满了之后,早期的内容会被截断,Agent会"失忆"!

🚀 上下文优化策略

1. 精简系统提示词

SOUL.md和TOOLS.md要简洁有力:

# ❌ 错误 - 冗长啰嗦
## 我的名字
我叫妙趣AI,是一个AI营销运营官,我负责很多事情,比如...

# ✅ 正确 - 简洁明了
## 核心定位
我是妙趣AI,AI营销运营官。负责内容生产、SEO优化、社区运营。

2. 智能压缩对话历史

当对话变长时,定期总结压缩:

# 让Agent总结之前的对话
openclaw agent --message "
总结我们之前讨论的要点,只保留关键信息。
将总结存储到MEMORY.md中,然后清空对话历史。
"

3. 使用外部记忆(MEMORY.md)

将长期信息存储到MEMORY.md,而不是塞进上下文:

# MEMORY.md 结构示例
## 长期记忆
- 用户偏好:喜欢妙趣风格(周星驰+王家卫)
- 网站信息:miaoquai.com,1700+页面
- 关键项目:openclaw-skills-packager

## 近期事件
- 2026-05-22: 完成了第19次内部链接优化
- 2026-05-21: 启动竞品监控系统

4. 工具输出截断

限制工具返回的内容长度:

# web_fetch时限制字符数
web_fetch(url:"https://example.com", maxChars:5000)

# 使用extractMode只提取需要的部分
web_fetch(url:"https://example.com", extractMode:"text")

💡 高级技巧

🎨 上下文分层设计
  • L1 - 核心层:SOUL.md、IDENTITY.md(永不截断)
  • L2 - 工具层:TOOLS.md、技能说明(按需加载)
  • L3 - 记忆层:MEMORY.md、tdai记忆(定期压缩)
  • L4 - 会话层:对话历史(超过限制时总结)

示例:优化后的Agent初始化

# 好的上下文设计
## 注入的Project Context(精简版)
- SOUL.md (2KB) - 核心人设
- TOOLS.md (1KB) - 工具说明
- MEMORY.md (5KB) - 长期记忆(定期压缩)
- Scene Navigation (3KB) - 场景索引(按需加载)

## 总上下文约11KB,远小于200K限制
## 给对话历史和工具输出留足空间

📊 上下文使用监控

使用session_status查看当前上下文使用情况:

openclaw agent --message "/status"

# 返回示例:
# Model: tencentcodingplan/tc-code-latest
# Usage: 15432/200000 tokens (7.7%)
# 对话历史: 8921 tokens
# 系统提示词: 6511 tokens
⚠️ 上下文泄漏的常见原因
  • 工具返回了超长的网页内容(没有限制maxChars)
  • 对话历史太久没有清理
  • 重复注入相同的系统提示词(某些工具会追加而非替换)
  • base64编码的图片/文件塞满了上下文

🔗 相关链接

🎭 妙趣小结

上下文工程就像整理背包——你去旅行,不可能把整个衣柜都带上。得挑选最重要的东西:护照、钱包、手机。其他的,需要用的时候再想办法。Agent的上下文也是一样,别什么都往里塞,会炸的。😜