第 23 章 性能、成本与部署

第 23 章 性能、成本与部署

本章要解决的问题

Agent 每轮任务要花几块钱、响应要十几秒------性能和成本怎么平衡?生产部署用什么架构?

章节大纲

  • 23.1 推理加速(缓存/量化/蒸馏)
  • 23.2 Token 成本优化模型与预算控制
  • 23.3 生产部署架构:无服务器/容器/K8s
  • 🛠 解决方案:成本预算模板 + 延迟优化前后对比案例

23.1 推理加速

23.1.1 延迟从哪来:Agent 的"延迟账单"

Agent 慢不是一次调用慢,而是多次调用 + 串行循环的累积:

图 1:Agent 延迟账单

scss 复制代码
单次 LLM 调用:0.5~3s
Agent 循环 5 步:5 × (思考 + 工具) ≈ 5~15s
  ↑ 循环次数(第6章)是延迟的最大放大器

先减次数,再加速度------优化延迟的第一动作是减少不必要的循环步数(能一步完成别绕五步),然后才是单次加速。

23.1.2 推理加速手段(按成本递增)

手段 原理 加速效果 适用
流式输出(stream) 首 token 即返回,边生成边展示 感知延迟大幅下降 交互场景
Prompt 缓存(KV Cache) 相同前缀复用计算结果(第 2 章 KV 缓存) 长上下文省 50-90% 计算 固定系统提示词
小模型路由 简单任务走小模型(第 11 章模型路由) 单次调用快 3-10 倍 简单子任务
并行化 独立子任务并发(第 12 章) 总时长降到最慢分支 独立子任务
量化/蒸馏(私有化时) 模型瘦身 通常 2-5 倍(视模型和硬件) 自部署模型

图 2:推理加速优先级

优先级排序 :流式 → 缓存 → 小模型路由 → 并行化 →(私有化时)量化蒸馏。前四步不换模型就能做,性价比最高。

23.2 Token 成本优化模型与预算控制

23.2.1 成本公式:找到杠杆

markdown 复制代码
单任务成本 = 单价 × (输入token + 输出token) × 调用次数
              ↑      ↑                       ↑
           模型定价  上下文长度(第3章)      循环步数(第6章)

三个杠杆,三个优化方向

杠杆 优化手段 呼应
单价 小模型路由 / 批量折扣 第 11 章
输入长度 上下文压缩 / 按需投喂 / 缓存 第 3 章
调用次数 减少循环 / 无进展检测 / 结果缓存 第 6 章

23.2.2 成本优化的五个"金矿"

金矿 做法 典型收益
Prompt 缓存 固定系统提示词开 KV Cache 输入成本降 50-90%
结果缓存 相同/相似问题命中缓存(第 24 章 C1/C2) 高频问答零成本
小模型路由 简单任务走小模型 简单请求降 60%+
上下文裁剪 历史压缩 + 工具结果精简 输入降 30-50%
循环收敛 停止条件 + 无进展检测 步数降 30-50%

23.2.3 成本预算模板

上线前必须设预算护栏(呼应第 24 章 G5 预算封顶):

图 3:成本三层熔断

python 复制代码
BUDGET_CONFIG = {
    "per_request": {            # 单请求上限
        "max_tokens": 4000,     # 输出上限(防失控长文)
        "max_steps": 8,         # 循环步数上限
        "max_cost_usd": 0.05,   # 单任务费用上限
    },
    "per_day": {
        "max_cost_usd": 500,    # 日预算
        "alarm_at": 0.8,        # 用满 80% 告警
        "kill_at": 1.0,         # 用满 100% 熔断
    },
}

def check_budget(usage, config):
    if usage.cost > config["per_request"]["max_cost_usd"]:
        return "task_killed"     # 单任务熔断
    if usage.day_cost / config["per_day"]["max_cost_usd"] >= 1.0:
        return "day_killed"      # 日预算熔断
    return "ok"

三层熔断:单请求熔断(防个例爆炸)→ 日预算熔断(防整体失控)→ 告警(提前预警)。

23.3 生产部署架构

