实用指南:零基础学AI大模型之LangChain-PromptTemplate

news/2025/10/1 12:06:56/文章来源:https://www.cnblogs.com/ljbguanli/p/19122326

实用指南:零基础学AI大模型之LangChain-PromptTemplate

大家好,我是工藤学编程 一个正在努力学习的小博主,期待你的关注
实战代码系列最新文章C++实现图书管理系统(Qt C++ GUI界面版)
SpringBoot实战系列【SpringBoot实战系列】SpringBoot3.X 整合 MinIO 存储原生方案
分库分表分库分表之实战-sharding-JDBC分库分表执行流程原理剖析
消息队列深入浅出 RabbitMQ-RabbitMQ消息确认机制(ACK)
AI大模型零基础学AI大模型之Prompt提示词工程

前情摘要:
1、零基础学AI大模型之读懂AI大模型
2、零基础学AI大模型之从0到1调用大模型API
3、零基础学AI大模型之SpringAI
4、零基础学AI大模型之AI大模型常见概念
5、零基础学AI大模型之大模型私有化部署全指南
6、零基础学AI大模型之AI大模型可视化界面
7、零基础学AI大模型之LangChain
8、零基础学AI大模型之LangChain六大核心模块与大模型IO交互链路
9、零基础学AI大模型之Prompt提示词工程


本文章目录

  • 零基础学AI大模型之LangChain:PromptTemplate核心用法与实战解析
    • 一、先搞懂:什么是PromptTemplate?
    • 二、核心要素:3个关键变量+2个常用方法
    • 三、实战案例:从基础到进阶(附代码解析)
      • 案例1:基础款——手动定义模板与变量
      • 案例2:快捷款——用from_template自动推断变量
      • 案例3:进阶款——用partial_variables设置默认值
      • 案例4:实战款——PromptTemplate结合LLM生成结果
    • 四、新手避坑:3个常见问题与解决方案
    • 五、总结:PromptTemplate的核心价值

零基础学AI大模型之LangChain:PromptTemplate核心用法与实战解析

在“零基础学AI大模型”系列中,我们已经掌握了LangChain的基础框架(第7篇),而今天要聚焦的PromptTemplate,正是LangChain中“让提示词结构化、可复用”的核心组件——它就像“提示词的预制菜谱”,帮你把零散的需求(食材)变成标准化的指令(菜品),避免重复写硬编码提示词的麻烦。下面从基础概念到实战案例,一步步拆解它的用法。

请添加图片描述

一、先搞懂:什么是PromptTemplate?

对零基础同学来说,不用记复杂定义,记住一句话:
PromptTemplate是LangChain中用于构建“带占位符的提示词模板”的工具——它能把“固定文本”和“动态变量”(比如用户输入、业务数据)拼合成LLM能理解的完整提示词,同时解决两个核心问题:

  1. 动态组装内容:比如写广告语时,只需改“产品名”变量,不用重新写整个提示词;
  2. 避免硬编码:不用把“领域、语言、问题”这些可变内容写死在代码里,后续修改更灵活。

这里要注意一个区分:PromptTemplate是单纯的文本模板(只处理字符串拼接),后续我们会学的ChatPromptTemplate(对话模板)是它的进阶版,专门适配多轮对话场景,今天先聚焦基础的PromptTemplate。

二、核心要素:3个关键变量+2个常用方法

想用好PromptTemplate,必须掌握它的核心组成部分,我们用“菜谱类比”帮你理解:

核心要素作用(对应菜谱)通俗解释
template菜谱框架(固定步骤)带占位符的文本,比如“为{product}写3个广告语”
input_variables必须准备的“食材清单”需要手动填充的变量(如product),必填
partial_variables提前备好的“预制配料”(可选)固定不变的变量(如默认语言“中文”),不用每次填
format()方法按菜谱组合食材填充所有input_variables,生成最终提示词
from_template()方法自动识别“食材清单”的快捷方式不用手动写input_variables,模板里的{变量}会被自动识别

三、实战案例:从基础到进阶(附代码解析)

下面用4个递进案例,结合“零基础友好”的代码注释,帮你快速上手(所有案例可直接复制运行,注意替换API密钥等个人信息)。

案例1:基础款——手动定义模板与变量

场景:生成不同领域的专业回答(比如网络安全、Java开发),需要灵活切换“领域”和“问题”。

