Agent 读了 30 个文件之后,为什么会突然停住?
本文是「从零理解 Claude Code20 个 Agent Harness 机制」系列的第 8 篇。源码仓库shareAI-lab/learn-claude-code本文基于开源仓库学习整理具体实现以仓库代码为准。我第一次碰到上下文超限时任务正在排查一组认证测试。Agent 先读了失败日志又读了认证服务、令牌处理、配置文件和几个测试用例。前面的过程没有任何异常命令能执行文件也能正常读取。等它准备发起下一次模型调用时接口直接返回了prompt_too_long。回头看消息历史问题就很清楚了。前面读过的完整文件、几轮测试输出、搜索结果和修改记录都还留在messages里。Agent 已经不需要其中的大部分内容但接口不会替它判断哪些结果已经过期。只要这些内容还在历史中下一次调用就得继续携带。上下文压缩解决的是长任务进行到中途以后如何让 Agent 丢掉已经用完的信息同时保留继续完成任务所需的线索。一次请求失败前messages里到底堆了什么一开始很容易盯着消息数量。例如一段任务跑了几十轮messages长度看起来已经很大第一反应通常是删掉早期对话。这个判断只解决了一部分问题。实际占空间的往往是工具结果。read_file可能返回完整源码bash可能返回数百行测试日志load_skill可能带回完整的技能说明。消息只有十几条时只要其中有两三段大输出上下文照样会接近限制。以认证测试这个场景为例真正值得长期保留的信息很少当前目标修复认证测试失败 已确认失败与 token 配置有关 已修改tests/auth/test_token.py 待完成重新运行相关测试检查回归影响而历史中可能还塞着第一次 pytest 的完整输出 多个已经排除的搜索结果 几份后续不再使用的文件全文 旧版本的配置内容这些内容在当时都有用后面却变成了负担。因此压缩不能只看消息出现得早不早还要看它是任务目标、近期结果还是已经失效的大段输出。压缩顺序里有一个位置不能换这一章在每次调用模型前都会先处理消息历史。执行顺序是大工具结果转存到磁盘 → 裁掉过远的中间消息 → 将较早工具结果替换为占位信息 → 上下文仍然过大时生成历史摘要看上去只是几个预处理函数顺序却不能随便调整。先说最容易被忽略的一层大工具结果转存。tool_result_budget()会检查最近一条工具结果消息的总大小。超过阈值后程序从最大的结果开始处理把完整内容写进.task_outputs/tool-results/上下文中只留下文件路径和前 2000 个字符预览。persisted-output Full output: .task_outputs/tool-results/toolu_123.txt Preview: ... /persisted-output这样Agent 后续发现预览不够时还可以通过文件读取工具重新查看完整结果。接下来才是micro_compact()。它保留最近 3 条工具结果将更早的结果替换成一行说明[Earlier tool result compacted. Re-run if needed.]如果这两步顺序反过来问题就出现了。较早的大结果会先被替换成占位文本后面的转存逻辑再也拿不到完整内容也就无法写入磁盘。Agent 看到的只剩一行提示原始输出没有保存入口。这也是这章最值得注意的设计细节压缩过程本身也会丢信息必须先处理可恢复的大内容再处理可以丢弃的旧内容。前面的tool_result_budget()关注单条或单轮结果是否过大snip_compact()处理的是另一类问题一段任务运行太久消息数量本身已经很长。教学代码超过 50 条消息后会保留最开始的 3 条和最近的 47 条中间部分用一条简短标记代替。开头通常保留了用户最初提出的任务和限制条件最近的消息则对应 Agent 当前正在处理的文件、报错或测试结果。中间的搜索过程虽然曾经有用距离当前任务已经比较远优先缩短的风险相对较低。裁剪时有一个边界需要额外处理模型发起工具调用和程序返回工具结果必须作为一组消息保留。例如Agent 想确认测试环境的数据库配置于是先请求读取配置文件助手调用 read_file参数为 config.py程序执行后将结果交回模型工具结果config.py 中 DATABASE_URL 为空这两条消息合在一起才构成一次完整的信息交换。模型知道自己读了哪个文件也知道从文件里得到了什么结论。如果压缩时只留下前一条调用记录模型会知道自己曾经读过config.py却不知道读取结果。它后续可能重复读取文件也可能在缺少依据的情况下继续推断。如果只留下后一条工具结果模型虽然看到了DATABASE_URL 为空却无法确认这段内容来自哪个文件、对应什么操作更难判断它是否仍然与当前任务有关。因此snip_compact()在确定裁剪边界时会检查边界附近是否存在这类调用与结果的配对关系。边界刚好落在两者之间时程序会向前或向后调整保证这组消息一起留下或者一起进入被压缩的历史。摘要能让任务继续丢掉的细节不会自动回来前三层压缩都不需要再调用模型。它们只是移动、删除或替换文本成本低也不会引入新的推理过程。经过这些处理后如果上下文仍然超过阈值程序才会调用compact_history()。这一步先把完整消息写入.transcripts/再请求模型生成摘要。摘要需要保留当前目标、重要发现、已修改文件、剩余工作和用户限制。随后原来的消息历史会被替换成一条摘要消息。defcompact_history(messages):write_transcript(messages)summarysummarize_history(messages)return[{role:user,content:f[Compacted]\n\n{summary},}]压缩后认证测试任务可能只剩下这样的上下文当前目标修复认证测试失败。 已确认token 配置缺少测试环境变量。 已修改tests/auth/test_token.py。 待完成运行 pytest tests/auth并检查相关配置是否影响其他测试。 用户限制不要修改生产环境配置。这足以支撑后续任务继续执行。不过完整历史已经不在模型可见的上下文里了。教学代码虽然保存了转录文件但没有提供让模型重新读取.transcripts/的工具。摘要漏掉的某个细节Agent 不会自动找回来。这也是摘要压缩的边界。摘要适合保留任务主线和关键结论无法替代完整证据。涉及文件内容、测试日志、接口返回值等细节时Agent 后续仍然可能需要重新读取文件、重新运行命令或者由系统额外恢复近期的关键内容。接口已经拒绝请求后系统还剩一次补救机会上下文阈值通常是估算值。教学代码通过字符数量估算消息体积它无法完全等同于模型实际计算的 token 数。再加上一轮工具调用可能突然返回大量内容程序有机会在压缩前就收到prompt_too_long。这时会进入reactive_compact()。它会保留最近几条消息把更早的历史交给模型总结然后重试请求。近期消息通常包含正在执行的工具调用和最新结果直接丢掉会让当前任务失去上下文。紧急压缩只允许有限次数重试。如果压缩后仍然超限继续重试没有意义只会不断消耗调用次数。仓库为这条路径设置了重试上限达到限制后抛出异常留给后续的错误恢复机制处理。这一点看起来很普通却是长任务系统必须具备的失败出口。压缩逻辑如果永远相信下一次会成功最终只会把一次接口错误变成循环调用。这套方案适合解决什么问题上下文压缩不会提升模型对代码的理解能力也不会让 Agent 永远记住所有细节。它解决的是长任务运行过程中的容量管理问题。对于持续读文件、反复运行测试、逐步修改代码的任务早期工具结果会不断失去价值。压缩机制负责回收这些内容占用的空间并尽可能留下任务目标、当前进度和可恢复入口。运行这一章的代码时可以重点观察三个现象python s08_context_compact/code.py先让 Agent 连续读取多个文件观察较早的工具结果是否被替换为占位信息。接着读取较多内容检查.task_outputs/tool-results/是否出现转存文件。最后进行一段较长对话观察终端是否出现[auto compact]或[reactive compact]。前者表示程序在调用模型前完成了主动压缩后者说明接口已经拒绝当前请求程序开始执行紧急处理。下一篇会讨论 Memory。上下文压缩会主动丢弃过程内容用户偏好、项目约束和重要决策也可能随着历史一起被缩短。Memory 要解决的是另一类问题哪些信息应该在压缩后继续保留哪些信息值得跨会话保存。

