总结之LangChain(三)——模型IO缓存

一、聊天模型缓存

LangChain为聊天模型提供了一个可选的缓存层。这有两个好处:

如果您经常多次请求相同的完成结果,它可以通过减少您对LLM提供程序的API调用次数来帮您节省费用。

它可以通过减少您对LLM提供程序的API调用次数来加快您的应用程序速度。

python 复制代码
from langchain_openai import ChatOpenAI
 
llm = ChatOpenAI()
python 复制代码
from langchain.globals import set_llm_cache

内存缓存

%%time 是一个魔术命令,用于在代码中测量代码块的执行时间。它是Python编程语言中的一个内置命令,可以用来计算代码块的执行时间。通过在代码块前加上"%%time",可以获取代码块的执行时间信息,包括总时间、CPU时间和内存使用情况等。

注意:%%time是Jupyter Notebook和IPython环境的特性,标准Python脚本(.py)或其他非交互式Python环境中无法直接使用。如果你在非Jupyter环境下需要类似功能,可以使用time模块来手动计时。

python 复制代码
%%time
from langchain.cache import InMemoryCache
 
set_llm_cache(InMemoryCache())
 
# 第一次,它尚未在缓存中,所以需要更长的时间
llm.predict("明天天气怎么样")
python 复制代码
%%time
# 第二次,由于已存在于缓存中,因此速度更快
llm.predict("明天天气怎么样")

完整示例代码

python 复制代码
from langchain_openai import ChatOpenAI
from langchain.cache import InMemoryCache
from langchain.globals import set_llm_cache
import time
llm = ChatOpenAI(api_key="sk-XXXXX")


set_llm_cache(InMemoryCache())

start_time = time.time()

print(llm.predict("明天天气怎么样?"))
end_time = time.time()
execution_time = end_time - start_time
print(f"代码执行时间: {execution_time} 秒")

start_time = time.time()
print(llm.predict("明天天气怎么样?"))
end_time = time.time()
execution_time = end_time - start_time
print(f"代码执行时间: {execution_time} 秒")

结果

python 复制代码
抱歉,我无法提供明确的明天天气预报,因为我无法访问实时天气数据。建议你查看天气预报应用或网站,以获取最新的天气信息。
代码执行时间: 5.457608938217163 秒
抱歉,我无法提供明确的明天天气预报,因为我无法访问实时天气数据。建议你查看天气预报应用或网站,以获取最新的天气信息。
代码执行时间: 0.0010001659393310547 秒

当然,可以结合我们的Chain来使用,如下:

python 复制代码
from langchain_openai import ChatOpenAI
from langchain.cache import InMemoryCache
from langchain.globals import set_llm_cache
import time
llm = ChatOpenAI(api_key="sk-XXX")

from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个专业的天气播报员"),
    ("user", "{input}")
])

chain = prompt | llm
set_llm_cache(InMemoryCache())
start_time = time.time()

print(chain.invoke("明天天气怎么样?"))
end_time = time.time()
execution_time = end_time - start_time
print(f"代码执行时间: {execution_time} 秒")

start_time = time.time()
print(chain.invoke("明天天气怎么样?"))
end_time = time.time()
execution_time = end_time - start_time
print(f"代码执行时间: {execution_time} 秒")

结果

