跳到主要內容
Open In ColabOpen on GitHub

如何儲存和載入 LangChain 物件

LangChain 類別實作了用於序列化的標準方法。使用這些方法序列化 LangChain 物件具有一些優勢

  • 密鑰(例如 API 金鑰)與其他參數分開,並且可以在反序列化時載回物件;
  • 反序列化在套件版本之間保持相容,因此使用一個 LangChain 版本序列化的物件可以使用另一個版本正確地反序列化。

若要使用此系統儲存和載入 LangChain 物件,請使用 langchain-coreload 模組中的 dumpddumpsloadloads 函數。這些函數支援 JSON 和 JSON 可序列化物件。

所有從 Serializable 繼承的 LangChain 物件都是 JSON 可序列化的。範例包括 訊息文件物件(例如,從 檢索器 返回的物件),以及大多數 可執行物件,例如聊天模型、檢索器和使用 LangChain 運算式語言實作的

下面我們將逐步介紹一個簡單的 LLM 鏈範例。

注意

使用 loadloads 進行反序列化可以實例化任何可序列化的 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'}

載入物件

loadloads 中指定 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'

此頁面是否對您有幫助?