相关新闻

私有化视频会议系统/智能会议管理系统EasyDSS视频会议功能全方面解析

私有化视频会议系统/智能会议管理系统EasyDSS视频会议功能全方面解析

在企业数字化转型浪潮中,远程协作已成为日常办公的标配。然而,许多企业仍在为"会议系统难用、延迟高、需装插件、无法留存"等问题困扰。EasyDSS视频云平台将视频会议作为核心模块之一,以"高效协同、智能安全"为设计理念&…

2026/7/31 15:57:20 阅读更多 →
经导管主动脉瓣置换术(TAVR)技术原理与临床应用分析——以合肥高新心血管病医院临床实践为例

经导管主动脉瓣置换术(TAVR)技术原理与临床应用分析——以合肥高新心血管病医院临床实践为例

摘要经导管主动脉瓣置换术是结构性心脏病介入治疗领域的里程碑式技术。本文从技术原理、器械演进、临床适应症、手术流程、并发症防治等维度,系统分析TAVR技术的临床应用现状。并以合肥高新心血管病医院2026年7月完成的一例高危复杂TAVR病例为样本,探讨该…

2026/7/31 15:57:21 阅读更多 →
MySQL 读写分离有哪些坑?

MySQL 读写分离有哪些坑?

MySQL 读写分离有哪些坑? 引言读写分离是 MySQL 高并发架构中常见的优化策略,通过将读操作分散到多个从库,写操作集中在主库,从而缓解主库压力,提升系统吞吐量。然而,在实际应用中,读写分离并非…

