当前位置: 首页 > article >正文

OpenClaw 上下文瘦身:3 个实验

这篇不是讲“提示词怎么写得更优雅”。我只看一个更硬的问题Agent 跑久以后上下文到底是怎么胖起来的哪一刀最值得先砍。实验脚本和结果都放在本地目录里可以复跑。你大概见过这种故障Agent 前 10 分钟很听话工具也能正常调。跑到后面开始变慢、重复解释、忘记刚才的发布规则甚至把已经验证过的 URL 又验证一遍。很多人第一反应是“模型不稳”。我现在更倾向于先怀疑上下文管线。模型只是消费上下文的人真正把它喂撑的通常是这三类东西全量历史每轮重发工具结果原样塞回对话工具 schema 和说明越写越长我用一个很小的 Python 脚本跑了 3 个实验。不是线上 API benchmark也不拿它证明某个模型强弱它只回答一个工程问题在 Agent 系统里哪些上下文最容易失控。实验目录experiments/run_experiments.py。什么是 OpenClaw 上下文工程OpenClaw 上下文工程指的是在多工具、多轮、多 agent 的运行过程中控制“发给模型的输入材料”历史消息、工具 schema、工具返回值、规则锚点、摘要状态和验证证据。它不是单纯缩短 prompt。更准确地说它是一套预算系统哪些内容必须每轮出现哪些内容只保留摘要哪些内容应该写入文件或 receipt而不是继续塞进下一轮对话。实验环境只测 payload不测模型能力为了避免把话说大我把实验限定得很窄Python 3 标准库json.dumps(..., ensure_asciiFalse)序列化UTF-8 bytes 作为 payload 大小指标固定随机种子519合成 40 轮 Agent 对话每轮包含用户请求、工具结果、助手回复这里没有调用线上模型所以我不会写“某模型实测提升多少”。我测的是输入材料本身的体积变化。完整实验骨架如下importjson,random,string random.seed(519)defcjk(n:int)-str:words上下文 工具调用 文件搜索 发布脚本 运行日志 失败重试 摘要 压缩 预算 规则 锚点 验证 响应 状态 证据 结构化 输出.split()s[]whilelen(.join(s))n:s.append(random.choice(words))s.append()return.join(s)[:n]defmake_turn(i:int):tool{tool:search_files,args:{pattern:context|token|publish,path:f/repo/module_{i%7}},matches:[{path:fsrc/module_{i%7}/file_{j}.ts,line:20j,content:cjk(90),score:round(random.random(),4),mtime:2026-05-19T09:00:0008:00,debug:{rank:j,trace:x*48},}forjinrange(10)],}return[{role:user,content:f第{i}轮请继续定位上下文膨胀问题。},{role:tool,name:search_files,content:json.dumps(tool,ensure_asciiFalse)},{role:assistant,content:cjk(420)},]这个构造不复杂但很接近真实 Agent 的痛点文件搜索、日志检索、发布脚本输出都很容易返回一大坨结构化文本。实验 1全量历史不是慢慢变贵是迟早把你拖死我比较了三种历史策略轮数全量历史 bytes最近 6 轮 bytes摘要 最近 6 轮 bytes16,8296,9847,197534,15534,31034,5231068,31341,14541,35820136,63241,14641,35940273,26941,14541,358这里有个反直觉点前 5 轮全量历史看起来没什么问题甚至比“摘要 窗口”更小一点。因为摘要和规则锚点本身也占空间。但从第 10 轮开始差距就拉开了。到第 40 轮全量重放已经到273,269 bytes最近 6 轮策略稳定在41,145 bytes左右。也就是说在这个合成场景里滑动窗口把历史 payload 压到了全量的约15.1%。这就是很多 Agent 故障“不在开头暴露”的原因。系统刚启动时你怎么写都行。历史还短工具结果还少规则还在上下文前面。等它跑到第 20 轮、第 40 轮规则被挤远、工具日志开始堆积、模型要在一堆旧证据里找当前任务。它不是突然变笨是你给它的输入变脏了。最小修复代码很短CRITICAL关键规则 1) 缺证据不下结论。 2) 工具结果先摘要再回灌。 3) 发布后必须打开公开页验证。 defbuild_messages(turns,keep6,summary):recentturns[-keep*3:]messages[{role:system,content:CRITICAL}]ifsummary:messages.append({role:system,content:会话摘要summary})messages.extend(recent)returnmessages我不建议一上来就做复杂记忆系统。先做 3 件事就够了关键规则每轮重复短一点最近 N 轮完整保留更早的内容只保留摘要和 receipt 路径在 OpenClaw 这种会跨渠道、跨 agent、跨 cron 跑的系统里receipt 路径很重要。比如发布结果、截图、日志不要全塞进对话写入文件再把文件路径和 2 行摘要放回上下文。实验 2工具结果原样回灌是最容易砍的一刀第二个实验更直接构造 80 条 search match每条带 path、line、content、before、after、score、mtime、sha、debug trace。然后做一个紧凑版只保留总匹配数top 8path / line / score45 字 snippet结果工具结果版本bytes相对原始体积原始 JSON98,387100%摘要 JSON2,0432.1%减少比例-97.9%这个结果比我预期更夸张。原因不是 JSON 本身“坏”而是工具结果里混了太多对下一步决策没用的字段。mtime、sha、debug.trace、完整上下文行在定位工具自身 bug 时有价值但在让 Agent 决定“下一步读哪个文件”时它们大多是噪声。我现在更喜欢把工具分成两层输出defcompact_search_result(raw:dict,top_k:int8)-dict:matchesraw.get(matches,[])matchessorted(matches,keylambdax:x.get(score,0),reverseTrue)return{query:raw.get(query),match_count:len(matches),top_matches:[{path:m[path],line:m[line],score:round(m.get(score,0),3),snippet:m.get(content,)[:80],}forminmatches[:top_k]],}如果下一步真的需要完整证据再让 Agent 读文件或打开日志。不要因为“可能有用”就把所有字段每轮都带着跑。这里有个实际经验很多失败不是“缺信息”而是“信息太多但没有优先级”。模型看到 80 条 match每条都有很多字段它会尝试做阅读理解你给它 top 8 score snippet它更像是在做决策。实验 3schema 也会胖而且胖得很安静第三个实验测工具 schema。每个工具包含 name、description、6 个参数说明。工具数从 6 增加到 100。工具数量schema bytesPython JSON parse p50p95611,7710.015 ms0.031 ms1223,5330.029 ms0.043 ms2447,0650.053 ms0.064 ms60117,6610.131 ms0.169 ms100196,1010.227 ms0.269 ms别误会parse 时间不是重点。Python 本地解析这点 JSON 很快。真正的问题是这些 schema 最终会变成模型输入。100 个工具的说明在这个构造里已经接近196KB。如果每轮都带上再叠加历史和工具结果你的上下文预算会被“静态说明书”吃掉一大块。这也是为什么我不喜欢给一个 agent 挂 50 个“可能会用到”的工具。工具越多不只是选择更难输入也更脏。更稳的做法是按任务装载工具TOOLSETS{publish:[read_file,write_file,browser_publish,screenshot],debug:[read_file,search_files,run_command,process_log],research:[web_search,web_fetch,note_save],}defselect_tools(intent:str)-list[str]:if发布inintentorCSDNinintentor掘金inintent:returnTOOLSETS[publish]if报错inintentor日志inintentor定位inintent:returnTOOLSETS[debug]returnTOOLSETS[research]这段代码很粗糙但方向对先缩工具面再让模型选工具。我更推荐把“工具选择”前置成路由问题而不是把所有工具摊开让模型自己挑。尤其是 OpenClaw 这种多 agent 场景writing-studio、coder、brain、publisher本来就应该有不同工具边界。一个可落地的上下文预算表我会把 Agent 输入拆成 5 个桶每个桶给一个粗预算。这里的数字不是行业标准是这次实验后我自己的默认值输入桶建议预算超预算时怎么处理关键规则1-2KB只留不可破坏的规则删解释当前任务2-6KB让用户意图保持原文不要摘要过度最近历史30-50KB滑动窗口保留最近 4-8 轮工具结果单次 2-8KBtop_k snippet 证据路径工具 schema10-60KB按任务装载不全量挂载如果你只能改一处我建议先改“工具结果”。原因很简单它收益最大、风险最小。历史摘要可能会丢细节工具裁剪则可以保留原始文件路径需要时再读。你不是删除证据只是不把证据全文塞进下一轮。我会怎么改一个真实 Agent拿一个发布型 agent 举例。它需要写文章、生成封面、发 CSDN、发掘金、验证公开页。最容易出问题的地方不是写作而是发布后状态回灌。错误做法# 不要这样把整段浏览器日志、HTML、Network 输出全部塞回对话messages.append({role:tool,content:full_browser_logfull_htmlfull_network_trace,})更好的做法frompathlibimportPathimportjsondefsave_receipt(platform:str,payload:dict,run_dir:str)-dict:pathPath(run_dir)/receipts/f{platform}.jsonpath.parent.mkdir(parentsTrue,exist_okTrue)path.write_text(json.dumps(payload,ensure_asciiFalse,indent2),encodingutf-8)return{platform:platform,status:payload.get(status),url:payload.get(url),receipt_path:str(path),evidence:payload.get(evidence,[])[:3],}对 Agent 来说下一轮只需要知道成功没、URL 是什么、证据在哪。如果它要复盘再读 receipt 文件。这个模式还有一个好处人也更容易审计。你不用在一大段对话里找“到底发没发成功”直接看 receipts。非显而易见的发现摘要不是越早越好实验 1 里第 1 轮和第 5 轮“摘要 最近 6 轮”比全量历史略大。这说明一个小坑别把摘要当成银弹。对短会话摘要本身也是负担。真正该做的是阈值触发低于 6 轮不摘要超过 6 轮滑动窗口出现跨阶段任务生成阶段摘要发布、部署、删除这类动作写 receipt不靠记忆伪代码如下defshould_summarize(turn_count:int,stage_changed:bool,payload_bytes:int)-bool:ifstage_changed:returnTrueifturn_count6:returnFalsereturnpayload_bytes50_000这个判断比“每 5 轮自动摘要一次”更实用。因为真正的切点不是轮数而是阶段和 payload。OpenClaw 场景里的 4 条规则我现在会给 OpenClaw agent 加这 4 条默认规则工具结果默认摘要完整原文写文件每个 agent 只挂当前任务需要的工具集发布、部署、外部副作用必须写 receipt最终状态必须二次验证不能只信脚本返回第 4 条尤其重要。发布脚本返回 success只能说明“提交动作完成”公开页是否可见、是否审核通过还要打开 URL 看一次。这不是洁癖是为了防 phantom publish。自动化最危险的不是失败而是假成功。常见问题Q: 为什么不用 token 计数而用 bytesA: 这次实验只想测 payload 体积变化不比较模型。bytes 可以稳定复现也不依赖具体 tokenizer。真实上线时应该把 bytes 和模型 tokenizer 计数都打进日志。Q: 工具结果摘要会不会漏掉关键证据A: 会所以不要只保留摘要。正确做法是“摘要进上下文原文进文件”。Agent 需要细节时再按路径读取。这样既保留证据又不污染每一轮输入。Q: OpenClaw Agent 最先该优化哪里A: 先看 receipts 和工具日志。如果一次工具调用返回超过 20KB却只用其中 3 行做决策就先做 compaction。比改 prompt 更快见效。结论别先调模型先管输入这 3 个小实验给我的结论很朴素Agent 变慢、变飘、重复工作很多时候不是“智商问题”而是输入治理问题。全量历史会线性膨胀工具结果原样回灌最浪费schema 数量太多会安静吃掉预算。我自己后面会把这套规则直接放进 OpenClaw 写作和发布 agent工具结果先压缩关键动作写 receipt公开页再验证。等这些基础管住了再讨论换模型、换路由、换工作流才有意义。

