一个真实案例

我们运营一个客服 Agent,日均处理 5000 次对话。优化前月成本约 $3,200,优化后降至 $680——降本 78%。以下是完整的优化路径。

成本构成分析

优化前月成本分布:
├── LLM API 调用     72%  ($2,304)
│   ├── 主模型 (GPT-4o)    58%
│   ├── 嵌入模型           8%
│   └── 审核模型           6%
├── 向量数据库       12%  ($384)
├── 服务器/带宽       8%  ($256)
└── 监控/日志         8%  ($256)

第一层:模型分级路由

不是所有请求都需要最强模型:

class ModelRouter:
    def __init__(self):
        self.routes = {
            "simple_qa": {
                "model": "gpt-4o-mini",
                "criteria": lambda q: len(q) < 50 and not q.requires_tools
            },
            "standard": {
                "model": "claude-3.5-sonnet",
                "criteria": lambda q: q.complexity < 5
            },
            "complex": {
                "model": "gpt-4o",
                "criteria": lambda q: True  # fallback
            }
        }
    
    def route(self, query):
        for level, config in self.routes.items():
            if config["criteria"](query):
                return config["model"]
        return "gpt-4o"

# 效果:62% 的请求被路由到 mini 模型
# 月节省:$1,180

第二层:语义缓存

相似问题命中缓存,避免重复调用 LLM:

from sklearn.metrics.pairwise import cosine_similarity

class SemanticCache:
    def __init__(self, threshold=0.95):
        self.cache = {}  # {embedding: (query, response, timestamp)}
        self.threshold = threshold
    
    def get(self, query):
        query_emb = embed(query)
        
        for emb, (cached_q, cached_r, ts) in self.cache.items():
            sim = cosine_similarity([query_emb], [emb])[0][0]
            if sim > self.threshold:
                if self.is_fresh(ts):
                    return cached_r
        
        return None
    
    def set(self, query, response, ttl=3600):
        emb = embed(query)
        self.cache[emb] = (query, response, time.time())

# 效果:23% 的请求命中缓存
# 月节省:$420

第三层:上下文压缩

长对话历史会指数级增加 Token 消耗:

class ContextCompressor:
    def compress(self, messages, max_tokens=2000):
        total = count_tokens(messages)
        if total <= max_tokens:
            return messages
        
        # 保留最近3轮对话
        recent = messages[-6:]
        old = messages[:-6]
        
        # 用小模型做摘要
        summary = small_llm.summarize(old)
        
        return [
            {"role": "system", "content": f"之前的对话摘要:{summary}"}
        ] + recent

# 效果:平均 Token 消耗降低 45%
# 月节省:$380

第四层:批处理与异步

import asyncio

class BatchProcessor:
    async def process_batch(self, queries):
        # OpenAI Batch API:50% 折扣
        batch = create_batch_request(queries)
        result = await openai.batch.create(batch)
        return result
    
    async def embed_batch(self, texts):
        # 批量嵌入,减少 API 调用次数
        return await openai.embeddings.create(
            input=texts,  # 一次最多2048个
            model="text-embedding-3-small"
        )

# 效果:嵌入成本降低 50%
# 月节省:$160

第五层:Prompt 优化

# 优化前(185 tokens)
BAD_PROMPT = """你是一个专业的客服代表。你的工作是回答用户的问题。
你需要礼貌、专业、准确。如果用户的问题超出了你的知识范围,请告诉用户
你会转接给人工客服。在回答之前,请先思考用户问题的核心需求是什么,
然后给出针对性的回答。回答时请使用中文,格式清晰,分段合理。"""

# 优化后(42 tokens)
GOOD_PROMPT = """客服规范:
1. 中文回答
2. 不确定时转人工
3. 先理解需求再回答"""

# 效果:System Prompt 每次调用都发送,优化后节省 143 tokens/次
# 按日均5000次计算,月节省:$85

第六层:基础设施优化

# Nginx 层缓存静态资源和常见查询
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api_cache:10m;

location /api/qa {
    proxy_cache api_cache;
    proxy_cache_valid 200 1h;
    proxy_cache_key "$request_method$request_uri$request_body";
    proxy_pass http://backend;
}
# 向量数据库优化:从 Pinecone 迁移到自建 Qdrant
# Pinecone: $70/month (1M vectors)
# Qdrant 自建: $10/month (2核2G服务器)
# 月节省:$60

优化效果总览

优化措施月节省累计降幅
模型分级路由$1,18037%
语义缓存$42050%
上下文压缩$38062%
批处理$16067%
Prompt 精简$8570%
基础设施$6072%
监控优化$4073%
合计$2,32573%

监控与持续优化

class CostMonitor:
    def __init__(self):
        self.daily_budget = 25  # $25/day
    
    def check(self):
        today_cost = self.get_today_cost()
        
        if today_cost > self.daily_budget * 0.8:
            # 接近预算,自动降级
            self.downgrade_model()
            alert(f"日成本 ${today_cost} 接近预算")
        
        if today_cost > self.daily_budget:
            # 超预算,紧急措施
            self.enable_aggressive_cache()
            alert(f"日成本 ${today_cost} 超预算!", severity="critical")

结论

Agent 降本不是一次性工作,而是持续工程。核心原则:

  1. 分级处理:让便宜的模型干简单活
  2. 缓存为王:语义缓存 ROI 最高
  3. 压缩上下文:Token 是按量计费的
  4. 监控驱动:没有监控就没有优化

从 $3,200 降到 $680,没有牺牲用户体验——用户感知到的回答质量基本不变。这就是系统化优化的力量。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。