23.3.1 三种部署形态对比

形态 特点 适用 典型场景
无服务器(Serverless) 按调用计费、自动伸缩、零运维 流量波动大、起步快 客服 API、轻量 Agent
容器(Docker + 编排) 可控、可移植、环境一致 中等规模、自定义依赖 标准生产形态
K8s 大规模、高可用、弹性 大流量、微服务化 企业级平台

选型逻辑:起步用无服务器(快、省),流量稳定后用容器/K8s(可控、省成本)。

23.3.2 生产 Agent 的部署架构图

复制代码
┌────────────────────────────────────────────┐
│              接入层(API Gateway)            │
│   限流 / 鉴权 / 路由(第11章)               │
├────────────────────────────────────────────┤
│              Agent 服务层(无状态)           │
│   会话管理 → Agent 循环(第6章)             │
│   ├─ 模型调用层(LLM API / 私有模型服务)     │
│   ├─ 工具调用层(MCP / 工具服务)            │
│   └─ 记忆层(Redis / 向量库)               │
├────────────────────────────────────────────┤
│              数据与基础设施层                 │
│   PostgreSQL / Redis / 向量库 / 对象存储      │
│   追踪监控(Langfuse/OTel)+ 日志             │
└────────────────────────────────────────────┘

图 4:生产部署架构

设计要点

  1. Agent 服务无状态:会话状态放 Redis(第 3/9 章),服务可水平扩展。
  2. 模型/工具/记忆分层:各自独立伸缩(模型流量大、工具依赖外部)。
  3. 可观测性贯穿:每层都有 trace(第 21 章)。

23.3.3 部署的可靠性清单

关注点 手段
高可用 多副本 + 负载均衡
弹性 自动伸缩(按 QPS/队列长度)
容灾 备用模型 failover(第 24 章 B3)
版本 蓝绿发布 / 灰度(第 20 章)
可回滚 配置版本化(第 24 章 G4)

23.4 完整实战:一次真实的成本优化改造

用一个贯穿案例演示"成本从哪来、怎么量化、怎么降、降到多少"。

23.4.1 现状:一个"烧钱"的客服 Agent

场景:某客服 Agent 单次会话平均成本 0.42 元,团队觉得太贵。先拆解成本构成:

环节 每次调用成本 调用次数/会话 小计
主模型问答(大模型) 0.06 元 5 次 0.30 元
路由判断(大模型) 0.04 元 1 次 0.04 元
情绪分析(大模型) 0.03 元 1 次 0.03 元
工具结果回填(大模型再生成) 0.05 元 1 次 0.05 元
合计 8 次调用 0.42 元

观察:8 次调用全是大模型,其中"路由判断""情绪分析"这类简单任务用大模型是杀鸡用牛刀。

23.4.2 优化方案(第 23.2 五个金矿逐一应用)

优化 做法 省下的成本
小模型路由 路由/情绪分析换小模型(qwen-turbo,成本为大模型的 1/5) 0.04+0.03 → 0.014 元
Prompt 缓存 固定系统提示词开 KV Cache(第 24 章 C3) 主问答输入成本降 60%
结果缓存 相同问题命中缓存(高频问题零成本) 约 20% 会话命中
循环收敛 无进展检测 + 停止条件(第 6 章) 平均调用 5 次 → 4.2 次
上下文裁剪 工具结果精简回填 单次输入降 25%

23.4.3 优化前后对比

指标 优化前 优化后 变化
单会话成本 0.42 元 0.16 元 ↓ 62%
平均调用次数 8 次 6.3 次 ↓ 21%
P95 延迟 8.2s 5.4s ↓ 34%
会话成功率 85% 86% ↑ 1pp(评测回归确认无退化)
python 复制代码
# 优化后的成本计算(验证)
COST_MODEL = {
    "big_model": 0.06, "small_model": 0.012,   # 每千token单价
}
def estimate_session_cost(plan):
    """按调用计划估算单会话成本"""
    cost = 0
    for step in plan["steps"]:
        model = "small_model" if step["simple"] else "big_model"
        tokens = step["input_tokens"] * (0.4 if step["cached"] else 1.0)
        cost += COST_MODEL[model] * tokens / 1000
    return round(cost, 3)