# 1. 导入PromptTemplate(从langchain核心库中引入,和系列前文LangChain框架呼应)
from langchain.prompts import PromptTemplate
# 2. 定义模板(template):固定文本+{占位符},占位符就是要动态填的变量
template = """
你是一位专业的{domain}顾问,请用{language}回答以下问题,要求简洁易懂(适合零基础):
问题:{question}
回答:
"""
# 3. 创建PromptTemplate实例:指定“必须填的变量”(input_variables)
prompt = PromptTemplate(
input_variables=["domain", "language", "question"],  # 3个必填变量,少填会报错
template=template  # 关联上面定义的模板
)
# 4. 查看模板结构(可选,帮你确认变量是否正确)
print("模板结构:", prompt)
# 输出会显示:input_variables=['domain', 'language', 'question'], template=...
# 5. 用format()填充变量,生成最终提示词
final_prompt = prompt.format(
domain="网络安全",        # 填“领域”变量
language="中文",         # 填“语言”变量
question="如何防范钓鱼攻击?"  # 填“问题”变量
)
# 6. 查看最终提示词(实际调用大模型时,就用这个final_prompt作为输入)
print("\n最终提示词:", final_prompt)

运行效果预期
最终提示词会变成:
“你是一位专业的网络安全顾问,请用中文回答以下问题,要求简洁易懂(适合零基础):
问题:如何防范钓鱼攻击?
回答:”
在这里插入图片描述

关键提醒:input_variables里的变量必须全部在format()中填充,少一个都会报错。

案例2:快捷款——用from_template自动推断变量

场景:模板里的变量少(比如只有2个),不想手动写input_variables,让LangChain自动识别。

from langchain.prompts import PromptTemplate
# 1. 定义模板:里面有{target_language}和{text}两个占位符
template = "请将以下文本翻译成{target_language},翻译后保持原意不变:\n文本:{text}"
# 2. 用from_template()创建实例:自动识别模板中的{变量},生成input_variables
prompt = PromptTemplate.from_template(template)
# 3. 查看自动推断的变量(验证是否正确)
print("自动识别的变量:", prompt.input_variables)  # 输出:['target_language', 'text']
# 4. 填充变量(和案例1一样用format())
final_prompt = prompt.format(
target_language="英语",
text="LangChain的PromptTemplate很适合零基础学习"
)
print("\n最终提示词:", final_prompt)

在这里插入图片描述

核心优势:适合新手——不用手动核对input_variables,减少“漏写变量”的错误,尤其是模板变量较多时。

案例3:进阶款——用partial_variables设置默认值

场景:有些变量固定不变(比如默认“分析类型=情感极性分析”),不想每次format()都重复填。

from langchain.prompts import PromptTemplate
# 1. 定义模板:包含“固定默认变量”{analysis_type}和“动态变量”{user_input}
template = """分析用户输入的情绪(默认分析类型:{analysis_type}):
用户输入:{user_input}
分析结果(要求:用“正面/负面/中性”总结,再补1句解释):"""
# 2. 创建实例:用partial_variables固定默认值,input_variables只填“动态变量”
prompt_template = PromptTemplate(
input_variables=["user_input"],  # 只需要填“用户输入”这个动态变量
template=template,
template_format="f-string",  # 指定模板格式为f-string(适配Python字符串语法)
partial_variables={"analysis_type": "情感极性分析"}  # 固定“分析类型”,不用每次填
)
# 3. 填充动态变量(只需填user_input)
final_prompt = prompt_template.format(user_input="这个产品太难用了")
print("最终提示词:", final_prompt)
# 4. 查看模板的所有属性(可选,帮你理解内部结构)
print("\n模板文本:", prompt_template.template)
print("必填变量:", prompt_template.input_variables)
print("默认变量:", prompt_template.partial_variables)

运行效果预期
最终提示词中,{analysis_type}会自动替换成“情感极性分析”,无需手动填:
“分析用户输入的情绪(默认分析类型:情感极性分析):
用户输入:这个产品太难用了
分析结果(要求:用“正面/负面/中性”总结,再补1句解释):”

在这里插入图片描述

案例4:实战款——PromptTemplate结合LLM生成结果

场景:把模板和大模型(如千问)结合,生成实际内容(比如介绍LangChain-PromptTemplate),这是真实项目中最常用的流程。

# 1. 导入需要的库:模板、大模型、输出解析器(和系列前文“调用大模型API”呼应)
from langchain_core.prompts import PromptTemplate  # LangChain核心模板
from langchain_openai import ChatOpenAI  # 千问等模型的调用类(兼容OpenAI格式)
from langchain_core.output_parsers import StrOutputParser  # 解析大模型输出的工具
# 2. 创建PromptTemplate:生成“面向年轻人的产品广告语”
prompt_template = PromptTemplate(
input_variables=["product"],  # 动态变量:产品名
template="为{product}写3个吸引年轻人的介绍语,要求:1. 带网络热词(如“绝绝子”“刚需”);2. 每句不超过15字",
)
# 3. 填充模板变量(生成最终提示词)
# 用invoke()替代format():LangChain新版推荐用法,支持后续和大模型“链式调用”
prompt = prompt_template.invoke({"product": "LangChain-PromptTemplate"})
model = ChatOpenAI(
model_name='deepseek-r1:7b',  # 本地模型名称,根据实际情况填写
base_url="http://127.0.0.1:11434/v1",  # 本地模型API地址
api_key="none",  # 本地模型通常不需要真实API密钥
temperature=0.7  # 可根据需要调整温度参数
)
# 5. 调用大模型生成结果
response = model.invoke(prompt)  # 把提示词传给大模型
# print("大模型原始输出:", response)  # 原始输出是对象,包含content、role等信息
# 6. 解析输出结果(用StrOutputParser提取纯文本,避免处理复杂对象)
out_parser = StrOutputParser()
answer = out_parser.invoke(response)  # 提取response中的content文本
# 7. 打印最终结果
print("\n大模型生成的介绍语:")
print(answer)

