跳到主要内容

AI 应用性能优化

问题

AI 应用有哪些关键性能指标?如何优化延迟和成本?

答案

一、核心性能指标

指标定义目标值
TTFTTime to First Token,首 Token 延迟< 1s
TPSTokens Per Second,生成速度> 30 TPS
E2E Latency端到端延迟(完整响应)取决于长度
成本/请求每次 API 调用的费用越低越好

二、延迟优化

1. 流式输出

// ❌ 非流式:用户等待完整响应
const response = await openai.chat.completions.create({
model: "gpt-4o",
messages,
});

// ✅ 流式:用户立即看到输出
const stream = await openai.chat.completions.create({
model: "gpt-4o",
messages,
stream: true,
});

2. Prompt 精简

// ❌ 冗长的 system prompt(消耗大量 input token)
const system = "你是一个非常专业的助手,你需要...(2000字)";

// ✅ 精简 + 结构化
const system = `角色:技术助手
规则:
1. 回答简洁准确
2. 代码附注释
3. 不确定时说明`;

3. 模型选择

场景推荐模型理由
简单问答gpt-4o-mini / claude-3.5-haiku快、便宜
复杂推理gpt-4o / claude-sonnet效果好
代码生成claude-sonnet / gpt-4o代码能力强

三、缓存策略

语义缓存

import { generateEmbedding } from "./embedding";

async function getCachedResponse(query: string, redis: Redis) {
// 1. 计算查询的 Embedding
const queryEmb = await generateEmbedding(query);

// 2. 在缓存中查找相似查询(余弦相似度 > 0.95)
const cached = await redis.call(
"FT.SEARCH", "cache_idx",
`@embedding:[VECTOR_RANGE 0.05 $vec]`,
"PARAMS", "2", "vec", Buffer.from(new Float32Array(queryEmb).buffer),
"LIMIT", "0", "1"
);

if (cached.length > 0) {
return cached[0].response; // 缓存命中
}

// 3. 缓存未命中,调用 LLM
const response = await callLLM(query);

// 4. 存入缓存
await redis.hset(`cache:${Date.now()}`, {
query, response, embedding: queryEmb
});

return response;
}

OpenAI Prompt Caching

OpenAI 自动缓存长 prompt 的前缀部分:

// 长 system prompt 会被自动缓存
// 相同前缀的后续请求享受 50% 折扣
const response = await openai.chat.completions.create({
model: "gpt-4o",
messages: [
{ role: "system", content: longSystemPrompt }, // 被缓存
{ role: "user", content: userInput },
],
});

四、成本优化

历史消息压缩

function compressHistory(messages: Message[], maxTokens: number): Message[] {
// 策略 1:保留最近 N 轮
const recent = messages.slice(-10);

// 策略 2:摘要压缩
// 对较早的消息生成摘要,替代原始消息

// 策略 3:滑动窗口 + 关键信息提取

return recent;
}

五、监控与告警

监控指标告警阈值工具
TTFT> 3s自定义 Metrics
错误率> 5%Sentry
Token 用量接近预算OpenAI Usage
缓存命中率< 30%Redis Metrics

常见面试问题

Q1: 如何降低 AI 应用的 API 成本?

答案(按效果排序):

  1. 模型降级:简单任务用 mini/haiku 模型(价格相差 10-50 倍)
  2. 缓存:语义缓存 + Prompt Caching(减少 30-70% 调用)
  3. Prompt 精简:减少 system prompt 和历史消息长度
  4. Batch API:非实时场景用批量接口(OpenAI Batch API 50% 折扣)
  5. 用户限额:设置每日/每月调用限制

Q2: TTFT 太高怎么优化?

答案

  • 选快模型:mini/haiku 的 TTFT 比大模型快 2-5 倍
  • 减少 input token:精简 prompt,压缩历史消息
  • 地区选择:使用离用户最近的 API 区域
  • 预热:保持连接池(HTTP Keep-Alive),避免冷启动

相关链接