☰
pi_agent_rust 压缩算法解密:长对话如何智能裁剪上下文而不丢失关键信息?
2026/10/11 16:42:36 网站建设 项目流程
  • 人工智能
  • 大模型
  • AI Agent
  • 代码智能体
  • CLI
  • 开发工具
  • 工具调用
  • MCP Clients

【免费下载链接】pi_agent_rust

High-performance AI coding agent CLI written in Rust with zero unsafe code

项目地址:https://gitcode.com/gh_mirrors/pi/pi_agent_rust
点击查看免费下载

pi_agent_rust 是一个用 Rust 编写、零 unsafe 代码的高性能 AI 编程助手 CLI。它的上下文压缩(Compaction)算法专门解决长对话撑爆模型上下文窗口的问题:自动裁剪旧消息、生成结构化摘要,同时保住文件路径、任务进度等关键信息,让会话可以无限延长而不"失忆"。

一、为什么长对话需要"上下文压缩"

AI 模型有固定的上下文窗口(如 128K tokens)。在 pi_agent_rust 里,一次完整的编程会话会包含你的提问、助手的思考、工具调用和海量工具输出(读文件、跑命令的结果),token 消耗增长极快:

如果直接丢弃旧消息,模型就会忘记你之前改过哪些文件、卡在哪一步;如果全部保留,则会直接报"上下文超限"错误。pi_agent_rust 的思路是**"摘要 + 保留最近"**:旧消息压缩成一段结构化摘要,最近的消息原样保留,两者拼接后继续对话。

二、四步压缩流程:从触发到重建

整个算法实现在 compaction.rs,README 中也有完整流程图,见 Compaction Algorithm 章节。

1️⃣ 何时触发:自动阈值判断

每一轮对话结束后,算法会估算当前上下文占用的 token 数。当它达到上下文窗口 − reserve_tokens(默认约 8% 安全余量)时触发压缩,逻辑见 should_compact。

token 估算相当讲究:

  • 默认启用真实 BPE 分词表(O200k / Cl100k)精确计数,见 estimate_tokens;
  • 若 API 返回了真实 usage 数据,以实测值为准,估算值仅做校准对比 估算与实测漂移;
  • 图片按 1200 token/张、视频按 300 token/秒、音频按 32 token/秒折算 媒体 token 估算。

2️⃣ 在哪切:智能选择切割点

切割点不是随便切的,find_cut_point 有三条硬性规则:

  • 只在合法边界切:绝不把"工具调用"和"工具结果"这对消息拆开,否则会破坏对话结构;
  • 二分查找找到满足keep_recent_tokens(默认约 10% 窗口)的最大切割位置,保证最近上下文完整保留;
  • 回合优先:优先在完整的用户-助手回合边界切分;若预算不足被迫中途切断,会把被拆回合的前缀单独摘要,保留上下文衔接 回合前缀摘要提示词。

3️⃣ 怎么压:结构化摘要而非自由发挥

被裁掉的旧消息交给 LLM 生成固定格式的检查点摘要(提示词见 SUMMARIZATION_PROMPT),包含六大板块:

板块保留内容
Goal用户想完成的目标
Constraints & Preferences约束与偏好
Progress已完成 / 进行中 / 被阻塞
Key Decisions关键决策及理由
Next Steps下一步计划
Critical Context关键数据与引用

特别的是,它要求逐字保留文件路径、函数名和错误信息——这正是"不丢失关键信息"的核心。

4️⃣ 如何重建:摘要 + 文件轨迹落盘

摘要以Compaction条目写入会话 JSONL(含first_kept_entry_id锚点),下一轮构建上下文时按[摘要] + [保留区消息]顺序拼接 prepare_compaction。同时算法会从被摘要的消息中提取 read / write / edit 工具调用,把读过和改过的文件清单写进摘要细节,模型因此始终"记得"自己动过哪些文件。

📌 多次压缩时摘要会迭代更新:新摘要基于旧摘要增量合并,进度自动从"进行中"挪到"已完成",历史不重复、不遗忘 更新摘要提示词。

三、三种压缩模式:按需选择力度

模式定义见 AutoCompactionMode:

模式行为适用场景
Summary(默认)标准 LLM 摘要通用长会话
ShakeFirst先尝试零 LLM 调用的 shake:把 >512 字符的臃肿工具输出替换为单行存根,够省就直接省 shake 实现工具输出占大头、想省时间和费用
Aggressive保留的最近窗口减半,压缩更狠窗口紧张时快速腾空间

交互式模式下可手动触发:/compact、/compact shake、/compact aggressive,命令表见 README 命令参考。

四、隐私与性能细节

  • 隐私筛查:摘要发给 LLM 前,CompactionPrivacy 会扫描并替换已知的密钥与敏感值;
  • 后台执行:压缩被放到 后台 worker 运行,带冷却时间、超时和次数配额,不阻塞你的下一轮输入;
  • 零 unsafe 代码:整套算法以 Rust 严格安全语义编写,切割、查找过程无越界风险。

五、动手配置:三个常用参数

在配置文件中调整compaction对象即可,详细说明见 settings 文档:

{ "compaction": { "enabled": true, "reserve_tokens": 16384, "keep_recent_tokens": 20000 } }
参数作用
enabled开关自动压缩
reserve_tokens为模型回复预留的安全余量
keep_recent_tokens原样保留的最近消息 token 数

RPC 客户端也可随时下发{"type": "compact"}命令触发手动压缩,协议见 rpc.md。

总结

pi_agent_rust 的上下文压缩可以概括为一句话:"在合法的回合边界切一刀,把旧对话压成带文件轨迹的结构化检查点,最近的消息一字不动"。配合 shake 快速通道、隐私筛查与后台执行,它让长对话既省 token 又不失忆——这正是 AI 编程助手能够长时间连续工作的基础。想深入阅读,推荐从 compaction.rs 源码和 README 压缩算法章节 入手。

  • 人工智能
  • 大模型
  • AI Agent
  • 代码智能体
  • CLI
  • 开发工具
  • 工具调用
  • MCP Clients

【免费下载链接】pi_agent_rust

High-performance AI coding agent CLI written in Rust with zero unsafe code

项目地址:https://gitcode.com/gh_mirrors/pi/pi_agent_rust
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询