运行效果预期
大模型会输出3句符合要求的广告语,比如:

  1. AI小能手绝绝子!一键搞定各种需求!你还在等什么?
  2. 用LangChain-PromptTemplate,秒变创意达人!还在犹豫做什么?
  3. 创意插上翅膀,轻松实现想要的效果!这就是 LangChain-PromptTemplate!
    在这里插入图片描述

关键提醒

  • API密钥要替换成自己的(从千问、OpenAI等平台获取),否则会调用失败;
  • temperature=0.7:如果想要更固定的结果,可设为0.2;想要更多样化,设为0.9。

四、新手避坑:3个常见问题与解决方案

在实际使用中,零基础同学容易遇到以下问题,提前规避能少走弯路:

常见问题原因分析解决方案
format()时报错“缺少变量”input_variables中的变量没全部填充1. 用prompt.input_variables查看需要填的变量;2. 检查format()中是否漏填
模板变量识别错误用了特殊符号(如{ }里加空格),或from_template没识别到1. 变量名不要加空格(如{product},不是{ product });2. 手动指定input_variables
结合LLM时输出是对象没加输出解析器,直接打印response对象导入StrOutputParser,用out_parser.invoke(response)提取纯文本

五、总结:PromptTemplate的核心价值

对“零基础学AI大模型”的同学来说,PromptTemplate不是“必学的复杂工具”,而是“提高效率的实用技巧”——它的核心价值在于:

  1. 降本:不用重复写提示词,改变量就行;
  2. 提效:模板可复用,团队内共享后不用各自造轮子;
  3. 避错:结构化模板减少“提示词遗漏关键信息”的问题。

下一篇我们会进阶学习ChatPromptTemplate,看看如何用它处理多轮对话场景(比如客服机器人、连续问答),记得结合今天的PromptTemplate基础来学哦!

请添加图片描述

喜欢请点赞收藏。如果有想看的内容,也可以在评论区告诉我~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx 反向代理、负载均衡与 Keepalived 高可用 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

文件上传攻击全面指南:从侦察到防御

本文深入探讨文件上传攻击的技术细节,包括如何识别目标服务器框架、利用文件上传漏洞获取服务器权限,以及相应的防御措施。文章详细介绍了侦察阶段的URL路径探测和扩展名词典技术,为安全研究人员提供实用指导。#2 文…

深圳网站推广中关村在线官网入口

Linux网卡命名规则 网卡命名 一、为什么需要这个 服务器通常有多块网卡,有板载集成的,同时也有插在PCIe插槽的。Linux系统的命名原来是eth0,eth1这样的形式,但是这个编号往往不一定准确对应网卡接口的物理顺序。 为解决这类问题&…

网站开发设计需求seo 网站太小

## 多态pythonOOP中标准解释:多个不同类型对象,可以响应同一个方法,并产生不同结果,即为多态多态好处:只要知道基类使用方法即可,不需要关心具体哪一个类的对象实现的,以不变应万变,提高灵活性/扩展性多态,一般都需要一个管理多态的方法,方法的函数就是类的对象,在方法中通过点…

2025年陕西洋房楼盘,西安城西品质楼盘,沣东品牌楼盘住宅口碑推荐,地建嘉信臻境户型多元布局,满足全周期生活需求

在西安城西的沣东新城,有一座备受瞩目的楼盘——地建嘉信臻境,它正以独特的魅力,为追求品质生活的人们勾勒出理想家园的模样。 地建嘉信臻境项目由经验丰富的团队运营,该团队拥有二十余年地产开发经验。作为地建嘉…

asus nuc15 pro ultra7 255H 外接 fevm 雷电5显卡坞 BIOS设置

nuc 15 CRHU7 上手 1 没有任何驱动时。连接显卡坞到雷电接口,有连接声音,设备管理器 ”显示适配器“里能看到第二块显卡。 2 在别的机器下载1G多的全部驱动,复制过来一键安装全部驱动,包括重启后刷新了BIOS和雷电固…

