@Servicepublic class BudgetService { private final AtomicLong dailyUsage = new AtomicLong(0); private final long dailyBudget = 100_000; // 100,000 Token/天 public boolean checkBudget(long tokens) { long current = dailyUsage.addAndGet(tokens); return current <= dailyBudget; } public void resetDailyUsage() { dailyUsage.set(0); } public double getRemainingBudget() { return (dailyBudget - dailyUsage.get()) * 0.0001 / 1000; // 转换为美元 }}
缓存策略
缓存层次设计
层次
缓存内容
有效期
命中率目标
L1 内存缓存
高频请求结果
5-10分钟
80%+
L2 分布式缓存
中频请求结果
30分钟-1小时
60%+
L3 持久化缓存
低频请求结果
24小时
40%+
缓存实现示例
@Servicepublic class ModelCacheService { private final Cache<String, String> l1Cache = Caffeine.newBuilder() .expireAfterWrite(5, TimeUnit.MINUTES) .maximumSize(10_000) .build(); private final RedisTemplate<String, String> redisTemplate; public String get(String prompt) { String cached = l1Cache.getIfPresent(prompt); if (cached != null) { return cached; } cached = redisTemplate.opsForValue().get(prompt); if (cached != null) { l1Cache.put(prompt, cached); return cached; } return null; } public void put(String prompt, String response) { l1Cache.put(prompt, response); redisTemplate.opsForValue().set(prompt, response, 30, TimeUnit.MINUTES); }}
缓存失效策略
策略
说明
适用场景
时间过期
固定时间后失效
内容不频繁变化
主动失效
更新时主动删除
内容需要实时更新
版本控制
基于版本号失效
知识更新场景
LRU 淘汰
最近最少使用淘汰
缓存容量有限
模型分层策略
模型选择依据
因素
说明
选择建议
任务复杂度
简单任务用小模型
分类、摘要用 Haiku
精度要求
高要求用大模型
复杂推理用 GPT-4
成本预算
预算有限用便宜模型
批量处理用 Haiku
响应时间
低延迟用小模型
实时交互用 Haiku
上下文长度
长上下文用大模型
代码分析用 GPT-4
分层调用示例
@Servicepublic class ModelRoutingService { public String route(String prompt, TaskType type) { ModelConfig config = switch (type) { case SIMPLE -> ModelConfig.HAIKU; case NORMAL -> ModelConfig.SONNET; case COMPLEX -> ModelConfig.GPT_4O; case LONG_CONTEXT -> ModelConfig.GPT_4_TURBO; }; return modelService.generate(prompt, config); }}enum TaskType { SIMPLE, // 分类、提取、简单问答 NORMAL, // 普通对话、中等难度问答 COMPLEX, // 复杂推理、代码生成 LONG_CONTEXT // 长文档分析、多文档对比}