- 人工智能
- 大模型
- AI Agent
- 代码智能体
- CLI
- 开发工具
- 工具调用
- MCP Clients
【免费下载链接】pi_agent_rust
High-performance AI coding agent CLI written in Rust with zero unsafe code
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
相关推荐
ok-ww 鸣潮后台自动战斗指南:一键日常+声骸刷取,简单教程实现后台挂机
ok ww 鸣潮后台自动战斗指南:一键日常+声骸刷取,简单教程实现后台挂机 ok ww(ok wuthering waves)是一个基于图像识别的开源鸣潮自动化
GUI 自动化计算机视觉RPA人工智能LLMLingua压缩质量评估:如何确保关键信息不丢失
LLMLingua压缩质量评估:如何确保关键信息不丢失 LLMLingua作为微软推出的提示压缩神器,能够实现高达20倍的压缩率,但最令人关注的问题始终是:在如
人工智能大模型NLPRAG提示工程OpenClaw 如何理解并调整会话压缩 Compaction,让长对话不超上下文?
OpenClaw 如何理解并调整会话压缩 Compaction,让长对话不超上下文? 每个模型都有上下文窗口(context window),即一次能处理的最大
AI 应用AI Agent交互助手后端即时通讯网关
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考