智能缓存:让AI调用成本降低90%
通过智能缓存策略,可以大幅减少重复的API调用,不仅节省成本, 还能显著提升响应速度。
缓存策略对比
🔤 精确匹配缓存
- • 完全相同的输入
- • 命中率:20-30%
- • 实现简单
- • 适合FAQ场景
🧠 语义缓存
- • 相似问题匹配
- • 命中率:50-70%
- • 需要向量数据库
- • 智能程度高
📊 对话缓存
- • 多轮对话优化
- • 命中率:30-40%
- • 上下文感知
- • 复杂度较高
语义缓存实现
import redis
import numpy as np
from sentence_transformers import SentenceTransformer
class SemanticCache:
"""语义缓存系统"""
def __init__(self, redis_host='localhost', threshold=0.85):
self.redis_client = redis.Redis(host=redis_host)
self.encoder = SentenceTransformer('all-MiniLM-L6-v2')
self.threshold = threshold
self.vector_dim = 384
def get_embedding(self, text):
"""生成文本向量"""
return self.encoder.encode(text, normalize_embeddings=True)
def search_similar(self, query, top_k=5):
"""搜索相似查询"""
query_vec = self.get_embedding(query)
# 获取所有缓存的向量
keys = self.redis_client.keys("cache:vec:*")
similarities = []
for key in keys:
cached_vec = np.frombuffer(
self.redis_client.get(key),
dtype=np.float32
)
# 计算余弦相似度
similarity = np.dot(query_vec, cached_vec)
if similarity > self.threshold:
cache_id = key.decode().split(":")[-1]
similarities.append((cache_id, similarity))
# 返回最相似的结果
similarities.sort(key=lambda x: x[1], reverse=True)
return similarities[:top_k]
def get(self, query):
"""获取缓存结果"""
# 精确匹配
exact_key = f"cache:exact:{hash(query)}"
exact_result = self.redis_client.get(exact_key)
if exact_result:
return exact_result.decode()
# 语义匹配
similar_results = self.search_similar(query, top_k=1)
if similar_results:
cache_id, similarity = similar_results[0]
result_key = f"cache:result:{cache_id}"
return self.redis_client.get(result_key).decode()
return None
def set(self, query, result, ttl=3600):
"""设置缓存"""
cache_id = str(hash(query))
# 存储向量
query_vec = self.get_embedding(query)
vec_key = f"cache:vec:{cache_id}"
self.redis_client.set(vec_key, query_vec.tobytes(), ex=ttl)
# 存储结果
result_key = f"cache:result:{cache_id}"
self.redis_client.set(result_key, result, ex=ttl)
# 精确匹配缓存
exact_key = f"cache:exact:{cache_id}"
self.redis_client.set(exact_key, result, ex=ttl)
# 使用示例
cache = SemanticCache()
def llm_with_cache(prompt):
# 先查缓存
cached = cache.get(prompt)
if cached:
print("Cache hit!")
return cached
# 调用LLM
result = call_llm_api(prompt)
# 存入缓存
cache.set(prompt, result)
return result缓存效果分析
实际应用数据
客服场景
- 缓存命中率65%
- 成本降低-70%
- 响应时间50ms
知识问答
- 缓存命中率82%
- 成本降低-85%
- 响应时间20ms
高级缓存技术
分布式缓存架构
# Redis Cluster配置
class DistributedCache:
def __init__(self):
self.nodes = [
{"host": "redis1", "port": 6379},
{"host": "redis2", "port": 6379},
{"host": "redis3", "port": 6379}
]
self.rc = RedisCluster(
startup_nodes=self.nodes,
decode_responses=True
)
def consistent_hash(self, key):
"""一致性哈希分片"""
return hashlib.md5(key.encode()).hexdigest()智能过期策略
- • 热度感知:频繁访问的缓存延长有效期
- • 容量控制:LRU淘汰最少使用的缓存
- • 分级存储:热数据内存,冷数据持久化
- • 预加载:预测并提前加载可能的查询
缓存监控指标
命中率
Cache Hit Ratio
节省成本
Cost Savings
延迟降低
Latency Reduction