公司动态

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

📅 2026/7/23 7:31: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 全套实战干货