【LangChain指南】大语言模型(LLMs)
今天我们将深入探讨LangChain框架中关于大型语言模型(LLM)的几个核心高级主题:缓存机制、自定义LLM、流式传输以及本地LLM的运行。掌握这些内容,能让你构建出更高效、更灵活、更具成本效益的AI应用。
第一部分:LLM缓存机制 —— 为你的应用提速降本
在实际应用中,我们经常会遇到对相同或相似提示(prompt)进行重复调用的情况。每一次调用都意味着向API提供商付费和等待网络响应,这无疑会增加成本和延迟。
LangChain提供了一个强大的可选缓存层来解决这个问题 。它的核心思想很简单:第一次调用LLM时,将输入和输出结果存储起来;当下次遇到相同的输入时,直接从缓存中读取结果,从而节省API调用费用并显著加快应用程序的响应速度 。
LangChain支持多种缓存后端,最常用的是内存缓存(InMemoryCache
)和SQLite数据库缓存(SQLiteCache
)。内存缓存速度快,但程序重启后会丢失;SQLite缓存则能持久化存储,适合生产环境。
代码演示:
from langchain_core.globals import set_llm_cache
from langchain_core.caches import InMemoryCache, SQLiteCache
from langchain_openai import OpenAI# 初始化一个OpenAI LLM实例
llm = OpenAI(model="gpt-3.5-turbo-instruct")# --- 演示1:使用内存缓存 ---
print("=== 使用内存缓存 ===")
set_llm_cache(InMemoryCache())# 第一次调用:未命中缓存,会真实调用API
print("第一次调用:")
result1 = llm.invoke("讲个笑话")
print(result1)# 第二次调用:命中缓存,速度极快
print("\n第二次调用 (应命中缓存):")
result2 = llm.invoke("讲个笑话")
print(result2)# --- 演示2:使用SQLite缓存 ---
print("\n=== 使用SQLite缓存 ===")
# 设置SQLite缓存,数据会保存在 .langchain.db 文件中
set_llm_cache(SQLiteCache(database_path=".langchain.db"))# 第一次调用:未命中缓存
print("第一次调用:")
result3 = llm.invoke("再讲个不同的笑话")
print(result3)# 第二次调用:命中缓存
print("\n第二次调用 (应命中缓存):")
result4