LangChain框架-PromptTemplate 详解
摘要
本文聚焦于 LangChain 框架中PromptTemplate提示词模板模块的深度解析,主要参考langchain_core.prompts源码模块与官方文档。系统梳理 LangChain 对提示词模板的封装逻辑与设计思路,旨在帮助读者构建全面、深入的知识体系,为高效运用LangChain 框架的提示词模板开发应用奠定坚实基础。
PromptTemplete 模块静态类图

BasePromptTemplate 继承树

BaseMessagePromptTemplate 继承树
上面的类图展示了 LangChain 中 Prompt Template 相关类的继承体系 。主要分为BasePromptTemplate 继承树和BaseMessagePromptTemplate 继承树。
BasePromptTemplate
BasePromptTemplate作为根类,定义了提示模板的基本属性和方法,它还提供了格式化提示、异步格式化提示、部分填充等方法。
相关子类
-
PipelinePromptTemplate:允许将多个提示模板组合在一起,构建复杂的提示。不过,该类已被弃用,从 0.3.22 版本开始不推荐使用,计划在 1.0 版本移除。 -
StringPromptTemplate:用于处理字符串类型的提示模板,它继承了BasePromptTemplate的基本功能,并提供了同步和异步格式化提示的方法,支持使用不同的字符串格式化语法,如 f - 字符串、Jinja2、Mustache 等。
StringPromptTemplate 的子类
-
PromptTemplate:最常用的提示模板类,它接受一个字符串模板和一组输入变量,通过格式化方法生成最终的提示字符串。支持 f - 字符串、Jinja2 和 Mustache 三种模板格式,但使用 Jinja2 时需要注意安全问题。 -
FewShotPromptTemplate:用于基于少量示例生成提示,通常用于需要提供示例来引导模型生成结果的场景。 -
FewShotPromptWithTemplates:与FewShotPromptTemplate类似,但支持使用模板来格式化示例。
BaseChatPromptTemplate
聊天提示模板的基类,派生出多个具体的聊天提示模板类。
-
AutoGPTPrompt:用于 AutoGPT 场景的特定提示模板。 -
FewShotChatMessagePromptTemplate:基于少样本学习的聊天提示模板类
-
ChatPromptTemplate:通用的聊天提示模板类,可用于构建多轮对话的提示。-
AgentScratchPadChatPromptTemplate:用于代理 scratch pad 场景的聊天提示模板。
-
BaseMessagePromptTemplate
消息提示模板的基类,定义了格式化消息的抽象方法。
-
MessagesPlaceholder:用于占位符的消息提示模板。 -
BaseStringMessagePromptTemplate:使用字符串提示模板的消息提示模板基类。 -
ChatMessagePromptTemplate:通用的聊天消息提示模板。 -
HumanMessagePromptTemplate:用于人类消息的提示模板。 -
AIMessagePromptTemplate:用于 AI 消息的提示模板。 -
SystemMessagePromptTemplate:用于系统消息的提示模板。
专用模板/工具
-
ImagePromptTemplate:专门用于处理图片,适配多模态大模型的Prompt。
-
load_prompt:从文件中读取模板
-
DictPromptTemplate:将模板组装成dict ,方便后续的取用
重点Template介绍
BasePromptTemplate
简介
BasePromptTemplate 是 LangChain 中用于所有提示模板的基类,它定义了提示模板的基本结构和行为,为创建和格式化提示提供了统一的接口。
主要属性
-
input_variables:一个字符串列表,包含了提示模板所需输入变量的名称。这些变量的值是格式化提示所必需的。 -
optional_variables:一个字符串列表,包含了可选的变量名称,用于占位符或MessagePlaceholder。这些变量会自动从提示中推断出来,用户不需要提供。 -
input_types:一个字典,指定了提示模板期望的变量类型。如果未提供,则所有变量都被假定为字符串类型。 -
output_parser:一个可选的BaseOutputParser对象,用于解析调用大语言模型(LLM)对格式化提示的输出。 -
partial_variables:一个字典,包含了提示模板携带的部分变量。这些部分变量会填充模板,使得用户在每次调用提示时不需要传递它们。 -
metadata:一个可选的字典,用于追踪提示的元数据。 -
tags:一个可选的字符串列表,用于追踪提示的标签。
主要方法
-
验证方法
-
validate_variable_names:验证变量名不包含受限名称,如"stop",并检查输入变量和部分变量是否有重叠。
-
-
命名空间与序列化方法
-
get_lc_namespace:返回 LangChain 对象的命名空间,即["langchain", "schema", "prompt_template"]。 -
is_lc_serializable:返回该类是否可序列化,返回值为True。
-
-
输入模式方法
-
get_input_schema:获取提示的输入模式,根据输入变量和可选变量创建一个BaseModel类型的输入模式。
-
-
输入验证与格式化方法
-
_validate_input:验证输入是否为字典类型,并检查是否缺少必需的输入变量。 -
_format_prompt_with_error_ha
-
