
Prime Agent compact Skill 详解在 Python REPL 中主动调度上下文压缩让长任务不断流【免费下载链接】prime-agentA self-improving RLM agent for coding workflows and long-running autonomous tasks.项目地址: https://gitcode.com/GitHub_Trending/pr/prime-agent导读本文围绕 Prime Agent 内置的 compact skill 展开说明如何在 Python 内核kernel中直接查询上下文占用、主动请求压缩会话从而让长期运行的自主任务在上下文接近上限时平滑延续。读完本文你将掌握compact.status()/compact.run()的完整用法、压缩的实际调度时机与触发规则以及它背后与宿主/compact命令共用同一实现的源码原理。compact skill 是什么compact skill 是 Prime Agent 在 Python REPL内核侧暴露的上下文压缩控制接口。它的核心作用与/compact命令一致用一份高密度的摘要替换较早的对话历史释放上下文窗口使长任务可以继续执行而不是被迫提前收尾。该 skill 的元数据定义在 packages/coding-agent/skills/compact/SKILL.md 的 frontmatter 中name: compactdescription检查上下文使用情况并从 Python REPL 压缩对话。当上下文快满且仍有大量工作待完成时使用以便会话被摘要化后你Agent能继续工作而不是提前停止。从源码结构看这个 skill 采用宿主实现 内核薄封装的架构压缩逻辑本身运行在宿主侧即用户/compact命令背后的同一实现位于 packages/coding-agent/src/core/agent-session.ts 及其关联的 compaction 模块packages/coding-agent/skills/compact/src/compact/init.py 中只是两个轻量类型化包装函数通过通用的宿主桥接rlm.host_request把请求转发给宿主该 skill 打包为名为compact的 Python 包版本 0.1.0要求 Python 3.10见 packages/coding-agent/skills/compact/pyproject.toml。因此调用 compact skill 与在交互界面执行/compact触发的是同一套压缩管线只是入口从用户输入命令变成了内核中 Agent 自己的代码。快速上手从 Python REPL 调用compact skill 的使用方式非常直接直接在 Python REPL 中await两个异步函数即可await compact.status() await compact.run() await compact.run(keep the failing test names and the migration checklist)compact.status()查看当前上下文占用情况用于决定现在是否需要压缩compact.run()调度一次压缩compact.run(自定义指令)调度压缩并让摘要聚焦于剩余工作真正重要的内容例如保留失败测试名、迁移清单等关键信息。API 详解两个函数的完整语义如下await compact.status()返回一个描述当前上下文使用情况的 dict包含字段含义tokens当前已占用的 token 数context_window模型的上下文窗口大小percent占用百分比刚完成一次压缩后、在下一次模型响应之前为Nonescheduled是否已有一个被请求的压缩处于待执行状态即本 turn 内调用过compact.run且尚未执行在源码实现中packages/coding-agent/skills/compact/src/compact/init.pystatus()只是把compact.status请求类型转发给宿主async def status() - dict[str, Any]: Read current context usage... return await host_request(compact.status)await compact.run(instructionsNone)调度一次上下文压缩成功调度时返回{scheduled: True}当当前会话还没有可压缩的内容例如会话太短时返回{scheduled: False, reason: ...}例如测试所验证的reason: session is too short to compact见 packages/coding-agent/test/suite/agent-session-compact-skill.test.ts可选的instructions用于引导摘要生成这些指令会以高优先级传入摘要 prompt聚焦于剩余工作真正重要的信息。源码中的实现packages/coding-agent/skills/compact/src/compact/init.py会先做类型校验——instructions必须是str或None否则抛出TypeError——然后构造 payload 并把compact.run请求类型发给宿主async def run(instructions: str | None None) - dict[str, Any]: ... if instructions is not None and not isinstance(instructions, str): raise TypeError(finstructions must be str or None, got {type(instructions).__name__}) payload: dict[str, Any] {} if instructions is not None: payload[instructions] instructions return await host_request(compact.run, payload)行为规则理解压缩的调度时机SKILL.md 明确了三条关键规则理解它们才能正确使用这个 skill1. 压缩绝不在 cell 执行中途进行compact.run()只是调度压缩。压缩发生在当前 turn 结束时宿主在 turn 边界执行压缩随后自动以摘要 最近消息恢复resumeAgentAgent 继续执行原任务全程无需用户介入。从宿主侧看请求型压缩对应CompactionReason中的requested分支CompactionReason manual | threshold | overflow | requested定义于 packages/coding-agent/src/core/agent-session.ts并通过_pendingRequestedCompaction字段挂起待执行的请求同文件 L1285 附近。2. Python 内核在压缩期间保持持久化压缩针对的是对话历史而不是内核运行状态。变量、导入、以及你定义的辅助函数helpers在压缩后全部保留可以直接继续使用——这正是长任务不断流的关键保障。3. 在自然边界压缩每 turn 一个请求即可当上下文占用很高且仍有大量工作待完成时应在自然边界一个阶段结束、即将进入下一阶段发起压缩而不是变得惜字如金或提前返回给用户拿不准时就先查await compact.status()每个 turn 发一次run()就足够turn 结束前再次调用run()只会更新指令instructions不会产生多次压缩。源码级原理内核到宿主的两层桥接薄封装背后的rlm.host_requestcompact skill 的两个函数都没有实现压缩逻辑它们依赖 prime-agent-runtime/src/rlm/init.py 中的host_request()通用桥接。该函数把请求发送给宿主并等待回复有一个值得一提的细节请求类型type被放在 payload 的最后这样即使 payload 里含有type键也无法篡改请求被路由到的处理器{**(payload or {}), type: request_type}。宿主返回status: ok时取出result返回status: error时抛出RuntimeError。宿主侧的处理器与门控宿主在 packages/coding-agent/src/core/agent-session.ts 中注册了compact.run与compact.status两个内核宿主处理器。测试 packages/coding-agent/test/suite/agent-session-compact-skill.test.ts 以行为级验证了完整语义可作为功能契约参考场景行为turn 结束时的调度执行以reason: requested触发compaction_start/compaction_end事件随后自动继续会话过短返回{scheduled: false, reason: session is too short to compact}自动压缩被禁用手动请求的压缩仍然执行enabled: false不影响compact.runturn 被中止待执行的请求压缩被丢弃不产生压缩条目没有活跃 turncompact.run被拒绝reason 包含 no active turn溢出恢复上下文溢出overflow的强制压缩优先于待执行的请求压缩并把请求时的 instructions 一并带上手动/compact成功清除待执行的请求压缩状态手动/compact被扩展取消保留待执行的请求压缩状态与自动压缩的配合除了compact.run调度的请求型压缩宿主还会在上下文超过阈值时自动触发压缩threshold 型触发条件为contextTokens contextWindow - reserveTokens相关参数与/compact指令说明详见 packages/coding-agent/docs/compaction.md。compact skill 的价值在于Agent 可以在自动压缩尚未触发、但自己判断剩余工作量大时主动请求从而以更可控的节奏延续任务。相关配置compact skill 的启用开关compact skill 是否对模型可用由配置项compaction.agentCallable控制默认值为true即默认暴露该 skill 供模型请求压缩见 packages/coding-agent/src/core/settings-manager.ts 的return this.settings.compaction?.agentCallable ?? true;设为false时宿主不会注册compact.run处理器调用会抛出 the compact skill is disabled in this session 错误该行为同样有测试覆盖见 packages/coding-agent/test/suite/agent-session-compact-skill.test.ts。配置写在~/.prime/agent/settings.json或project-dir/.prime/agent/settings.json{ compaction: { enabled: true, reserveTokens: 16384, keepRecentTokens: 20000, agentCallable: true } }其中enabled/reserveTokens/keepRecentTokens控制自动压缩行为agentCallable控制本 skill 是否可用。若显式把agentCallable设为false模型将无法从内核发起压缩只能依赖自动压缩或用户手动/compact。实践建议在长任务中使用 compact skill综合 SKILL.md 的规则与源码行为推荐的使用模式如下阶段开始时先摸底进入可能很长的阶段前调用await compact.status()记录当前percent跨过自然边界时评估每个子任务完成后若percent较高且后续工作量大在自然边界调用await compact.run()带指令压缩用await compact.run(keep ...)指明摘要必须保留的关键信息失败测试名、迁移清单、待办列表等这些指令会直接影响摘要生成信任调度语义调用后无需等待压缩会在 turn 结束时发生宿主会自动携带摘要 最近消息恢复你内核中的变量与导入保持不变不要重复调度同一 turn 内再次调用run()只会更新指令因此保持每 turn 一次即可。这种内核内自主请求压缩的能力让 Prime Agent 的 Agent 可以在长时间自主任务中自我管理上下文避免在上下文耗尽时被迫提前结束或输出劣化——这正是 compact skill 在 packages/coding-agent/skills/compact/SKILL.md 中定位为长任务关键工具的原因。【免费下载链接】prime-agentA self-improving RLM agent for coding workflows and long-running autonomous tasks.项目地址: https://gitcode.com/GitHub_Trending/pr/prime-agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考