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

LangChain学习笔记--Model I/O 模块部分 1.5 Prompt Template(提示词模板)

LangChain学习笔记–Model IO 模块部分 1.5 Prompt Template提示词模板‍介绍​Prompt Template​ 可以理解为一种“提示词模板”。来自langchain_core.prompts中它的核心是把固定的提示内容先写好并预留几个可替换的位置等实际运行时再把具体内容填进去生成最终给模型的输入。它的主要作用有三点第一方便复用。同一类任务只需要换问题、上下文或主题时不必每次都重写整段提示词。第二让提示更清晰。可以把“固定指令”和“变化内容”分开结构更规整也更容易维护。第三便于和 LangChain 的其他组件配合。比如用户问题、检索到的资料、系统要求都可以统一填进模板再交给模型处理。简要说Prompt Template的价值就是把 prompt 从“临时拼接的文本”变成“可复用、可管理的模板”。如果你接着学 LangChain下一个常见问题就是它和ChatPromptTemplate有什么区别。有哪些常用的模板1. PromptTemplate最基础的文本模板。适合把一整段提示词写成固定格式再把变量填进去。适用场景单轮问答摘要翻译分类信息抽取2. ChatPromptTemplate专门给聊天模型用的模板。它不是一整块纯文本而是把 prompt 按角色拆成不同消息比如system系统要求human用户输入ai示例回答这是现在最常用的一类因为大多数模型都是聊天式接口。3. MessagesPlaceholder用于在聊天模板里插入一段“已有消息”。常见用途插入聊天历史插入 memory 里的上下文把前面对话接到当前 prompt 中它本质上不是单独完成任务的模板而是聊天模板里的一个占位组件。4. Few-shot Prompt Template用于在 prompt 里放多个示例让模型照着示例风格输出。适用场景固定输出格式分类任务信息抽取让模型模仿某种回答方式它的核心思想是先给几个例子再给新问题。‍PromptTemplate类的使用PromptTemplate类介绍fromtypingimportAnyfromlangchain_core.promptsimportPromptTemplate# # PromptTemplate 参数说明# # 标识规则:# [必需] : 定义模板时必须明确的参数# [常用] : 业务开发中高频使用的参数# [可选] : 按具体场景决定是否配置# [扩展] : 用于类型约束、解析、追踪等扩展能力# promptPromptTemplate(# -------------------------------------------------------------------------# template: str# -------------------------------------------------------------------------# [必需] [常用]## 作用:# 定义模板正文。## 使用方式:# 在字符串中使用 {变量名} 表示占位符。## 示例:# 请用{style}风格解释{topic}#template请用{style}风格解释{topic},# -------------------------------------------------------------------------# input_variables: list[str]# -------------------------------------------------------------------------# [常用]## 作用:# 声明模板渲染时需要提供的输入变量。## 使用方式:# 列表中的变量名必须与 template 中的占位符保持一致。## 注意:# - 少传变量会报错# - 变量名写错会报错## 示例:# template 中有 {style} 和 {topic}# 则 input_variables[style, topic]## 必填变量:# - style# - topic#input_variables[style,topic],# -------------------------------------------------------------------------# partial_variables: dict[str, Any]# -------------------------------------------------------------------------# [常用] [可选]## 作用:# 预先绑定部分变量减少重复传参。## 使用方式:# 将固定变量放入字典中在渲染时自动参与填充。## 示例:# partial_variables{role: Python教师}## 说明:# 如果 template 中包含 {role}且此处已提供 role# 则 format() / invoke() 时无需再次传入 role。#partial_variables{},# -------------------------------------------------------------------------# template_format: str# -------------------------------------------------------------------------# [常用] [可选]## 作用:# 指定模板解析格式。## 使用方式:# 根据模板语法选择解析器。## 可选值:# - f-string# - jinja2# - mustache## 示例:# template_formatf-string#template_formatf-string,# -------------------------------------------------------------------------# validate_template: bool# -------------------------------------------------------------------------# [常用] [可选]## 作用:# 在模板创建阶段校验模板内容与变量定义的一致性。## 使用方式:# 设置为 True 时会在初始化阶段检查占位符与变量声明。## 示例:# validate_templateTrue#validate_templateTrue,# -------------------------------------------------------------------------# optional_variables: list[str]# -------------------------------------------------------------------------# [可选] [扩展]## 作用:# 声明模板中的可选变量。## 使用方式:# 将允许缺省的变量名加入列表。## 示例:# optional_variables[context]#optional_variables[],# -------------------------------------------------------------------------# input_types: dict[str, Any]# -------------------------------------------------------------------------# [可选] [扩展]## 作用:# 描述输入变量的类型信息。## 使用方式:# 以变量名为键、类型为值进行声明。## 示例:# input_types{age: int, name: str}#input_types{},# -------------------------------------------------------------------------# output_parser: Any# -------------------------------------------------------------------------# [可选] [扩展]## 作用:# 为模板关联输出解析器。## 使用方式:# 将解析器对象传入该参数用于后续结果解析。## 示例:# output_parsersome_parser#output_parserNone,# -------------------------------------------------------------------------# metadata: dict[str, Any]# -------------------------------------------------------------------------# [可选] [扩展]## 作用:# 记录模板相关元信息。## 使用方式:# 以键值对形式附加调试、追踪或业务标识信息。## 示例:# metadata{scene: tutorial, version: v1}#metadata{},# -------------------------------------------------------------------------# tags: list[str]# -------------------------------------------------------------------------# [可选] [扩展]## 作用:# 为模板添加分类标签。## 使用方式:# 以列表形式添加标签字符串。## 示例:# tags[tutorial, prompt_template]#tags[],)# # 当前模板变量说明# # template:# 请用{style}风格解释{topic}## 输入变量:# style - [必需] 解释风格# topic - [必需] 解释主题## 说明:# 由于 partial_variables 未预绑定变量# 因此 style 和 topic 需要在渲染时显式提供。# resultprompt.format(style简洁,# [必需] 解释风格topicPromptTemplate,# [必需] 解释主题)print(result)# 输出:# 请用简洁风格解释PromptTemplate# # partial_variables 使用示例# # 说明:# role 在模板创建阶段已经预绑定# 因此渲染时只需要传入 topic。# prompt_with_partialPromptTemplate(template你是一名{role}请解释{topic},input_variables[topic],partial_variables{role:Python教师},template_formatf-string,validate_templateTrue,)result_with_partialprompt_with_partial.format(topicPromptTemplate,# [必需] 解释主题)print(result_with_partial)# 输出:# 你是一名Python教师请解释PromptTemplate# # optional_variables 使用示例# # 说明:# context 被声明为可选变量。# 当业务逻辑允许缺省该变量时可通过预处理逻辑统一补值。# prompt_with_optionalPromptTemplate(template问题{question}\n补充信息{context},input_variables[question],optional_variables[context],partial_variables{context:无},validate_templateTrue,)result_with_optionalprompt_with_optional.format(question什么是 PromptTemplate,# [必需] 问题内容)print(result_with_optional)# 输出:# 问题什么是 PromptTemplate# 补充信息无# # input_types / metadata / tags 使用示例# # 说明:# 这些参数不影响模板字符串的渲染结果# 主要用于类型描述、元信息附加和标签管理。# prompt_with_metaPromptTemplate(template姓名{name}\n年龄{age},input_variables[name,age],input_types{name:str,age:int},metadata{scene:user_profile,version:v1},tags[profile,demo],validate_templateTrue,)result_with_metaprompt_with_meta.format(nameAlice,# [必需] 姓名age18,# [必需] 年龄)print(result_with_meta)# 输出:# 姓名Alice# 年龄18​f-string 模板# 输出:# text请用通俗风格解释PromptTemplate# 具体显示形式取决于当前版本返回对象的打印结果# # 花括号转义示例# # 说明:# 在 f-string 模板格式中普通花括号需要使用双花括号转义。# prompt_with_bracesPromptTemplate(template请输出 JSON: {{name: {name}}},input_variables[name],template_formatf-string,validate_templateTrue,)result_with_bracesprompt_with_braces.format(nameAlice,# [必需] 姓名)print(result_with_braces)# 输出:# 请输出 JSON: {name: Alice}调用示例from_template() 方法fromlangchain_core.promptsimportPromptTemplate# # PromptTemplate.from_template(...) 参数说明# # 标识规则:# [必需] : 调用该方法时必须提供的参数# [常用] : 实际开发中高频使用的参数# [可选] : 按具体场景决定是否配置# [扩展] : 用于补充模板对象的附加配置## 方法说明:# PromptTemplate.from_template(...) 是类方法。## 作用:# 根据模板字符串直接创建 PromptTemplate 对象。## 返回值:# PromptTemplate# promptPromptTemplate.from_template(# -------------------------------------------------------------------------# template: str# -------------------------------------------------------------------------# [必需] [常用]## 作用:# 定义模板正文。## 使用方式:# 在字符串中使用 {变量名} 表示占位符。## 示例:# 请用{style}风格解释{topic}#请用{style}风格解释{topic},# -------------------------------------------------------------------------# template_format: str# -------------------------------------------------------------------------# [常用] [可选]## 作用:# 指定模板解析格式。## 使用方式:# 根据模板语法选择解析方式。## 可选值:# - f-string# - jinja2# - mustache## 示例:# template_formatf-string#template_formatf-string,# -------------------------------------------------------------------------# partial_variables: dict[str, Any]# -------------------------------------------------------------------------# [常用] [可选]## 作用:# 预先绑定部分变量减少渲染时的重复传参。## 使用方式:# 将固定变量放入字典中在 format() / invoke() 时自动参与填充。## 示例:# partial_variables{role: Python教师}## 说明:# 如果模板中包含已预绑定变量则渲染时无需再次提供该变量。#partial_variables{},)partial方法–等同于partial_variables 功能部分填充提示模板变量返回新的模板对象支持分步传参 接收常用参数 self (BasePromptTemplate)当前提示词模板实例 **kwargs (str | Callable[[], str])要预先填充的变量支持固定字符串/无参返回字符串的函数 输出参数 BasePromptTemplate已预填充部分变量的新提示模板 fromlangchain_core.promptsimportPromptTemplate#定义多变量模板template1PromptTemplate(template请评价{product}的优缺点包括{aspect1}和{aspect2}。,input_variables[product],)# partial()调用完以后不会对调用者这个模板对象产生影响而其返回值是一个新的模板template1template.partial(aspect1电池续航,aspect2拍照质量)#上部分等同于14-20行templatePromptTemplate(template请评价{product}的优缺点包括{aspect1}和{aspect2}。,input_variables[product,aspect1,aspect2],).partial(aspect1电池续航,aspect2拍照质量)#使用模板生成提示词prompt_1template1.format(product智能手机)print(提示词1:,prompt_1)给模板赋值的两种方式 invoke 和 formatformat在上述提及讲invokeformat() : 参数部分给变量赋值; 返回值str类型invoke() : 参数部分使用的是字典; 返回值PromptValue类型 —推荐​invoke方法# # invoke() 使用示例# # 说明:# invoke() 以字典形式传入变量适合 Runnable 风格调用。# fromlangchain_core.promptsimportPromptTemplate#定义多变量模板templatePromptTemplate.from_template(template请评价{product}的优缺点包括{aspect1}和{aspect2}。)#使用模板生成提示词prompt_1template.invoke({product:智能手机,aspect1:电池续航,aspect2:拍照质量})print(prompt_1)print(type(prompt_1))几条常用原则个人观点赋值时 invoke 多于 format创建模板时from_template() 多于直接向类传值‍

