6大核心模块(Modules)
示例(Examples)
提示序列化(Prompt Serialization)

LangChain

序列化

通常最好将提示存储为文件而不是Python代码。这样做可以方便地共享、存储和版本控制提示。本教程介绍了如何在LangChain中执行此操作,涵盖了所有不同类型的提示和不同的序列化选项。

在高层次上,序列化应用以下设计原则:

  • 支持JSON和YAML。我们希望支持在磁盘上易于人类阅读的序列化方法,而YAML和JSON是两种最流行的方法。请注意,此规则适用于提示。对于其他资产(如示例),可能支持不同的序列化方法。

  • 我们支持在一个文件中指定所有内容,或者将不同的组件(模板、示例等)存储在不同的文件中并引用它们。对于某些情况,将所有内容存储在文件中是最合适的,但对于其他情况,拆分一些资产(长模板、大示例、可重用组件)可能更好。LangChain支持两种方式。

还有一个单一入口可以从硬盘加载提示,使得加载任何类型的提示变得容易。

# All prompts are loaded through the `load_prompt` function.
from langchain.prompts import load_prompt
 

PromptTemplate

本部分涵盖了加载PromptTemplate的示例。

从YAML中加载

这是从YAML加载PromptTemplate的示例。

!cat simple_prompt.yaml
 
_type: prompt
input_variables:
    ["adjective", "content"]
template: 
    Tell me a {adjective} joke about {content}.
 
prompt = load_prompt("simple_prompt.yaml")
print(prompt.format(adjective="funny", content="chickens"))
 
Tell me a funny joke about chickens.
 

从JSON中加载

这是从JSON加载PromptTemplate的示例。

!cat simple_prompt.json
 
{
    "_type": "prompt",
    "input_variables": ["adjective", "content"],
    "template": "Tell me a {adjective} joke about {content}."
}
 
prompt = load_prompt("simple_prompt.json")
print(prompt.format(adjective="funny", content="chickens"))
 

Tell me a funny joke about chickens.

Loading Template from a File#

这显示了将模板存储在单独的文件中,然后在配置中引用它的示例。请注意,键从template更改为template_path

!cat simple_template.txt
 
Tell me a {adjective} joke about {content}.
 
!cat simple_prompt_with_template_file.json
 
{
    "_type": "prompt",
    "input_variables": ["adjective", "content"],
    "template_path": "simple_template.txt"
}
 
prompt = load_prompt("simple_prompt_with_template_file.json")
print(prompt.format(adjective="funny", content="chickens"))
 
Tell me a funny joke about chickens.
 

few shot prompt模板的示例#

本节介绍了加载few shot prompt模板的示例。

示例#

这显示了json格式的示例看起来像什么。

!cat examples.json
 
[
    {"input": "happy", "output": "sad"},
    {"input": "tall", "output": "short"}
]
 

这是相同的示例存储为yaml可能看起来像什么。

!cat examples.yaml
 
- input: happy
  output: sad
- input: tall
  output: short
 

从YAML加载#

这显示了从YAML加载few shot示例的示例。

!cat few_shot_prompt.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:"
 
prompt = load_prompt("few_shot_prompt.yaml")
print(prompt.format(adjective="funny"))
 
Write antonyms for the following words.
 
Input: happy
Output: sad
 
Input: tall
Output: short
 
Input: funny
Output:
 

如果您从yaml文件加载示例,则同样适用。

!cat few_shot_prompt_yaml_examples.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:"
 
prompt = load_prompt("few_shot_prompt_yaml_examples.yaml")
print(prompt.format(adjective="funny"))
 
Write antonyms for the following words.
 
Input: happy
Output: sad
 
Input: tall
Output: short
 
Input: funny
Output:
 

从JSON加载#

这显示了从JSON加载few shot示例的示例。

!cat few_shot_prompt.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:"
}   
 
prompt = load_prompt("few_shot_prompt.json")
print(prompt.format(adjective="funny"))
 
Write antonyms for the following words.
 
Input: happy
Output: sad
 
Input: tall
Output: short
 
Input: funny
Output:
 

在配置中的示例#

这是一个直接在配置文件中引用示例的示例。

!cat few_shot_prompt_examples_in.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:"
}   
 
prompt = load_prompt("few_shot_prompt_examples_in.json")
print(prompt.format(adjective="funny"))
 
Write antonyms for the following words.
 
Input: happy
Output: sad
 
Input: tall
Output: short
 
Input: funny
Output:
 

来自文件的示例提示#

这是一个从单独的文件加载用于格式化示例的PromptTemplate的示例。请注意,键从example_prompt更改为example_prompt_path

!cat example_prompt.json
 
{
    "_type": "prompt",
    "input_variables": ["input", "output"],
    "template": "Input: {input}\nOutput: {output}" 
}
 
!cat few_shot_prompt_example_prompt.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:"
}   
 
prompt = load_prompt("few_shot_prompt_example_prompt.json")
print(prompt.format(adjective="funny"))
 
Write antonyms for the following words.
 
Input: happy
Output: sad
 
Input: tall
Output: short
 
Input: funny
Output: