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# 年龄18f-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() 多于直接向类传值
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2534966.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!