我挖掘了一个巨牛的 人工智能 学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

前言

在大模型应用开发中,提示词(Prompt)是连接开发者与LLM的核心桥梁。很多新手开发时,习惯手动硬编码拼接提示词,不仅代码冗余、复用性极差,还会出现格式不统一、维护成本高、迭代困难等问题。

LangChain 提供了PromptTemplate(提示词模板)核心抽象组件,完美解决以上痛点。它支持动态参数填充、结构化消息配置、多场景复用,是所有LangChain应用、AI对话机器人、工具Agent开发的基础核心能力。

本文将从零拆解提示词模板核心概念、两类主流模板用法、消息占位符高阶技巧,最后实战演示 LangChain Hub 公共模板拉取与使用,所有代码均可直接复制落地运行。

一、提示词模板(PromptTemplate)核心概念

1.1 什么是提示词模板?

提示词模板是 LangChain 核心可复用组件,本质是一套占位符的提示词蓝图。我们只需提前定义固定文本结构与动态变量,运行时传入具体参数,即可自动生成完整、规范、统一的LLM请求提示词。

简单类比:等同于编程中的字符串格式化,告别手动拼接文本,实现提示词的标准化生产。

1.2 传统硬编码 VS 模板写法

❌ 传统写法(冗余、不可复用)

如果需要查询不同城市的历史,需要重复编写大量相似文本:

HumanMessage("请介绍上海的历史")

HumanMessage("请介绍西安的历史")

HumanMessage("请介绍北京的历史")

✅ 模板写法(一次定义、无限复用)

定义通用模板:请介绍{city}的历史,仅需动态替换 city 变量,即可生成任意城市的查询提示词。

1.3 提示词模板四大核心价值

  1. 可复用性:一套模板适配无数相似业务场景,无需重复编写提示词;

  2. 关注点分离:提示词工程师专注优化模板逻辑,业务代码专注传入动态参数;

  3. 输出一致性:统一LLM请求格式,让模型输出更稳定、可预测;

  4. 易维护性:迭代提示词风格、规则、结构时,仅需修改模板,无需全局改代码。

二、两大核心模板实战用法

LangChain 针对不同场景,提供两套核心模板:字符串模板(PromptTemplate) 适配基础文本模型,聊天模板(ChatPromptTemplate) 适配主流对话模型(GPT-3.5/4、通义千问等),两者均实现 Runnable 接口,支持链式调用。

2.1 字符串模板:PromptTemplate

适用于纯文本生成场景,无角色区分,是最基础、最轻量化的提示词模板,核心参数:

  • template:提示词模板文本,包含 {变量名} 占位符;

  • input_variables:模板中所有动态变量名列表。

支持两种初始化方式,效果完全一致:

from langchain_core.prompts import PromptTemplate

# 方式1:快捷初始化(推荐)
prompt_template = PromptTemplate.from_template("Translate the following into {language}")

# 方式2:原生初始化
prompt_template = PromptTemplate(
    input_variables=["language"],
    template="Translate the following into {language}"
)

# 动态填充变量
result = prompt_template.invoke({"language": "Chinese"})
print(result)
# 输出:text='Translate the following into Chinese'

2.2 聊天模板:ChatPromptTemplate(重点)

当前AI开发首选模板,专门适配聊天大模型,支持分层定义 系统指令、用户提问、AI回复 多角色消息,完美贴合Chat模型的消息交互逻辑。

模板中可直接配置多角色消息组,同时支持多动态变量填充,结合LCEL链式调用可实现极简开发。

如下代码所示:

from langchain.chat_models import init_chat_model
from langchain_core.prompts import ChatPromptTemplate

model = init_chat_model("deepseek-chat",model_provider="deepseek")

#注意提示词模板就是一个runnable实例
chat_prompt_template = ChatPromptTemplate(
    [
        ("system",
         """你是专业翻译器,严格遵守以下规则:
1. 将用户提供文本,从{language_from}精准翻译成{language_to};
2. 只输出翻译后的结果,**绝对不能输出原文**;
3. 不要解释、不要额外对话、不要反问,仅返回译文;
4. 禁止复述用户输入的句子。"""),
        ("user","{text}"),
    ]
)

