app / docs /testing /context_compression_test_plan.md
AZILS's picture
Upload 86 files
852e525 verified

专业版模型 1.5/2.5 Pro 自动对齐与分流测试 (v4.1.32)

测试目标

验证三层渐进式上下文压缩功能的正确性、稳定性和成本优化效果。

前置准备

  1. 启动应用

    cd /Users/lbjlaq/Desktop/xin
    npm run tauri dev
    
  2. 启用调试日志

    export RUST_LOG=debug
    
  3. 准备测试账号

    • 至少 1 个 Google 账号(用于 Gemini API)
    • 确保账号有足够配额

测试场景

场景 1:Layer 1 工具消息裁剪 (60% 压力)

目标:验证工具消息智能裁剪功能

步骤

  1. 使用 Claude Code CLI 或 Cherry Studio
  2. 发起一个需要多次工具调用的任务(如代码搜索、文件读取)
  3. 持续对话直到触发 60% 上下文压力

预期结果

  • 日志中出现 [Layer-1] Tool trimming triggered
  • 保留最近 5 轮工具交互
  • 删除更早的工具消息
  • 无 400 错误
  • 响应速度正常

验证命令

# 查看日志
tail -f ~/Library/Application\ Support/com.antigravity.tools/logs/antigravity.log | grep "Layer-1"

场景 2:Layer 2 Thinking 压缩 (75% 压力)

目标:验证 Thinking 内容压缩 + 签名保留

步骤

  1. 使用 Claude 4.5 Opus/Sonnet Thinking 模型
  2. 发起复杂推理任务(如代码重构、算法设计)
  3. 持续对话直到触发 75% 上下文压力

预期结果

  • 日志中出现 [Layer-2] Thinking compression triggered
  • Thinking 块文本被压缩为 "..."
  • signature 字段完整保留
  • 最近 4 条消息不被压缩
  • 无 400 签名错误

验证命令

# 查看签名保留情况
tail -f ~/Library/Application\ Support/com.antigravity.tools/logs/antigravity.log | grep -E "(Layer-2|signature)"

场景 3:Layer 3 Fork 会话 + XML 摘要 (90% 压力)

目标:验证 XML 摘要生成和会话 Fork

步骤

  1. 使用任意模型进行超长对话
  2. 持续对话直到触发 90% 上下文压力

预期结果

  • 日志中出现 [Layer-3] Critical context pressure
  • 调用 gemini-2.5-flash-lite 生成 XML 摘要
  • 创建新的消息序列:[User: XML摘要] + [Assistant: 确认] + [用户最新消息]
  • 压缩率 86-97%
  • 无 Prompt Cache 破坏
  • 签名链完整

验证命令

# 查看 Layer 3 触发和摘要生成
tail -f ~/Library/Application\ Support/com.antigravity.tools/logs/antigravity.log | grep -E "(Layer-3|XML summary|Fork)"

场景 4:渐进式触发测试

目标:验证三层压缩的渐进式触发机制

步骤

  1. 从空对话开始
  2. 持续对话,观察压缩层级的触发顺序

预期结果

  • 触发顺序:Layer 1 (60%) → Layer 2 (75%) → Layer 3 (90%)
  • 每次压缩后重新估算 Token 用量
  • 日志中清晰记录每层的触发和效果

验证命令

# 查看所有层级的触发
tail -f ~/Library/Application\ Support/com.antigravity.tools/logs/antigravity.log | grep -E "Layer-[123]"

场景 5:错误处理测试

目标:验证 Layer 3 失败时的容错机制

步骤

  1. 临时禁用 Gemini 账号或网络
  2. 触发 Layer 3 压缩

预期结果

  • Layer 3 失败时返回 BAD_REQUEST 错误
  • 错误消息友好:Context too long and automatic compression failed
  • 提示用户使用 /compact 或切换模型

验证命令

# 查看错误处理
tail -f ~/Library/Application\ Support/com.antigravity.tools/logs/antigravity.log | grep -E "(Layer-3.*failed|BAD_REQUEST)"

性能验证

Token 成本节省

测试方法

  1. 记录压缩前的 Token 用量(从日志中提取)
  2. 记录压缩后的 Token 用量
  3. 计算节省比例

预期结果

  • Layer 1: 60-90% 节省
  • Layer 2: 70-95% 节省
  • Layer 3: 86-97% 节省

响应速度

测试方法

  1. 使用 time 命令测量响应时间
  2. 对比压缩前后的响应速度