相关文章:

LangChain学习笔记--Model I/O 模块部分 1.5 Prompt Template(提示词模板)

LangChain学习笔记–Model I/O 模块部分 1.5 Prompt Template(提示词模板) ‍ 介绍 ​Prompt Template​ 可以理解为一种“提示词模板”。来自langchain_core.prompts中 它的核心是:把固定的提示内容先写好,并预留几个…...

STTN算法研究

STTN(Spatial-Temporal Transformer Network,空间-时间变换网络)是一种前沿的深度学习架构,专为视频修复任务设计,特别在处理动态场景下的字幕去除、物体移除等应用中展现出卓越性能。与传统专注于静态图像修复的算法不同,STTN通过联合建模空间和时间维度的信息,有效解决…...

5G/4G流量卡技术原理与合规选购实战(2026最新)

随着移动互联网、物联网、远程办公的普及,流量卡(数据卡、上网卡)成为很多用户的刚需。但市面上产品鱼龙混杂,虚量、限速、封卡、售后失联等问题频发。本文从技术原理、合规标准、选购要点、平台选择四个维度,做一次完…...

Wan2.2-I2V-A14B与Dify集成:打造无需编码的AI视频工作流

Wan2.2-I2V-A14B与Dify集成:打造无需编码的AI视频工作流 1. 引言:让业务人员也能玩转AI视频生成 想象一下这样的场景:电商运营团队需要为上千款商品制作短视频,传统方式需要设计师逐一手动制作,耗时耗力。而现在&…...

