Open Agents 上下文管理:提示词压缩与缓存控制全解析

发布时间:2026/9/16 18:52:26

Open Agents 上下文管理:提示词压缩与缓存控制全解析 Open Agents 上下文管理提示词压缩与缓存控制全解析【免费下载链接】open-agentsAn open source template for building cloud agents.项目地址: https://gitcode.com/GitHub_Trending/op/open-agentsOpen Agents 是一个用于构建云端 AI 智能体的开源模板其核心 Agent 内置了一套精巧的上下文管理机制通过提示词压缩压缩历史工具调用数据和缓存控制标记可缓存的请求前缀两大手段让长对话不爆上下文窗口、同时显著降低 Token 成本。本文带你完整解析这套机制的工作原理。一、为什么 AI Agent 需要上下文管理AI 智能体在长任务中会不断调用工具读文件、执行命令、搜索代码……每轮工具调用和结果都会追加到对话历史里。这带来两个痛点上下文膨胀对话越长每次请求携带的历史越多最终撞上模型的上下文窗口上限成本浪费重复发送相同的历史内容意味着为相同的 Token 反复付费。Open Agents 在 packages/agent/context-management/ 目录下给出了两个针对性答案缓存控制解决重复付费提示词压缩解决历史膨胀。二、缓存控制让相同的请求前缀免费复用1. 核心思路增量缓存缓存控制由 cache-control.ts 中的addCacheControl函数实现。它专为 AnthropicClaude模型设计通过cacheControl: { type: ephemeral }标记告诉服务商这段前缀可以缓存对消息标记最后一条消息为缓存点让会话可以增量缓存——每轮对话只新增一小段内容前面的历史直接命中缓存按缓存价计费对工具只标记最后一个工具。因为 Anthropic 最多支持 4 个缓存断点工具标记与消息标记会共享配额因此 cache-control.ts 刻意只给最后一个工具打标记避免超限。对非 Anthropic 模型函数会原样返回数据不做任何修改——一套代码按需生效。2. 在 Agent 中的接入点缓存控制并非孤立的工具函数而是挂接在 Agent 生命周期的两个钩子上见 open-agent.tsprepareCall每次调用前对工具集执行缓存标记open-agent.tsprepareStep每个执行步骤前对消息列表执行缓存标记open-agent.ts。这样无论对话进行到哪一步发给模型的都是带缓存标记的最优请求。三、提示词压缩给历史工具数据瘦身1. 压缩什么——旧的工具调用与结果Agent 对话中占比最大的是tool-call工具调用请求和tool-result工具返回结果一次bash或文件读取动辄数千字符。Open Agents 的策略是保留最近使用的工具数据把冷数据压缩成一行通知。压缩算法的四个步骤全部在 aggressive-compaction-helpers.ts 中步骤函数作用① 建立索引indexToolCalls扫描所有消息为每个工具调用建立位置 → 唯一标识的索引② 找出候选findPendingCompactionCandidates排除最近还在用的工具调用剩下的才允许压缩③ 预估收益estimateCompactionSavings按4 个字符 ≈ 1 个 Token估算能省下多少 Token④ 执行压缩compactToolData把旧数据替换为简短的压缩通知2. 压缩前后对比压缩前一个工具结果可能是output: 5000 字符的完整文件内容 / 命令输出压缩后见 compactToolResultPartoutput: 该工具结果已被压缩以节省上下文工具调用部分则被替换为{ compacted: true, message: ... }compactToolCallPart。模型仍然知道这里发生过一次工具调用却不再需要为几千字符的历史买单。3. 两个巧妙的设计细节幂等保护isCompactedToolCallPart等判断函数会检查数据是否已被压缩过避免重复压缩造成通知套通知无 ID 兼容没有toolCallId的匿名工具结果通过计数方式单独统计findPendingCompactionCandidates保证任何来源的消息都能安全压缩。四、两者如何协同工作在 open-agent.ts 中可以看到完整的协作关系缓存控制守住新增内容——让每轮新对话只多付新增部分的钱提示词压缩清理陈旧内容——把不再被参考的历史工具数据瘦身防止上下文无限膨胀模块入口 context-management/index.ts 统一导出addCacheControl压缩助手则供上层按需调用两者正交、互不干扰。对使用这个模板的开发者来说这是一份可以直接借鉴的上下文经济学方案热数据走缓存、冷数据做压缩长任务的 Token 成本因此可以被控制在可预期的范围内。五、小结 上下文管理的代码集中在 packages/agent/context-management/逻辑独立、易于复用 缓存控制只标记最后一个工具与最后一条消息精准利用 Anthropic 的 4 断点缓存上限✂️ 提示词压缩保新弃旧按字符数估算收益约 4 字符/token幂等且安全 通过prepareCall/prepareStep钩子自动生效使用者无需任何额外配置。理解这套机制你不仅能更好地使用 Open Agents也能在自己的 Agent 项目里复制这套压缩 缓存的最佳实践。【免费下载链接】open-agentsAn open source template for building cloud agents.项目地址: https://gitcode.com/GitHub_Trending/op/open-agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/16 18:47:25

MATLAB直接序列扩频仿真全解析:从m序列到误码率曲线

简介:直接序列扩频(DSSS)通信系统是通信工程与电子信息类课程设计的经典主题。基于MATLAB的仿真源码包面向通信、电子信息、自动化等专业学生,提供完整的系统仿真实现与配套文档,可满足课程设计、大作业或毕业设计需求…

2026/9/16 21:47:52

TypeScript工程化基座:Nx+semantic-release一体化实践

1. 项目概述:一个被严重低估的 TypeScript 工程化能力基座“agent-skills”这个名称乍看像某个 AI 智能体的技能插件库,但结合热搜词agent-skills、TypeScript、node、Nx、semantic-release,再叠加全网高频出现的typescript面试、nx二次开发、…

2026/9/16 21:47:52

三极管静态工作点实测四步法:电压-电流协同验证

1. 这不是教科书里的“理想测量”,而是实验室里真实会冒烟、会跳变、会让人抓狂的实操现场你手头有一块搭好的共射极放大电路板,万用表调到直流电压档,红表笔点在集电极,黑表笔接地——读数是8.32V;再测基极&#xff0…

2026/9/16 21:47:52

Java+SSM+Django混合架构实现普通话培训管理系统

1. 项目概述:普通话培训信息管理系统的全栈实现这个普通话培训信息管理系统采用JavaSSMDjango的混合架构模式,实现了从课程管理、学员管理到学习跟踪的全流程数字化。作为语言培训机构的运营中枢,系统需要同时满足教务管理的高效性和学员学习…

2026/9/16 21:47:52

Setoolkit实战:社会工程学钓鱼克隆网站原理与防御指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/16 0:04:09

PHP源码部署实战:从环境配置到运行情侣游戏全攻略

简介:这是一套面向情侣互动场景的PHP完整源码,集成情侣飞行棋、真心话大冒险、情趣骰子等玩法,并内置完整分销制度,可自定义多种返佣比例,源码完全开源无加密,支持微信无感自动授权登录与第三方授权&#x…

2026/9/15 14:22:53

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/15 21:31:11

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/15 11:42:23

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码