Skip to content

推理Token优化与成本控制

在大规模部署 LLM 服务时,Token 消耗直接决定了运营成本。本文介绍从 Prompt 工程到系统架构层面的 Token 优化策略,帮助实现推理成本的有效控制。

推理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 测试是验证优化效果的最佳方法。

相关资源

最近更新