Context EngineeringNote 20
04 Context compression:自动压缩与手动 compact
它是什么
它是什么
Context compression 是 Deep Agents 控制长任务上下文膨胀的内置机制。大工具输入或输出会被 offload 到虚拟文件系统,消息历史逼近上下文限制时会触发 summarization。需要主动清理上下文时,可以额外给 Agent 加 compact_conversation 工具。
最小代码
文件:deepagent_src/context_engineering_teach/04_context_compression.py
model = get_real_model()
compaction_middleware = create_summarization_tool_middleware(model, StateBackend)
agent = create_deep_agent(model=model, middleware=[compaction_middleware])
运行
uv run python deepagent_src/context_engineering_teach/04_context_compression.py
预期输出:
context compression real agent ok
验证方式
脚本断言 middleware 暴露了 compact_conversation 工具,并真实调用一次 Agent。自动 offloading 和阈值 summarization 需要真实长对话才会触发,所以这里不伪造大上下文。
常见误区
别以为加了手动 compact 就关闭了自动压缩。Deep Agents 默认仍会在上下文接近限制时自动总结。
相关资源
查看示例代码:deepagent_src/context_engineering_teach/04_context_compression.py
from __future__ import annotations from deepagents import create_deep_agent from deepagents.backends import StateBackend from deepagents.middleware.summarization import create_summarization_tool_middleware from _model import get_real_model from deepagent_src.agent_output import invoke_and_pretty_print def main() -> None: model = get_real_model() compaction_middleware = create_summarization_tool_middleware(model, StateBackend) agent = create_deep_agent(model=model, middleware=[compaction_middleware]) tool_names = [tool.name for tool in compaction_middleware.tools] result = invoke_and_pretty_print( agent, { "messages": [ { "role": "user", "content": "用一句中文回答:compact_conversation 工具什么时候适合使用?", } ] } ) assert agent is not None assert "compact_conversation" in tool_names assert result["messages"][-1].content print("context compression real agent ok") if __name__ == "__main__": main()