【IdraScriptsParker】软件启动报错“Run-time error ‘429‘ :ActiveX component can‘ t create object”解决方案

IdraScriptsParker软件启动报错429解决方案IdraScriptsParker软件IdraScriptsParker软件存放位置打开注册表注册到电脑复制GEM.dll文件并且注册相关资料下载地址IdraScriptsParker软件 一款意德拉IDRA压铸机厂家在旧系统使用的一款数据采集、状态监控、数据接收的一个通讯框架…...

单片机c语言入门

本书是一本专为单片机初学者设计的入门教材,内容详实且易于理解。书中通过丰富的实例和时亮困此施丝圆织改通俗易懂的语言,帮助来自读者快速掌握单片机C语言的基础知识。 360百科书中首先介绍了MCS-51单片机的基本概念,随后详细讲解了C51语言…...

CentOS 7 解决每次开机需手动执行 【dhclient ens33】才能联网问题(永久方案)

一、问题现象 在使用 CentOS 7 虚拟机时,你可能会遇到这样的困扰: 每次重启系统后,执行 ip addr 查看网卡信息,ens33 网卡没有 IPv4 地址,无法联网。 必须手动执行 dhclient ens33 命令,才能临时获取IP地址…...

C语言环境搭建指南

学习计算机的人大多接触过C语言,它常被视为编程入门的首选语言,经典的Hello World程序便是许多人的第一段代码。掌握一门语言前,首先需要搭建合适的开发环境。对于C语言而言,选择合适的编译器和编辑工具尤为关键。通过安装集成开发…...