print(estimate_session_cost(new_plan))   # ≈ 0.16 元

23.4.4 关键经验:降本不能牺牲质量

  1. 每次优化都跑评测回归(第 20 章)------本例成功率 85%→86% 证明无退化,这是"敢降本"的前提。
  2. 先量化再动手:23.4.1 的成本拆解表格是优化的"地图",不知道钱花在哪就别谈优化。
  3. 小模型路由是最大杠杆:简单任务换小模型,收益立竿见影。
  4. 缓存是"躺赚":Prompt 缓存 + 结果缓存改配置就能省,不用改逻辑。
  5. 降本有下限 :成本降到影响质量(评测分数下滑)就停------目标是最优性价比,不是最低成本

23.4.5 部署选型的成本视角

流量规模 推荐形态 成本特征
< 1 万次/月 无服务器(API 按量) 零起步成本
1-50 万次/月 API + 缓存层 缓存省大头
> 50 万次/月 私有化部署(开源模型) 固定成本摊薄

部署形态本身也是成本优化(呼应第 2 章选型)------在长期、稳定、高吞吐场景下,私有化可能比 API 更经济;但需计入 GPU 采购/租用、运维人力和模型更新成本,低利用率时反而不划算。


🛠 解决方案:成本预算模板 + 延迟优化对比案例

常见问题

  1. "单任务成本失控":无单请求熔断。对策:三层熔断(23.2.3),单任务费用超限即终止。
  2. "响应太慢用户流失":先减循环步数(第 6 章),再上流式 + 小模型路由(23.1.2)。
  3. "缓存没生效":检查系统提示词是否完全一致(KV Cache 要求前缀相同);结果缓存检查命中逻辑。
  4. "私有化部署模型太慢":量化(INT8/INT4)+ 蒸馏,或用 GPU 加速服务。
  5. "流量一涨就崩":无服务器起步或 K8s 自动伸缩;关键瓶颈在模型 API 限流(第 24 章 A1)。

解决方案速查表

现象 根因 解决方案
成本失控 无熔断 三层预算熔断
响应慢 循环多/单次慢 减步数 + 流式 + 小模型
缓存失效 前缀不一致 固定系统提示词 + 缓存检查
私有化慢 模型未优化 量化 + 蒸馏
流量崩 无伸缩 自动伸缩 / 无服务器

实战提示

  1. 先减次数再加速度:循环步数是延迟最大放大器,先优化它。
  2. 五个金矿按序挖:缓存 → 小模型路由 → 裁剪 → 收敛,从便宜的做起。
  3. 三层熔断必须有:单请求 / 日预算 / 告警,缺一不可。
  4. 无状态设计:Agent 服务无状态,状态外置(Redis/DB),才能伸缩。
  5. 部署形态可演进:无服务器起步,流量稳定后转容器/K8s------别一上来就上重架构。
相关推荐
一切皆是因缘际会1 小时前
边缘端轻量化
人工智能
海宇AI1 小时前
零信任架构实战:基于海宇柠檬查出险-登记证构建自动化车抵贷核保网关
java·人工智能·架构·自动化
海带紫菜菠萝汤1 小时前
大模型本地部署踩坑实录:显存不足、依赖冲突、推理慢的完整排查
人工智能·ai·大模型
斯维赤1 小时前
AI Agent学习之路 | Prompt Engineering(提示词工程)的三板斧核心技巧
人工智能·学习·prompt
日常通勤穿搭2 小时前
电商 AI 生图工具横评|AI 生成主图、详情套图工具哪家性价比高
人工智能·aigc·电商美工
Ai_easygo2 小时前
AI下半场_06_CSDN版_开源AI最后一公里
人工智能
jimmyleeee2 小时前
大模型安全之十五:AI Access Control:当“门禁”遇上会思考的系统
人工智能·安全
HIT_Weston2 小时前
224、【AI】【模型部署】基座模型研究:Qwen2 架构总览与 config 对照
人工智能·模型部署