Skip to main content

提示模版 Prompt templates

提示模板是为语言模型生成提示的预定义配方。

模板可能包括指令、少数示例,以及适合给定任务的特定上下文和问题。

LangChain提供了创建和使用提示模板的工具。

LangChain致力于创建模型无关的模板,以便在不同的语言模型之间轻松复用现有的模板。

通常,语言模型期望提示是字符串,或者是聊天消息的列表。

Prompt template

使用PromptTemplate来为字符串提示创建一个模板。

默认情况下,PromptTemplate使用Python的str.format语法进行模板化;但是也可以使用其他的模板语法(例如,jinja2)。

from langchain import PromptTemplate

prompt_template = PromptTemplate.from_template(
"Tell me a {adjective} joke about {content}."
)
prompt_template.format(adjective="funny", content="chickens")
"Tell me a funny joke about chickens."

模板支持任意数量的变量,包括没有变量:

from langchain import PromptTemplate

prompt_template = PromptTemplate.from_template(
"Tell me a joke"
)
prompt_template.format()

对于额外的验证,可以明确地指定 input_variables。在实例化过程中,这些变量将与模板字符串中的变量进行比较,如果不匹配,将会引发异常。例如:

from langchain import PromptTemplate

invalid_prompt = PromptTemplate(
input_variables=["adjective"],
template="Tell me a {adjective} joke about {content}."
)

您可以创建自定义提示模板,以任何您想要的方式格式化提示。有关更多信息,请参阅自定义提示模板

Chat prompt template

聊天模型Chat Models的提示是一个聊天消息的列表。

每条聊天消息都与内容和一个名为 role 的附加参数相关联。 例如,在 OpenAI 的 聊天完成 API 中,聊天消息可以与 AI 助手、人类或系统角色相关联。

创建一个类似下面的聊天提示模板:

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.from_messages 接受多种消息表示方法。

例如,除了使用上面的 (type, content) 两元组表示法之外,还可以传递 MessagePromptTemplate 或 BaseMessage 的实例。

from langchain.prompts import ChatPromptTemplate
from langchain.prompts.chat import SystemMessage, HumanMessagePromptTemplate

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}"),
]
)

from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI()
llm(template.format_messages(text='i dont like eating tasty things.'))

这为您提供了在构建聊天提示时的很多灵活性。