乐于分享
好东西不私藏

LangChain 序列化模板使用

LangChain 序列化模板使用

点击上方↑↑↑“又见清欢”关注我

作者 | 若水如风

来源 | 若水如风

(公众号ID:gh_6f1c1262723c)

               🌿人间有味是清欢🌿

在 LangChain 中,将提示词模板(Prompt Templates)或链(Chains)保存为文件并在后续加载使用,这一过程被称为“序列化”。将提示信息存储为文件而不是硬编码在 Python 代码中,不仅更方便共享、存储和版本控制,还能让非开发人员(如产品经理)直接修改提示词配置。

LangChain 的序列化主要支持 JSON 和 YAML 两种格式。以下是具体的使用方法:

1. 基础 PromptTemplate 的序列化与加载

你可以将整个 PromptTemplate 的配置(包括输入变量和模板文本)保存在一个文件中。

*   YAML 格式示例:

        # simple_prompt.yaml

    _type: prompt

    input_variables: ["adjective", "content"]

    template: Tell me a {adjective} joke about {content}.

*   JSON 格式示例:

        // simple_prompt.json

    {

      "_type": "prompt",

      "input_variables": ["adjective", "content"],

      "template": "Tell me a {adjective} joke about {content}."

    }

*   Python 加载代码:

    无论是 JSON 还是 YAML,LangChain 都提供了一个统一的入口函数 load_prompt 来进行反序列化加载:

        from langchain.prompts import load_prompt

prompt= load_prompt("simple_prompt.yaml") 

    print(prompt.format(adjective="funny", content="chickens"))

    # 输出: Tell me a funny joke about chickens.

2. 分离配置文件与模板内容

当模板文本非常长时,将其与配置属性放在同一个文件中会显得臃肿。LangChain 支持将纯文本模板独立出来,通过 template_path 字段进行引用:

*纯文本模板文件 (simple_template.txt):

        Tell me a {adjective} joke about {content}.

*配置文件 (simple_prompt_with_template_file.json):

        {

      "_type": "prompt",

"input_variables": ["adjective", "content"],

  "template_path": "simple_template.txt"

    }

同样使用

 load_prompt("simple_prompt_with_template_file.json") 即可正常加载并填充变量。

3. 包含输出解析器(Output Parsers)的高级模板

如果模板需要配合特定的输出解析器(例如使用正则表达式提取特定字段),这些复杂的结构同样可以被完整序列化到 JSON 中:

{

  "input_variables": ["question", "student_answer"],

  "output_parser": {

    "regex": "(.*?)\nScore: (.*)",

    "output_keys": ["answer", "score"],

    "_type": "regex_parser"

  },

  "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:",

  "_type": "prompt"

}

加载后,可以直接调用 prompt.output_parser.parse(...) 对大模型的返回结果进行结构化解析。

💡 补充:核心对象的序列化方法

除了针对提示词的 load_prompt,如果你需要序列化整个 LLM 链条(Chain)或更复杂的对象,可以使用 langchain_core.load 模块提供的 dumpd、dumps、load 和 loads 函数。这种高级序列化机制还有一个重要特性:安全性。它会自动将 API 密钥等机密信息从序列化数据中剥离,确保你在分享或保存配置文件时不会泄露敏感凭证。

相关学习资料