LangChain关于提示词的几种写法

发布于:2025-09-06 ⋅ 阅读:(13) ⋅ 点赞:(0)

上文中 <---->(可点击移步查阅),我们已经了解到LangChain如何编写调用大模型的一个基本框架,
在编写完这个基本框架后,就要与大模型进行交互了,这时候,就需要我们编写提示词了,
那么以下,就会介绍提示词的几种编写方式

1 可携带变量的提示词

1.1 PromptTemplate

1.1.1 以构造方法的形式创建

创建步骤如下:
	【1】导包
	【2】构建变量提示词模板
		【2.1】创建PromptTemplate实例
		【2.2】PromptTemplate构造函数中传递两个参数
			【2.2.1】template:定义携带变量的<提示词模板字符串>
			【2.2.2】input_variables:以列表形式指定<提示词模板字符串>中哪些是变量
	【3】通过实例调用方法组成真正的提示词
		【3.1】format(变量名1=值1, 变量名2=值2, ...)
		【3.2】invoke({"变量名1":"值1","变量名2":"值2","变量名3":"值3", ...})
		以上两个方法任选其一,作用是会将提示词模板中的变量替换成真正的值,返回PromptValue 对象

示例代码如下:

# 调用format()

# 导包
from langchain.prompts import PromptTemplate

#定义多变量模板。
template = PromptTemplate(
    template="请评价{product}的优缺点,包括{aspect1}和{aspect2}。",
    input_variables=["product", "aspect1", "aspect2"]
)

#使用模板生成提示词
# 说明:在调用format()函数时,一定要将所有的参数都进行赋值,才可以得到正确的字符串返回结果。否则报错
# prompt_1 = template.format(product="智能手机", aspect1="电池续航")
prompt_1 = template.format(product="智能手机", aspect1="电池续航", aspect2="拍照质量")

print("提示词1:",prompt_1)
# 调用invoke()

# 导包
from langchain.prompts import PromptTemplate

#定义多变量模板。
template = PromptTemplate(
    template="请评价{product}的优缺点,包括{aspect1}和{aspect2}。",
    input_variables=["product", "aspect1", "aspect2"]
)

#使用模板生成提示词
prompt_1 = template.invoke({
   
   
	"product": "智能手机", 
	"aspect1": "电池续航",
	"aspect2": "拍照质量"
})

print("提示词1:",prompt_1)

PromptTemplate构造方法中还可以再传入一个参数:partial_variables
示例代码如下:

from langchain.prompts import PromptTemplate

template = PromptTemplate(
    template="请评价{product}的优缺点,包括{aspect1}和{aspect2}。",
    input_variables=["product", "aspect1","aspect2"],
    partial_variables={
   
   "aspect2":"拍照质量","aspect1":"电池续航"}
)

str = template.format(product = "笔记本电脑")

1.1.2 以PromptTemplate类提供的from_template()的形式创建

创建步骤如下:
	【1】导包
	【2】构建变量提示词模板
		【2.1】调用PromptTemplate类提供的from_template()
		【2.2】from_template()中传递一个参数
			【2.2.1】template:定义携带变量的<提示词模板字符串>
	【3】通过实例调用方法组成真正的提示词
		【3.1】format(变量名1=值1, 变量名2=值2, ...)
		【3.2】invoke({"变量名1":"值1","变量名2":"值2","变量名3":"值3", ...})
		以上两个方法任选其一,作用是会将提示词模板中的变量替换成真正的值,返回PromptValue 对象

示例代码如下:

# 调用format()

# 导包
from langchain.prompts import PromptTemplate

template = PromptTemplate.from_template(
    template="请评价{product}的优缺点,包括{aspect1}和{aspect2}。"
)

prompt_1 = template.format(product="智能手机", aspect1="电池续航", aspect2="拍照质量")

print("提示词1:",prompt_1)
# 调用invoke()

# 导包
from langchain.prompts import PromptTemplate

template = PromptTemplate.from_template(
    template="请评价{product}的优缺点,包括{aspect1}和{aspect2}。"
)

prompt_1 = template.invoke({
   
   "product":"智能手机","aspect1":"电池续航","aspect2":"拍照质量"})

print(prompt_1)
print(type(prompt_1))

from_template()中还可以再传入一个参数:partial_variables
示例代码如下:

from langchain.prompts import PromptTemplate

template = PromptTemplate.from_template(
    template="请评价{product}的优缺点,包括{aspect1}和{aspect2}。",
    partial_variables={
   
   "aspect2":"拍照质量","aspect1":"电池续航"}
)

result = template.format(product="智能手机", )

1.1.3 结合大模型使用

定义好提示词后,如何将其传递给大模型呢?
我们这里以大模型提供的invoke()为例:
其他方法的使用可点击移步查阅

[1] 非对话大模型:

import os
import dotenv
from langchain_openai import OpenAI

dotenv.load_dotenv()

os.environ['OPENAI_API_KEY'] = os.getenv("OPENAI_API_KEY1")
os.environ['OPENAI_BASE_URL'] = os.getenv("OPENAI_BASE_URL")

# 非对话大模型
llm = OpenAI()
template = PromptTemplate.from_template(
    template="请评价{product}的优缺点,包括{aspect1}和{aspect2}。"
)

prompt_1 = template.invoke({
   
   "product":"智能手机","aspect1":"电池续航","aspect2":"拍照质量"})


str = llm.invoke(prompt_1)  #此时的参数prompt_1是PromtValue类型
print(str)

print(type(str))

[2] 对话大模型:

import os
import dotenv
from langchain_openai import ChatOpenAI

dotenv.load_dotenv()

os.environ['OPENAI_API_KEY'] = os.getenv("OPENAI_API_KEY1"

网站公告

今日签到

点亮在社区的每一天
去签到