python 复制代码
content='明天的天气预报如下:\n- 地点:[请提供具体地点]\n- 天气:[晴/多云/阴/雨/雪/雾等]\n- 温度范围:[最高温度]℃ 到 [最低温度]℃\n- 风力风向:[风力等级],[风向]\n\n请提供具体地点,我可以帮您查询更详细的天气情况。' response_metadata={'token_usage': {'completion_tokens': 131, 'prompt_tokens': 33, 'total_tokens': 164}, 'model_name': 'gpt-35-turbo', 'system_fingerprint': 'fp_811936bd4f', 'finish_reason': 'stop', 'logprobs': None} id='run-c07a049c-727d-47bc-a6c4-89135ff279c6-0' usage_metadata={'input_tokens': 33, 'output_tokens': 131, 'total_tokens': 164}
代码执行时间: 3.432565689086914 秒
content='明天的天气预报如下:\n- 地点:[请提供具体地点]\n- 天气:[晴/多云/阴/雨/雪/雾等]\n- 温度范围:[最高温度]℃ 到 [最低温度]℃\n- 风力风向:[风力等级],[风向]\n\n请提供具体地点,我可以帮您查询更详细的天气情况。' response_metadata={'token_usage': {'completion_tokens': 131, 'prompt_tokens': 33, 'total_tokens': 164}, 'model_name': 'gpt-35-turbo', 'system_fingerprint': 'fp_811936bd4f', 'finish_reason': 'stop', 'logprobs': None} id='run-c07a049c-727d-47bc-a6c4-89135ff279c6-0' usage_metadata={'input_tokens': 33, 'output_tokens': 131, 'total_tokens': 164}
代码执行时间: 0.0029997825622558594 秒```

程序或者脚本运行周期结束,缓存失效。

SQLite缓存

python 复制代码
from langchain_openai import ChatOpenAI
from langchain.cache import SQLiteCache
from langchain.globals import set_llm_cache
import time
llm = ChatOpenAI(api_key="sk-XXX")

from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个专业的天气播报员"),
    ("user", "{input}")
])

chain = prompt | llm
set_llm_cache(SQLiteCache(database_path=".langchain.db"))
start_time = time.time()

print(chain.invoke("明天天气怎么样?"))
end_time = time.time()
execution_time = end_time - start_time
print(f"代码执行时间: {execution_time} 秒")

start_time = time.time()
print(chain.invoke("明天天气怎么样?"))
end_time = time.time()
execution_time = end_time - start_time
print(f"代码执行时间: {execution_time} 秒")

结果

python 复制代码
content='明天的天气预报如下:预计会有阵雨,气温介于20-25摄氏度之间,风力较强,东北风,风速大约在20-25公里/小时。请注意携带雨具并做好防风保暖措施。' response_metadata={'token_usage': {'completion_tokens': 90, 'prompt_tokens': 33, 'total_tokens': 123}, 'model_name': 'gpt-35-turbo-16k', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None} id='run-55940874-2056-44e8-90e2-c0163b218ced-0' usage_metadata={'input_tokens': 33, 'output_tokens': 90, 'total_tokens': 123}
代码执行时间: 2.634726047515869 秒
content='明天的天气预报如下:预计会有阵雨,气温介于20-25摄氏度之间,风力较强,东北风,风速大约在20-25公里/小时。请注意携带雨具并做好防风保暖措施。' response_metadata={'token_usage': {'completion_tokens': 90, 'prompt_tokens': 33, 'total_tokens': 123}, 'model_name': 'gpt-35-turbo-16k', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None} id='run-55940874-2056-44e8-90e2-c0163b218ced-0' usage_metadata={'input_tokens': 33, 'output_tokens': 90, 'total_tokens': 123}
代码执行时间: 0.23708701133728027 秒
相关推荐
北斗落凡尘3 小时前
LangGraph 入门实战(9)--中断
后端·langchain
赵广陆6 小时前
企业实战:主体识别
langchain·pdf·langgraph
晚染烟7 小时前
每日八股day24
spring
风流 少年12 小时前
Spring AI 2.0:Flux
java·人工智能·spring
小马过河R12 小时前
Graph Engineering 深度解析:模型越强,越需要给它画好“地图”
人工智能·langchain·graph·ai工程化·harness·驾驭工程
用户31268748772012 小时前
一个请求进来到底发生了什么?Spring MVC 请求处理全链路源码拆解
spring
jyOverQ12 小时前
LangGraph 记忆管理详解:短期记忆、长期记忆与 Runtime Context
python·langchain
爱敲键盘的猴子12 小时前
Spring MVC 详解(一):全注解开发与请求响应处理
java·spring·mvc
counting money12 小时前
SpringBoot 项目创建(IDEA不全,还需要修改)
java·spring boot·spring·maven
阿部多瑞 ABU13 小时前
从0到1:用 Spring Boot 3.4 + Vue3 做一个能“智能排道次“的运动会编排系统(附核心算法)
java·spring boot·后端·算法·spring