相关文章:

OpenClaw 上下文瘦身:3 个实验

这篇不是讲“提示词怎么写得更优雅”。我只看一个更硬的问题:Agent 跑久以后,上下文到底是怎么胖起来的,哪一刀最值得先砍。实验脚本和结果都放在本地目录里,可以复跑。你大概见过这种故障: Agent 前 10 分钟很听话&am…...

避坑指南:解决RK3588编译ZLMediaKit时OpenSSL等依赖库路径找不到的问题

RK3588交叉编译ZLMediaKit实战:系统性解决OpenSSL依赖路径问题 第一次在RK3588开发板上尝试编译ZLMediaKit时,我遇到了一个看似简单却令人抓狂的问题——CMake死活找不到OpenSSL库。屏幕上不断跳出的Could NOT find OpenSSL错误提示,让我意识…...

前端开发自救指南:不用写测试代码,5分钟用Playwright录制生成E2E测试脚本

前端开发自救指南:5分钟零代码生成E2E测试脚本的Playwright实战 最近在重构公司后台管理系统时,我遇到了一个典型的前端开发困境:每次修改表单验证逻辑后,都需要手动点击十几个字段组合来验证是否会影响其他功能。直到团队里的测…...

华为擎云L420变身MCU开发主力机:VSCode + Cortex-Debug + 自编译工具链玩转雅特力AT32

