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

02 Prompt组件及使用技巧

1 为什么需要Prompt(提示)

绝大多数 LLM 应用不会直接将用户原始输入原封不动地传递给模型,而是通过提示模板(Prompt Template)构建一个包含附加上下文的完整输入框架。这种设计的核心逻辑在于:大语言模型的本质是基于预训练数据的统计模式匹配。若用户指令模糊或缺乏必要背景信息,模型极易因理解偏差生成偏离预期的输出。

1.1 Prompt 的关键作用

  1. 精准锚定任务目标
    通过明确指令(如“翻译”“总结”“代码生成”),直接限定模型的输出方向,避免其因语义歧义产生无关内容。
  • 示例对比
    • 模糊指令:“写点关于春天的内容。”
      → 模型可能输出诗歌、天气分析或自然现象描述,难以满足用户真实需求。
    • 明确指令:“请以300字篇幅描述春天的自然景观,需包含鲜花、绿草和微风的细节描写。”
      → 模型能聚焦用户意图,生成结构清晰、内容契合的结果。
  1. 注入上下文信息,提升推理准确性
    提示模板通过补充任务背景、约束条件或格式要求,为模型提供必要的推理线索。
  • 场景适配
    • 学术场景:“请以学术论文格式总结量子计算的发展历程。”
    • 商业场景:“将用户评论分类为‘正面’‘中性’‘负面’,并输出JSON格式结果。”
  • 约束条件
    “用不超过50字解释相对论的基本原理。” → 强制模型提炼核心概念,避免冗长描述。
  1. 降低交互门槛,优化用户体验
    通过预设的 Prompt 模板,用户无需理解模型内部机制,只需输入直观指令即可获得结构化输出。
  • 复杂任务简化
    “帮我设计一个待办事项APP。” → 模型根据预设模板自动补全功能模块、技术栈选择等细节。
  • 多模态支持
    “分析这张图片中的物体,并总结其应用场景。” → 提示模板可整合视觉与文本信息,实现跨模态推理。

1.2 技术视角:Prompt 工程的价值

Prompt 设计不仅是简单的指令输入,更是模型能力调优的核心手段。通过角色扮演(如“你是一位资深律师”)、思考链引导(分步骤推理)或参数化模板(动态替换变量),开发者可显著提升模型在复杂任务中的表现。例如:

  • 角色扮演增强专业性
    “作为营养师,请为健身人群设计高蛋白食谱。”
  • 分步推理提升准确性
    “首先列出用户需求,其次分析解决方案,最后总结最佳选择。”

2 LangChain中的Prompt组件

Prompt 是所有 AI 应用交互的起点,为了适配不同的 LLM ,LangChain 封装了 Prompt 组件 ,并且 Prompt 组件是高可移植性的 ,同一个 Prompt 可以支持各种 LLM ,在切换 LLM 的时候 ,无需修改 Prompt。

LangChain 提供了灵活的 PromptTemplate 工具,允许开发者定义可重用的文本模板,并通过变量动态插入内容。

对于 PromptTemplate ,在 LangChain 中 ,又涵盖了多个子组件 ,例如 :角色提示模板、消息占位符、 文本提示模板、聊天消息提示模板、提示、消息等

不同 Prompt 组件功能的简介:

  • PromptTemplate :用于创建文本消息提示模板 ,用于用于与大语言模型/文本生成模型进行交 互。
  • ChatPromptTemplate :用于创建聊天消息提示模板 ,一般用于与聊天模型进行交互。
  • MessagePlaceholder:消息占位符 ,在聊天模型中对不确定是否需要的消息进行占位。 SystemMessagePromptTemplate :用于创建系统消息提示模板 ,角色为系统。
  • HumanMessagePromptTemplate :用于创建人类消息提示模板 ,角色为人类。 AIMessagePromptTemplate :用于创建AI消息提示模板 ,角色为AI。
  • PipelinePromptTemplate :用于创建管道消息 ,管道消息可以将提示模板作为变量进行快速复用。

[!tip]

LLMsChat Models的区别:

  • LLMs的输入和输出都是文本,而Chat Models输入输出都是消息列表
  • 基本现在的大语言模型都是用的Chat Models,LLMs应用场景没有Chat Models多。

Prompt 不同方法的功能简介:

  • partial :用于格式化提示模板中的部分变量。

  • format:传递变量数据 ,格式化提示模板为文本消息。

  • invoke :传递变量谁 ,格式化提示模板为提示。

  • to_string:将提示/消息提示列表转换成字符串。

  • to_messages :用于将消息提示列表转换成字符串。

Prompt 中重载的运算符:

  • +运算符 :在 Prompt 组件中 ,对 + 运算符使用 add 方法进行重写 ,所以几乎所有 Prompt 组件都可以使用 + 进行组装拼接。

3 基础 Prompt 模板

PromptTemplate 是 LangChain 中用于构建和管理提示词(Prompt)的核心组件之一,它允许开发者定义可复用的文本模板,并通过动态变量插入生成最终的 Prompt。它是构建 LLM(大语言模型)应用时非常关键的一环。


3.1 PromptTemplate 的基本概念

3.1.1 定义

  • PromptTemplate 是一个 字符串模板,其中包含固定文本 + 动态变量。
  • 模型输入前,这些变量会被实际值替换,形成最终的 Prompt 输入给 LLM。

3.1.2 核心作用

  • 将用户意图结构化为模型能理解的形式。
  • 支持多场景复用(如翻译、摘要、问答等)。
  • 提高开发效率与代码可维护性。

