بنقرة واحدة
context-compaction
3层 Context 压缩策略,支持无限长度会话。 使用此 skill 当你需要: - 理解 Context 压缩的原理 - 实现消息历史摘要 - 处理超长对话导致 context overflow
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
3层 Context 压缩策略,支持无限长度会话。 使用此 skill 当你需要: - 理解 Context 压缩的原理 - 实现消息历史摘要 - 处理超长对话导致 context overflow
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
AgentLoop 是整个 Agent Harness 的心脏。使用此 skill 当你需要: - 构建新的 Agent 系统 - 理解 Model + Harness 的关系 - 使用 chat() 快捷函数进行单轮对话
多 Agent 协作机制,持久 agent + 异步通信 + 团队管理。 使用此 skill 当你需要: - 理解 Agent Teams 的工作方式 - 使用 MessageBus 进行 agent 间通信 - 使用 TeammateManager 管理持久 agent 线程
Agent Team 通信协议 FSM:shutdown / plan_approval。 使用此 skill 当你需要: - 实现优雅关闭协议 - 实现计划审批协议 - 理解 s10 Team Protocols 的状态机设计
基于文件的 TaskManager,任务持久化 + 依赖图。 使用此 skill 当你需要: - 创建跨会话持久化的任务 - 管理任务间的 blockedBy/blocks 依赖关系 - 理解 s07 TaskSystem 的文件格式
工具注册与分发机制。使用此 skill 当你需要: - 注册新的 tool handler - 理解工具定义(tools list)和工具执行(handlers dict)的分离 - 使用 make_default_dispatcher 快速创建默认工具集
| name | context-compaction |
| description | 3层 Context 压缩策略,支持无限长度会话。 使用此 skill 当你需要: - 理解 Context 压缩的原理 - 实现消息历史摘要 - 处理超长对话导致 context overflow |
每轮对话 messages[] 都在增长。几轮之后 context 就满了。 解决思路:不是截断,是压缩。
定期把多轮对话压缩成一条摘要消息:
# 原始(10轮对话,~8000 tokens)
messages = [
{"role": "user", "content": "添加用户认证"},
{"role": "assistant", "content": "我帮你..."},
{"role": "user", "content": "再加个注册"},
{"role": "assistant", "content": "好的..."},
... 10轮
]
# Layer 1 压缩后
messages = [
{"role": "user", "content": "添加用户认证 + 注册功能"}, ← 摘要
{"role": "assistant", "content": "完成了,代码已提交"},
]
触发条件:messages 总长度 > 50% max_tokens
只保留重要的架构决策、操作结果、文件路径,丢弃探索过程:
COMPRESSED = """
=== 项目状态 ===
- 完成了用户认证(JWT)
- 添加了 /auth/login 和 /auth/register 端点
- 使用了 PyJWT 库
- 数据库迁移:users 表
=== 关键文件 ===
- apps/api/routers/auth.py
- apps/api/models/user.py
=== 当前进行中 ===
实现论文搜索 API
"""
把完整消息压缩成结构化元信息:
{
"type": "compressed_history",
"summary": "完成用户认证,添加登录注册API,使用PyJWT",
"decisions": ["使用JWT而非session", "密码用bcrypt哈希"],
"files_touched": ["auth.py", "user.py", "models.py"],
"active_task": "实现论文搜索API",
"next_step": "添加 arxiv_id 字段到 papers 表",
}
| 信号 | 动作 |
|---|---|
| messages 长度 > 50% max_tokens | Layer 1 |
| 单轮工具调用 > 20 次 | Layer 2 |
| 会话超过 2 小时 | Layer 2 |
| 历史消息全部是工具调用 | Layer 3 |
def should_compact(messages, max_tokens):
total = sum_tokens(messages)
return total > max_tokens * 0.5
def compact(messages, strategy="auto"):
if strategy == "auto":
if len(messages) > 20:
return layer3_compress(messages)
elif total_tools > 20:
return layer2_compress(messages)
else:
return layer1_summarize(messages)
class CompactingAgentLoop(AgentLoop):
def __init__(self, config, dispatcher, compact_threshold=0.5):
super().__init__(config, dispatcher)
self.compact_threshold = compact_threshold
def run(self, messages):
result = super().run(messages)
if self._should_compact(messages):
messages[:] = self._compact(messages)
return result