messages = chat_prompt_template.invoke(
    {
        "language_from":"英文",
        "language_to":"中文",
        "text":"hi,who are you?",
    }
)

model.invoke(messages).pretty_print()

输出结果就是:

你好,你是谁?

解析代码:

创建对话提示词模板(核心:Prompt Template)

关键点拆解

  1. 结构:传入二元元组列表区分对话角色
    • ("system", 内容):系统指令,定义模型身份、行为约束;内部有两个占位符 {language_from}{language_to}
    • ("user", 内容):用户输入区域,占位符 {text} 存放待翻译原文;
  2. 占位符:{language_from} {language_to} {text} 是三个动态变量,运行时必须传入对应值填充;
  3. 重要特性:注释写了「提示词模板就是一个 runnable 实例」 ChatPromptTemplate 实现了 Runnable 接口,自带 .invoke() 方法,可以接收变量字典、自动替换占位符,输出完整消息列表。

由于ChatPromptTemplate同样也实现了标准的Runnable接口,因此我们还可以通过链来完成
调用。如下所示:

from langchain.chat_models import init_chat_model
from langchain_core.prompts import ChatPromptTemplate

model = init_chat_model("deepseek-chat",model_provider="deepseek")

#注意提示词模板就是一个runnable实例
chat_prompt_template = ChatPromptTemplate(
    [
        ("system",
         """你是专业翻译器,严格遵守以下规则:
1. 将用户提供文本,从{language_from}精准翻译成{language_to};
2. 只输出翻译后的结果,**绝对不能输出原文**;
3. 不要解释、不要额外对话、不要反问,仅返回译文;
4. 禁止复述用户输入的句子。"""),
        ("user","{text}"),
    ]
)

chain = chat_prompt_template | model
chain.invoke(
    {
        "language_from": "中文",
        "language_to": "英文",
        "text": "天青色等烟雨,而我在等你~",
    }
).pretty_print()

输出结果:

================================== Ai Message ==================================

The sky is waiting for misty rain, and I am waiting for you~

该模板的核心优势:角色分层清晰、结构规范、支持流式输出,是对话机器人、翻译、问答类应用的标准写法。

三,使用LangChainHub的提示词模板

 3.1、LangChain Hub 是什么

  1. 定位:专门用来上传、浏览、拉取、共享、管理提示词模板的在线平台,对标代码领域的 GitHub。
  2. 诞生背景 提示工程在大模型开发中权重越来越高,需要一个平台统一分享、复用优质 Prompt,方便开发者协作、复用、微调提示词,加快 LLM 应用开发。
  3. 平台历史变化 早期 Hub 支持上传 Prompt / Chain / Agent;现在平台仅保留 Prompt 模板 分享功能。
  4. 访问地址 https://smith.langchain.com/hub/ 登录 LangSmith 账号即可浏览、搜索、收藏全网公开提示词。

3.2、核心价值

  1. 复用成熟高质量提示词,不用从零手写;
  2. 提示工程师之间协作、共享、迭代优化模板;
  3. 可基于公共模板二次修改微调,适配自身业务;
  4. 统一标准化 Prompt 分发,减少重复提示词开发工作。

3.3、使用教程

我们在使用LangChain Hub之前,我们需要需要先申请并配置LangSmith环境变量:

下面是操作实操

首先点击settings

进入界面后,点击右上角+ API Key

然后过期日期填写永不过期,不然过一阵时间还要重新申请。

描述description就默认填写

选项填写完毕后,直接创建,就会自动弹出你的API Key,注意要先复制!

接下来配置两个环境变量

LANGSMITH_TRACING="true"

LANGSMITH_API_KEY="你的 LangSmith API Key"

配置完成后,重启我们的编译器,就完成环境配置,可以从LangChain hub上找自己喜欢的提示词。

 3.4、示例模板:hardkothari/prompt-maker

平台收藏量最高的公共提示词模板,功能是提示词自动生成器

作用:

接收两个入参 task(你的业务任务)、lazy_prompt(你简陋原始提示词),这两个入参也就是两个占位符~调用链时传入对应值完成填充。

