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
-