杭州绿城乐居建设管理有限公司网站韶关网站设计公司

目录 一、事务的概念 二、事务的核心特性 三、事务操作中的常见BUG 3.1 脏读 3.2 不可重复读 3.3 幻读 四、隔离级别 五、使用事务 一、事务的概念 “事务”是指一组操作,在逻辑上是不可分割的,组成这组操作的各个语句,或者全部执行成…

P11529 [THUPC 2025 初赛] 辞甲猾扎

想了两年半砸贪心。 思路 设与黑点相邻,且不为黑点的点集为 \(S\)。 不难发现答案上界是 \(|S|\)。 如果对于两个点 \(i,j \in S\),存在 \((u,i)\) 和 \((u,j)\),那么我们有可能通过选择 \(u\) 作为白点来优化答案。…

2025年陕西品牌楼盘,西安城西优质楼盘,西咸新区核心楼盘住宅口碑推荐,地建嘉信臻境距吾悦广场一路之隔,商业配套完善

2025年陕西品牌楼盘——地建嘉信臻境的魅力之居 在西安城西这片充满活力与发展潜力的土地上,有一颗璀璨的楼盘之星——地建嘉信臻境,它宛如一颗精心雕琢的明珠,散发着独特的魅力,为追求品质生活的人们描绘出一幅美…

ARC113E Rvom and Rsrev

看看样例,发现要对 \(a\)、\(b\) 的位置和数量分讨。 用 \(A\) 表示一段极长连续 \(a\),\(B\) 表示一段极长连续 \(b\)。答案只有三种情况:\(A\) 或者 \(B\); \(aB\); \(BA\); \(BaB\)。我们要做的操作是尽量把 …

2025年西咸新区高端楼盘,西安刚需楼盘,沣东改善楼盘住宅口碑推荐,地建嘉信臻境3分钟通达高新,区位优势明显

2025年西咸新区高端楼盘新典范——地建嘉信臻境 在西安房地产市场中,地建嘉信臻境项目犹如一颗璀璨的新星,正闪耀着独特的光芒。该项目由拥有二十余年地产开发经验的团队运营,作为地建嘉信深耕陕西6年、布局6城8盘的…

P12704 Retribution

我也不知道为什么能过做法。 考虑暴力缩点,然后做线段树合并。 细节上,由于要在可持久化线段树上合并,所以每次要新开节点,在合并的时候多剪枝减少栈调用和新开节点。 如果尝试将询问离线挂在每个 SCC 上的话,\(1…

IDEA 高效配备指南:从基础到进阶的设置全解析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Sunny Pro 网络验证- 仅需一键,即可为您的exe添加高强度防破加密!

点击访问:Sunny官网 Sunny Pro 技术栈纯C++语言 Windows IOCP+线程池+数据库连接池(使用SQLite作为数据库) 界面使用QT6,仅支持Windows Server 2019及以上版本系统或Windows 10 及以上x64系统注:本验证使用知名的…

完整教程:跨会话泄露:AI时代下的安全挑战与防御策略

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站建设案例精英中学网站建设方案 分校区

一、官网参考文档 达梦数据库官网:https://www.dameng.com/ ,参考文档如下: 最后的文档地址为:Docker安装 | 达梦技术文档 二、dcoker安装 docker基本按照官网来就行,点击相应的链接下载镜像包。 复制到linux中&#x…

一条mysql数据库更新语句

发生场景:车间产出记录进行出库 国庆节前下班的时候,生产部门生产完进行入库,这个时候正常跑我们的业务XXXX——直接到根据单件档案的单件号更新单件档案上的最终用户信息时候出现了问题,跑着跑着就超时,这个时候…

US$128 Original Wellon VP-299 Programmer

Original Wellon VP-299 Programmer Electrical spec. of the AC adapter: AC input 100V to 240V, 50/60Hz, DC output 9V/0.6A40 Pin ZIF socket pin-drivers.Interface with LAPTOP, PC or compatibles through USB…

凡科建的网站怎么做seometro主题 wordpress

1.背景当多个进程可能会对同样的数据执行操作时,这些进程需要保证其它进程没有在操作,以免损坏数据。通常,这样的进程会使用一个“锁文件”,也就是建立一个文件来告诉别的进程自己在运行,如果检测到那个文件存在则认为…

十堰响应式网站网站开发员纵向发展

【STM32篇】4988驱动步进电机_hr4988-CSDN博客 在上篇文章中使用了HR4988实现了步进电机的驱动,在实际运用过程,HR4988或者A4988驱动步进电机会存在电机噪音太大的现象。本次将向各位友友介绍一个驱动简单且非常静音的一款步进电机驱动IC。 1.DRV8425简介…