推理Token优化与成本控制
在大规模部署 LLM 服务时,Token 消耗直接决定了运营成本。本文介绍从 Prompt 工程到系统架构层面的 Token 优化策略,帮助实现推理成本的有效控制。
Token 消耗分析
推理 Token 成本包括两部分:
- Input Tokens:Prompt 和上下文,按输入单价计费
- Output Tokens:模型生成内容,按输出单价计费(通常 3x 输入单价)
python
# Token 成本估算
def estimate_cost(
input_tokens_per_request: int,
output_tokens_per_request: int,
requests_per_day: int,
input_price_per_million: float = 0.5,
output_price_per_million: float = 1.5,
):
daily_input = input_tokens_per_request * requests_per_day
daily_output = output_tokens_per_request * requests_per_day
daily_cost = (
daily_input * input_price_per_million / 1_000_000
+ daily_output * output_price_per_million / 1_000_000
)
print(f"日消耗: {daily_input/1e6:.1f}M 输入 + {daily_output/1e6:.1f}M 输出")
print(f"日成本: ${daily_cost:.2f}")
print(f"月成本: ${daily_cost * 30:.2f}")
return daily_cost
estimate_cost(
input_tokens_per_request=2000,
output_tokens_per_request=500,
requests_per_day=100000,
)Prompt 优化
系统提示词压缩
python
# 冗长系统提示
VERBOSE_SYSTEM = """你是一个专业的客服助手。你需要以友好、专业的方式回答用户的问题。
回答时请确保信息准确、完整。如果不确定,请诚实说明。不要编造信息。
回答应当简洁明了,避免冗余。使用中文回答。"""
# 压缩后系统提示(减少 60% Token)
COMPACT_SYSTEM = "你是专业客服,友好准确地回答问题。不确定时说明。简洁中文回答。"Few-shot 示例优化
- 选择最具代表性的 2-3 个示例
- 使用更短的示例格式
- 考虑用指令替代示例
缓存策略
语义缓存
对相似请求复用历史回答:
python
import hashlib
from sentence_transformers import SentenceTransformer
class SemanticCache:
def __init__(self, threshold=0.95):
self.encoder = SentenceTransformer('all-MiniLM-L6-v2')
self.cache = {}
self.threshold = threshold
def lookup(self, query):
query_emb = self.encoder.encode(query)
for key, (emb, response) in self.cache.items():
similarity = cosine_similarity(query_emb, emb)
if similarity > self.threshold:
return response # 缓存命中,节省 Token
return None
def store(self, query, response):
emb = self.encoder.encode(query)
self.cache[hashlib.md5(query.encode()).hexdigest()] = (emb, response)Prompt 缓存
复用固定前缀的 KV Cache,避免重复计算:
缓存命中率
在客服、FAQ 等场景,语义缓存命中率可达 40-60%。按 50% 命中率计算,Token 成本可降低约 30%(输出 Token 节省)。
模型路由
根据请求复杂度路由到不同规模的模型:
python
def model_router(query):
"""根据复杂度选择模型"""
complexity = estimate_complexity(query)
if complexity < 0.3:
return "small-model" # 1.5B, 低成本
elif complexity < 0.7:
return "medium-model" # 7B, 中成本
else:
return "large-model" # 70B, 高成本成本陷阱
过度优化 Token 可能导致回答质量下降。建议设定最低质量阈值,在质量和成本间取得平衡。A/B 测试是验证优化效果的最佳方法。