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

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

实用指南:零基础学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.hskmm.com/?act=detail&tid=22135

相关文章:

  • 文件上传攻击全面指南:从侦察到防御
  • 2025年陕西洋房楼盘,西安城西品质楼盘,沣东品牌楼盘住宅口碑推荐,地建嘉信臻境户型多元布局,满足全周期生活需求
  • asus nuc15 pro ultra7 255H 外接 fevm 雷电5显卡坞 BIOS设置
  • P11529 [THUPC 2025 初赛] 辞甲猾扎
  • 2025年陕西品牌楼盘,西安城西优质楼盘,西咸新区核心楼盘住宅口碑推荐,地建嘉信臻境距吾悦广场一路之隔,商业配套完善
  • ARC113E Rvom and Rsrev
  • 2025年西咸新区高端楼盘,西安刚需楼盘,沣东改善楼盘住宅口碑推荐,地建嘉信臻境3分钟通达高新,区位优势明显
  • P12704 Retribution
  • Sunny Pro 网络验证- 仅需一键,即可为您的exe添加高强度防破加密!
  • 一条mysql数据库更新语句
  • 浅谈递归入门(1) - 指南
  • python+uniapp基于微信小工具的医院陪诊预约系统
  • [深度学习] 大模型学习5-高效微调框架Unsloth使用指北
  • 【APK安全】组件安全核心风险与防御指南 - 详解
  • 前端-JavaScript简介JavaScript模块化 - 努力-
  • 基本地址变换机构
  • 2025工业网线厂家权威推荐榜:千兆/拖链/高柔/网线/六类/超五类/6类/超5类/千兆/超六类/8芯/4芯/成品/相机/视觉数据工业网线高强屏蔽与稳定传输实力之选
  • gitee 使用安装教程
  • VisualMimic——基于视觉的人形行走-操作控制:低层策略负责平衡控制且跟踪高层下发的指令、高层策略则基于自我中心视觉输入生成任务跟踪指令 - 实践
  • 基本分页存储管理的基本概念
  • luogu P6503 [COCI 2010/2011 #3] DIFERENCIJA
  • 详细介绍:自动化接口框架搭建分享-pytest第三部分
  • Solon Plugin 自动装配机制详解
  • 2025宅基地纠纷律所权威推荐榜:专业调解与胜诉保障实力之选
  • 2025上海骨灰盒哪里买优质厂家权威推荐榜:匠心工艺与品质服务之选
  • 实用指南:华为 HCIA-Datacom 备考:VRP 通用路由平台原理-实操
  • Voice Agent Camp 结营!完整项目名单公布丨超音速计划 2025
  • 2025上海寿衣哪里买权威推荐:优质供货商与暖心服务之选
  • AI 真能胜任专业工程师的工作吗?
  • 容器中与内存相关的几个参数