LangChain提示词模版 PromptTemplate

0 什么是PromptTemplate

Prompt Template 是LangChain中的一个概念,接收用户输入,返回一个传递给LLM的信息(即提示词prompt)。

在应用开发中,固定的提示词限制了模型的灵活性和适用范围。所以,prompt template 是一个 模板化 的字符串 ,你可以将

变量插入到模板 中,从而创建出不同的提示。调用时:

  • 以 字典 作为输入,其中每个键代表要填充的提示模板中的变量。
  • 输出一个 PromptValue 。这个 PromptValue 可以传递给 LLM 或 ChatModel,并且还可以转换 为字符串或消息列表。

简单地说就是一个通过输入参数快速构造提示词模版的构造方法

1 构造PromptTemplate的两种方式

构造提示词模板有两种方式,一个是直接使用PromptTemplate 构造方法,另一个是通过其from_template()方法来生成

1.1 PromptTemplate构造方法

1.1.1 主要参数介绍
  • template:定义提示词模板的字符串,其中包含 文本 和 变量占位符(如{name}) ;
  • input_variables: 列表,指定了模板中使用的变量名称,在调用模板时被替换;
  • partial_variables:字典,用于定义模板中一些固定的变量名。这些值不需要再每次调用时被替换。
1.1.2 示例代码
python 复制代码
import os
import dotenv
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

dotenv.load_dotenv()

os.environ["OPENAI_BASE_URL"] = os.getenv("QWEN_BASE_URL")
os.environ["OPENAI_API_KEY"] = os.getenv("QWEN_API_KEY")

# 获取对话模型
chat_model = ChatOpenAI(
    model="qwen-plus",
    streaming=True
)

template = PromptTemplate(
    template="说一个关于{topic}的笑话,不超过{max_len}字",
    input_variables=["topic"],
    partial_variables={"max_len": 100},
)

prompt = template.format(topic="猪")
# 调用模型
response = chat_model.stream(prompt)

print("提示词:", prompt)
# 流式输出
for chunk in response:
    print(chunk.content, end='', flush=True)
1.1.3 效果

1.2 调用from_template()

1.2.1 总结理解

相比使用PromptTemplate 构造函数的方式,该方式无需在构造方法中填写input_variables和partial_variables,只需填写模版字符串,对于初始化部分参数可以通过partial ()方法实现,注意,该方法也可以在使用PromptTemplate构造函数的方式中使用

1.2.2 示例代码
python 复制代码
import os
import dotenv
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

dotenv.load_dotenv()

os.environ["OPENAI_BASE_URL"] = os.getenv("QWEN_BASE_URL")
os.environ["OPENAI_API_KEY"] = os.getenv("QWEN_API_KEY")

# 获取对话模型
chat_model = ChatOpenAI(
    model="qwen-plus",
    streaming=True
)

template = PromptTemplate.from_template("说一个关于{topic}的笑话,不超过{max_len}字").partial(max_len="100")

prompt = template.format(topic="牛")
# 调用模型
response = chat_model.stream(prompt)

print("提示词:", prompt)
# 流式输出
for chunk in response:
    print(chunk.content, end='', flush=True)
1.2.3 效果

2 format()调用和invoke()调用

2.1 format()和invoke()的使用规则

  • 只要对象是RunnableSerializable接口类型,都可以使用invoke(),替换前面使用format()的调用方式。
  • format(),返回值为字符串类型;
  • invoke(),返回值为PromptValue类型,接着调用to_string()返回字 符串。

总结一下就是format参数使用a="xx"的形式,invoke使用json形式传值

2.2 示例代码

python 复制代码
import os
import dotenv
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

dotenv.load_dotenv()

os.environ["OPENAI_BASE_URL"] = os.getenv("QWEN_BASE_URL")
os.environ["OPENAI_API_KEY"] = os.getenv("QWEN_API_KEY")

# 获取对话模型
chat_model = ChatOpenAI(
    model="qwen-plus",
    streaming=True
)

template = PromptTemplate.from_template("说一个关于{topic}的笑话,不超过{max_len}字").partial(max_len="100")

prompt = template.invoke({"topic": '鸡'})
# 调用模型
response = chat_model.stream(prompt)

print("提示词:", prompt)
# 流式输出
for chunk in response:
    print(chunk.content, end='', flush=True)

2.3 效果

相关推荐
乐观勇敢坚强的老彭11 分钟前
2026全国青少年信息素养大赛(Python小学组)复赛复习讲义
python·算法·数学建模
北极星日淘23 分钟前
Python代理池动态适配日淘爬虫|解决高频抓取IP封禁终极方案(含完整源码)
爬虫·python·tcp/ip
popcorn_min36 分钟前
Breast Cancer 二分类实验:随机森林预测乳腺肿瘤良恶性
python
半只小闲鱼1 小时前
合并多个excel文件到一个文件中
前端·python·数据分析
hikktn1 小时前
ORA-01861 日期格式错误的根治方案:从 SQL 层到 Java 层的标准化治理
java·python·sql
lg_cool_1 小时前
使用conda管理python运行环境并关联vscode
vscode·python·conda
宸津-代码粉碎机1 小时前
Spring AI企业级实战|智能记忆摘要+自动遗忘机制落地,彻底解决上下文爆炸与Token冗余
java·大数据·人工智能·后端·python·spring
乘浪初心1 小时前
python调用API接口,免费API调取,学习如何调取API接口并反馈你输入的内容
开发语言·python·api·免费
AI玫瑰助手1 小时前
Python模块:import导入模块与模块的搜索路径
android·开发语言·python
傻啦嘿哟1 小时前
一篇文章讲清楚Python的变量作用域
开发语言·python