当前位置: 首页 > news >正文

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

当用户提出一个常见问题时,首次调用大模型需要经历网络传输、排队等待、模型推理等完整链路,响应时间通常在1至3秒。这个时长已超过人类对“流畅交互”的心理阈值(200毫秒),用户会明显感知到“卡顿”和“等待焦虑”。而启用缓存后,相同问题的后续请求直接从本地数据库读取结果,响应时间骤降至10毫秒以内——这种“无感秒回”的体验,让用户感觉系统始终在线、反应迅捷,极大提升了产品专业度和信任感。

下面看看这段代码,就能清晰的体现使用缓存后能提升的用户体验。(同一个问题问大模型三次,第一次没有缓存,后两次有缓存)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

importos

importtime

fromlangchain_community.cacheimportSQLiteCache

fromlangchain_openaiimportChatOpenAI

fromlangchain.globalsimportset_llm_cache, get_llm_cache

# ========== 1. 清理旧缓存(确保演示纯净)==========

CACHE_DB="langchain_demo.db"

ifos.path.exists(CACHE_DB):

os.remove(CACHE_DB)

print(f" 已清理旧缓存: {CACHE_DB}")

# ========== 2. 启用缓存 ==========

set_llm_cache(SQLiteCache(database_path=CACHE_DB))

print(f" 缓存已启用: {get_llm_cache()}\n")

# ========== 3. 配置 LLM ==========

llm=ChatOpenAI(

api_key=os.getenv("DEEPSEEK_API_KEY"),

base_url=os.getenv("BASE_URL"),# Deepseek 的 API 基础地址

model="deepseek-v3:671b",# Deepseek 对话模型(可选:deepseek-chat-pro 等高级模型)

temperature=0.7,# 温度参数(0-1,越低越稳定)

max_tokens=1024# 最大生成 tokens

)

# ========== 4. 核心演示函数 ==========

defdemonstrate_cache_effect(query:str, repeat:int=3):

"""

演示缓存效果:首次调用(慢) 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} 次调用]")

start=time.perf_counter()# 高精度计时

# 关键:使用完全相同的输入触发缓存

response=llm.invoke(query)

duration=(time.perf_counter()-start)*1000# 转为毫秒

durations.append(duration)

# 判断是否命中缓存(通过耗时阈值粗略判断)

is_cached=i >0# 首次通常 >500ms,缓存通常 <50ms

ifi >0:

print('缓存命中,耗时:'+str(duration))

else:

print('真实请求,耗时:'+str(duration))

print(f" 回答: {response.content[:60]}...")

# ========== 5. 执行演示 ==========

if__name__=="__main__":

# 测试标准问题(确保完全相同的字符串)

demonstrate_cache_effect("太阳系哪个行星最大?", repeat=3)

运行结果:


已清理旧缓存: langchain_demo.db
缓存已启用: <langchain_community.cache.SQLiteCache object at 0x000001D668B50410>

============================================================
测试问题: "太阳系哪个行星最大?"
将重复调用 3 次(第1次无缓存,后续应命中缓存)
============================================================


[第 1 次调用]
真实请求,耗时:17445.118000000093
回答: 太阳系中最大的行星是**木星**。以下是关于木星的一些关键信息:

### 木星的基本特征:
1. **体积与质量** ...

[第 2 次调用]
缓存命中,耗时:410.93799999998737
回答: 太阳系中最大的行星是**木星**。以下是关于木星的一些关键信息:

### 木星的基本特征:
1. **体积与质量** ...

[第 3 次调用]

http://www.jsqmd.com/news/578105/

相关文章:

  • 如何实现Windows与Linux文件系统无缝互通:WinBtrfs完整使用指南
  • 微型LoRa数传电台:透明传输,兼容多种协议
  • 别再傻傻分不清!嵌入式调试接口JTAG和SWD到底怎么选?附J-Link连接实战
  • Claude Code泄露的源码里,藏着一套让AI学会「做梦」的记忆架构
  • 从协议帧到校验码:MAVLink V1/V2 CRC-16/MCRF4XX校验实战全解析
  • 3步实现Windows直接运行APK:告别模拟器的极速体验
  • 03_RAGFlow之RAG核心引擎与检索优化
  • 避坑指南:STM32与串口屏通信中的3大常见错误及解决方法
  • 从标准库到HAL库:给STM32F103老玩家的升级避坑指南与实战对比
  • 告别手动转换!用Python自动化处理CSV到Little_R的完整指南
  • 11-20 完结【鸿蒙问题解决类】【鸿蒙实战落地类】
  • 从参数化几何到气动分析:OpenVSP航空设计工具深度解析
  • 保姆级避坑指南:在PVE 8.3上为Ubuntu 24.04虚拟机直通Nvidia显卡(RTX 2080 Ti实测)
  • 告别手动调试!用Chrome DevTools MCP+VS Code实现前端BUG自动诊断
  • FFmpeg音频重采样实战:从48kHz到44.1kHz的完整转换指南(附代码)
  • 微型LoRa数传电台:5KM无线通讯,空旷实测无压力
  • 保姆级教程:用Python在CARLA中玩转激光雷达与语义分割相机,实现3D场景重建
  • Verilog有限状态机实战:5分钟搞定红绿灯控制器(附完整代码)
  • 终极直播录制神器:Fideo轻松搞定全网直播保存
  • 2026 年第 4 个零日漏洞!Google 发布 Chrome 紧急补丁
  • 别再只盯着LSB了:用Python实战对比空间域与DCT/DWT变换域水印的鲁棒性
  • 2026年,哪些高压电磁阀厂商在行业内口碑好?
  • Zemax中的色差分析与优化策略
  • 【OpenCore Configurator】:解决黑苹果配置难题的智能化解决方案
  • Unity GUI优化
  • 3步告别网盘提取码焦虑:baidupankey神器一键解锁所有分享资源
  • 编译原理期末自救指南:从NFA到LR(1),手把手带你搞定六大必考大题
  • 2024年实测:火狐浏览器上这3款广告过滤插件,谁才是真正的网页加速器?
  • 避坑指南:用HAL库+CubeMX配置STM32F103的TIM定时器驱动超声波与舵机
  • CRC16查表法实现与优化技巧