性能优化
大约 3 分钟
第十五章:性能优化
15.1 缓存策略:把“重复问题”变成“秒回”
AI 场景很容易出现重复输入:
- 用户反复问同一个 FAQ
- 内容生成模板参数相同
- 某些“规则类问题”答案相对固定
缓存的价值很直接:
- 降低成本(减少 token)
- 降低延迟(减少模型调用)
- 提升稳定性(供应商抖动时仍能返回缓存)
15.1.1 最小可用缓存(内存 + TTL)
package com.example.performance.cache;
import java.time.Duration;
import java.time.Instant;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.stereotype.Component;
@Component
public class SimpleTtlCache {
private final ConcurrentHashMap<String, Entry> store = new ConcurrentHashMap<>();
public Optional<String> get(String key) {
Entry entry = store.get(key);
if (entry == null) {
return Optional.empty();
}
if (entry.expireAt().isBefore(Instant.now())) {
store.remove(key);
return Optional.empty();
}
return Optional.of(entry.value());
}
public void put(String key, String value, Duration ttl) {
store.put(key, new Entry(value, Instant.now().plus(ttl)));
}
private record Entry(String value, Instant expireAt) {
}
}使用建议:
- key 要包含:模型/版本/提示词版本/业务参数,避免“串缓存”
- 缓存内容如果包含用户数据,需要按用户隔离或加密
15.2 异步处理:把“慢任务”变成“可管理的任务”
当输出很长、或需要调用多个工具时,同步接口会带来:
- 更高的超时概率
- 更差的用户体验
建议把任务化场景异步化:
- 生成任务返回
jobId - 前端轮询/回调拿结果
15.3 负载均衡与并发控制:避免 429 雪崩
AI 调用经常会遇到限流。最危险的模式是:
- 429 → 立即重试 → 更高并发 → 更多 429 → 彻底雪崩
15.3.1 最小并发闸门(Semaphore)
package com.example.performance.guard;
import java.time.Duration;
import java.util.concurrent.Semaphore;
import org.springframework.stereotype.Component;
@Component
public class ConcurrencyGuard {
private final Semaphore semaphore = new Semaphore(20);
public <T> T withPermit(ThrowingSupplier<T> supplier) {
boolean acquired = false;
try {
acquired = semaphore.tryAcquire(Duration.ofSeconds(1));
if (!acquired) {
throw new IllegalStateException("系统繁忙,请稍后再试");
}
return supplier.get();
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
} finally {
if (acquired) {
semaphore.release();
}
}
}
@FunctionalInterface
public interface ThrowingSupplier<T> {
T get() throws Exception;
}
}把它包在 AI Facade 外层,就能快速降低 429 风险。
15.4 资源管理:token、上下文与提示词的“瘦身”
性能优化里最划算的一条是:减少无意义 token。
常见浪费点:
- 把整个文档原文塞进 prompt
- 多轮对话把所有历史都带上
- 系统提示词过长且重复
可行手段:
- 对上下文做摘要与裁剪(只带与本轮相关的信息)
- 把固定规则变成“工具/配置”,而不是重复写在 prompt 里
- 输出格式尽量结构化,减少模型“组织语言”的成本 点击这里👇🏻获取:100万QPS短链系统、复杂的商城微服务系统、智能翻译助手AI Agent、SaaS点餐系统、刷题吧小程序、商城系统、秒杀系统、AI项目、代码生成神器、苏三demo项目、智能天气播报AI Agent、智能代码审查AI Agent等 10 个项目的:项目源代码、开发教程和技术答疑
