pi-compaction-recall0.1.6
Lexical recall for Pi's compacted history, with automatic locators and bounded grep/expand tools
Untested on omp
This is a pi package. No one has reported whether it works on omp yet. If you try it, add your result below.
Reports 0
No reports yet.
Readme
compaction-recall
一个让 AI agent 从已压缩对话中找回细节的扩展。
摘要可能丢掉名字、数字和原话。compaction-recall 让模型搜索当前分支的原始消息,再展开相关证据,不替换 agent 自身的压缩机制。
- 本地内存检索:SQLite FTS5 在 Node worker 中运行,不持久化索引,不需要 embedding 服务,也不额外调用模型。
- 多语言词面检索:英文词干、中日文双字索引,其他文字按整词索引,IP、版本号这类点号串也能整串精确匹配;全角、半角写法经 NFKC 归一后互通。可选 jieba 长词排名,在已有命中中优先返回相关记录。
- 两种模式:
full提供自动历史提示和三个工具;lite只保留 grep 与原文展开,不启动索引或 worker。
安装
目前支持 Pi,其他 agent 适配计划中。
Pi
需要 Pi 和 Node.js >=24.18.0,已在 Pi SDK 1.0.0 上测试。
从 npm 安装:
pi install npm:pi-compaction-recall
配置文件位于 Pi profile 的 agent 插件目录:$PI_CODING_AGENT_DIR/extensions/compaction-recall.json(默认:~/.pi/agent/extensions/compaction-recall.json)。配置文件不会自动生成,需要调整时手动创建;不创建则使用默认值或环境变量。
工具
full 模式会在回答前附上简短的历史定位提示,由模型决定是否继续搜索或展开。
| 工具 | 作用 |
|---|---|
history_recall |
用概念组、替代词和排除词检索已压缩历史。 |
history_expand |
按 ID 读取原始条目,可包含相邻条目并翻页。 |
history_grep |
独立使用 JavaScript 正则表达式搜索历史。 |
配置
未填项用默认值,环境变量优先于配置文件,修改后重载。
| 配置项 | 默认值 | 说明 | 环境变量覆盖 |
|---|---|---|---|
mode |
"full" |
full 提供自动提示和三个工具;lite 只保留 grep/expand。 |
COMPACTION_RECALL_MODE(full/lite) |
jieba |
true |
按中文长词命中重排已有 FTS 候选,先排序再分页。 | COMPACTION_RECALL_JIEBA(on/off) |
autoGate |
280 |
用户消息超过此长度时,按长任务指示处理,跳过自动召回以避免带入无关历史;模型仍可主动调用工具查询(汉字计 2,其余码点计 1)。 | COMPACTION_RECALL_AUTO_GATE |
snippetBudget |
240 |
控制自动提示和 history_recall 每条结果展示的原文片段长度,越大允许展示的片段越长(汉字计 2,其余码点计 1)。 |
COMPACTION_RECALL_SNIPPET_BUDGET |
recallTimeoutMs |
5000 |
主动 recall 超时门槛,单位毫秒,不能抢占 native MATCH。 | COMPACTION_RECALL_QUERY_TIMEOUT_MS |
preindex.userCycles |
10 |
完成多少轮用户交互后预热,范围 1–100,两个预热门槛满足任一即触发。 |
COMPACTION_RECALL_PREINDEX_TURNS |
preindex.toolRounds |
10 |
完成多少批工具调用后预热,范围 1–100,同批并行调用只计一次。 |
COMPACTION_RECALL_PREINDEX_TOOL_ROUNDS |
trace |
false |
记录带内容的 recall 诊断,需同时指定计时文件,日志应私密保存。 | 仅文件配置 |
COMPACTION_RECALL_TIMING_FILE |
未设置 | JSONL 计时日志路径,不设则不记录计时。 | 仅环境变量 |
检索、预热和 trace 配置只对 full 模式生效。细节见 配置与行为参考。
范围与隐私
- 只搜索当前分支的已压缩历史,不跨会话或被放弃的分支。
- 索引用户/助手正文及助手工具调用名和参数,不索引思考内容、图片、工具结果正文或压缩摘要;可读的工具结果仍可按 ID 展开。
- 遵循分支内的上下文编辑:省略的条目不可见,替换内容会遮住原文。
- 提示和工具结果会进入模型上下文,可能发送给模型服务商;
lite只关闭自动提示,不阻止主动检索的历史被发送。
查不到不代表从未提到,重要信息应展开原文核实。诊断 trace 可能包含对话内容,不应公开上传。
评测
评测使用 LongMemEval 的部分题目。仓库包含 16 道中文题面译文、来源标识、处理说明、结果指标和复现脚本;原始语料及其他完整评测输入需另行获取。
答题模型:gpt-6-luna(high)。表中为答对题数 / 总题数,DEV8 和 HARD8 各 8 题。
历史最佳
| 模式 | DEV8 | HARD8 | 峰值合计 |
|---|---|---|---|
| Pi 原生 | 2/8 | 0/8 | 2/16 |
| lite | 2/8 | 0/8 | 2/16 |
| full | 8/8 | 3/8 | 11/16 |
随机测试
固定英文 LongMemEval_M 题集上的单轮实测。原生基线仅使用压缩后保留的上下文,不提供历史检索工具。
| 模式 | DEV8 | HARD8 | 合计 |
|---|---|---|---|
| Pi 原生 | 0/8 | 0/8 | 0/16 |
| lite | 2/8 | 0/8 | 2/16 |
| full | 7/8 | 3/8 | 10/16 |
这是小规模开发集成绩,不代表完整 LongMemEval 跑分或稳定召回准确率。
运行命令和输入要求见 benchmark 指南。
开发
npm ci --ignore-scripts
npm run check
PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s test -p 'test_*.py'
测试使用合成数据与隔离的 agent 目录。真实评测需要外部数据和模型服务配置,可能产生模型 API 费用。