@geekbb: 为 Pi coding agent 提供纯算法化的会话压缩,无需 LLM 调用
摘要
pi-vcc 是一个开源工具,为 Pi coding agent 提供纯算法化的会话压缩,无需 LLM 调用即可实现 35-99% 的令牌缩减,并通过 vcc_recall 支持无损历史搜索。
查看缓存全文
缓存时间: 2026/06/18 10:12
为 Pi coding agent 提供纯算法化的会话压缩,无需 LLM 调用 https://t.co/TGcpQ9VQ1f
sting8k/pi-vcc
来源:https://github.com/sting8k/pi-vcc
pi-vcc
npm (https://www.npmjs.com/package/@sting8k/pi-vcc)
用于 Pi (https://github.com/badlogic/pi-mono) 的算法化会话压缩器。无需 LLM 调用——通过提取和格式化生成简洁的对话记录。灵感来源于 VCC (https://github.com/lllyasviel/VCC) (面向视角的会话编译器)。
演示
pi-vcc 演示
为什么选择 pi-vcc
| Pi 默认方式 | pi-vcc | |
|---|---|---|
| 方法 | LLM 生成的摘要 | 算法化提取,无需 LLM |
| 确定性 | 非确定性,可能产生幻觉 | 相同输入 = 相同输出,始终一致 |
| Token 缩减 | 不确定 | 实际会话 35-99%(长会话更高) |
| 压缩延迟 | 等待 LLM 调用 | 30-470ms,无 API 调用 |
| 压缩后的历史 | 消失——agent 只能看到摘要 | 主动 lineage 可通过 vcc_recall 搜索(支持 scope:"all") |
| 重复压缩 | 每次重写都有丢失风险 | 各 section 合并并累积 |
| 成本 | 每次摘要消耗 token | 零——无 API 调用 |
| 结构 | 自由形式散文 | 简洁对话记录 + 4个语义 section |
真实会话指标
在 ~/.pi/agent/sessions 下的真实会话 JSONL 上测量(字符数 = 渲染的消息文本)。
| 会话 | 消息数 | 压缩前 | 压缩后 | 缩减比例 | 耗时 |
|---|---|---|---|---|---|
| 会话 A | 2,943 | 997,162 | 7,959 | 99.2% | 64ms |
| 会话 B | 1,703 | 428,334 | 7,762 | 98.2% | 29ms |
| 会话 C | 1,657 | 424,183 | 9,577 | 97.7% | 54ms |
| 会话 D | 1,004 | 2,258,477 | 4,439 | 99.8% | 30ms |
| 会话 E | 486 | 295,006 | 11,163 | 96.2% | 30ms |
| 会话 F | 46 | 5,234 | 3,364 | 35.7% | 5ms |
| 会话 G | 27 | 8,595 | 2,489 | 71.0% | 2ms |
特性
- 无需 LLM——纯算法,零额外 API 成本
- 简洁对话记录——按时间顺序展示对话流程,每个工具调用折叠为单行并附
(#N)引用,文本截断保持紧凑 - 5 个语义 section——会话目标、文件与变更、提交、未完成上下文、用户偏好
- 有界合并——滚动 section 在合并后重新汇总,而非无限增长
- 无损召回——
vcc_recall直接读取原始会话 JSONL,因此在多次压缩后 active lineage 历史仍可搜索 - 作用域搜索——默认搜索 active lineage;使用
scope:"all"/scope:all可有意搜索所有 lineage - 正则搜索——
vcc_recall支持正则模式(hook|inject、fail.*build)以及按 OR 排序的多词查询 - 结果排序——搜索结果按词项相关性排序,罕见词权重高于常见词
/pi-vcc-recall——斜杠命令直接搜索历史,结果以可折叠消息显示并自动馈送给 agent 作为上下文- 后备截断——当 Pi 核心未返回任何可摘要内容时仍能工作
/pi-vcc——按需手动压缩
安装
pi install npm:@sting8k/pi-vcc
或从 GitHub 安装:
pi install https://github.com/sting8k/pi-vcc
或尝试不安装直接运行:
pi -e https://github.com/sting8k/pi-vcc
使用
安装后,pi-vcc 会注册一个 session_before_compact 钩子。
- 运行
/pi-vcc手动触发 pi-vcc 压缩。 - 可选保留语法:
/pi-vcc keep:3或/pi-vcc keep:3。 keep:1等同于默认行为。keep:0压缩所有内容,不留尾部。- 默认情况下,
/compact和自动阈值压缩仍通过 Pi 核心(基于 LLM)处理。在配置中设置overrideDefaultCompaction: true可让 pi-vcc 处理所有压缩路径。 - 压缩后要搜索较旧的 active lineage 历史,请使用
vcc_recall。 - 要有意搜索所有 lineage,请向
vcc_recall传递scope:"all"或运行/pi-vcc-recall scope:all。 - 要自行搜索并将结果馈送给 agent,请运行
/pi-vcc-recall [page:N]。 - 提示:输入
/recall,Pi 会自动补全为/pi-vcc-recall。
压缩工作原理
Pi 默认在最后一条用户消息处拆分会话。之后的部分——保留尾部——保持完整且不受影响。
使用 keep:N 时,pi-vcc 会保留该尾部中最后 N 条用户交互,并汇总切割点之前的所有内容。如果指定 keep:0,则压缩所有内容,不留尾部。
压缩后消息结构
[Session Goal]
- Fix the authentication bug in login flow
- [Scope change]
- Also update the session token refresh logic
[Files And Changes]
- Modified: src/auth/session.ts
- Created: tests/auth-refresh.test.ts
[Commits]
- a1b2c3d: fix(auth): refresh token after password reset
[Outstanding Context]
- lint check still failing on line 42
[User Preferences]
- Prefer Vietnamese responses
- Always run tests before committing
[user] Fix the auth bug, users can't log in after password reset
[assistant] Root cause is a missing token refresh after password reset...
* bash "bun test tests/auth.test.ts" (#12)
* edit "src/auth/session.ts" (#14)
* bash "bun test tests/auth.test.ts" (#16)
...(28 earlier lines omitted)
各 section 仅在相关内容存在时出现——例如没有 git 提交的会话就不会显示 [Commits]。
Sections:
| Section | 描述 |
|---|---|
[Session Goal] | 初始目标 + 范围变更(基于正则提取) |
[Files And Changes] | 工具调用中修改/创建的文件(有上限,路径修剪为公共根) |
[Commits] | 会话期间进行的 git 提交(最后 8 条,哈希 + 第一行) |
[Outstanding Context] | 未解决项——错误、未回答的问题 |
[User Preferences] | 从用户消息中正则提取(always、never、prefer……) |
| Brief transcript | 按时间顺序的对话流程——约 120 行的滚动窗口,工具调用折叠为单行并带 (#N) 引用 |
合并策略:
Session Goal、User Preferences:紧凑的粘性 sectionOutstanding Context:仅全新(每次压缩替换)Files And Changes、Commits:跨压缩的唯一并集- Brief transcript:滚动窗口,旧行丢弃
召回(无损历史)
Pi 的默认压缩会永久丢弃旧消息。压缩后,agent 只能看到摘要。vcc_recall 通过直接读取原始会话 JSONL 文件来绕过此限制。默认情况下,它只搜索当前活跃的对话 lineage,无论发生过多少次压缩。仅在你有意包含非 lineage 分支时,才使用 scope:"all"。
搜索查询支持正则和多词 OR 逻辑,并按相关性排序:
vcc_recall({ query: "auth token" }) // active-lineage OR 搜索,排序
vcc_recall({ query: "auth token", page: 2 }) // 分页(每页 5 条结果)
vcc_recall({ query: "hook|inject" }) // 正则模式
vcc_recall({ query: "fail.*build" }) // 正则模式
vcc_recall({ query: "auth token", scope: "all" }) // 搜索所有 lineage
手动斜杠命令:
/pi-vcc-recall auth token scope:all
浏览
不带查询时,返回最近 25 条记录的简短摘要:
vcc_recall()
vcc_recall({ scope: "all" }) // 浏览所有 lineage 的近期条目
展开
返回搜索中找到的特定索引的完整未截断内容:
vcc_recall({ expand: [41, 42] }) // active-lineage 展开
vcc_recall({ expand: [41, 42], scope: "all" }) // 跨所有 lineage 展开
典型工作流:搜索 → 找到相关条目索引 → 展开这些索引以获取完整内容。
某些工具结果在保存时已被 Pi 核心截断。
expand返回 JSONL 中的所有内容,但无法恢复 Pi 已经截掉的部分。
处理流程
- 标准化——原始 Pi 消息 → 统一块(user、assistant、tool_call、tool_result、thinking)
- 过滤噪音——去除系统消息、空块
- 构建切割——保留请求的用户交互尾部;压缩全部时使用
firstKeptEntryId: ""哨兵 - 构建 section——提取目标、文件路径、阻塞项、偏好
- 简要对话记录——按时间顺序的对话流程,工具调用折叠为单行,文本截断
- 格式化——渲染为带括号的 section + 对话记录
- 合并——如果存在之前的摘要:粘性 section 合并,易失 section 替换,对话记录滚动
配置
配置文件位于 ~/.pi/agent/pi-vcc-config.json(首次加载时自动生成安全默认值):
{
"overrideDefaultCompaction": false,
"debug": false
}
overrideDefaultCompaction(默认false):当为false时,pi-vcc 仅对/pi-vcc命令生效;/compact和自动阈值压缩仍通过 Pi 核心处理。设为true可使 pi-vcc 处理所有压缩路径。debug(默认false):当为true时,每次压缩会将详细信息写入/tmp/pi-vcc-debug.json——消息计数、切割边界、摘要预览、sections。
相关项目
- VCC (https://github.com/lllyasviel/VCC)——原始的保留对话记录的会话编译器
- Pi (https://github.com/badlogic/pi-mono)——本扩展所面向的 AI 编程 agent
许可证
MIT
相似文章
@binghe: 我最近已经是 Pi Agent 的重度使用用户了。。。越用越喜欢。 Pi 可串联多 skill 完成复杂任务,本地 Agent 更有实用价值! Pi Agent 系统提示词不到 1500 字,仅为 Claude Code 的 1/13 左…
用户分享对 Pi Agent 的深度使用体验,认为其提示词简短、响应快、token消耗低,优于 Claude Code。
@9hills: 经过好几周的摸索和各种尝试,pi agent 的配置基本稳定,之前发了一个 list,没有解释不太友好,这次发个全量带注释的。 避雷:如果需要开箱即用的 Coding Agent,请不要用 Pi,Claude Code/Codex 更适合…
作者分享了pi agent的稳定配置(全量带注释),并提醒如果需要开箱即用的Coding Agent,Claude Code/Codex更适合。
@vintcessun: 发现新思路:编码 agent 原来可以轻到这个程度。16MB 内存、0% 空闲 CPU、26MB 二进制——这数据在 agent 圈里有点离谱。 它用 Rust 硬怼,17k LoC 就把所有标准工具、权限系统、会话管理、MCP 都塞进去…
Zerostack 是一个用 Rust 编写的极简编码 agent,仅消耗 16MB 内存和 26MB 二进制,通过 feature gate 实现轻量化,支持多种提供商和工具。
@GitTrend0x: AI Agent Token 压缩 60-95% 开源神器 https://github.com/chopratejas/headroom… 这就是 Headroom,6.7k star LLM Token 终极压缩神器!一句话干翻所有 …
Headroom 是一个开源工具,可将 AI Agent 读取的工具输出、日志、RAG 片段等压缩 60-95%,同时保持答案质量不变,支持可逆压缩和跨 Agent 共享记忆。
@WWTLitee: 现在很多 coding agent 一碰编辑器、浏览器、LSP 这些真实工程环境,很容易卡住 oh-my-pi 走的是另一条路。它不满足于让 agent 待在终端里聊天,直接把哈希锚点编辑、LSP、Python、浏览器、subagents…
oh-my-pi 是一个开源的 coding agent,将哈希锚点编辑、LSP、Python、浏览器、subagents 等多种能力集成到同一工作台中,提供开箱即用的完整 IDE 接入,目前已有 5.8k stars。