妙趣导读:早上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的上下文也是一样,别什么都往里塞,会炸的。😜