Agent Harness 如何管理大模型上下文工作集,告别 Prompt 限制!
随着大模型应用发展上下文窗口管理成为关键。文章分析了 Pi、OpenClaw、Claude Code 和 Letta 四个 Agent Harness 如何应对上下文窗口限制从简单的 Prompt 调整转向主动管理。核心挑战在于设计有效的策略来决定保留、压缩或检索哪些内容。各 Harness 采用不同方法如文件分页、工具结果预算、会话裁剪和子 Agent 隔离但都朝着系统化、自动化的内存管理方向演进目标是让模型在有限窗口内高效工作。1 上下文窗口管理不再只是 Prompt 问题Pi、OpenClaw、Claude Code 和 Letta 在这里做出了不同选择但它们正在收敛到相似的底层模式。上下文不再只是“能塞进 transcript 的所有内容”。它变成了系统必须主动管理的东西。真正的设计问题是这种管理有多少应该发生在 Harness 内部又有多少应该交给模型自己完成。2 核心赌注相信模型能管理自己的上下文每一个上下文管理决策都隐含着一个关于模型行为的假设。关键问题是Harness 应该主动约束上下文使用还是相信模型能自己正确管理这笔预算3 大文件上下文管理文件读取让这个问题变得很具体。当模型需要读取一个大到放不进上下文的文件时总得有人决定保留什么。四个 Harness 都支持用 offset 和 limit 参数分页读取。3.1 Pipi-monoPi 读取文件时会设置硬上限最多 2,000 行或 50KB哪个先到就在哪停止即使模型没有主动要求切片也一样。内容会从头部开始保留并截断工具输出会追加一个明确的继续提示[Showing lines 1-2000 of 50000. Use offset2001 to continue.]工具说明也会再次强调“output is truncated to 2000 lines or 50KB. Use offset/limit for large files.”Pi 的方式是 Harness 优先先由 Harness 保护你再教模型如何分页。3.2 OpenClawOpenClaw 继承了 Pi 的读取工具也继承了 2,000 行 / 50KB 的截断方式。普通文件读取时它的行为基本相同。在此之上它又为 bootstrap files会话启动时一次性加载的上下文文件增加了额外限制单文件最多 12,000 字符总量最多 60,000 字符。当 bootstrap 文件超过预算时它采用 75% 头部 25% 尾部的保留方式你能看到开头和结尾中间被切掉。工具结果还有单独预算16,000 字符或上下文窗口的 30%取较小值。当尾部看起来“重要”比如错误、JSON 闭合括号、summary 关键词时它会切换成头尾保留模式否则只保留开头。OpenClaw 的方式是纵深防御第一层是 Pi 的截断策略然后是 bootstrap 注入的额外上限再往上是工具结果预算。3.3 Claude CodeClaude Code 对文件读取做了两层防御。第一道门是在打开文件前通过 stat 检查 256KB 字节上限。如果文件超过这个大小读取会立刻被拒绝并返回一个错误提示模型改用 offset/limit 或 grep。第二道门发生在读取之后输出会按 25,000 token 的预算重新计数用来捕捉那些虽然没超过字节上限、但 token 密度很高的文件。这两个限制都可以由 Anthropic 通过 GrowthBook feature flags 远程调整不需要发布新版本。即使文件低于上限工具默认也只返回开头 2,000 行任何超过 2,000 个字符的单行也会被截断。模型必须显式使用 offset 和 limit 参数请求更多内容。这个工具说明本身也是一段很完整的 prompt它解释分页提到大小上限覆盖图片、PDF、notebook 支持还鼓励对多个文件并行读取。offset 和 limit 参数各自也有说明告诉模型它们是为“太大而无法一次读取”的文件准备的。还有一条条件指令会根据 feature flag 把 256KB 限制直接暴露在 prompt 中。文件去重系统也值得注意。如果模型在文件没有修改的情况下用同一个范围重复读取同一个文件Claude Code 会返回一个 stub而不是再次把完整内容塞进上下文从而避免重复消耗 token。Claude Code 的方式是 Harness 优先同时保持远程可调**读取前字节门、读取后 token 门、默认行数与单行长度限制、可执行的错误提示、丰富的工具 prompt、读取去重**以及能让 Anthropic 服务器端调整所有限制的 feature flags。3.4 LettaLetta 走的是一条根本不同的路线。每个上传文件都会被解析、切块、嵌入到向量库里因此 Agent 同时拥有精确搜索和语义搜索。它提供三种文件工具open_files用于直接查看原始文本grep_files用于精确模式匹配也是原始文本semantic_search_files则基于嵌入后的片段做语义检索。当一个文件在 Agent 上下文里处于“打开”状态时可见内容会被截断到一个按模型上下文窗口伸缩的单文件字符上限8K 上下文时是 5,000 字符32K 是 15,000128K 是 25,000200K 以上是 40,000。可同时打开的文件数量也会伸缩小模型最多 3 个很大的模型最多 15 个默认兜底是 5 个。超过限制时它用 LRU最近最少使用策略驱逐最久没有访问的文件。Letta 的方式是记忆优先文件同时存在于原始文本和向量库中上下文窗口只展示一个被管理过的视图模型通过工具访问更多内容。4 真正的工程难点会话裁剪随着对话增长每个 Harness 都必须决定保留什么、丢掉什么。这才是设计差异真正有意义的地方因为压缩策略会决定长时间运行的 Agent 是保持连贯还是慢慢退化。4.1 Pipi-monoPi 使用 compaction由 LLM 驱动的摘要在 token 到达阈值时触发。触发条件估算上下文 token 超过contextWindow - reserveTokens默认 reserve 是 16,384 token。保留内容从对话尾部往回走保留最近约 20,000 token 的消息keepRecentTokens。被摘要内容更早的所有内容都会交给 LLM 生成摘要。摘要位置摘要会变成一条合成的用户消息插入到保留尾部之前。工具调用安全性永远不会把 tool call 和 tool result 切成孤儿结果。它会沿边界回退确保工具调用和工具结果成对保留。4.2 OpenClawOpenClaw 在 Pi 的 compaction 之上又运行两种不同的上下文管理机制。触发条件历史记录超过上下文窗口的 50%maxHistoryShare默认 0.5。保留内容历史会被切成 token 质量相近的多个块最旧的块被丢弃其余块会在修复 tool call / result 配对后保留。被摘要内容被丢弃的内容会经过分阶段、多轮 LLM 摘要并带有合并步骤。摘要位置和 Pi 一样作为合成用户消息插入到保留尾部之前。工具调用安全性repairToolUseResultPairing会修复块丢弃后出现的孤儿工具结果splitMessagesByTokenShare会避免切进一个 tool call / result 对。压缩前刷新在历史消失前一个静默的 agentic turn 会让 Agent 把状态持久化到 memory files。第二层对工具结果做非破坏性的内存裁剪先 soft-trim再 hard-clear并设置 5 分钟缓存 TTL。这样可以保护持久对话同时为当前请求回收上下文。4.3 Claude CodeClaude Code 通过查询前优化和 LLM 驱动的 compaction 管理上下文。触发条件估算 token 超过有效上下文窗口减去 13,000 token 缓冲区对 200K 上下文模型来说大约在 167K token 时触发压缩。被摘要内容完整对话会被发送给模型并配上一段结构化的 9 部分 prompt覆盖 primary request、关键技术概念、文件和代码、错误与修复、问题解决过程、所有用户消息、待办任务、当前工作以及可选的下一步。摘要位置摘要会变成一条用户消息告诉模型这个会话是从一个因上下文耗尽而中断的旧对话继续下来的。压缩后恢复最多 5 个最近读取的文件会在 token 预算内重新附加回上下文。摘要器安全性模型会在分离的标签块中生成 analysis scratchpad 和 final summary。scratchpad 会在摘要进入上下文前被剥离从而提升摘要质量又不增加上下文负担。prompt 过长时的兜底如果 compaction 调用本身也撞上上下文上限就会用确定性的 head-drop 删除最旧的 API round 组删除 20% 的组或删除足够多以补齐 token 缺口。查询前优化每一次 API 调用前都会运行不管是否已经有上下文压力。Claude Code 会运行一条只管理工具结果、不触碰对话文本的流水线。过大的工具结果会被持久化到磁盘并替换成 2KB 预览。单个工具上限是 50,000 字符单条消息聚合上限是 200,000 字符。所以哪怕一个全新会话里出现 60KB 的 grep 结果它也会在第一轮就被移到上下文外。4.4 LettaLetta 通过多种 compaction 策略管理上下文并在主要路径溢出时使用两阶段摘要器兜底。触发条件估算上下文使用量超过上下文窗口的 90%。滑动窗口驱逐从 30% 的消息开始移除不是 10%之后每次迭代增加 10%直到 token 使用量降到目标以下。最新的消息会被保留最旧的消息被驱逐。Self-compact 模式使用 Agent 自己的模型生成摘要因此不需要单独的摘要器成本或配置。摘要器溢出的两阶段兜底第一步把工具返回压到 5,000 字符后重试。如果仍然溢出就对 transcript 做中部截断保留 30% 头部和 30% 尾部丢掉中间。预警阈值在 90% compaction 触发之前还有一个单独的 75% memory warning。5 子 Agent 的上下文管理在我们看的这些 Harness 里子 Agent 通常和父会话隔离。这里没有一个例子会把完整的父会话历史复制进子 Agent。真正的问题是子 Agent 会继承多少工作区上下文。5.1 SubagentPi 会为每个委派任务启动一个新进程并使用内存中的会话。子 Agent 只收到任务字符串这一条用户消息不会传入父对话历史。OpenClaw 默认给子 Agent 全新的隔离会话不带父 transcript。它有一个 fork 模式可以把父 transcript 复制进子 Agent但只用于同类 Agent 的 spawn。工作区上下文会被过滤到一个最小 allowlistAGENTS.md、TOOLS.md、SOUL.md。Claude Code 有两条路径。默认的 typed-agent 路径会创建一个空白对话委派 prompt 会成为唯一的用户消息不带父历史。较新的 fork 路径会把完整的父消息历史传给子 Agent以便复用 prompt cache同时还会加上一条合成 assistant 消息和占位工具结果。Worker 会用自己的权限模式重建工具异步 Agent 会拿到一个明确的 allowlist包括 Read、Grep、Glob、Shell、Edit、Write、WebSearch 等。Agent 定义里引用的 Skills 会被提前加载。完整 Skill 内容会作为用户消息注入初始对话而不是按需加载。Letta 在普通工具执行中完全不 fork。工具在主 Agent 循环里运行。历史上下文通过专门的搜索工具访问conversation search 用于 recall memoryarchival memory search 用于嵌入库。6 这些设计为什么会收敛比较这四个代码库后最显眼的发现不是它们有多不同而是它们有多一致。也就是说Agent 工程正在把“上下文窗口不够用”这个问题重构成一个更老也更硬的系统问题怎么管理一个固定大小的工作集。四个 Harness 都会对文件读取设置硬上限。四个都支持 offset/limit 分页。四个都限制工具结果大小。四个都隔离子 Agent 会话。四个都会在 token 到达阈值时运行 LLM 驱动的 compaction。四个都会估算上下文使用量并检测压力。这些不是巧合。它们是在解决同一个工程问题一个固定大小的工作集却要让它感觉像是无限的。这种收敛不只是“功能相同”。具体设计选择也在押韵。Pi 和 OpenClaw 都对文件读取做头部截断并追加继续提示。Claude Code 和 OpenClaw 都会把过大的工具结果持久化到磁盘。Pi、OpenClaw 和 Claude Code 都会在 compaction 期间保证 tool call / result 边界安全。四个系统里有三个支持把父 transcript fork 进子 Agent。它们独立走到了相似答案。这些模式并不局限于 coding agents。Arize 自己的 Alyx assistant 是为数据探索构建的不是为代码编辑构建的但它也独立走到了同样的设计。Alyx 会把工具结果限制在 10,000 token 预算内并用二分搜索找到能放进上下文的最大数据切片。它会通过从对话历史中裁掉重复预览只保留最近一次来去重幂等工具调用。它把大型 JSON payload 拆成 LLM 可见的压缩预览以及服务端保存的完整副本模型之后可以通过 jq 钻进去查看完整内容。这和 Pi、OpenClaw、Claude Code 为文件读取使用的“把过大结果持久化到上下文之外”是同一个模式。它会对很长的单元格值做头尾截断并保留指向完整内容的反向引用。它用 char/4 的启发式估算 token 压力并在对话超过 50,000 token 时强制 checkpoint让模型在历史被裁剪前写下自己的状态摘要。这把 Claude Code 的确定性 compaction 触发和 OpenClaw 的压缩前状态刷新结合在了一起。它的子 Agent 也采用了这四个 Harness 都使用的隔离启动模式。一个完全不同领域的产品最终收敛到了同一套上下文管理方法。50 年的计算机历史告诉我们最好的内存管理是程序自己不用思考的那一种。寄存器、缓存行、页表、交换空间。每一层都由系统管理每一层对上一层都不可见。程序只管运行。Agent Harness 正在朝同一个方向移动。目标不是把一切都展示给模型而是在正确的时间给它正确的工作集并允许它动态决定如何管理自己的上下文。最后2026 年一晃已经过半AI 大模型的热潮不仅没有降温反而持续升温金融行业用大模型做风控、医疗依靠 AI 解析影像电商、制造、教育各行各业都在把 AI 融入日常业务。曾经热闹的 “百模大战”早就告别单纯比拼模型参数正式进入落地应用时代。现在企业疯狂紧缺一类人才懂业务、懂 AI、能做出可上线项目的大模型开发工程师岗位缺口大薪资待遇十分可观。风口再好不如手握高薪 offer 实在。行情火热普通人、程序员该怎样从零入门大模型抓住这波机会今天整理好【2026 最新版】AI 大模型全套免费学习资源覆盖零基础入门、项目实战、理论知识、大厂面试从基础一路进阶。所有资料分类归档没有多余杂料无套路免费分享给想要入局 AI 赛道的程序员与零基础小白扫码免费领取全部内容1、大模型系统化完整学习路线2、大模型经典书籍文档3、AI 大模型最新行业研究报告4、企业级实战项目 完整配套源码5、大厂大模型面试真题汇总6、这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】