预期结果

  • Layer 1/2: 响应速度无明显变化
  • Layer 3: 首次摘要生成可能增加 2-5 秒,后续请求正常

兼容性测试

客户端兼容性

测试以下客户端:

  • ✅ Claude Code CLI
  • ✅ Cherry Studio
  • ✅ Cursor
  • ✅ Python OpenAI SDK
  • ✅ Kilo Code

模型兼容性

测试以下模型:

  • ✅ Gemini 3 Flash
  • ✅ Gemini 3 Pro High
  • ✅ Claude 4.5 Sonnet
  • ✅ Claude 4.5 Opus Thinking

回归测试

签名链完整性

验证点

  • Layer 2 压缩后签名不丢失
  • Layer 3 Fork 后签名正确恢复
  • 无 400 签名错误

工具调用链

验证点

  • 工具调用在压缩后仍能正常工作
  • 工具结果正确传递
  • 无工具调用中断

日志分析

关键日志模式

# Layer 1 触发
grep "Layer-1.*Tool trimming" antigravity.log

# Layer 2 触发
grep "Layer-2.*Thinking compression" antigravity.log

# Layer 3 触发
grep "Layer-3.*Fork successful" antigravity.log

# Token 节省统计
grep "Compression result.*saved" antigravity.log

测试报告模板

## 测试结果

### 场景 1: Layer 1 工具消息裁剪
- [ ] 触发成功
- [ ] 保留最近 5 轮
- [ ] 无 400 错误
- [ ] 响应速度正常

### 场景 2: Layer 2 Thinking 压缩
- [ ] 触发成功
- [ ] 签名完整保留
- [ ] 无签名错误
- [ ] 压缩率达标

### 场景 3: Layer 3 Fork 会话
- [ ] 触发成功
- [ ] XML 摘要生成
- [ ] 压缩率 86-97%
- [ ] 无 Cache 破坏

### 场景 4: 渐进式触发
- [ ] 顺序正确 (1→2→3)
- [ ] Token 重新估算
- [ ] 日志清晰

### 场景 5: 错误处理
- [ ] 失败时友好提示
- [ ] 无崩溃
- [ ] 建议明确

### 性能验证
- Token 节省: ____%
- 响应速度: 正常/慢 (___ms)

### 兼容性
- Claude Code: ✅/❌
- Cherry Studio: ✅/❌
- Cursor: ✅/❌
- Python SDK: ✅/❌

### 回归测试
- 签名链完整: ✅/❌
- 工具调用正常: ✅/❌

## 问题记录

(记录测试中发现的问题)

## 结论

(总体评价和建议)

快速测试脚本

#!/bin/bash
# 快速测试三层压缩

echo "=== 测试 Layer 1 (工具裁剪) ==="
# 使用 Claude Code 执行多次文件搜索
claude "请搜索项目中所有 .rs 文件,然后读取其中 5 个文件的内容"

echo "=== 测试 Layer 2 (Thinking 压缩) ==="
# 使用 Thinking 模型进行复杂推理
claude --model claude-opus-4-5-thinking "请详细分析这段代码的性能瓶颈并提出优化方案"

echo "=== 测试 Layer 3 (Fork 会话) ==="
# 超长对话触发 Fork
for i in {1..20}; do
  claude "继续上一个话题,请提供更多细节 (第 $i 轮)"
done

echo "=== 查看日志 ==="
tail -100 ~/Library/Application\ Support/com.antigravity.tools/logs/antigravity.log | grep -E "Layer-[123]"

注意事项

  1. 测试环境:确保在干净的环境中测试,避免其他因素干扰
  2. 日志级别:必须设置 RUST_LOG=debug 才能看到详细日志
  3. 账号配额:测试前确保账号有足够配额
  4. 备份数据:测试前备份重要数据
  5. 版本确认:确认运行的是 v4.1.32 版本

问题排查

问题 1:Layer 1 未触发

  • 检查对话是否达到 60% 压力
  • 查看 Token 估算是否准确

问题 2:Layer 2 签名丢失

  • 检查 compress_thinking_preserve_signature 函数
  • 验证签名提取逻辑

问题 3:Layer 3 摘要失败

  • 检查 Gemini 账号是否可用
  • 验证 call_gemini_sync 函数
  • 查看上游 API 错误

问题 4:400 错误

  • 检查签名链是否完整
  • 验证工具调用参数
  • 查看上游 API 响应

联系方式

如有问题,请在 GitHub 提 Issue: https://github.com/lbjlaq/Antigravity-Manager/issues