mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-10-26 18:55:22 +00:00
原实现对所有工具结果(含 read)在下一次请求即替换为约 4K 的首尾存根, 不看上下文压力,导致模型看不到大文件中段;后台逐条语义摘要又反复改写 历史、打碎 prompt 缓存。参照 Anthropic 上下文编辑、Manus 与 JetBrains 观察遮蔽研究重构为: - L2:上下文达到阈值时在 turn_end 批量提交 Pi 原生 context_edit,把最近 keepRecentTurns 轮之外的旧 toolResult 换成确定性占位符;trigger/target 回差与 minClearTokens 保证少触发、一次清够;原始条目保留,可经 context_tree_query 取回 - L3:空闲 agent_settled 且超过绝对阈值时调用一次 ctx.compact - 阈值按绝对 token 计并受窗口比例约束,默认针对 1M 窗口(DeepSeek V4.1 Flash):遮蔽 200K→100K、整段摘要 400K - 删除逐条存根、语义 worker、soft/hard/target 比例与自行取消 Pi 压缩的门控; Pi 原生阈值压缩保留为最终安全网 Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
31 lines
1.4 KiB
TypeScript
31 lines
1.4 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { performance } from "node:perf_hooks";
|
|
import { DEFAULT_CONFIG } from "../src/config.ts";
|
|
import { SegmentIndex } from "../src/segment-index.ts";
|
|
|
|
function message(index: number) {
|
|
return { role: "user", content: `message-${index}`, timestamp: index + 1 };
|
|
}
|
|
|
|
test("cached projection and append-only delta stay inside the hot-path budget", () => {
|
|
const index = new SegmentIndex("perf");
|
|
index.hydrate();
|
|
const messages = Array.from({ length: 10_000 }, (_, value) => message(value));
|
|
const params = { environmentHash: "env", environmentTokens: 2_000, contextWindow: 300_000, maskedResults: 0, reclaimedTokens: 0 };
|
|
index.project(messages, params);
|
|
|
|
const cacheStart = performance.now();
|
|
for (let iteration = 0; iteration < 1_000; iteration++) index.project(messages, params);
|
|
const cacheAverageMs = (performance.now() - cacheStart) / 1_000;
|
|
|
|
const appended = [...messages, message(10_000)];
|
|
const deltaStart = performance.now();
|
|
index.project(appended, params);
|
|
const deltaMs = performance.now() - deltaStart;
|
|
|
|
console.log(`cache-hit average ${cacheAverageMs.toFixed(3)}ms; delta projection ${deltaMs.toFixed(3)}ms`);
|
|
assert.ok(cacheAverageMs < 2, `cache-hit average ${cacheAverageMs.toFixed(3)}ms exceeded 2ms`);
|
|
assert.ok(deltaMs < 10, `delta projection ${deltaMs.toFixed(3)}ms exceeded 10ms`);
|
|
});
|