华为擎云L420打造高效MCU开发环境:VSCodeCortex-Debug全流程实战 在嵌入式开发领域,效率工具的选择往往能决定项目的成败。当国产化浪潮席卷技术圈,越来越多的开发者开始尝试在纯国产硬件上构建完整的工作流。华为擎云L420作为一款基于ARM架构…...

如何高效使用AutoHotkey编译器:Ahk2Exe完整指南与实战技巧

如何高效使用AutoHotkey编译器:Ahk2Exe完整指南与实战技巧 【免费下载链接】Ahk2Exe Official AutoHotkey script compiler - written itself in AutoHotkey 项目地址: https://gitcode.com/gh_mirrors/ah/Ahk2Exe 对于Windows自动化脚本开发者而言&#xff…...

ESPHome安装后,你的第一个智能设备可以不是开关或灯

ESPHome创意实践:从温控风扇到植物管家,解锁智能设备的无限可能 当你完成ESPHome的基础安装后,脑海中浮现的第一个项目是什么?大多数人会想到开关或灯泡——这些确实是智能家居的经典起点。但ESP8266/ESP32开发板的潜力远不止于此…...

AMP插件开发者工具完全指南:如何快速诊断和修复AMP验证问题

AMP插件开发者工具完全指南:如何快速诊断和修复AMP验证问题 【免费下载链接】amp-wp Enable AMP on your WordPress site, the WordPress way. 项目地址: https://gitcode.com/gh_mirrors/am/amp-wp 你是否正在为WordPress网站的AMP验证问题而烦恼&#xff1…...

