跳到主要内容

AI 应用的成本、延迟和可观测性

💰 可观测性让你在问题已影响用户前发现并修复。成本和延迟管控是 AI 产品生产化的必要条件。

成本结构

Token 计费模型

# 输入 token、输出 token 通常分开计费
cost_per_1m_tokens = {
"gpt-4o": {"input": 2.5, "output": 10.0},
"gpt-4o-mini": {"input": 0.15, "output": 0.6},
"claude-3-5-sonnet": {"input": 3.0, "output": 15.0},
}

def estimate_cost(input_tokens, output_tokens, model):
rates = cost_per_1m_tokens[model]
return (input_tokens * rates["input"] + output_tokens * rates["output"]) / 1_000_000

成本优化策略

策略效果限制
使用小模型成本大幅降低小模型能力少
缩短 Prompt减少输入 token可能影响质量
列表缓存複用相同结果适合不变的请求
预计算 Prompt减少重复 Token适合固定 Prompt
流式输出提升感知速度实际延迟不变

延迟监控

延迟组成

总延迟 = 网络转发 + TTFT + 生成时间

TTFT:首 token 延迟(影响感知响应速度)
生成时间:输出 token 数 / TPS

延迟 SLA 示例

场景TTFT 目标P99 总延迟
实时对话< 500ms< 5s
文档分析< 2s< 30s
批量任务< 10s< 5min

可观测性体系

要记录的关键字段

@dataclass
class LLMTrace:
trace_id: str
timestamp: datetime
model: str

# 输入输出
input_messages: list[dict]
output_text: str

# 性能
ttft_ms: float
total_latency_ms: float
input_tokens: int
output_tokens: int

# 成本
cost_usd: float

# 追踪
user_id: str
session_id: str
tags: dict

# 错误
error: str | None
retry_count: int

关键监控评判标准

# Prometheus 指标示例
llm_request_duration = Histogram(
"llm_request_duration_seconds",
buckets=[0.1, 0.5, 1.0, 2.0, 5.0, 10.0, 30.0]
)
llm_tokens_total = Counter(
"llm_tokens_total",
labelnames=["model", "type"] # type: input/output
)
llm_cost_total = Counter(
"llm_cost_usd_total",
labelnames=["model", "feature"]
)

主流可观测工具

工具特点
Langfuse开源,可自部署,链路追踪完整
LangSmithLangChain 生态,易集成
Helicone代理层模式,0 代码接入
Arize PhoenixML 可观测,支持 RAG 评测
OpenTelemetry通用标准,可与已有监控集成

常见误区

  • 只监控平均延迟,忽略 P95/P99;长尾延迟才是用户体验最大杆手
  • 只记录费用小计,没有按 feature 分拆,优化不知往哪切
  • 没有记录完整 Prompt/Response,相同的 Bug 无法复现和分析