从零学会规范写 Prompt|LangChain 双模板详解 + 3 套可复用业务案例源码

发布时间:2026/9/15 4:10:08

从零学会规范写 Prompt|LangChain 双模板详解 + 3 套可复用业务案例源码 一、本章学习目标结合前序 DeepSeek 模型调用、消息角色配置、对话历史存储知识点本章吃透 Prompt 标准化管理方案学完具备以下能力认知 Prompt 对大模型输出效果的决定性作用熟练区分并使用PromptTemplate、ChatPromptTemplate两套模板掌握模板变量注入实现提示词复用与解耦独立开发商品文案、学习规划、智能客服三大实用案例使用MessagesPlaceholder挂载、截断多轮对话历史二、Prompt 基础认知1. 什么是 PromptPrompt 就是给到大模型的整套指令集合包含角色定位、工作任务、约束规则、业务入参。极简写法一句话介绍 LangChain 框架企业标准写法你是专业电商运营根据商品信息撰写详情文案 约束150字以内、突出用户收益、禁止夸大宣传2. 为什么要用 Prompt 模板原生使用f-string硬拼接字符串写提示词存在诸多痛点代码臃肿冗余、变量拼接易出错、后期修改维护成本高。模板核心优势固定提示文本与动态业务变量分离一处编写多处复用迭代维护更简单。三、两大核心提示模板详解3.1 PromptTemplate纯文本模板适用场景无 system/user 角色区分单纯文本生成需求基础示例from langchain_core.prompts import PromptTemplate 定义模板{}标记变量占位符 tpl PromptTemplate.from_template(商品{product_name}卖点{selling_points}撰写一句宣传广告语) 填充变量渲染文本 prompt tpl.invoke({product_name: 罗技鼠标, selling_points: 静音、灵敏、无延迟}) 取出渲染后的字符串 print(prompt.text)3.2 ChatPromptTemplate对话模型首选当前主流大模型DeepSeek/GPT/通义千问均采用system、human、ai结构化消息交互该模板为项目开发标配。基础示例from langchain_core.prompts import ChatPromptTemplate tpl ChatPromptTemplate.from_messages([ (system, 身份电商文案师文案简洁写实拒绝浮夸话术), (human, 商品{product_name}卖点{selling_points}编写商品介绍文案) ]) prompt tpl.invoke({product_name: 罗技鼠标, selling_points: 静音、灵敏、无延迟}) 向模型传参必须传递完整 prompt 对象不要单独截取字符串3.3 两种模板核心对比模板名称输出格式角色支持推荐使用场景PromptTemplate纯文本字符串无原生角色区分简单单次文本生成、无对话交互ChatPromptTemplate结构化消息数组原生支持系统/用户/AI 消息聊天机器人、Agent、所有正式业务项目3.4 高质量 Prompt 编写四要素角色限定 AI 身份固定回答风格任务清晰描述需要 AI 完成的工作内容约束限制字数、格式、禁用词汇规避输出跑偏入参标注明确各个变量含义让 AI 精准识别业务数据四、实战案例公共封装模型工厂 model_factory.py消除每个文件重复的模型初始化代码统一管理 DeepSeek 配置# utils/model_factory.py import os from dotenv import load_dotenv from langchain.chat_models import init_chat_model def get_deepSeek_model(temperature: float 0.7): load_dotenv() model init_chat_model( modeldeepseek-v4-flash, model_provideropenai, base_urlos.getenv(DEEPSEEK_BASE_URL), api_keyos.getenv(DEEPSEEK_API_KEY), temperaturetemperature ) return model案例1商品文案自动生成from langchain_core.prompts import ChatPromptTemplate from utils.model_factory import get_deepSeek_model model get_deepSeek_model(temperature0.5) prompt_tpl ChatPromptTemplate.from_messages([ (system, 资深电商运营文案贴合用户体验不使用虚假宣传), (human, 商品名称{product_name} 商品卖点{selling_points} 目标用户{target_user} 要求文案150字以内重点描述用户使用后的实际好处) ]) prompt_val prompt_tpl.invoke({ product_name: 无线静音鼠标, selling_points: 静音按键、蓝牙连接、续航30天、机身轻便, target_user: 办公、图书馆学习的上班族 }) res model.invoke(prompt_val) print(res.content)案例2个性化学习计划生成from langchain_core.prompts import ChatPromptTemplate from utils.model_factory import get_deepSeek_model model get_deepSeek_model(temperature0.5) prompt_tpl ChatPromptTemplate.from_messages([ (system, 编程教学规划师输出落地可执行的学习方案搭配每日练习), (human, 学习科目{topic} 总学习天数{days}天 每日可用时长{hours_per_day}小时 自身基础{level} 需求按天划分学习内容同步配套实操练习) ]) prompt_val prompt_tpl.invoke({ topic: LangChain框架, days: 3, hours_per_day: 1, level: 掌握Python基础语法 }) res model.invoke(prompt_val) print(res.content)案例3电商客服智能回复from langchain_core.prompts import ChatPromptTemplate from utils.model_factory import get_deepSeek_model model get_deepSeek_model(temperature0.7) prompt_tpl ChatPromptTemplate.from_messages([ (system, 电商客服回复先安抚用户情绪客观说明问题并给出解决方案全文120字以内), (human, 用户提问{user_question}订单状态{order_status}物流详情{shipping_info}) ]) prompt_val prompt_tpl.invoke({ user_question: 快递三天物流没更新包裹是不是丢失了, order_status: 已发货, shipping_info: 包裹抵达上海转运中心暂未更新下级物流节点 }) res model.invoke(prompt_val) print(res.content)五、MessagesPlaceholder 对话历史占位符5.1 核心作用普通变量仅能传入一段文本MessagesPlaceholder支持批量插入多条历史对话消息是实现多轮上下文记忆的核心组件同时支持裁剪历史消息条数防止上下文超长溢出。5.2 参数说明参数释义variable_name绑定变量名称调用入参名称必须保持一致optional默认 False不传历史会报错True 代表历史为空也可正常运行n_messages仅读取最近 N 条对话管控上下文长度5.3 完整可运行示例from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from utils.model_factory import get_deepSeek_model model get_deepSeek_model(temperature0.7) chat_tpl ChatPromptTemplate.from_messages([ (system, 友好的通用问答助手), MessagesPlaceholder(variable_namehistory, optionalTrue, n_messages4), (human, {question}) ]) res model.invoke(chat_tpl.invoke({ history: [(human, 我叫Alice), (ai, 很高兴认识你Alice)], question: 请问我的名字是什么 })) print(res.content)⚠️ 注意history 入参必须是消息列表格式禁止直接传入普通字符串六、本章知识总结 常见问题解答核心总结正式项目优先使用ChatPromptTemplatePromptTemplate只用于简单纯文本生成场景模板实现提示词与业务数据解耦大幅提升代码可维护性MessagesPlaceholder专门用来托管、截断多轮对话上下文高频问题答疑Prompt 写得越长回答效果越好答并非越长越好指令逻辑清晰精简即可过多的约束条件会造成模型顾此失彼输出更容易混乱。模型无法严格按照我的指令输出怎么办大模型属于概率生成式模型无法做到 100% 严格执行指令如果对输出格式、字段有强约束后续章节会讲解结构化输出、代码校验的解决方案。 码字不易如果文章对你有帮助点赞收藏不迷路后续持续更新 LangChain 全套实战干货
延伸阅读