AI Agent的推理能力边界:大模型之外的关键技术突破

AI Agent的推理能力边界:大模型之外的关键技术突破 关键词:AI Agent、推理能力边界、工具增强推理、神经符号推理、自主规划、多Agent协同、幻觉抑制 摘要:本文针对当前行业普遍存在的「大模型参数堆得越高,AI Agent推理能力就越强」的认知误区,系统拆解了大模型原生推理能…...

51c自动驾驶~合集57

我自己的原文哦~ https://blog.51cto.com/whaosoft/13960249 #端到端自动驾驶算法实现原理 1从传感器数据到控制策略的端到端方法 端到端自动驾驶基本流程: (1)子任务模型被更大规模的神经网络模型取代,最终即为端到端神经网络模型; (2)…...

长期使用Taotoken聚合API在服务稳定性方面的体验分享

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用Taotoken聚合API在服务稳定性方面的体验分享 作为一家长期依赖大模型能力进行产品开发的团队,我们在过去数月里…...

PTA天梯赛L2-007家庭房产题解:用C++并查集+结构体搞定复杂家庭关系统计(附完整代码)

PTA天梯赛L2-007家庭房产题解:C并查集与结构体的高效应用 在算法竞赛中,处理复杂关系网络是常见挑战。PTA天梯赛L2-007"家庭房产"题目正是这类问题的典型代表,要求选手统计每个家庭的人口、房产套数和人均面积。这道题看似简单&am…...

