提示模板
提示模板有助于将用户输入和参数转换为语言模型的指令。 这可以用于引导模型的响应,帮助它理解上下文并生成相关且连贯的基于语言的输出。
提示模板的输入是一个对象,其中每个键代表提示模板中的一个变量,用于填充。
提示模板输出一个 PromptValue。这个 PromptValue 可以传递给一个语言模型(LLM)或聊天模型(ChatModel),也可以转换为字符串或消息列表。
存在这个 PromptValue 的原因是方便在字符串和消息之间进行切换。
目前有几种不同类型的提示模板:
字符串提示模板(String PromptTemplates)
这些提示模板用于格式化单个字符串,通常用于较简单的输入。
例如,构造和使用 PromptTemplate 的常见方式如下:
import { PromptTemplate } from "@langchain/core/prompts";
const promptTemplate = PromptTemplate.fromTemplate(
"给我讲一个关于{topic}的笑话"
);
await promptTemplate.invoke({ topic: "猫" });
StringPromptValue {
value: '给我讲一个关于猫的笑话'
}
聊天提示模板(ChatPromptTemplates)
这些提示模板用于格式化消息列表。这些“模板”本身由多个模板组成。
例如,构造和使用 ChatPromptTemplate 的常见方式如下:
import { ChatPromptTemplate } from "@langchain/core/prompts";
const promptTemplate = ChatPromptTemplate.fromMessages([
["system", "你是一个有帮助的助手"],
["user", "给我讲一个关于{topic}的笑话"],
]);
await promptTemplate.invoke({ topic: "猫" });
ChatPromptValue {
messages: [
SystemMessage {
"content": "你是一个有帮助的助手",
"additional_kwargs": {},
"response_metadata": {}
},
HumanMessage {
"content": "给我讲一个关于猫的笑话",
"additional_kwargs": {},
"response_metadata": {}
}
]
}
在上面的例子中,当调用此 ChatPromptTemplate 时会生成两条消息。
第一条是系统消息,没有需要格式化的变量。
第二条是用户消息,将由用户传入的 topic 变量进行格式化。
消息占位符(MessagesPlaceholder)
此提示模板负责在特定位置添加一条消息列表。
在上面的 ChatPromptTemplate 示例中,我们看到了如何格式化两条消息,每条消息都是字符串。
但如果我们希望用户传入一组消息,并将它们插入到特定的位置,该如何操作呢?这时就可以使用 MessagesPlaceholder。
import {
ChatPromptTemplate,
MessagesPlaceholder,
} from "@langchain/core/prompts";
import { HumanMessage } from "@langchain/core/messages";
const promptTemplate = ChatPromptTemplate.fromMessages([
["system", "你是一个有帮助的助手"],
new MessagesPlaceholder("msgs"),
]);
await promptTemplate.invoke({ msgs: [new HumanMessage("你好!")] });
ChatPromptValue {
messages: [
SystemMessage {
"content": "你是一个有帮助的助手",
"additional_kwargs": {},
"response_metadata": {}
},
HumanMessage {
"content": "你好!",
"additional_kwargs": {},
"response_metadata": {}
}
]
}
这将生成两条消息,第一条是系统消息,第二条是我们传入的用户消息。 如果我们传入了五条消息,那么总共将生成六条消息(系统消息加五条传入的消息)。 这对于将消息列表插入到特定位置非常有用。
另一种不显式使用 MessagesPlaceholder 类来实现相同功能的方式如下:
const promptTemplate = ChatPromptTemplate.fromMessages([
["system", "你是一个有帮助的助手"],
["placeholder", "{msgs}"], // <-- 这部分是修改的地方
]);
有关如何使用提示模板的具体说明,请参阅此处的相关指南。