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

零基础学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.dtcms.com/a/418818.html

相关文章:

  • FFT去除规律条纹
  • JAVA中的权限修饰符
  • 前端面试十四之webpack和vite有什么区别
  • 小米路由器 做网站银川森林半岛
  • Kafka04-知识速记
  • 【Linux】高级I/O
  • 开源的容器化平台:Docker高级应用与实战案例
  • 3.7 广域网 (答案见原书 P116)
  • 临淄网站制作首选公司seo排名需要多少钱
  • k8s-部署单master节点
  • Python 2025:量子计算编程的新前沿
  • 二级学院网站建设自评报告互联网营销公司有哪些
  • 做网站滨州现在写博客还是做网站
  • 基于 Service Worker 的图书馆资源缓存技术研究
  • php网站后台验证码不显示哈尔滨教育云平台网站建设
  • 银行门户网站是什么意思网页设计代码中字体的颜色如何改
  • 【代码的暴力美学】-- C语言基础编程题_1
  • Java 架构师系列:JVM 与 AI 负载的优化策略
  • 数据分析-Excel-常用函数
  • Python 文件操作
  • Java 大视界 -- Java 大数据机器学习模型在电商产品销量预测与库存优化管理中的应用
  • 陕西开龄建设网站浙江省建设厅网站如何查安全员
  • 使用 Jenkins 的流水线项目实施 CI/CD
  • 网站建设平台安全问题有哪些方面做网站自动赚钱吗
  • (八)掌握继承的艺术:重构之路,化繁为简
  • 文成做网站国外网站如何做推广
  • 云栖2025 | 阿里云AI搜索年度发布:开启Agent时代,重构搜索新范式
  • 让每次语音唤醒都可靠,公牛沐光重构可观测体系
  • 黄峥的成功之道:重构电商版图的创新密码
  • 数字大健康崛起:艾灸机器人重构就业生态,传统与科技如何共生?