深入理解LZFSE核心技术:Lempel-Ziv与FSE编码的完美结合

深入理解LZFSE核心技术:Lempel-Ziv与FSE编码的完美结合 【免费下载链接】lzfse LZFSE compression library and command line tool 项目地址: https://gitcode.com/gh_mirrors/lz/lzfse LZFSE(Lempel-Ziv Finite State Entropy)是苹果…...

别再手动改文献了!手把手教你定制Mendeley的GB/T 7714-2005引用格式(附常见问题修复)

深度定制Mendeley文献引用格式:GB/T 7714-2005实战指南 科研写作中,文献引用格式的规范性直接影响论文的专业程度。许多研究者在使用Mendeley内置的GB/T 7714-2005格式时,常遇到作者名全大写、et al.显示异常等问题。本文将提供一套完整的解…...

WordPress Playground部署实战:从开发到生产的完整流程指南

WordPress Playground部署实战:从开发到生产的完整流程指南 【免费下载链接】wordpress-playground Run WordPress in the browser via WebAssembly PHP 项目地址: https://gitcode.com/gh_mirrors/wo/wordpress-playground WordPress Playground 是一个革命…...

抖音视频收藏革命:从水印困扰到纯净收藏的完美蜕变

抖音视频收藏革命:从水印困扰到纯净收藏的完美蜕变 【免费下载链接】douyin_downloader 抖音短视频无水印下载 win编译版本下载:https://www.lanzous.com/i9za5od 项目地址: https://gitcode.com/gh_mirrors/dou/douyin_downloader 你是否曾经在抖…...

CLI-Anything与MCP服务器:打造强大后端的实战教程

CLI-Anything与MCP服务器:打造强大后端的实战教程 【免费下载链接】CLI-Anything "CLI-Anything: Making ALL Software Agent-Native" -- CLI-Hub: https://clianything.cc/ 项目地址: https://gitcode.com/GitHub_Trending/cl/CLI-Anything CLI-A…...

Few-shot vid2vid自定义数据集训练指南:从标签图到真实视频的转换

Few-shot vid2vid自定义数据集训练指南:从标签图到真实视频的转换 【免费下载链接】few-shot-vid2vid Pytorch implementation for few-shot photorealistic video-to-video translation. 项目地址: https://gitcode.com/gh_mirrors/fe/few-shot-vid2vid Few…...

Jupyter Notebook 云GPU配置全解析(含实操+选型指南)

一、前言:为什么需要Jupyter Notebook云GPU配置?Jupyter Notebook作为交互式编程工具,广泛应用于AI训练、数据建模、算法调试等场景,其“代码文本”一体化特性,大幅提升开发效率。但本地环境存在明显局限:普…...

国产多模态大模型:产业协同全景与实战指南

国产多模态大模型:产业协同全景与实战指南 引言 在人工智能浪潮席卷全球的背景下,国产多模态大模型正从技术探索迈向广泛的产业协同应用。与只能处理文本或图像的单一模态模型相比,多模态大模型能同时理解、关联和生成文本、图像、音频、视频…...

智慧树自动刷课插件终极指南:如何3分钟实现免手动学习

