背景描述
可以将问答的内容缓存起来,如果是相同的问题,那么将会直接把答案返回去,可以节约费用和计算。
安装依赖
pip install -qU langchain-core langchain-openai
缓存类型及工作原理
1. 内存缓存(In-Memory Cache)
- 默认缓存方式,使用Python的
lru_cache实现 - 缓存保存在程序运行时的内存中
- 进程结束后缓存自动清除
- 适合短期、小规模应用的快速原型开发
2. 持久化缓存(Persistent Cache)
- 支持多种后端存储:SQLite、Redis、本地文件系统等
- 缓存可跨会话和进程持久保存
- 适合生产环境和大型应用
- 示例:SQLiteCache会创建一个本地数据库文件存储缓存记录
缓存的实际应用场景
- 开发调试阶段:减少重复API调用次数
- 生产环境:降低LLM服务的调用成本
- 内容不变的查询:如FAQ回答、固定知识库查询
- 批量处理:需要处理大量相似请求时
配置与使用示例
from langchain.cache import InMemoryCache, SQLiteCache
from langchain.globals import set_llm_cache
# 使用内存缓存
set_llm_cache(InMemoryCache())
# 或者使用SQLite持久化缓存
set_llm_cache(SQLiteCache(database_path=".langchain.db"))
详细代码实现
from langchain.globals import set_llm_cache
from langchain_openai import ChatOpenAI
from langchain.cache import InMemoryCache
from langchain.cache import SQLiteCache
llm = ChatOpenAI(
model="gpt-3.5-turbo",
)
# 保存在内存中
set_llm_cache(InMemoryCache())
# 也可以持久化在数据库中
# set_llm_cache(SQLiteCache(database_path=".langchain.db"))
# The first time, it is not yet in cache, so it should take longer
message1 = llm.predict("Tell me a joke")
print(f"message1: {message1}")
# The second time it is, so it goes faster
message2 = llm.predict("Tell me a joke")
print(f"message2: {message2}")
运行结果说明
- 第一次请求:完整调用OpenAI API,响应时间3-5秒
- 第二次请求:直接返回缓存结果,响应时间约500毫秒
- 性能差异明显,表明缓存机制生效
缓存失效与更新
- 自动失效:基于输入参数自动判断是否使用缓存
- 手动清除:可通过
cache.clear()方法清除全部缓存 - 细粒度控制:可以为特定调用设置
use_cache=False禁用缓存
性能考量
- 响应时间:缓存命中时响应速度可提升10-100倍
- 成本节约:减少API调用次数可大幅降低使用成本
- 吞吐量:系统整体吞吐量可提高3-5倍
最佳实践建议
- 开发环境优先使用内存缓存
- 生产环境推荐使用Redis等高性能持久化缓存
- 对于频繁变更的内容,适当降低缓存时间或禁用缓存
- 定期监控缓存命中率和效果
缓存技术细节
- 默认缓存时间:30分钟
- 缓存大小限制:100MB
- 淘汰策略:LRU(最近最少使用)