在大语言模型(LLM)应用中,提示词过长不仅会增加 API 调用成本、延长响应时间,还可能因超出上下文窗口(如 32K、128K Token)导致关键内容被截断,严重影响输出质量。因此,提示词压缩(Prompt Compression)成为高阶提示工程的核心技能。本文系统介绍七类高效压缩技巧,助你在保留核心指令的前提下,显著缩短 Prompt 长度。

一、为什么需要压缩提示词?
| 问题 | 后果 |
|---|---|
| Token 超限 | 模型看不到完整指令或最新用户输入 |
| 成本上升 | 输入 Token 直接计入计费(如 GPT-4o 每百万 token $5) |
| 推理延迟 | 更长上下文 = 更高计算开销 |
| 注意力稀释 | 关键指令被冗余信息淹没 |
💡 经验法则:每节省 1000 Token,可降低约 5%~10% 的延迟与成本。
二、核心压缩策略与技巧
1. 删除冗余修饰语
去掉不影响语义的形容词、副词和重复说明。
❌ 冗长:
“请非常仔细地、一步一步地、以极其严谨的态度分析以下问题……”
✅ 精简:
“请逐步分析以下问题。”
压缩率:常可减少 20%~30% 文本量。
2. 用符号/缩写替代长句
在不影响理解的前提下使用通用简写:
| 原文 | 压缩后 |
|---|---|
| “例如” | “e.g.” |
| “也就是说” | “即” |
| “不要包含任何额外的解释或总结” | “仅输出结果,无解释” |
| “以下是一个示例” | “示例:” |
⚠️ 注意:避免自创缩写,确保模型能理解(如“CoT”可接受,“XQ”不可)。
3. 合并同类指令
将多个相似约束合并为一条。
❌ 分散:
“回答要简洁。
不要超过三句话。
避免冗长描述。”
✅ 合并:
“回答不超过三句话,保持简洁。”
4. 用结构化格式替代段落
列表、表格、JSON 比自然语言更紧凑。
❌ 段落:
“输出需包含姓名、年龄和城市三个字段,其中姓名为字符串,年龄为整数,城市也为字符串。”
✅ 结构化:
“输出 JSON:{name: str, age: int, city: str}”
✅ 进阶:直接提供 Schema(若模型支持)。
5. 移除低价值 Few-shot 示例
Few-shot 虽有效,但每个示例可能占 100+ Token。优化方法:
- 保留最典型 1~2 个示例,删除边缘 case;
- 简化示例内容:只留核心输入/输出,去掉解释;
- 用 Zero-shot CoT 替代(强模型下效果接近)。
示例压缩前:
“问题:小明有5个苹果…… 解答:首先,他有5个…… 最终答案:7。”
压缩后:
“5个苹果 -2 +4 → 7”
6. 利用模型内置知识,减少背景说明
避免重复模型已知的事实。
❌ 冗余:
“你是一个 AI 助手,由阿里巴巴开发,名为 Qwen,能够回答问题、创作文字……”
✅ 删除:
(直接进入任务指令)
模型已通过系统提示或训练知晓自身角色,无需用户重复。
7. 动态注入 vs 静态嵌入
将非必要上下文从 Prompt 中移出,改为运行时检索:
- RAG 替代全文粘贴:只传检索到的相关片段;
- 外部知识库引用:用“参见文档 ID: DOC-123”代替粘贴全文;
- 函数调用替代数据内嵌:让模型调用
get_user_profile(user_id)而非传入完整用户数据。
此法可将 Prompt 缩短 50% 以上。
三、高级技术:自动化压缩工具
1. LLM 自我压缩
让模型自己精简 Prompt:
请将以下提示词压缩至原长度的 60%,保留所有关键指令:
[原始 Prompt]
压缩后的提示词:
实测:GPT-4 可有效压缩自身 Prompt,保留 90%+ 意图。
2. 专用压缩模型
研究界已出现 Prompt 压缩模型(如 LLMLingua, PromptCompress),通过重要性评分保留关键 Token。
示例(LLMLingua):
from llmlingua import PromptCompressor compressor = PromptCompressor() compressed_prompt = compressor.compress(prompt, rate=0.5)
3. 模板化 + 占位符
将固定逻辑抽象为模板,运行时填充变量(见 13016 提示词模板):
❌ 每次拼接完整指令
✅ 预编译模板 + 渲染变量
四、压缩时的“红线”:绝不能删的内容
| 内容类型 | 为什么必须保留 |
|---|---|
| 核心任务指令 | “总结” vs “翻译” 完全不同 |
| 输出格式要求 | JSON / 列表 / 字数限制 |
| 关键约束 | “仅基于以下文本”“不得编造” |
| 分隔符 | 防止指令与数据混淆(如 “`) |
| 系统角色(若未在 system 消息中) | 决定回答视角 |
✅ 原则:先删“怎么说”,再删“说什么”;绝不删“做什么”。
五、实战压缩案例
压缩前(182 tokens):
“你是一位经验丰富的英语教师,请帮助学生将以下中文句子翻译成地道的英文。翻译时请注意:1) 使用正式书面语;2) 保持原意不变;3) 不要添加任何解释或注释;4) 仅输出翻译结果。
示例:
中文:‘今天天气很好。’ → 英文:‘The weather is excellent today.’
现在请翻译:‘人工智能正在改变世界。’”
压缩后(86 tokens,↓53%):
你是一名英语教师。将以下中文译为正式英文,仅输出结果,无解释。
示例:“今天天气很好。” → “The weather is excellent today.”
“人工智能正在改变世界。”
→ 关键要素全保留,冗余全删,实测输出质量无损。
六、评估压缩效果的方法
- A/B 测试:对比压缩前后输出的准确率、格式合规率;
- 人工抽查:检查是否遗漏关键约束;
- Token 计数:监控输入长度变化;
- 成本/延迟监控:量化性能收益。
总结
提示词压缩不是“删减”,而是提炼与重构。高效压缩 = 保留意图 + 去除噪声 + 结构优化 + 动态加载。在实际项目中,建议:
- 默认采用 精简指令 + 结构化格式 + 必要分隔符;
- 对长上下文优先使用 RAG 而非全文粘贴;
- 在强模型上尝试 Zero-shot 替代 Few-shot;
- 关键业务保留 自动化压缩回滚机制。
终极目标:用最少的 Token,传递最清晰的指令。