LangChain关于提示词的几种写法
上文中 <---->(可点击移步查阅),我们已经了解到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 PromptTemplatetemplate = 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 PromptTemplatetemplate = PromptTemplate.from_template(template="请评价{product}的优缺点,包括{aspect1}和{aspect2}。"
)prompt_1 = template.format(product="智能手机", aspect1="电池续航", aspect2="拍照质量")print("提示词1:",prompt_1)
# 调用invoke()# 导包
from langchain.prompts import PromptTemplatetemplate = 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 PromptTemplatetemplate = 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 OpenAIdotenv.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 ChatOpenAIdotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv("OPENAI_API_KEY1"