如何儲存和載入 LangChain 物件
LangChain 類別實作了用於序列化的標準方法。使用這些方法序列化 LangChain 物件具有一些優勢
- 密鑰(例如 API 金鑰)與其他參數分開,並且可以在反序列化時載回物件;
- 反序列化在套件版本之間保持相容,因此使用一個 LangChain 版本序列化的物件可以使用另一個版本正確地反序列化。
若要使用此系統儲存和載入 LangChain 物件,請使用 langchain-core
的 load 模組中的 dumpd
、dumps
、load
和 loads
函數。這些函數支援 JSON 和 JSON 可序列化物件。
所有從 Serializable 繼承的 LangChain 物件都是 JSON 可序列化的。範例包括 訊息、文件物件(例如,從 檢索器 返回的物件),以及大多數 可執行物件,例如聊天模型、檢索器和使用 LangChain 運算式語言實作的 鏈。
下面我們將逐步介紹一個簡單的 LLM 鏈範例。
注意
使用 load
和 loads
進行反序列化可以實例化任何可序列化的 LangChain 物件。僅將此功能與受信任的輸入一起使用!
反序列化是一項 Beta 功能,可能會有所變更。
from langchain_core.load import dumpd, dumps, load, loads
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
prompt = ChatPromptTemplate.from_messages(
[
("system", "Translate the following into {language}:"),
("user", "{text}"),
],
)
llm = ChatOpenAI(model="gpt-4o-mini", api_key="llm-api-key")
chain = prompt | llm
儲存物件
儲存為 json
string_representation = dumps(chain, pretty=True)
print(string_representation[:500])
{
"lc": 1,
"type": "constructor",
"id": [
"langchain",
"schema",
"runnable",
"RunnableSequence"
],
"kwargs": {
"first": {
"lc": 1,
"type": "constructor",
"id": [
"langchain",
"prompts",
"chat",
"ChatPromptTemplate"
],
"kwargs": {
"input_variables": [
"language",
"text"
],
"messages": [
{
"lc": 1,
"type": "constructor",
儲存為 JSON 可序列化的 Python 字典
dict_representation = dumpd(chain)
print(type(dict_representation))
<class 'dict'>
儲存到磁碟
import json
with open("/tmp/chain.json", "w") as fp:
json.dump(string_representation, fp)
請注意,API 金鑰會從序列化表示中省略。被視為密鑰的參數由 LangChain 物件的 .lc_secrets
屬性指定
chain.last.lc_secrets
{'openai_api_key': 'OPENAI_API_KEY'}
載入物件
在 load
和 loads
中指定 secrets_map
會將對應的密鑰載入到反序列化的 LangChain 物件上。
從字串載入
chain = loads(string_representation, secrets_map={"OPENAI_API_KEY": "llm-api-key"})
從字典載入
chain = load(dict_representation, secrets_map={"OPENAI_API_KEY": "llm-api-key"})
從磁碟載入
with open("/tmp/chain.json", "r") as fp:
chain = loads(json.load(fp), secrets_map={"OPENAI_API_KEY": "llm-api-key"})
請注意,我們恢復了指南開頭指定的 API 金鑰
chain.last.openai_api_key.get_secret_value()
'llm-api-key'