自然语言处理从入门到应用——LangChain:提示(Prompts)-[提示模板:序列化提示信息]

分类目录:《自然语言处理从入门到应用》总目录


将提示信息存储为文件而不是Python代码通常更好。这样可以方便共享、存储和版本控制提示信息。本文介绍了如何在LangChain中进行提示信息的序列化,包括不同类型的提示信息和不同的序列化选项。

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

  • 支持JSON和YAML。LangChain希望支持在磁盘上易于阅读的序列化方法,而YAML和JSON是其中两种最受欢迎的方法。需要注意的是,此规则适用于提示信息。对于其他内容(例如示例),可能支持不同的序列化方法。
  • LangChain支持在一个文件中指定所有内容,或者将不同的组件(模板、示例等)存储在不同的文件中并进行引用。对于某些情况,将所有内容存储在一个文件中可能是最合适的,但对于其他情况,将某些内容拆分开(长模板、大型示例、可重用组件)可能更好。而LangChain同时支持这两种方式。

LangChain还提供了一个单一的入口点,用于从磁盘加载提示信息,从而轻松加载任何类型的提示信息。

dart 复制代码
# 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.
从文件加载

下面是将模板存储在单独文件中,并在配置中引用该文件的示例。需要注意的是,键从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.

FewShotPromptTemplate

本部分介绍加载FewShotPromptTemplate的示例。下面是SON本地文件的示例:

本地文件:

复制代码
!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 Example的示例。

本地文件:

复制代码
!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 Example的示例。

本地文件:

复制代码
!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:

带有OutputParser的PromptTemplate

这是一个从文件加载PromptTemplateOutputParser的示例。

本地文件:

复制代码
! cat prompt_with_output_parser.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"
    }

输入:

复制代码
prompt = load_prompt("prompt_with_output_parser.json")
prompt.output_parser.parse("George Washington was born in 1732 and died in 1799.\nScore: 1/2")
    {'answer': 'George Washington was born in 1732 and died in 1799.',
     'score': '1/2'}

参考文献:

1\] LangChain官方网站:https://www.langchain.com/ \[2\] LangChain 🦜️🔗 中文网,跟着LangChain一起学LLM/GPT开发:https://www.langchain.com.cn/ \[3\] LangChain中文网 - LangChain 是一个用于开发由语言模型驱动的应用程序的框架:http://www.cnlangchain.com/

相关推荐
kngines6 分钟前
【字节跳动】数据挖掘面试题0007:Kmeans原理,何时停止迭代
人工智能·数据挖掘·kmeans
Kali_079 分钟前
使用 Mathematical_Expression 从零开始实现数学题目的作答小游戏【可复制代码】
java·人工智能·免费
贾全16 分钟前
第十章:HIL-SERL 真实机器人训练实战
人工智能·深度学习·算法·机器学习·机器人
每日摸鱼大王21 分钟前
互联网摸鱼日报(2025-07-01)
人工智能
GIS小天31 分钟前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年7月4日第128弹
人工智能·算法·机器学习·彩票
我是小哪吒2.042 分钟前
书籍推荐-《对抗机器学习:攻击面、防御机制与人工智能中的学习理论》
人工智能·深度学习·学习·机器学习·ai·语言模型·大模型
慕婉03071 小时前
深度学习前置知识全面解析:从机器学习到深度学习的进阶之路
人工智能·深度学习·机器学习
荔枝吻1 小时前
【AI总结】Git vs GitHub vs GitLab:深度解析三者联系与核心区别
人工智能·git·github
Jamie201901062 小时前
高档宠物食品对宠物的健康益处有哪些?
大数据·人工智能
云卓SKYDROID2 小时前
无人机载重模块技术要点分析
人工智能·无人机·科普·高科技·云卓科技