2026/7/31 15:58:34 阅读更多 →

最新新闻

CM211-2电视盒子通刷固件实战:免拆卡刷与当贝桌面优化指南

CM211-2电视盒子通刷固件实战:免拆卡刷与当贝桌面优化指南

1. 项目背景与核心价值:为什么需要“通刷”固件?如果你手头有一台型号为CM211-2的运营商定制版电视盒子,大概率会和我当初一样,被它内置的臃肿系统搞得头疼。开机慢、广告多、预装应用无法卸载、存储空间告急,想装个自…

2026/7/31 15:58:16 阅读更多 →
清华西交大联手登上Nature子刊:Hyper-RAG用超图计算将大模型幻觉降低48%

清华西交大联手登上Nature子刊:Hyper-RAG用超图计算将大模型幻觉降低48%

← 行业趋势大语言模型(LLM)落地最大的拦路虎是什么?不是算力不够、不是参数量不够大,而是幻觉(hallucination)——模型一本正经地胡说八道。2026年5月,清华大学软件学院高跃团队联合西安交通大…

2026/7/31 15:58:16 阅读更多 →
Python列表查找全攻略:从in、index到性能优化与实战避坑

Python列表查找全攻略:从in、index到性能优化与实战避坑

1. 从“找东西”说起:为什么列表查找是Python的必修课我刚开始写Python那会儿,最常遇到的场景就是在一堆数据里找某个特定的值。比如,从一堆用户ID里找某个人的记录,或者在一长串日志条目里定位一个错误信息。那时候,我…

2026/7/31 15:58:16 阅读更多 →
Skills框架:通过校验重试机制提升AI输出稳定性与可预测性

Skills框架:通过校验重试机制提升AI输出稳定性与可预测性

上周在 GitHub 上看到一个项目,叫 Skills,作者是 Matt Pocock。点进去之前,我以为又是一个 AI 工具库,无非是把几个模型 API 封装一下,加点提示词模板。但仔细看完文档和代码结构后,我发现这个项目真正要解…

2026/7/31 15:58:16 阅读更多 →
猫抓浏览器扩展:一站式网页媒体资源嗅探下载终极指南

猫抓浏览器扩展:一站式网页媒体资源嗅探下载终极指南

猫抓浏览器扩展:一站式网页媒体资源嗅探下载终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到想保存网页上的精彩…

2026/7/31 15:58:16 阅读更多 →
Flowable流程引擎架构与核心表结构解析

Flowable流程引擎架构与核心表结构解析

1. Flowable流程引擎的核心架构解析Flowable作为一款轻量级业务流程引擎,其核心设计理念源于Activiti项目,但在性能优化和架构设计上做了大量改进。整个引擎的核心可以概括为"四大服务两大API"的架构模式。运行时服务(RuntimeServi…

2026/7/31 15:57:16 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