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

📅 2026/8/10 12:05:09
手撕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 提示词模板四大核心价值可复用性一套模板适配无数相似业务场景无需重复编写提示词关注点分离提示词工程师专注优化模板逻辑业务代码专注传入动态参数输出一致性统一LLM请求格式让模型输出更稳定、可预测易维护性迭代提示词风格、规则、结构时仅需修改模板无需全局改代码。二、两大核心模板实战用法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], templateTranslate the following into {language} ) # 动态填充变量 result prompt_template.invoke({language: Chinese}) print(result) # 输出textTranslate the following into Chinese2.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_providerdeepseek) #注意提示词模板就是一个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关键点拆解结构传入二元元组列表区分对话角色(system, 内容)系统指令定义模型身份、行为约束内部有两个占位符{language_from}、{language_to}(user, 内容)用户输入区域占位符{text}存放待翻译原文占位符{language_from}{language_to}{text}是三个动态变量运行时必须传入对应值填充重要特性注释写了「提示词模板就是一个 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_providerdeepseek) #注意提示词模板就是一个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 是什么定位专门用来上传、浏览、拉取、共享、管理提示词模板的在线平台对标代码领域的 GitHub。诞生背景 提示工程在大模型开发中权重越来越高需要一个平台统一分享、复用优质 Prompt方便开发者协作、复用、微调提示词加快 LLM 应用开发。平台历史变化 早期 Hub 支持上传 Prompt / Chain / Agent现在平台仅保留Prompt 模板分享功能。访问地址https://smith.langchain.com/hub/登录 LangSmith 账号即可浏览、搜索、收藏全网公开提示词。3.2、核心价值复用成熟高质量提示词不用从零手写提示工程师之间协作、共享、迭代优化模板可基于公共模板二次修改微调适配自身业务统一标准化 Prompt 分发减少重复提示词开发工作。3.3、使用教程我们在使用LangChain Hub之前我们需要需要先申请并配置LangSmith环境变量:下面是操作实操首先点击settings进入界面后点击右上角 API Key然后过期日期填写永不过期不然过一阵时间还要重新申请。描述description就默认填写选项填写完毕后直接创建就会自动弹出你的API Key注意要先复制接下来配置两个环境变量LANGSMITH_TRACINGtrueLANGSMITH_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_promptTrue) # 定义模型 model init_chat_model(deepseek-v4-flash, model_providerdeepseek) # 定义链 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通过分析初始提示的结构和内容然后应用一组预定规则或算法来优化提示以提高响应质量、清晰度和相关性。这在提示的质量对模型的输出有很大影响的场景中特别有用比如客户服务机器人、对话代理或数据分析任务。五、核心知识点总结面试/落地必背PromptTemplate基础字符串模板适用于简单文本生成无角色分层ChatPromptTemplate聊天模型专用模板支持system/human/ai多角色生产环境首选MessagesPlaceholder消息占位符专门用于批量注入多轮历史对话实现上下文记忆所有模板均实现Runnable接口支持 LCEL 管道链式调用搭配模型、解析器极简开发LangChain Hub官方Prompt共享平台可一键复用社区优质模板快速实现提示词工程优化。结语提示词模板是 LangChain 开发的基石告别硬编码Prompt掌握模板化、结构化、可复用的提示词开发思维是从“玩具Demo”走向工程级AI应用的关键一步。本文覆盖了基础模板、聊天模板、高阶占位符、公共Hub模板全场景实战熟练掌握后可快速搭建标准化、易维护、高稳定性的大模型对话、生成、Agent应用。