零基础学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核心用法与实战解析

在"零基础学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开发),需要灵活切换"领域"和"问题"。

python 复制代码
# 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自动识别。

python 复制代码
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()都重复填。

python 复制代码
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),这是真实项目中最常用的流程。

python 复制代码
# 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基础来学哦!

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

相关推荐
金井PRATHAMA2 小时前
一阶逻辑及其变体在自然语言深层语义分析中的作用、挑战与未来启示
人工智能·自然语言处理·知识图谱
星哥说事2 小时前
AI编程助手如何让开发效率提升300%?CodeBuddy CLI实战案例解析
人工智能
m0_743106462 小时前
NeRF+3DGS——提升渲染质量与压缩模型参数
论文阅读·人工智能·计算机视觉·3d·几何学
倔强青铜三2 小时前
苦练 Python 第 57 天:用 pathlib 模块告别繁琐的文件操作,开启优雅编程之旅!
人工智能·python·面试
火山引擎边缘云2 小时前
字节跳动多媒体实验室联合ISCAS举办第五届神经网络视频编码竞赛
人工智能·深度学习·神经网络
星期天要睡觉3 小时前
计算机视觉(opencv)——基于 dlib 轮廓绘制
人工智能·opencv·计算机视觉
whltaoin3 小时前
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
人工智能·prompt
扫地的小何尚3 小时前
CUDA 13.0深度解析:统一ARM生态、UVM增强与GPU共享的革命
arm开发·人工智能·自然语言处理·gpu·nvidia·jetson·nvidia thro
猫头虎3 小时前
如何利用海外 NetNut 网络代理与 AICoding 实战获取 iPhone 17 新品用户评论数据?
网络·人工智能·计算机网络·网络安全·ios·网络攻击模型·iphone