当前位置: 首页 > news >正文

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

相关文章:

  • 2025.5.8总结(中期审视)
  • 关于MySQL 数据库故障排查指南
  • uniapp|获取当前用户定位、与系统设定位置计算相隔米数、实现打卡签到(可自定义设定位置、位置有效范围米数)
  • #define ccw (0)和#define ccw 0什么区别
  • javaer快速从idea转战vscode
  • SpringBoot应急知识学习系统开发实现
  • AI CUBE 使用指南 目标检测格式范例 AI cube 报错数据集不合规范,请清洗数据集
  • 简易的考试系统设计(Web实验)
  • 差分OPA verilogaA 模型
  • uniapp自定义步骤条(可二开进行调试)
  • 幂等的几种解决方案以及实践
  • Memgraph 的安装教程
  • node.js 实战——在express 中将input file 美化,并完成裁剪、上传进度条
  • uni-pages-hot-modules插件:uni-app的pages.json的模块化及模块热重载
  • python实现的音乐播放器
  • 【Pandas】pandas DataFrame abs
  • 无实体对话式社交机器人 拟人化印象形成机制:基于多模态交互与文化适配的拓展研究
  • 使用ESPHome烧录固件到ESP32-C3并接入HomeAssistant
  • 使用pytorch保存和加载预训练的模型方法
  • 基于Transformer的多资产收益预测模型实战(附PyTorch实现与避坑指南)
  • 经济日报刊文:品牌经营不能让情怀唱“独角戏”
  • 第四轮伊美核谈判将于11日在阿曼举行
  • 方正证券总裁何亚刚到龄退休,54岁副总裁姜志军接棒
  • 开局良好,我国第一季度广告业务收入保持较快增速
  • 新华时评:直播间里“家人”成“韭菜”,得好好管!
  • 招行:拟出资150亿元全资发起设立金融资产投资公司