上文中 <---->(可點擊移步查閱),我們已經了解到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"