Skip to main content

序列化

本文档介绍了如何将链式结构序列化到磁盘和从磁盘反序列化。我们使用的序列化格式是json或yaml。目前,只有一些链式结构支持这种类型的序列化。随着时间的推移,我们将增加支持的链式结构数量。

将链式结构保存到磁盘

首先,让我们了解如何将链式结构保存到磁盘。可以使用.save方法,并指定一个带有json或yaml扩展名的文件路径。

from langchain import PromptTemplate, OpenAI, LLMChain

template = """Question: {question}

Answer: Let's think step by step."""
prompt = PromptTemplate(template=template, input_variables=["question"])
llm_chain = LLMChain(prompt=prompt, llm=OpenAI(temperature=0), verbose=True)

llm_chain.save("llm_chain.json")

现在让我们看一下保存文件的内容

cat llm_chain.json

{
"memory": null,
"verbose": true,
"prompt": {
"input_variables": [
"question"
],
"output_parser": null,
"template": "Question: {question}\n\nAnswer: Let's think step by step.",
"template_format": "f-string"
},
"llm": {
"model_name": "text-davinci-003",
"temperature": 0.0,
"max_tokens": 256,
"top_p": 1,
"frequency_penalty": 0,
"presence_penalty": 0,
"n": 1,
"best_of": 1,
"request_timeout": null,
"logit_bias": {},
"_type": "openai"
},
"output_key": "text",
"_type": "llm_chain"
}

从磁盘加载链式结构

我们可以使用load_chain方法从磁盘加载链式结构。

from langchain.chains import load_chain

API参考:

chain = load_chain("llm_chain.json")

然后我们可以运行它

chain.run("whats 2 + 2")
> 进入新的LLMChain链...
格式化后的提示:
Question: whats 2 + 2

Answer: Let's think step by step.

> 完成链。

' 2 + 2 = 4'

分别保存组件

在上面的示例中,我们可以看到提示和llm配置信息保存在同一个json文件中。或者,我们可以将它们拆分并分别保存。这通常有助于使保存的组件更加模块化。为了做到这一点,我们只需要指定llm_path而不是llm组件,以及prompt_path而不是prompt组件。

llm_chain.prompt.save("prompt.json")
cat prompt.json

{
"input_variables": [
"question"
],
"output_parser": null,
"template": "Question: {question}\n\nAnswer: Let's think step by step.",
"template_format": "f-string"
}
llm_chain.llm.save("llm.json")
cat llm.json

{
"model_name": "text-davinci-003",
"temperature": 0.0,
"max_tokens": 256,
"top_p": 1,
"frequency_penalty": 0,
"presence_penalty": 0,
"n": 1,
"best_of": 1,
"request_timeout": null,
"logit_bias": {},
"_type": "openai"
}
config = {
"memory": None,
"verbose": True,
"prompt_path": "prompt.json",
"llm_path": "llm.json",
"output_key": "text",
"_type": "llm_chain",
}
import json

with open("llm_chain_separate.json", "w") as f:
json.dump(config, f, indent=2)
cat llm_chain_separate.json

{
"memory": null,
"verbose": true,
"prompt_path": "prompt.json",
"llm_path": "llm.json",
"output_key": "text",
"_type": "llm_chain"
}

然后我们可以以相同的方式加载它

chain = load_chain("llm_chain_separate.json")

然后我们可以运行它

chain.run("whats 2 + 2")
> 进入新的LLMChain链...
格式化后的提示:
Question: whats 2 + 2

Answer: Let's think step by step.

> 完成链。

' 2 + 2 = 4'