原文地址:【LangChain系列 4】Model I/O——Prompts概述
本文速读:
-
Prompt模版
-
样本选择器
Prompts简单来讲就是一组指令或文本输入,语言模型理解它的意思后,给出一个输出响应。
LangChain提供了一些模块可以让我们更方便地使用prompts:
-
Prompt templates:参数化模版输入
-
Example selectors:动态选择prompt示例
01 Prompt模版
Prompt templates可以理解为预先定义好的参数化的prompt,可以动态传入不同的参数值而成为prompt;它是一个模版,可以包含命令、少样本示例、具体上下文和特定的问题。
LangChain封装好了很多相关的工具可以让我们方便地使用prompt。
PromptTemplate示例:
from langchain import PromptTemplate
prompt_template = PromptTemplate.from_template(
"Tell me a {adjective} joke about {content}."
)
prompt_template.format(adjective="funny", content="chickens")
prompt_template格式化后为:
"Tell me a funny joke about chickens."
另外,我们还可以明确地指定参数名字,比如:
invalid_prompt = PromptTemplate(
input_variables=["adjective", "content"],
template="Tell me a {adjective} joke about {content}."
)
这样的好处就是会去验证参数是否正确,可以减少犯错,以上两种方式都可以,你可以根据个人喜好选择。
ChatPromptTemplate示例:
from langchain.prompts import ChatPromptTemplate
template = ChatPromptTemplate.from_messages([
("system", "You are a helpful AI bot. Your name is {name}."),
("human", "Hello, how are you doing?"),
("ai", "I'm doing well, thanks!"),
("human", "{user_input}"),
])
messages = template.format_messages(
name="Bob",
user_input="What is your name?"
)
ChatPromptTemplate可以接收一系列message,每个message是一个二元组,包括角色和内容两个部分。
除了二元组的写法,另一种写法就是BaseMessage或MessagePromptTemplate。
from langchain.prompts import ChatPromptTemplate
from langchain.prompts.chat import SystemMessage, HumanMessagePromptTemplate
from langchain.chat_models import ChatOpenAI
template = ChatPromptTemplate.from_messages(
[
SystemMessage(
content=(
"You are a helpful assistant that re-writes the user's text to "
"sound more upbeat."
)
),
HumanMessagePromptTemplate.from_template("{text}"),
]
)
llm = ChatOpenAI(openai_api_key="xxx")
rsp = llm(template.format_messages(text='i dont like eating tasty things.'))
print(rsp)
运行代码,输出结果:
content='I absolutely adore indulging in delicious treats!' additional_kwargs={} example=False
以上是prompt模版的简单使用示例,LangChain还封装了很多不同类别模版与功能:
-
连接特征库
-
自定义propmt模版
-
少样本prompt模版
-
输出模版
-
MessagePromptTemplate
-
部分prompt模版
-
prompt组合
-
prompt序列化
-
prompt模版校验
02 样本选择器
样本选择器(Example Selectors)是什么呢?假如你有大量样本,但如果将样本都放到prompt的话,就会超过prompt的token限制,那么你就需要选择最适合的样本放到prompt中,而样本选择器就是为了解决这个问题的;样本选择器的作用就是从大量样本中选择最适合的样本。
样本选择器 的基类如下:
class BaseExampleSelector(ABC):
"""Interface for selecting examples to include in prompts."""
@abstractmethod
def select_examples(self, input_variables: Dict[str, str]) -> List[dict]:
"""Select which examples to use based on the inputs."""
当我们需要自定义一个样本选择器时,唯一需要做的就是实现select_examples方法,该方法接收input_variables参数,返回一个样本列表。同时,LangChain也提供了一些 样本选择器 可以直接使用。
本文小结
本文介绍了Model I/O 中的输入:prompts,主要包括 prompt模版 和 样本选择器 两个模块,让我们对这两个模块的功能和使用有了一个基本的概念,后续文章将详细介绍它们的用法与实践。
更多最新文章,请关注公众号:大白爱爬山