输入你的任务需求,它会自动帮你生成一段专业、规范、约束完善的系统提示词,优化模型输出效果。

这里可以直接复制粘贴python sdk

调用原码:

# Create a LangSmith API in Settings > API Keys
# Make sure API key env var is set:
# import os; os.environ["LANGSMITH_API_KEY"] = "<your-api-key>"
from langchain.chat_models import init_chat_model
from langsmith import Client

client = Client()
#prompt就是一个提示词模板,Runnable示例
prompt = client.pull_prompt("hardkothari/prompt-maker",
                            dangerously_pull_public_prompt=True)

# 定义模型
model = init_chat_model("deepseek-v4-flash", model_provider="deepseek")
# 定义链
chain = prompt | model
while True:
    task = input("\n你的任务是什么?(输⼊ quit 退出聊天)\n")
    if task == 'quit':
        break
    lazy_prompt = input("\n你当前的提⽰是什么?(输⼊ quit 退出聊天)\n")
    if lazy_prompt == 'quit':
        break
    chain.invoke({'lazy_prompt': lazy_prompt, 'task': task}).pretty_print()

输出结果:

你的任务是什么?(输⼊ quit 退出聊天)
做一个python游戏

你当前的提⽰是什么?(输⼊ quit 退出聊天)
你是python专家
================================== Ai Message ==================================

作为Python游戏开发专家,请根据以下要求,为我设计并生成一个完整的Python游戏。

### 游戏类型与核心机制
- 请选择一款经典、易于实现的小游戏(例如:猜数字、贪吃蛇、井字棋、打砖块等),并说明选择理由。
- 游戏需包含至少以下功能:
  - 用户输入(键盘或鼠标)
  - 得分/回合记录
  - 游戏结束条件及重新开始选项
- 若使用图形界面,推荐使用pygame或turtle库;若为文字界面,则使用input()与print()。

### 代码要求
- 提供完整可运行的Python代码,并包含必要的注释(中英文皆可)。
- 代码结构清晰,函数划分合理(例如:初始化、游戏循环、事件处理、渲染/输出)。
- 尽量遵循PEP 8编码规范。

### 输出格式
1. 首先简要描述游戏玩法与规则。
2. 然后列出所需的库或依赖(例如:`pygame`、`random`等)。
3. 接着给出完整代码,并用```python ```代码块包裹。
4. 最后提供运行说明(如:运行环境、启动命令)。

### 示例风格(以供参考)
“欢迎来到『猜数字』游戏!我随机生成一个1-100之间的整数,请你猜猜是多少。每次猜测后,我会告诉你猜高了还是低了。看看你最少需要几次猜中!”

---
请开始你的设计。

你的任务是什么?(输⼊ quit 退出聊天)
quit

总结:

通过使用这个模板,可以大大减少手动调整提示所需的工作量,从而节省时间和资源。Prompt Maker通过分析初始提示的结构和内容,然后应用一组预定规则或算法来优化提示,以提高响应质量、清晰度和相关性。这在提示的质量对模型的输出有很大影响的场景中特别有用,比如客户服务机器人、对话代理或数据分析任务。

五、核心知识点总结(面试/落地必背)

  1. PromptTemplate:基础字符串模板,适用于简单文本生成,无角色分层;

  2. ChatPromptTemplate:聊天模型专用模板,支持system/human/ai多角色,生产环境首选;

  3. MessagesPlaceholder:消息占位符,专门用于批量注入多轮历史对话,实现上下文记忆;

  4. 所有模板均实现 Runnable 接口,支持 LCEL 管道链式调用,搭配模型、解析器极简开发;

  5. LangChain Hub:官方Prompt共享平台,可一键复用社区优质模板,快速实现提示词工程优化。

结语

提示词模板是 LangChain 开发的基石,告别硬编码Prompt,掌握模板化、结构化、可复用的提示词开发思维,是从“玩具Demo”走向工程级AI应用的关键一步。

本文覆盖了基础模板、聊天模板、高阶占位符、公共Hub模板全场景实战,熟练掌握后,可快速搭建标准化、易维护、高稳定性的大模型对话、生成、Agent应用。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