Paper 深读 | LLM驱动的多智能体分层决策新范式

**🔑 关键词:**分层决策、LLM规划、Bandit探索、多智能体导航 **🔥 一句话标签:**首创"LLMBandit分布式RL"三层自治体系,显著提升多智能体复杂任务的规划、探索与协作效率 02 一句话核心思想 针对多智能体…...

基于Simulink的开关磁阻电机(SRM)非线性转矩脉动抑制

目录 手把手教你学Simulink ——基于Simulink的开关磁阻电机(SRM)非线性转矩脉动抑制 一、引言:为什么SRM需要“脉动抑制”? 二、SRM非线性特性与脉动根源 1. 转矩产生机理 2. 非线性电感模型(核心!&a…...

OneNet平台生成token注意事项

1、如果生成的是设备级鉴权 设备级鉴权时,res字段为products/{产品id}/devices/{设备名},key为设备级key key里面填的应该是设备的密钥生成token的工具截图2、如果生成的是产品/用户级鉴权 产品级鉴权时,res字段为products/{产品id}&#xff…...

学Simulink——基于Simulink的轴向磁通电机多物理场耦合仿真​

目录 手把手教你学Simulink——基于Simulink的轴向磁通电机多物理场耦合仿真​ 摘要​ 一、背景与挑战​ 1.1 为什么轴向磁通电机的仿真让人“头秃”?​ 1.2 核心痛点与设计目标​ 二、系统架构与核心控制推导​ 2.1 整体架构:跨越维度的“降阶打击”​ 2.2 核心数学推…...

关于application.yml不起效或者文件图像变了

右击resource文件夹...

基于安卓的 WAV 音频采集方案_含工具

基于安卓的 WAV 音频采集方案_含工具 一、目的 采集16k 采样率 pcm 的音频; WAV / 16bit / 16000 Hz / 1ch (单通道)安卓手机不会直接给3路原始信号,系统内部已经做了降噪和波束成形,以及AGC, 我们一般只能拿到单通道或伪双通二、…...

C++运行时多态深度解析:从原理到实践

引言在上一篇文章中,我们介绍了虚函数的基本概念和规则。今天,我们将深入到底层,探究运行时多态的实现原理——虚函数表(vtable)和虚函数指针(vptr),以及与之密切相关的静态联编与动…...

简历怎么写:我做了什么,取得了什么成果,凸显JD 关键词

简历怎么写:我做了什么,取得了什么成果;凸显JD 关键词 这里写目录标题 简历怎么写:我做了什么,取得了什么成果;凸显JD 关键词 一、先搞清楚:HR到底是做什么的? 二、HR是怎么筛选简历的?说出来你可能不信 1. 关键词!关键词!关键词! 2. 这些信息,写了反而减分 3. 一…...

手把手教你用VMware Workstation 17 Pro给笔记本装个华为openEuler(附UKUI桌面安装避坑指南)

在VMware Workstation 17 Pro上体验openEuler:从安装到UKUI桌面的完整指南 最近两年,国产操作系统的发展势头越来越猛,不少技术爱好者都想亲自体验一下这些系统。作为华为推出的开源操作系统,openEuler凭借其出色的性能和丰富的生…...

D3KeyHelper暗黑3技能连点器:从零开始掌握智能自动化战斗

D3KeyHelper暗黑3技能连点器:从零开始掌握智能自动化战斗 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 想要在暗黑破坏神3中轻松实现技…...

AI Native 时代的 CI/CD:从“手工流水线”到“智能驾驶舱”的范式演进

引言:流水线的“幽灵” 如果把软件交付比作造汽车,很多团队目前的现状是:虽然用上了最先进的零件(AI 辅助编程、云原生架构),但他们的流水线(CI/CD)却依然停留在“老解放牌机床”的水平。 你可能深有体会: Jenkins 脚本如乱麻,各路工具拼凑出的流水线像打满了补丁的…...

尝试 Gemini CLI 替代Claude,Jeecg skills基本通畅,但遇致命问题

AI Agent 使用体验 | JeecgBoot 团队将日常 Claude Code 工作流迁移到 Gemini CLI 的阶段性总结为什么要换 Gemini CLI JeecgBoot 低代码团队平时主力用 Claude Code 做代码生成、文档写作、重构脚本。但 Claude 最近实名认证 频繁封号的事闹得人心惶惶——身边已经有好几个账…...

孕囊多大可以人流 听我好好说说

孕囊多大可以人流,孕囊的大小在1.5-2cm左右就可以做人工流产。孕囊多大可以人流,一般孕囊在1-2cm可以做人工流产,因为孕囊过小流产很有可能会出现漏吸,导致失败,而孕囊过大则可能会出现流产不全的情况,导致…...

《QClaw隐藏的GitHub自动化神级用法》

大多数程序员每天都会在GitHub上重复大量机械性操作,从创建仓库时填写各种配置项,到初始化项目结构,再到设置分支保护规则和自动化工作流,这些看似简单的步骤累积起来会消耗大量宝贵的开发时间。很多人没有意识到,这些…...

用 AR 眼镜重构生活记忆:我做了一个「空间记忆管家」智能体

用 AR 眼镜重构生活记忆:我做了一个「空间记忆管家」智能体 很多瞬间其实并不盛大,却会在未来某个时刻突然变得珍贵。比如家里一次普通的生日聚会,朋友坐在沙发上聊天时的笑声,傍晚海边一段安静的散步,或者旅行途中抬头…...

如何防止SQL注入泄露元数据_限制数据库信息查询权限

禁用元数据访问需分层防控:MySQL用skip-show-databases限定库权限;PostgreSQL撤回pg_catalog USAGE及关键视图SELECT;SQL Server撤销VIEW DEFINITION;应用层禁用运行时查元数据。MySQL 中如何禁用 information_schema 查询默认情况…...

告别卡顿!用C#多媒体定时器(MmTimer)实现1ms精度的实时数据采集

突破毫秒壁垒:C#多媒体定时器在工业级数据采集中的实战指南 工业自动化产线上,一台机械臂正在以0.1mm的精度进行精密焊接。突然,由于上位机数据采集的定时器出现5ms的延迟波动,导致焊接路径出现偏差,整批零件报废——这…...

从收音机到WiFi滤波器:并联谐振电路在实际产品中的设计与避坑指南

从收音机到WiFi滤波器:并联谐振电路在实际产品中的设计与避坑指南 在电子工程领域,谐振电路就像一位隐形的调音师,默默地为各种电子设备筛选出需要的频率信号。从老式收音机里传出的悠扬音乐,到现代WiFi设备中高速传输的数据流&am…...

如何在Navicat导入DBF文件到数据表_字段映射与高级设置

Navicat导入DBF时字段类型映射不准、中文乱码、日期偏移及大文件卡死是四大典型问题;需手动校正类型、确认编码、指定DATE类型、分批导入并禁用自动分析。Navicat 导入 DBF 时字段类型自动映射不准dbf 文件没有显式类型定义,navicat 依赖文件头和样本数据…...

AGI商业模式进入倒计时窗口期:SITS2026圆桌紧急共识——2025Q3起,无订阅+API+治理权组合模型将成准入门槛

第一章:SITS2026圆桌:AGI的商业模式 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026圆桌讨论中,来自DeepMind、Anthropic、阿里通义实验室及欧盟AI监管沙盒的代表共同指出:AGI的商业化已脱离单一API调用范式&#xff…...

什么是Bootstrap的移动优先响应式设计

Bootstrap移动优先指类名默认从xs断点生效,如.col-6全局有效,.col-md-6仅≥768px生效;须先写基础类(如.col-12),再叠加更大屏类,避免小屏塌陷。移动优先不是口号,是类名生效逻辑Boot…...

Go语言如何优化性能_Go语言性能优化技巧教程【深入】

pprof定位CPU热点需先让程序处于真实业务负载状态,HTTP服务启用net/http/pprof并压测后采样,优先查看flat视图中self值高的函数,注意区分GC干扰;string与[]byte转换应避免无谓拷贝,善用sync.Pool复用切片。Go 程序 CPU…...