Claw Compactor - Token 压缩省钱神器
约 1235 字大约 4 分钟
2026-03-07
Token 压缩省钱神器 - 使用 AST 剪枝技术压缩 Prompt,在不损失语义的情况下减少 50% Token 使用,直接降低 API 费用。
核心特性
AST 剪枝
- 抽象语法树分析
- 智能代码压缩
- 保留关键信息
- 移除冗余内容
反向代理模式
- 作为 LLM API 中间件
- 透明压缩处理
- 无需修改代码
- 即插即用
语义保留
- 压缩率 50%+
- 语义不损失
- 上下文完整
- 可读性保持
成本优化
- 直接降低 API 费用
- 实时压缩统计
- 成本节省报告
- ROI 可视化
快速开始
安装
# 使用 npm
npm install -g claw-compactor
# 使用 yarn
yarn global add claw-compactor
# 从源码安装
git clone https://github.com/claw-compactor/claw-compactor.git
cd claw-compactor
npm install
npm run build配置
创建 compactor.config.js:
module.exports = {
// 监听端口
port: 8080,
// 上游 LLM API
upstream: {
anthropic: 'https://api.anthropic.com',
openai: 'https://api.openai.com',
},
// 压缩配置
compression: {
enabled: true,
level: 'aggressive', // 'conservative', 'balanced', 'aggressive'
preserveComments: false,
minifyWhitespace: true,
},
// 统计配置
analytics: {
enabled: true,
logPath: './logs/compression.log',
},
};启动
# 启动代理服务器
claw-compactor start --config compactor.config.js
# 指定端口
claw-compactor start --port 8080
# 开发模式
claw-compactor dev使用
# 修改 OpenClaw 配置,将 API 端点指向 Compactor
export ANTHROPIC_API_URL=http://localhost:8080/v1
# 正常使用 OpenClaw,Compactor 会自动压缩
openclaw chat "帮我分析这段代码"技术原理
AST 剪枝算法
import * as parser from '@babel/parser';
import traverse from '@babel/traverse';
import generate from '@babel/generator';
class ASTCompactor {
compress(code: string): string {
// 解析为 AST
const ast = parser.parse(code, {
sourceType: 'module',
plugins: ['typescript', 'jsx'],
});
// 遍历并剪枝
traverse(ast, {
// 移除注释
Comment(path) {
path.remove();
},
// 简化变量名
Identifier(path) {
if (this.canMinify(path)) {
path.node.name = this.minifyName(path.node.name);
}
},
// 移除未使用的导入
ImportDeclaration(path) {
if (!this.isUsed(path)) {
path.remove();
}
},
});
// 生成压缩后的代码
const { code: compressed } = generate(ast, {
compact: true,
minified: true,
});
return compressed;
}
}语义保留策略
class SemanticPreserver {
// 保留关键信息
preserveKeyInfo(ast: AST): AST {
const keyNodes = [
'FunctionDeclaration',
'ClassDeclaration',
'ExportDeclaration',
];
traverse(ast, {
enter(path) {
if (keyNodes.includes(path.type)) {
// 标记为关键节点,不压缩
path.node.preserved = true;
}
},
});
return ast;
}
// 保留类型信息
preserveTypes(ast: AST): AST {
traverse(ast, {
TSTypeAnnotation(path) {
// 保留类型注解
path.skip();
},
});
return ast;
}
}压缩效果
代码压缩示例
压缩前 (1250 tokens):
// 这是一个用户管理类
// 提供用户的增删改查功能
class UserManager {
private users: User[] = [];
/**
* 添加新用户
* @param user 用户对象
* @returns 是否添加成功
*/
public addUser(user: User): boolean {
if (this.validateUser(user)) {
this.users.push(user);
return true;
}
return false;
}
// ... 更多方法
}压缩后 (580 tokens):
class UserManager{private u:User[]=[];public addUser(u:User):boolean{if(this.validateUser(u)){this.u.push(u);return true}return false}}压缩统计
| 内容类型 | 原始 Tokens | 压缩后 Tokens | 压缩率 |
|---|---|---|---|
| 代码文件 | 5000 | 2300 | 54% |
| 文档 | 3000 | 1600 | 47% |
| 对话历史 | 2000 | 1100 | 45% |
| 平均 | - | - | 50% |
功能特性
智能压缩模式
// 保守模式 - 只移除注释和空白
const conservative = compactor.compress(code, {
mode: 'conservative',
removeComments: true,
minifyWhitespace: true,
});
// 平衡模式 - 适度压缩
const balanced = compactor.compress(code, {
mode: 'balanced',
removeComments: true,
minifyWhitespace: true,
shortenVariables: true,
});
// 激进模式 - 最大压缩
const aggressive = compactor.compress(code, {
mode: 'aggressive',
removeComments: true,
minifyWhitespace: true,
shortenVariables: true,
removeUnused: true,
});实时统计
// 获取压缩统计
const stats = compactor.getStats();
console.log(`
总请求数: ${stats.totalRequests}
总节省 Tokens: ${stats.tokensSaved}
节省费用: $${stats.costSaved}
平均压缩率: ${stats.avgCompressionRate}%
`);成本分析
// 成本计算
const costAnalysis = compactor.analyzeCost({
model: 'claude-3-5-sonnet-20241022',
inputTokens: 10000,
outputTokens: 2000,
});
console.log(`
原始成本: $${costAnalysis.originalCost}
压缩后成本: $${costAnalysis.compressedCost}
节省: $${costAnalysis.saved} (${costAnalysis.savedPercent}%)
`);适用场景
高频调用
- Agent 频繁读取大文件
- 批量代码分析
- 持续集成场景
成本敏感
- API 费用过高
- 预算有限的项目
- 个人开发者
大规模部署
- 企业级应用
- 多用户平台
- SaaS 服务
部署方案
Docker 部署
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
EXPOSE 8080
CMD ["node", "dist/index.js"]Kubernetes 部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: claw-compactor
spec:
replicas: 3
template:
spec:
containers:
- name: compactor
image: claw-compactor:latest
ports:
- containerPort: 8080
env:
- name: COMPRESSION_LEVEL
value: "balanced"性能指标
| 指标 | 数值 |
|---|---|
| 压缩延迟 | < 50ms |
| 吞吐量 | 1000+ req/s |
| 内存占用 | ~200MB |
| CPU 占用 | 10-20% |
与其他方案对比
vs 手动优化
- 手动优化耗时费力,Compactor 自动化
- 手动优化容易出错,Compactor 保证语义
- Compactor 可持续优化
vs 其他压缩工具
- 通用压缩工具不理解代码语义
- Compactor 专为 LLM Prompt 优化
- 压缩率更高,效果更好
相关链接
- GitHub: claw-compactor/claw-compactor
- 文档: 使用文档
- 在线演示: demo.claw-compactor.dev
- 问题反馈: Issues
贡献
欢迎编译器和 AST 相关的贡献!
# 克隆仓库
git clone https://github.com/claw-compactor/claw-compactor.git
# 安装依赖
npm install
# 运行测试
npm test
# 构建
npm run build许可证
MIT License - 详见 LICENSE