
🧠 记忆锚点:先预留输出,再给系统、历史和检索分预算;旧对话摘要,检索只留相关。
💡 答案要点
Token 消耗估算(GPT-4o 参考):
| 场景 | 输入 Token | 输出 Token | 合计 | 费用估算 |
|---|---|---|---|---|
| 单轮简单问答 | ~500 | ~300 | ~800 | ¥0.003 |
| 单轮复杂分析 | ~2000 | ~800 | ~2800 | ¥0.01 |
| 10轮对话(无压缩) | ~8000 | ~3000 | ~11000 | ¥0.04 |
| 10轮对话(摘要压缩) | ~2000 | ~800 | ~2800 | ¥0.01 |
消耗构成拆解:
System Prompt: 200-500 tokens(固定成本)
用户输入: 100-500 tokens/轮
RAG 检索内容: 500-2000 tokens(主要成本)
历史对话: 累计增长,不压缩会爆炸
模型输出: 200-500 tokens/轮多轮对话 Token 控制策略:
python
class TokenBudgetManager:
MAX_CONTEXT_TOKENS = 4000 # 留给历史的预算
def build_context(self, history: list, system_prompt: str) -> list:
"""滑动窗口 + 摘要压缩"""
messages = [{"role": "system", "content": system_prompt}]
# 策略1: 只保留最近 N 轮原文
recent = history[-3:] # 最近3轮保留完整原文
# 策略2: 历史部分做摘要
if len(history) > 3:
older = history[:-3]
summary = self._summarize(older)
messages.append({
"role": "system",
"content": f"[历史摘要] {summary}"
})
messages.extend(recent)
return messages
def _summarize(self, history: list) -> str:
"""调 LLM 压缩历史,只花一次钱"""
# 实际用小模型(gpt-3.5/qwen-turbo)做摘要,成本低
...多轮 vs 单轮 Token 增长对比:
第1轮: 800 tokens
第5轮(无压缩): 800×5 = 4000 tokens
第5轮(有压缩): 800 + 摘要200 = 1000 tokens ← 节省75%
第10轮(无压缩): 800×10 = 8000 tokens
第10轮(有压缩): 800 + 摘要400 = 1200 tokens ← 节省85%面试话术:
示例表达(仅在能用本人经历或可复现实验佐证时使用): "单轮对话 Token 消耗约 1K-4K,多轮不控制会线性增长爆成本。我的策略是三层:最近3轮保原文保障连贯性,历史部分用小模型摘要(节省80%成本),RAG 召回内容做相关性过滤只保留 top-k chunk。实测10轮对话 Token 消耗控制在 2K 以内,单次成本 < ¥0.01。"