LangChain中的缓存机制详解

概要

在处理大规模语言模型(LLMs)时,频繁的API调用不仅耗费时间和金钱,还可能导致不必要的延迟。为了解决这个问题,LangChain 提供了一种缓存机制,通过存储先前请求的结果来避免重复调用相同的API。本文将详细介绍 LangChain 的缓存机制及其使用方法。

缓存的重要性
缓存对于提高应用程序的性能和减少成本有着重要的意义:

节省资金:如果您的应用程序频繁请求相同的完成结果,缓存可以帮助减少对LLM提供商的API调用次数,从而节省资金。
加速应用:通过减少API调用次数,缓存还可以加快应用程序的响应速度,提升用户体验。

整体架构流程

启用缓存
启用LangChain的缓存功能非常简单,只需几行代码即可完成。下面我们将通过具体的例子来展示如何启用内存缓存。

首先,我们需要初始化一个ChatOpenAI实例,这将是我们的LLM客户端:

然后,我们可以尝试不使用缓存的情况下调用一次:

# 初始化客户端
from langchain_community.llms.ollama import Ollama

ollama_client = Ollama(model="qwen:7b")

ollama_client.invoke("请问2只兔子有多少条腿?")

接下来,我们将启用内存缓存:

from langchain.globals import set_llm_cache
from langchain.cache import InMemoryCache

set_llm_cache(InMemoryCache())

然后创建一个请求链

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_template("请根据下面的主题写一篇小红书营销的短文: {topic}")
output_parser = StrOutputParser()

chain = prompt | ollama_client | output_parser

首次调用请求链

chain.invoke({"topic": "康师傅绿茶"})

次调用相同的主题,这次应该从缓存中获取结果:

chain.invoke({"topic": "康师傅绿茶"})

可以看到,第二次调用的速度更快,因为它直接从缓存中读取了结果。

SQLite 缓存

除了内存缓存之外,LangChain 还支持使用 SQLite 数据库存储缓存。SQLite 是一种轻量级的数据库,非常适合用于缓存数据,特别是当需要持久化存储时。

启用 SQLite 缓存
启用 SQLite 缓存的步骤与内存缓存类似,只需更改缓存的类型即可:

from langchain.cache import SQLiteCache

set_llm_cache(SQLiteCache(database_path="./db/langchain.db"))

现在,我们可以使用 SQLite 缓存来处理一个新的请求:

chain.invoke({"topic": "旺仔小馒头"})

再次调用相同的主题,这次也应该从缓存中获取结果:

chain.invoke({"topic": "旺仔小馒头"})

小结

通过启用LangChain的缓存功能,您可以显著减少对LLM提供商的API调用次数,从而节省成本并提高应用程序的响应速度。本文介绍了如何使用内存缓存和SQLite缓存两种方式来实现这一目标。希望这篇博客能够帮助您更好地理解和应用LangChain的缓存机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值