摘要
本文聚焦于 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