3.2 PromptTemplate 的基本用法

示例:定义一个简单的 Prompt 模板

from langchain.prompts import PromptTemplate# 定义模板
template = PromptTemplate(input_variables=["name", "task"],template="Hello {name}, could you please help me with {task}?"
)# 使用模板生成具体 Prompt
prompt = template.format(name="Alice", task="data analysis")
print(prompt)
# 输出: Hello Alice, could you please help me with data analysis?

3.3 PromptTemplate 的核心参数

参数名 类型 说明
input_variables List[str] 模板中使用的变量名列表
template str 包含变量的原始字符串模板
template_format str 模板格式,默认是 f-string,也可使用 jinja2 等高级模板引擎

3.4 支持的模板格式

LangChain 支持多种模板格式,最常用的是:

1. 默认格式:f-string(推荐)
  • 使用 {variable} 语法。
  • 简洁直观,适合大多数场景。
template = PromptTemplate.from_template("请总结以下文章:{article}")
2. Jinja2 模板(高级功能)
  • 支持条件判断、循环等逻辑。
  • 需指定 template_format="jinja2"
from langchain.prompts import PromptTemplatetemplate_str = """
{% if user_type == 'vip' %}
尊敬的VIP用户,以下是您的专属服务:
{{ content }}
{% else %}
普通用户服务如下:
{{ content }}
{% endif %}
"""template = PromptTemplate(input_variables=["user_type", "content"],template=template_str,template_format="jinja2"
)prompt = template.format(user_type="vip", content="每日新闻摘要")
print(prompt)

3.5 PromptTemplate 的常见方法

方法 说明
.format(**kwargs) 替换变量,生成完整 Prompt 字符串,适用于简单场景
.format_prompt(**kwargs) 返回 PromptValue 对象,可用于直接调用 LLM
.from_template(template_string) 快捷创建模板对象
.partial() 固定部分变量,生成新的 PartialPromptTemplate

1. .format(**kwargs)

作用:替换模板中的变量,生成完整的 Prompt 字符串,传输给LLM,适用于简单场景。
示例

from langchain.prompts import PromptTemplate# 定义模板
template = PromptTemplate.from_template("将以下文本翻译成{language}:{text}")# 替换变量生成完整 Prompt
formatted_prompt = template.format(language="法语", text="你好")
print(formatted_prompt)# 调用 LLM(假设已有模型实例)
# llm(formatted_prompt)  # 传递给 LLM 的输入

输出

将以下文本翻译成法语:你好

2. .format_prompt(**kwargs)

作用:返回 PromptValue 对象(包含 Prompt 内容),可直接用于调用 LLM。
示例

from langchain.prompts import PromptTemplate# 定义模板
template = PromptTemplate.from_template("回答以下问题:{question}")# 生成 PromptValue 对象
prompt_value = template.format_prompt(question="巴黎是哪个国家的首都?")# 调用 LLM(假设已有模型实例)
# llm(prompt_value)  # 传递给 LLM 的输入

说明

  • PromptValue 是 LangChain 中统一的 Prompt 输入格式,支持更复杂的 Prompt 结构(如多轮对话)。

3. .from_template(template_string)

作用:通过字符串快速创建 PromptTemplate 对象。
示例

from langchain.prompts import PromptTemplate# 直接通过字符串创建模板
template = PromptTemplate.fro
http://www.dtcms.com/a/581944.html

相关文章:

  • 做网站能用微软企业公示信息年报
  • 本地赣州网站建设网站建设数据库选择
  • 多维竞争时代:手游ASO优化核心策略与安卓商店差异化
  • Linux命令-e2label命令(设置第二扩展文件系统的卷标)
  • 企业AI开发什么工具好?从“可用”到“好用”的全生命周期管理指南
  • (Linux)ELF格式与库的链接原理
  • 如何做网站的营销网站技术防护建设
  • C++新特性 chr类型编码
  • 指纹浏览器模拟功能的实践体验分享
  • C++ 设计模式《订单的撤销和重做》
  • 国网法治建设网站阿里巴巴推广平台
  • 【AI学习-comfyUI学习-SDXL 风格化提示词节点包(Style Prompt Node Pack) 工作流-各个部分学习-第四节】
  • 怎样建设有价值的网站天津建设工程信息网中标公告
  • 提升大语言模型性能的关键技术清单(from 网络)
  • 【NLP】Penn Treebank 与 Parsing:让计算机看懂句子结构
  • Go 1.25 发布:性能、工具与生态的全面进化
  • 北京市保障性住房建设投资中心网站淮南吧
  • Duilib_CEF桌面软件实战之Duilib编译与第一个界面程序
  • MFC动态加载图片
  • Niagara Launcher 全新Android桌面启动器!给手机换个门面!
  • 【Vue】自定义指令之权限控制
  • asp.net网站第一次运行慢网站建设合同书保密条款
  • ZYNQ-7000双核协处理实战:ARM Cortex-A9与FPGA的智能数据采集系统
  • 慈溪哪里有做网站怎么看网站pv
  • 【PySpark】conda create -n pyspark python=3.8报错
  • CSS 数学函数完全指南:从基础计算到高级动画
  • uni-app打包app -- 在用户首次启动 App 时,强制弹出一个“用户协议与隐私政策”的确认对话框。
  • 互联网网站排名深圳住房和城乡建设局网站
  • Wi-Fi 7通信技术
  • @InitBinder注解