跳到主要内容

Prompt Templates

Prompt templates 帮助将用户输入和参数转换为语言模型的指令。这可以用于指导模型的响应,帮助模型理解上下文并生成相关的、连贯的基于语言的输出。

Prompt Templates 接受一个对象作为输入,其中每个键代表 prompt template 中要填充的变量。

Prompt Templates 输出一个 PromptValue。此 PromptValue 可以传递给 LLM 或 ChatModel,也可以转换为字符串或消息列表。 PromptValue 存在的原因是为了方便在字符串和消息之间切换。

有几种不同类型的 prompt templates

字符串 Prompt Templates

这些 prompt templates 用于格式化单个字符串,通常用于更简单的输入。例如,构建和使用 PromptTemplate 的常见方法如下

import { PromptTemplate } from "@langchain/core/prompts";

const promptTemplate = PromptTemplate.fromTemplate(
"Tell me a joke about {topic}"
);

await promptTemplate.invoke({ topic: "cats" });
StringPromptValue {
value: 'Tell me a joke about cats'
}

ChatPromptTemplates

这些 prompt templates 用于格式化消息列表。这些“模板”由模板列表本身组成。例如,构建和使用 ChatPromptTemplate 的常见方法如下

import { ChatPromptTemplate } from "@langchain/core/prompts";

const promptTemplate = ChatPromptTemplate.fromMessages([
["system", "You are a helpful assistant"],
["user", "Tell me a joke about {topic}"],
]);

await promptTemplate.invoke({ topic: "cats" });
ChatPromptValue {
messages: [
SystemMessage {
"content": "You are a helpful assistant",
"additional_kwargs": {},
"response_metadata": {}
},
HumanMessage {
"content": "Tell me a joke about cats",
"additional_kwargs": {},
"response_metadata": {}
}
]
}

在上面的示例中,此 ChatPromptTemplate 在调用时将构造两条消息。第一条是系统消息,没有变量需要格式化。第二条是 HumanMessage,将由用户传入的 topic 变量格式化。

MessagesPlaceholder

此 prompt template 负责在特定位置添加消息列表。在上面的 ChatPromptTemplate 中,我们看到了如何格式化两条消息,每条消息都是一个字符串。但是,如果我们希望用户传入一个消息列表,我们将其插入到特定位置怎么办?这就是您使用 MessagesPlaceholder 的方式。

import {
ChatPromptTemplate,
MessagesPlaceholder,
} from "@langchain/core/prompts";
import { HumanMessage } from "@langchain/core/messages";

const promptTemplate = ChatPromptTemplate.fromMessages([
["system", "You are a helpful assistant"],
new MessagesPlaceholder("msgs"),
]);

await promptTemplate.invoke({ msgs: [new HumanMessage("hi!")] });
ChatPromptValue {
messages: [
SystemMessage {
"content": "You are a helpful assistant",
"additional_kwargs": {},
"response_metadata": {}
},
HumanMessage {
"content": "hi!",
"additional_kwargs": {},
"response_metadata": {}
}
]
}

这将生成包含两条消息的列表,第一条是系统消息,第二条是我们传入的 HumanMessage。如果我们传入了 5 条消息,那么它将总共生成 6 条消息(系统消息加上传入的 5 条消息)。这对于将消息列表插入到特定位置非常有用。

另一种无需显式使用 MessagesPlaceholder 类即可完成相同操作的方法是

const promptTemplate = ChatPromptTemplate.fromMessages([
["system", "You are a helpful assistant"],
["placeholder", "{msgs}"], // <-- This is the changed part
]);

有关如何使用 prompt templates 的详细信息,请参阅此处的相关操作指南


此页面是否对您有帮助?


您也可以留下详细的反馈 在 GitHub 上.