第一篇:每次 API 调用前扔掉 43% Token,我开源了一个 AI 提示词瘦身工具
一个用 Python 写的 Prompt 精简库,40+ 条冗余规则 + LLM 智能压缩,每次调用前自动剃掉无效 Token。
为什么需要这个工具?
每次调 GPT-4o、Claude、DeepSeek,你是不是也这样:
- "嗯那个我想说的是..." → 5 个 Token 纯浪费
- "Basically, I just wanted to mention that..." → 8 个 Token 毫无意义
- "求求了、帮帮忙、拜托拜托" → 对模型没用,但花钱是真的
我统计了自己一个月的 API 调用,平均 38% 的 Token 是冗余的 。按 GPT-4o 的 2.50/1Minput算,每个月白白烧掉 4。看着不多,但如果你每天调 1000 次,一年就是 $180+。
更要命的是,提示词越长,响应也越慢。那能不能在发请求之前,自动把这些废话过滤掉?
于是 PromptSlim 诞生了。
核心思路
在 client.chat.completions.create() 之前,插入一个轻量级的文本分析层:
用户输入 → 冗余检测(40+ 规则)→ 代码保护 → LLM 二次压缩 → 发送 API
三个关键设计:
- 规则引擎前置:先跑 40+ 条正则,0 Token 消耗剃掉常规冗余
- 代码块保护:检测到 Python/JS/Go 代码自动跳过,绝不乱改
- LLM 语义压缩:规则处理后,按需调用轻量模型做精细压缩
5 分钟上手
bash
pip install promptslim
命令行
bash
# 直接精简
echo "嗯那个我想说的是这个功能非常非常好用对吧" | promptslim slim
# 统计 Token 数
promptslim count -i prompt.txt
# 智能压缩(LLM 二次处理)
promptslim smart -i long_prompt.txt --api-key YOUR_KEY
# 对比精简效果
promptslim compare -i before.txt -o after.txt
Python API
python
from promptslim import quick_slim
# 一行搞定
report = quick_slim("嗯那个我想说的是这个功能非常非常好用对吧")
print(f"节省 {report.savings_pct}% Token")
# 批量处理
from promptslim import slim_batch
results = slim_batch(["prompt1", "prompt2", "prompt3"])
for r in results:
print(f"节省 {r.savings_pct}%")
效果实测
| 场景 | 原始 Token | 精简后 | 节省 |
|---|---|---|---|
| 中文口语化提示词 | 48 | 27 | 43.8% |
| 英文冗余(basically/just/very) | 27 | 24 | 11.1% |
| 带代码块的技术问题 | 118 | 118 | 0%(代码被保护) |
| 混合中英文长文 | 350 | 210 | 40.0% |
| 礼貌用语堆砌 | 85 | 38 | 55.3% |
代码块保护是最重要的安全机制。你绝不希望 AI 精简工具把你的 def quick_sort(arr) 变成 def sort(arr)。
技术架构
python
# 核心流程(简化版)
def slim(prompt: str) -> SlimReport:
# 1. 提取并保护代码块
code_blocks, placeholder = extract_code_blocks(prompt)
# 2. 应用 40+ 条冗余规则
for rule in REDUNDANCY_RULES:
prompt = rule.apply(prompt)
# 3. 可选:LLM 语义压缩
if use_llm:
prompt = llm_compress(prompt)
# 4. 还原代码块
prompt = restore_code_blocks(prompt, code_blocks)
return SlimReport(original_tokens, slimmed_tokens, savings_pct)
每条规则是一个简单的正则替换:
python
# 中文冗余
("(嗯|那个|就是说|我想说的是)", ""),
("(非常|特别|十分)非常", "非常"),
("(可以|能)(够|以)", r"\1"),
("(帮助|帮)(你|我|我们)", r"\1助"),
# 英文冗余
("basically,?\s*", ""),
("I just wanted to mention that\s*", ""),
("in my opinion,?\s*", ""),
("very very", "very"),
适用场景
| ✅ 适用 | ❌ 不适用 |
|---|---|
| 日常聊天式提示词 | 精确的 few-shot 示例 |
| 多轮对话上下文累积 | System prompt(需保持完整) |
| 用户填写的长表单内容 | 法律/医疗等精确措辞 |
| 批量处理大量 Prompt | 已精心优化的提示词 |
和竞品对比
| 工具 | 规则引擎 | LLM 压缩 | 代码保护 | 离线 |
|---|---|---|---|---|
| PromptSlim | ✅ 40+ 规则 | ✅ 可选 | ✅ | ✅ |
| 手动删减 | ❌ | ❌ | --- | --- |
| 用 GPT 精简 | ❌ | ✅ | ❌ | ❌ |
下一步
PromptSlim 在 GitHub 开源,MIT 协议:
如果你每天调 API 超过 100 次,用它能直观感受到 Token 消耗下降。有问题或建议直接提 Issue。