python-langchain框架(1-8-2 缓存机制——验证缓存的效果)

张开发
2026/4/4 2:51:52 15 分钟阅读
python-langchain框架(1-8-2 缓存机制——验证缓存的效果)
当用户提出一个常见问题时首次调用大模型需要经历网络传输、排队等待、模型推理等完整链路响应时间通常在1至3秒。这个时长已超过人类对“流畅交互”的心理阈值200毫秒用户会明显感知到“卡顿”和“等待焦虑”。而启用缓存后相同问题的后续请求直接从本地数据库读取结果响应时间骤降至10毫秒以内——这种“无感秒回”的体验让用户感觉系统始终在线、反应迅捷极大提升了产品专业度和信任感。下面看看这段代码就能清晰的体现使用缓存后能提升的用户体验。同一个问题问大模型三次第一次没有缓存后两次有缓存12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667importosimporttimefromlangchain_community.cacheimportSQLiteCachefromlangchain_openaiimportChatOpenAIfromlangchain.globalsimportset_llm_cache, get_llm_cache# 1. 清理旧缓存确保演示纯净CACHE_DBlangchain_demo.dbifos.path.exists(CACHE_DB):os.remove(CACHE_DB)print(f 已清理旧缓存: {CACHE_DB})# 2. 启用缓存 set_llm_cache(SQLiteCache(database_pathCACHE_DB))print(f 缓存已启用: {get_llm_cache()}\n)# 3. 配置 LLM llmChatOpenAI(api_keyos.getenv(DEEPSEEK_API_KEY),base_urlos.getenv(BASE_URL),# Deepseek 的 API 基础地址modeldeepseek-v3:671b,# Deepseek 对话模型可选deepseek-chat-pro 等高级模型temperature0.7,# 温度参数0-1越低越稳定max_tokens1024# 最大生成 tokens)# 4. 核心演示函数 defdemonstrate_cache_effect(query:str, repeat:int3):演示缓存效果首次调用慢 vs 后续调用快Args:query: 要提问的问题repeat: 重复调用次数第1次未缓存后续应命中缓存print(*60)print(f 测试问题: \{query}\)print(f 将重复调用 {repeat} 次第1次无缓存后续应命中缓存)print(*60\n)durations[]foriinrange(repeat):print(f\n[第 {i 1} 次调用])starttime.perf_counter()# 高精度计时# 关键使用完全相同的输入触发缓存responsellm.invoke(query)duration(time.perf_counter()-start)*1000# 转为毫秒durations.append(duration)# 判断是否命中缓存通过耗时阈值粗略判断is_cachedi 0# 首次通常 500ms缓存通常 50msifi 0:print(缓存命中,耗时str(duration))else:print(真实请求,耗时str(duration))print(f 回答: {response.content[:60]}...)# 5. 执行演示 if__name____main__:# 测试标准问题确保完全相同的字符串demonstrate_cache_effect(太阳系哪个行星最大, repeat3)运行结果已清理旧缓存: langchain_demo.db缓存已启用: langchain_community.cache.SQLiteCache object at 0x000001D668B50410测试问题: 太阳系哪个行星最大将重复调用 3 次第1次无缓存后续应命中缓存[第 1 次调用]真实请求,耗时17445.118000000093回答: 太阳系中最大的行星是**木星**。以下是关于木星的一些关键信息### 木星的基本特征1. **体积与质量** ...[第 2 次调用]缓存命中,耗时410.93799999998737回答: 太阳系中最大的行星是**木星**。以下是关于木星的一些关键信息### 木星的基本特征1. **体积与质量** ...[第 3 次调用]

更多文章