更多相关文章

2026/9/15 4:09:50

C++多进程编程深度解析:从fork到IPC实战应用

1. 项目概述:为什么需要深入理解C多进程编程?在C开发者的日常工作中,尤其是当项目从单机玩具程序迈向高性能服务器、复杂桌面应用或系统级工具时,一个绕不开的话题就是并发与并行。我们常听到多线程,但多进程编程往往被…

2026/9/2 23:53:31

Linux 查找文件指令总结

一、find(最强大、最常用)基本语法find [搜索路径] [匹配条件] [执行动作]按名称查找# 精确匹配文件名 find / -name "test.txt"# 忽略大小写 find /home -iname "Readme.md"# 通配符匹配 find /var -name "*.log" find /…

2026/9/14 12:48:19

嵌入式I2C通信实战:从寄存器配置到驱动实现与故障排查

1. 项目概述:从寄存器位到通信总线在嵌入式开发的底层世界里,我们写的每一行C代码,最终都要落到芯片内部那些由0和1组成的寄存器上。很多人觉得寄存器编程枯燥,无非是查手册、写数值。但在我看来,真正理解一个外设&…

2026/9/15 4:06:31

figma DX版技术解析:可动性、材质与精度的工程化升级

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 4:06:31

通用时代崛起:用兴趣组合打造不可替代的交叉优势

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 4:06:31

邮箱验证的正确姿势:从RFC 5322到生产环境分层策略

做开发这些年,几乎每个项目里都会遇到邮箱验证这个需求。注册表单、找回密码、订阅推送、CRM 客户录入,到处都要跟邮件地址打交道。而每当这个时候,总有人会贴出那种被反复转载的“一行正则校验邮箱”,用完了还觉得万事大吉。但作…

2026/9/15 4:06:31

构建合规隐私政策页面的技术实现与最佳实践

1. 项目概述Privacy Policy Website(隐私政策网站)是每个现代企业或独立开发者都必须重视的基础设施。作为法律合规的重要组成部分,一个专业的隐私政策页面不仅能建立用户信任,还能有效规避法律风险。不同于普通网页,隐…

2026/9/15 4:01:31

电动快换模块为何首选RS485+Modbus RTU通信方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码