【2024最全最细Langchain教程-1 】调用openai实现人工智能时代的hello_world-CSDN博客
【2024最全最细Langchain教程-2 】Langchain模型I/O之模型包装器-CSDN博客
在上一节课中,我们开始使用 response = llm.invoke("") 这个命令开始进行大模型的调用,但是用户的输入可能很复杂、还可能带参数,所以我们要学会使用模板来进行输入内容的组织,因此我们就需要使用Prompt(模板 or 提示)。
langchain官网是这样解释prompt的: "提示" 指的是模型的输入。这个输入通常不是硬编码的,而是通常由多个组件构成的。我们来看一个最简单的模板
初识模板Prompt
我们引入了langchain_core.prompts 里面 ChatPromptTemplate 模板,注意我们引入的模型是一个聊天模型包装器ChatOpenAI,因此对应的模板也应该使用ChatPromtTemplate而不是PromtTemplate
import langchain
import os
from langchain_openai import ChatOpenAI
# 引入模板 ChatPromptTemplate
from langchain_core.prompts import ChatPromptTemplate
api_key = os.getenv("OPENAI_API_KEY")
llm = ChatOpenAI(
openai_api_key=api_key,
temperature = 0.5,
base_url = "https://apejhvxcd.cloud.sealos.io/v1"
)
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个中国历史专家."),
("user", "{input}")
])
chain = prompt | llm
chain.invoke({"input":"中国改革开放的总设计师是谁?"})
运行结果:
在这里,我们实例化了一个ChatPromtTemplate,并使用它的from_messages()方法来接受信息输入。这个方法获取一个List列表,List里有两个元组,第一个元组是system系统消息,这个是对语言模型响应的定义和限制,我们看下面一个示例:
prompt2 = ChatPromptTemplate.from_messages([
("system", "你是一个中国历史专家.你只负责回答历史问题,你对历史之外的知识不予以回答"),
("user", "{input}")
])
chain2 = prompt2 | llm
chain2.invoke({"input":"python是什么类型的语言?"})
我们构造了第二个模板,构造了第二个chain2然后进行调用,我们看下运行结果:
如果我们把system消息置空,再看下效果:
可以看到是否设置模板提示词里的system消息,所得到的回答差异巨大,这个也是为什么Prompt Engineering 这么火的原因,原因就在于使用不用的Prompt得到的大模型响应完全不同。
GITHUB和视频教学地址
B站视频地址:【2024最全最细】langchain之prompt提示模板(一)_哔哩哔哩_bilibili
github地址:https://github.com/jerry1900/jupyter
如需openai国内节点账号请与我联系:15652965525(微信)