Prompt Serialization in LangChain

https://python.langchain.com.cn/docs/modules/model_io/prompts/prompt_templates/prompt_serialization

Prompt Serialization in LangChain

Storing prompts as files (instead of writing them directly in Python code) is often better---it makes prompts easier to share, store, and track versions. This guide explains how to serialize (save) and deserialize (load) prompts in LangChain, including different prompt types and serialization options. All content follows the original examples and code without changes or omissions.

Core Design Principles of Serialization

LangChain's prompt serialization follows three key rules:

  1. Supports JSON and YAML: Both formats are human-readable, making them ideal for storing prompts.
  2. Flexible file storage: You can store all prompt components (template, examples, etc.) in one file, or split them into separate files (useful for long templates or reusable parts).
  3. Single loading entry point : Use the load_prompt function to load any type of prompt---no need for different functions for different prompt types.

1. Serialize/Deserialize PromptTemplate

PromptTemplate is the basic prompt type. Below are examples of loading it from YAML, JSON, and a separate template file.

Step 1: Import the load_prompt function

All prompts are loaded with this single function:

python 复制代码
from langchain.prompts import load_prompt

Example 1: Load PromptTemplate from YAML

First, create a YAML file (simple_prompt.yaml) with the prompt details. The !cat command shows the file content (as in the original source):

shell 复制代码
!cat simple_prompt.yaml

File content (output of !cat):

yaml 复制代码
_type: prompt
input_variables:
    ["adjective", "content"]
template: 
    Tell me a {adjective} joke about {content}.

Load and use the prompt:

python 复制代码
prompt = load_prompt("simple_prompt.yaml")
print(prompt.format(adjective="funny", content="chickens"))

Output:

复制代码
Tell me a funny joke about chickens.

Example 2: Load PromptTemplate from JSON

Create a JSON file (simple_prompt.json):

shell 复制代码
!cat simple_prompt.json

File content (output of !cat):

json 复制代码
{
    "_type": "prompt",
    "input_variables": ["adjective", "content"],
    "template": "Tell me a {adjective} joke about {content}."
}

Load and use the prompt:

python 复制代码
prompt = load_prompt("simple_prompt.json")
print(prompt.format(adjective="funny", content="chickens"))

Output:

复制代码
Tell me a funny joke about chickens.

Example 3: Load Template from a Separate File

For long templates, store the template text in a separate file (e.g., simple_template.txt), then reference it in the JSON/YAML config (use template_path instead of template).

  1. First, create the template file:
shell 复制代码
!cat simple_template.txt

File content (output of !cat):

复制代码
Tell me a {adjective} joke about {content}.
  1. Create a JSON config file (simple_prompt_with_template_file.json) that references the template:
shell 复制代码
!cat simple_prompt_with_template_file.json

File content (output of !cat):

json 复制代码
{
    "_type": "prompt",
    "input_variables": ["adjective", "content"],
    "template_path": "simple_template.txt"
}
  1. Load and use the prompt:
python 复制代码
prompt = load_prompt("simple_prompt_with_template_file.json")
print(prompt.format(adjective="funny", content="chickens"))

Output:

复制代码
Tell me a funny joke about chickens.

2. Serialize/Deserialize FewShotPromptTemplate

FewShotPromptTemplate includes examples to guide the model (e.g., for antonyms, translations). Below are examples of loading it from files, with examples stored separately or inline.

First: Prepare Example Files

First, create files to store examples (used in later examples).

Example File 1: examples.json

shell 复制代码
!cat examples.json

File content (output of !cat):

json 复制代码
[
    {"input": "happy", "output": "sad"},
    {"input": "tall", "output": "short"}
]

Example File 2: examples.yaml

shell 复制代码
!cat examples.yaml

File content (output of !cat):

yaml 复制代码
- input: happy
  output: sad
- input: tall
  output: short

Example 1: Load FewShotPromptTemplate from YAML (with JSON examples)

Create a YAML config file (few_shot_prompt.yaml) that references examples.json:

shell 复制代码
!cat few_shot_prompt.yaml

File content (output of !cat):

yaml 复制代码
_type: few_shot
input_variables:
    ["adjective"]
prefix: 
    Write antonyms for the following words.
example_prompt:
    _type: prompt
    input_variables:
        ["input", "output"]
    template:
        "Input: {input}\nOutput: {output}"
examples:
    examples.json
suffix:
    "Input: {adjective}\nOutput:"

Load and use the prompt:

python 复制代码
prompt = load_prompt("few_shot_prompt.yaml")
print(prompt.format(adjective="funny"))

Output:

复制代码
Write antonyms for the following words.
Input: happy
Output: sad
Input: tall
Output: short
Input: funny
Output:

Example 2: Load FewShotPromptTemplate from YAML (with YAML examples)

Create a YAML config file (few_shot_prompt_yaml_examples.yaml) that references examples.yaml:

shell 复制代码
!cat few_shot_prompt_yaml_examples.yaml

File content (output of !cat):

yaml 复制代码
_type: few_shot
input_variables:
    ["adjective"]
prefix: 
    Write antonyms for the following words.
example_prompt:
    _type: prompt
    input_variables:
        ["input", "output"]
    template:
        "Input: {input}\nOutput: {output}"
examples:
    examples.yaml
suffix:
    "Input: {adjective}\nOutput:"

Load and use the prompt:

python 复制代码
prompt = load_prompt("few_shot_prompt_yaml_examples.yaml")
print(prompt.format(adjective="funny"))

Output:

