news 2026/8/10 12:05:07

手撕Prompt?Out了!LangChain模板引擎,让你像‘拼乐高’一样开发AI应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手撕Prompt?Out了!LangChain模板引擎,让你像‘拼乐高’一样开发AI应用

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

前言

在大模型应用开发中,提示词(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应用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/10 12:02:17

Unity移动端千万级实例渲染:DrawMeshInstancedIndirect与GPU驱动渲染实战

1. 项目概述&#xff1a;为什么要在移动端挑战千万级实例绘制&#xff1f;如果你做过移动平台的3D项目&#xff0c;尤其是开放世界或者需要大量重复植被的场景&#xff0c;大概率被“性能”和“Draw Call”这两个词折磨过。传统的做法&#xff0c;比如用Prefab实例化一堆草&…

作者头像 李华
网站建设 2026/8/10 12:01:22

网络安全面试指南:从基础到实战的核心技术解析

1. 网络安全面试完全指南&#xff1a;从入门到精通的实战手册在信息安全行业摸爬滚打十年&#xff0c;我见过太多新人面对网络安全岗位面试时的手足无措。去年帮公司面试37个候选人&#xff0c;有29人连基础的SQL注入原理都解释不清&#xff0c;这让我意识到行业急需一份真正实…

作者头像 李华
网站建设 2026/8/10 11:58:39

SDC命令详解:使用set_size_only命令进行约束

相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 目录 对象列表/集合 指定所有实例 size_only设置的影响 Multicorner-Multimode支持 set_size_only命令用于在叶单元上显式设置一些属性&#xff08;包括local_opt…

作者头像 李华
网站建设 2026/8/10 11:56:00

Visual C++ Redistributable AIO:终极Windows运行库完整解决方案

Visual C Redistributable AIO&#xff1a;终极Windows运行库完整解决方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾遇到过"msvcp140.dll缺失…

作者头像 李华
网站建设 2026/8/10 11:54:08

Python+OpenCV保姆级实战教程:从环境搭建到图像处理核心操作

大家好&#xff0c;我是专注于分享Python与计算机视觉实战经验的博主。在入门OpenCV时&#xff0c;你是否也曾被各种环境配置问题、版本冲突和晦涩的API搞得焦头烂额&#xff1f;网上的资料要么过于零散&#xff0c;要么版本老旧&#xff0c;照着做总是报错。本文旨在为你提供一…

作者头像 李华