总结之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 秒
相关推荐
kussmcx8 分钟前
开始尝试从0写一个项目--后端(一)
java·spring·maven
yogima17 分钟前
在Spring Data JPA中使用@Query注解
java·数据库·spring
时间瑾1 小时前
SpringMVC的视图
spring·springmvc
Hugo_Hoo1 小时前
构建LangChain应用程序的示例代码:53、利用多模态大型语言模型在RAG应用中处理混合文档的示例
人工智能·langchain·ai编程
人工智能小豪2 小时前
LLM大模型企业应用实战-----为Langchain Agent添加记忆功能
人工智能·langchain·大模型·llm·私有化部署·产品经理·ai大模型
高级程序源2 小时前
springboot学生档案信息管理系统-计算机毕业设计源码96509
java·spring boot·spring·eclipse·mybatis·idea
jupiter_8882 小时前
spring tx @Transactional 详解 `Advisor`、`Target`、`ProxyFactory
spring·事务·aop
charles_vaez4 小时前
开源模型应用落地-FastAPI-助力模型交互-WebSocket篇(五)
深度学习·websocket·语言模型·langchain·fastapi
zhangkai__4 小时前
SpringCloud Feign 报错 Request method ‘POST‘ not supported 的解决办法
python·spring·spring cloud
写代码的中青年5 小时前
Semantic Kernel:微软大模型开发框架——LangChain 替代
人工智能·python·microsoft·langchain·大模型·llm