大模型技术 提示词模板 概述

在 LangChain 中,提示词模板(Prompt Template) 是构建大模型应用的核心基石。

如果把大模型比作一个"极其聪明但没有记忆的员工",那么提示词模板就是一份标准化的"工作指南"。它将用户的动态输入与预设的指令、上下文、格式要求结合起来,确保大模型能输出高质量、符合预期的结果。


一、 为什么需要提示词模板?

  1. 逻辑与数据分离:你不需要在代码里硬编码复杂的提示语。你可以定义一个模板,只在运行时注入变量(如用户的问题、背景资料)。
  2. 复用性:同一个任务(如翻译、总结)的指令可以定义一次,多次使用。
  3. 角色注入:轻松为 AI 设定特定的身份(如"资深架构师"或"幽默诗人")。
  4. 标准化输出:配合前文提到的解析器,通过模板告知模型必须以 JSON 或特定格式返回。

二、 核心模板类型

LangChain 主要提供了两种模板,对应不同的模型接口:

1. PromptTemplate (普通模板)

用于传统的文本补全模型(LLMs),它只是一个简单的字符串模板。

python 复制代码
from langchain.prompts import PromptTemplate

# 1. 定义模板字符串,使用 {variable} 作为占位符
template = "你是一位专业的{field}教练。请为我制定一个{duration}的训练计划。"

# 2. 实例化模板
prompt = PromptTemplate(
    input_variables=["field", "duration"],
    template=template
)

# 3. 填充变量生成最终提示词
final_prompt = prompt.format(field="马拉松", duration="三个月")
print(final_prompt)
# 输出: 你是一位专业的马拉松教练。请为我制定一个三个月的训练计划。

2. ChatPromptTemplate (对话模板) ------ 最常用

用于聊天模型(ChatModels)。它由一组具有不同角色的"消息"组成(System, Human, AI)。

python 复制代码
from langchain.prompts import ChatPromptTemplate

# 定义多角色对话模板
chat_template = ChatPromptTemplate.from_messages([
    ("system", "你是一名{language}翻译官,负责将用户输入的中文翻译成{language}。"),
    ("human", "请翻译这段话:{text}"),
])

# 填充变量
messages = chat_template.format_messages(
    language="法语",
    text="今天天气真不错"
)
# 生成的结果是一组 Message 对象,可直接发送给 ChatOpenAI 或 Ollama

三、 进阶用法:少样本模板 (Few-Shot Prompting)

"少样本"是指给模型几个例子,让它模仿。这在处理复杂逻辑或特定风格时非常有效。

python 复制代码
from langchain.prompts import FewShotPromptTemplate, PromptTemplate

# 1. 准备示例
examples = [
    {"input": "开心", "output": "像盛开的花朵一样灿烂"},
    {"input": "难过", "output": "像阴雨连绵的深秋一样萧索"},
]

# 2. 定义示例的格式
example_prompt = PromptTemplate(
    input_variables=["input", "output"],
    template="词语: {input}\n比喻: {output}"
)

# 3. 构建少样本模板
few_shot_prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=example_prompt,
    suffix="词语: {user_input}\n比喻:", # 后缀,即用户的输入
    input_variables=["user_input"]
)

print(few_shot_prompt.format(user_input="孤独"))
# 模型会模仿之前的风格生成关于"孤独"的比喻

四、 组合提示词 (Pipeline Prompt)

有时候提示词非常复杂,你可能希望把几个小模板组合成一个大模板。

  • 场景:先设定身份,再引入背景知识,最后提出问题。
  • 实现 :使用 PipelinePromptTemplate(由于篇幅,此处仅作概念介绍,它允许将基础模板插入到父模板的占位符中)。

五、 最佳实践技巧

  1. 部分填充 (Partial Formatting) : 如果你在程序开始时就知道某些变量(比如当前日期),而另一些变量(比如用户输入)要等会儿才知道,可以使用 partial。

    python 复制代码
    partial_prompt = prompt.partial(date="2024-05-20")
    # 稍后再填充剩下的变量
    final_prompt = partial_prompt.format(user_query="你好")
  2. 外部加载 : 为了保持代码整洁,可以将复杂的 Prompt 存储在 yaml 或 json 文件中,通过 LangChain 加载。

  3. LCEL 管道调用: 将模板直接放在链的最前端:

    python 复制代码
    chain = chat_template | model | output_parser
    chain.invoke({"language": "英语", "text": "吃了吗?"})

总结

提示词模板不仅仅是字符串拼接,它是 Prompt 工程的工程化实现。通过 LangChain 的模板系统,你可以:

  • 结构化 地表达任务逻辑。
  • 动态化 地注入实时数据。
  • 模式化 地引导 AI 模仿特定行为。

掌握了 Prompt Template,你就掌握了控制大模型行为的"方向盘"。

相关推荐
用户3134672143544 小时前
Agent相关-FAISS 与 LangChain 在文档检索中的分工
langchain
熊猫钓鱼>_>5 小时前
MetaAI深度研究研究报告
ai·meta·大模型·llm·agent·web·metaai
老A的AI实验室5 小时前
赛博月刊 #2026年9月
大数据·人工智能·深度学习·ai·llm
用户3134672143546 小时前
Agent相关-文档加载器 Document Loader
langchain·llm
海天一色y8 小时前
AI 大模型算法岗面试题库
llm·rmsnorm·flash-attention·decoder-only
染指11108 小时前
127.Agent-LangChain核心组件-模型输出后json修复
人工智能·langchain·agent·agents
Maiko Star12 小时前
* LangChain 自定义中间件详解:Hook、装饰器、类与执行顺序
中间件·langchain
夏天拐跑了西瓜18 小时前
一文入门LangChain:从框架认知到构建你的第一个AI Agent
python·langchain·conda·agent
BD_Marathon1 天前
LangSmith的介绍与基本使用
langchain
Alson_Code1 天前
从0到1打造个人专属编程智能体
人工智能·langchain·ai编程