复制代码
Write antonyms for the following words.
Input: happy
Output: sad
Input: tall
Output: short
Input: funny
Output:

Example 3: Load FewShotPromptTemplate from JSON

Create a JSON config file (few_shot_prompt.json):

shell 复制代码
!cat few_shot_prompt.json

File content (output of !cat):

json 复制代码
{
    "_type": "few_shot",
    "input_variables": ["adjective"],
    "prefix": "Write antonyms for the following words.",
    "example_prompt": {
        "_type": "prompt",
        "input_variables": ["input", "output"],
        "template": "Input: {input}\nOutput: {output}"
    },
    "examples": "examples.json",
    "suffix": "Input: {adjective}\nOutput:"
}

Load and use the prompt:

python 复制代码
prompt = load_prompt("few_shot_prompt.json")
print(prompt.format(adjective="funny"))

Output:

复制代码
Write antonyms for the following words.
Input: happy
Output: sad
Input: tall
Output: short
Input: funny
Output:

Example 4: Embed Examples Directly in the Config

Instead of referencing an external example file, embed examples directly in the JSON config (few_shot_prompt_examples_in.json):

shell 复制代码
!cat few_shot_prompt_examples_in.json

File content (output of !cat):

json 复制代码
{
    "_type": "few_shot",
    "input_variables": ["adjective"],
    "prefix": "Write antonyms for the following words.",
    "example_prompt": {
        "_type": "prompt",
        "input_variables": ["input", "output"],
        "template": "Input: {input}\nOutput: {output}"
    },
    "examples": [
        {"input": "happy", "output": "sad"},
        {"input": "tall", "output": "short"}
    ],
    "suffix": "Input: {adjective}\nOutput:"
}

Load and use the prompt:

python 复制代码
prompt = load_prompt("few_shot_prompt_examples_in.json")
print(prompt.format(adjective="funny"))

Output:

复制代码
Write antonyms for the following words.
Input: happy
Output: sad
Input: tall
Output: short
Input: funny
Output:

Example 5: Load example_prompt from a Separate File

For reusable example_prompt (the template that formats individual examples), store it in a separate file and reference it with example_prompt_path (instead of example_prompt).

  1. Create example_prompt.json (the reusable example template):
shell 复制代码
!cat example_prompt.json

File content (output of !cat):

json 复制代码
{
    "_type": "prompt",
    "input_variables": ["input", "output"],
    "template": "Input: {input}\nOutput: {output}" 
}
  1. Create the FewShotPromptTemplate config (few_shot_prompt_example_prompt.json):
shell 复制代码
!cat few_shot_prompt_example_prompt.json

File content (output of !cat):

json 复制代码
{
    "_type": "few_shot",
    "input_variables": ["adjective"],
    "prefix": "Write antonyms for the following words.",
    "example_prompt_path": "example_prompt.json",
    "examples": "examples.json",
    "suffix": "Input: {adjective}\nOutput:"
}
  1. Load and use the prompt:
python 复制代码
prompt = load_prompt("few_shot_prompt_example_prompt.json")
print(prompt.format(adjective="funny"))

Output:

复制代码
Write antonyms for the following words.
Input: happy
Output: sad
Input: tall
Output: short
Input: funny
Output:

3. Serialize/Deserialize PromptTemplate with OutputParser

You can include an OutputParser (to extract structured data from model outputs) in the prompt file. Below is an example with a regex-based parser.

Example: Load Prompt with OutputParser from JSON

  1. Create prompt_with_output_parser.json (includes the parser config):
shell 复制代码
! cat prompt_with_output_parser.json

File content (output of !cat):

json 复制代码
{
    "input_variables": [
        "question",
        "student_answer"
    ],
    "output_parser": {
        "regex": "(.*?)\\nScore: (.*)",
        "output_keys": [
            "answer",
            "score"
        ],
        "default_output_key": null,
        "_type": "regex_parser"
    },
    "partial_variables": {},
    "template": "Given the following question and student answer, provide a correct answer and score the student answer.\nQuestion: {question}\nStudent Answer: {student_answer}\nCorrect Answer:",
    "template_format": "f-string",
    "validate_template": true,
    "_type": "prompt"
}
  1. Load the prompt and use the parser:
python 复制代码
prompt = load_prompt("prompt_with_output_parser.json")

# Parse a sample model output
result = prompt.output_parser.parse(
    "George Washington was born in 1732 and died in 1799.\nScore: 1/2"
)
print(result)

Output:

复制代码
{'answer': 'George Washington was born in 1732 and died in 1799.', 'score': '1/2'}
相关推荐
廿一夏5 小时前
MySql存储引擎与索引
数据库·sql·mysql
lzhdim6 小时前
SQL 入门 15:SQL 事务:从 ACID 到四种常见的并发问题
数据库·sql
瀚高PG实验室7 小时前
瀚高企业版V9.1.1在pg_restore还原备份文件时提示extract函数语法问题
数据库·瀚高数据库
TDengine (老段)7 小时前
TDengine Tag 设计哲学与 Schema 变更机制
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
YOU OU8 小时前
Spring IoC&DI
java·数据库·spring
Muscleheng9 小时前
Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错
数据库·postgresql
GHL28427109010 小时前
Logon failed, use ctrl+c to cancel basic credential prompt
学习·prompt
共享家952710 小时前
Langchain的学习(二)
学习·langchain
罗超驿10 小时前
18.事务的隔离性和隔离级别:MySQL面试高频考点全解析
数据库·mysql·面试
jran-10 小时前
Redis 命令
数据库·redis·缓存