智慧树自动刷课插件终极指南:如何3分钟实现免手动学习 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台的重复性操作而烦恼吗?智…...

vscode-mssql架构设计器:无代码可视化建模数据库架构的终极工具

vscode-mssql架构设计器:无代码可视化建模数据库架构的终极工具 【免费下载链接】vscode-mssql Visual Studio Code SQL Server extension. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-mssql vscode-mssql是Visual Studio Code的SQL Server扩展&am…...

如何在 5 分钟内集成 human-panic:为你的 Rust CLI 应用添加专业级错误处理

如何在 5 分钟内集成 human-panic:为你的 Rust CLI 应用添加专业级错误处理 【免费下载链接】human-panic Panic messages for humans. 项目地址: https://gitcode.com/gh_mirrors/hu/human-panic human-panic 是一个专为 Rust CLI 应用设计的错误处理库&…...

掌握视频时间:如何用3个步骤将视频学习效率提升300%

掌握视频时间:如何用3个步骤将视频学习效率提升300% 【免费下载链接】videospeed HTML5 video speed controller (for Google Chrome) 项目地址: https://gitcode.com/gh_mirrors/vi/videospeed 你是否曾经在观看在线课程时感到节奏太慢?是否在回…...

JetBrains IDE试用期重置终极指南:三步实现无限开发体验

JetBrains IDE试用期重置终极指南:三步实现无限开发体验 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 还在为JetBrains IDE试用期到期而烦恼吗?ide-eval-resetter是你的理想解决方案&…...

语义搜索失效?NotebookLM这4类文档结构陷阱正悄悄拖垮你的研究效率,立即排查!

更多请点击: https://intelliparadigm.com 第一章:语义搜索失效?NotebookLM这4类文档结构陷阱正悄悄拖垮你的研究效率,立即排查! NotebookLM 的语义搜索能力依赖于底层文档的语义连贯性与结构清晰度。当文档存在隐性结…...

高效AI专著生成:20万字专著一键搞定,AI写专著工具实测推荐!

学术专著写作挑战与AI工具助力 对于初次尝试编写学术专著的研究者来说,写作过程就像是在“摸索着走过一条未知的小路”,处处都有挑战等待着他们。在选题上常常感到迷惘,难以在“有意义”与“可操作性”之间找到合适的平衡:有的研…...

终极 Node.js 路径管理神器:module-alias 完全指南

终极 Node.js 路径管理神器:module-alias 完全指南 【免费下载链接】module-alias Register aliases of directories and custom module paths in Node 项目地址: https://gitcode.com/gh_mirrors/mo/module-alias 你是否厌倦了在 Node.js 项目中看到像 requ…...

CVPR2021明星算法LoFTR实战:在Ubuntu 20.04上从零搭建Python 3.7+Pytorch 1.6.0环境,跑通第一个图像匹配Demo

CVPR2021明星算法LoFTR实战:在Ubuntu 20.04上从零搭建Python 3.7Pytorch 1.6.0环境,跑通第一个图像匹配Demo 计算机视觉领域每年都会涌现出大量创新算法,而CVPR2021上发表的LoFTR(Detector-Free Local Feature Matching with Tran…...

AB3DMOT性能优化技巧:10个提升跟踪精度的关键参数

AB3DMOT性能优化技巧:10个提升跟踪精度的关键参数 【免费下载链接】AB3DMOT (IROS 2020, ECCVW 2020) Official Python Implementation for "3D Multi-Object Tracking: A Baseline and New Evaluation Metrics" 项目地址: https://gitcode.com/gh_mirr…...

给项目选YOLO模型别再纠结了:从参数量、训练曲线到mAP,手把手教你根据数据集做决策

YOLO模型选型实战指南:从参数解析到场景适配的决策方法论 在目标检测领域,YOLO系列模型凭借其出色的实时性能,已成为工业界和学术界的首选架构之一。然而,面对从YOLOv5到YOLOv9的多个版本迭代,以及每个版本中不同规模的…...