当前位置: 首页 > news >正文

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

一、本章学习目标

结合前序 DeepSeek 模型调用、消息角色配置、对话历史存储知识点,本章吃透 Prompt 标准化管理方案,学完具备以下能力:

  1. 认知 Prompt 对大模型输出效果的决定性作用
  2. 熟练区分并使用PromptTemplateChatPromptTemplate两套模板
  3. 掌握模板变量注入,实现提示词复用与解耦
  4. 独立开发商品文案、学习规划、智能客服三大实用案例
  5. 使用MessagesPlaceholder挂载、截断多轮对话历史

二、Prompt 基础认知

1. 什么是 Prompt

Prompt 就是给到大模型的整套指令集合,包含角色定位、工作任务、约束规则、业务入参

  • 极简写法:一句话介绍 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/通义千问)均采用systemhumanai结构化消息交互,该模板为项目开发标配。

基础示例
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 编写四要素

  1. 角色:限定 AI 身份,固定回答风格
  2. 任务:清晰描述需要 AI 完成的工作内容
  3. 约束:限制字数、格式、禁用词汇,规避输出跑偏
  4. 入参标注:明确各个变量含义,让 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( model="deepseek-v4-flash", model_provider="openai", base_url=os.getenv("DEEPSEEK_BASE_URL"), api_key=os.getenv("DEEPSEEK_API_KEY"), temperature=temperature ) return model

案例1:商品文案自动生成

from langchain_core.prompts import ChatPromptTemplate from utils.model_factory import get_deepSeek_model model = get_deepSeek_model(temperature=0.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(temperature=0.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(temperature=0.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(temperature=0.7) chat_tpl = ChatPromptTemplate.from_messages([ ("system", "友好的通用问答助手"), MessagesPlaceholder(variable_name="history", optional=True, n_messages=4), ("human", "{question}") ]) res = model.invoke(chat_tpl.invoke({ "history": [("human", "我叫Alice"), ("ai", "很高兴认识你,Alice")], "question": "请问我的名字是什么?" })) print(res.content)

⚠️ 注意:history 入参必须是消息列表格式,禁止直接传入普通字符串

六、本章知识总结 & 常见问题解答

核心总结

  1. 正式项目优先使用ChatPromptTemplatePromptTemplate只用于简单纯文本生成场景
  2. 模板实现提示词与业务数据解耦,大幅提升代码可维护性
  3. MessagesPlaceholder专门用来托管、截断多轮对话上下文

高频问题答疑

  1. Prompt 写得越长,回答效果越好?
    答:并非越长越好,指令逻辑清晰精简即可,过多的约束条件会造成模型顾此失彼,输出更容易混乱。
  2. 模型无法严格按照我的指令输出怎么办?
    大模型属于概率生成式模型,无法做到 100% 严格执行指令;如果对输出格式、字段有强约束,后续章节会讲解结构化输出、代码校验的解决方案。

💡 码字不易,如果文章对你有帮助,点赞+收藏不迷路,后续持续更新 LangChain 全套实战干货!

http://www.jsqmd.com/news/1246401/

相关文章:

  • 2026 年现阶段扎兰屯正规的无机纤维喷涂优质厂家哪家好,揭秘:这套技术如何让材料成本骤降30%? - 鉴选官
  • C++模板类实战:从零手搓MyVector动态数组
  • Chrome启动参数详解:提升开发调试效率的实用指南
  • zcmd 3.8.10.11版本发布:医疗数据处理与FHIR交互新特性
  • 【2026年最新】10款热门AI写小说工具实测(内含避坑指南)
  • 国际商标注册服务平台的技术选型分析——基于公开数据的多维度对比
  • 佳能MF3010打印机驱动安装与故障排查指南
  • 2026 年当下,清徐比较好的白酒代理 厂家哪家可靠,揭秘:普通人如何靠这门生意赚到第一桶金? - 行业推荐【认证官】
  • 2026年7月最新格拉苏蒂佛山顺德印象城维修保养服务电话 - 亨得利钟表维修中心
  • BepInEx 插件框架:Unity 游戏模组开发与安装完全指南
  • 《数学三》考研模拟题及解析(三)
  • TMS320C6424 EMAC RMII模式配置详解:从原理到实战避坑指南
  • 别再手写Prompt了!LangChain模板实战指南,3个案例带你从入门到业务落地
  • 还在把网站流量白白送给第三方?这款开源免费视频托管神器,让访客真正留下来!
  • 从零搭建直播系统:协议选择、服务器配置与性能优化实战
  • API安全与认证实战:从JWT到OAuth2的完整技术路线
  • C++项目CI/CD优化实战:从环境一致到构建加速的完整指南
  • ChatGPT在教育中的能力边界与教学策略调整
  • Switch游戏精选:硬核玩家的2000小时实测推荐
  • Switch大气层22.5.0系统升级与优化全攻略
  • Kimi K3 刷屏之后:中美AI大模型的真实格局,一篇讲透
  • KMP算法_next与nextval计算详解_图解案例版
  • 2026实测可用的免费方法:微信里能直接压缩图片的小程序怎么选 - 图片处理研究员
  • 从矿卡到世界模型:年入7.8亿的博雷顿,真正价值在“AI”里
  • 2026年7月最新万国东莞东城万达广场维修保养服务电话 - 万国中国官方服务中心
  • 劳力士济南售后热线与网点地址更新通知(2026年7月最新) - 劳力士服务中心
  • BeeWorks底座:私有化IM、丰富模块与强集成能力的企业协作平台
  • 影刀RPA 网页改版后的容错处理:选择器失效时的自适配策略
  • Skyfall AI 花 100 万美元买公司让 AI 当 CEO,这场实验能否成功?
  • TSDB产品经理实战:如何定义工业场景的时序数据模型?