跳至主要内容

如何使用少量示例

在本指南中,我们将学习如何创建一个简单的提示模板,在生成时为模型提供示例输入和输出。为 LLM 提供少量这样的示例称为少量提示,这是一种简单但功能强大的方法来指导生成,在某些情况下可以极大地提高模型性能。

可以从一组示例或从一个 示例选择器 类构造一个少量提示模板,该类负责从定义的集中选择示例子集。

本指南将涵盖字符串提示模板的少量提示。有关针对聊天模型的聊天消息少量提示指南,请参阅 此处

先决条件

本指南假设您熟悉以下概念

为少量示例创建格式化程序

配置一个格式化程序,它将少量示例格式化为字符串。此格式化程序应为 PromptTemplate 对象。

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

const examplePrompt = PromptTemplate.fromTemplate(
"Question: {question}\n{answer}"
);

创建示例集

接下来,我们将创建一个少量示例列表。每个示例都应为一个字典,表示我们上面定义的格式化程序提示的示例输入。

const examples = [
{
question: "Who lived longer, Muhammad Ali or Alan Turing?",
answer: `
Are follow up questions needed here: Yes.
Follow up: How old was Muhammad Ali when he died?
Intermediate answer: Muhammad Ali was 74 years old when he died.
Follow up: How old was Alan Turing when he died?
Intermediate answer: Alan Turing was 41 years old when he died.
So the final answer is: Muhammad Ali
`,
},
{
question: "When was the founder of craigslist born?",
answer: `
Are follow up questions needed here: Yes.
Follow up: Who was the founder of craigslist?
Intermediate answer: Craigslist was founded by Craig Newmark.
Follow up: When was Craig Newmark born?
Intermediate answer: Craig Newmark was born on December 6, 1952.
So the final answer is: December 6, 1952
`,
},
{
question: "Who was the maternal grandfather of George Washington?",
answer: `
Are follow up questions needed here: Yes.
Follow up: Who was the mother of George Washington?
Intermediate answer: The mother of George Washington was Mary Ball Washington.
Follow up: Who was the father of Mary Ball Washington?
Intermediate answer: The father of Mary Ball Washington was Joseph Ball.
So the final answer is: Joseph Ball
`,
},
{
question:
"Are both the directors of Jaws and Casino Royale from the same country?",
answer: `
Are follow up questions needed here: Yes.
Follow up: Who is the director of Jaws?
Intermediate Answer: The director of Jaws is Steven Spielberg.
Follow up: Where is Steven Spielberg from?
Intermediate Answer: The United States.
Follow up: Who is the director of Casino Royale?
Intermediate Answer: The director of Casino Royale is Martin Campbell.
Follow up: Where is Martin Campbell from?
Intermediate Answer: New Zealand.
So the final answer is: No
`,
},
];

将示例和格式化程序传递给 FewShotPromptTemplate

最后,创建一个 FewShotPromptTemplate 对象。此对象接受少量示例和少量示例的格式化程序。当此 FewShotPromptTemplate 被格式化时,它使用 examplePrompt 格式化传递的示例,然后将它们添加到 suffix 之前的最终提示中。

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

const prompt = new FewShotPromptTemplate({
examples,
examplePrompt,
suffix: "Question: {input}",
inputVariables: ["input"],
});

const formatted = await prompt.format({
input: "Who was the father of Mary Ball Washington?",
});
console.log(formatted.toString());


Question: Who lived longer, Muhammad Ali or Alan Turing?

Are follow up questions needed here: Yes.
Follow up: How old was Muhammad Ali when he died?
Intermediate answer: Muhammad Ali was 74 years old when he died.
Follow up: How old was Alan Turing when he died?
Intermediate answer: Alan Turing was 41 years old when he died.
So the final answer is: Muhammad Ali


Question: When was the founder of craigslist born?

Are follow up questions needed here: Yes.
Follow up: Who was the founder of craigslist?
Intermediate answer: Craigslist was founded by Craig Newmark.
Follow up: When was Craig Newmark born?
Intermediate answer: Craig Newmark was born on December 6, 1952.
So the final answer is: December 6, 1952


Question: Who was the maternal grandfather of George Washington?

Are follow up questions needed here: Yes.
Follow up: Who was the mother of George Washington?
Intermediate answer: The mother of George Washington was Mary Ball Washington.
Follow up: Who was the father of Mary Ball Washington?
Intermediate answer: The father of Mary Ball Washington was Joseph Ball.
So the final answer is: Joseph Ball


Question: Are both the directors of Jaws and Casino Royale from the same country?

Are follow up questions needed here: Yes.
Follow up: Who is the director of Jaws?
Intermediate Answer: The director of Jaws is Steven Spielberg.
Follow up: Where is Steven Spielberg from?
Intermediate Answer: The United States.
Follow up: Who is the director of Casino Royale?
Intermediate Answer: The director of Casino Royale is Martin Campbell.
Follow up: Where is Martin Campbell from?
Intermediate Answer: New Zealand.
So the final answer is: No


Question: Who was the father of Mary Ball Washington?

通过为模型提供这样的示例,我们可以引导模型生成更好的响应。

使用示例选择器

我们将重用上一节中的示例集和格式化程序。但是,我们不会将示例直接馈送到 FewShotPromptTemplate 对象中,而是将它们馈送到 ExampleSelector 的一个实现中,称为 SemanticSimilarityExampleSelector 实例。此类根据示例与输入的相似度从初始集中选择少量示例。它使用嵌入模型来计算输入和少量示例之间的相似度,以及使用向量存储来执行最近邻搜索。

为了展示它的外观,让我们初始化一个实例并在隔离状态下调用它。

设置用于嵌入模型的 OpenAI API 密钥。

export OPENAI_API_KEY="..."
import { SemanticSimilarityExampleSelector } from "@langchain/core/example_selectors";
import { MemoryVectorStore } from "langchain/vectorstores/memory";
import { OpenAIEmbeddings } from "@langchain/openai";

const exampleSelector = await SemanticSimilarityExampleSelector.fromExamples(
// This is the list of examples available to select from.
examples,
// This is the embedding class used to produce embeddings which are used to measure semantic similarity.
new OpenAIEmbeddings(),
// This is the VectorStore class that is used to store the embeddings and do a similarity search over.
MemoryVectorStore,
{
// This is the number of examples to produce.
k: 1,
}
);

// Select the most similar example to the input.
const question = "Who was the father of Mary Ball Washington?";
const selectedExamples = await exampleSelector.selectExamples({ question });
console.log(`Examples most similar to the input: ${question}`);
for (const example of selectedExamples) {
console.log("\n");
console.log(
Object.entries(example)
.map(([k, v]) => `${k}: ${v}`)
.join("\n")
);
}
Examples most similar to the input: Who was the father of Mary Ball Washington?


question: Who was the maternal grandfather of George Washington?
answer:
Are follow up questions needed here: Yes.
Follow up: Who was the mother of George Washington?
Intermediate answer: The mother of George Washington was Mary Ball Washington.
Follow up: Who was the father of Mary Ball Washington?
Intermediate answer: The father of Mary Ball Washington was Joseph Ball.
So the final answer is: Joseph Ball

现在,让我们创建一个 FewShotPromptTemplate 对象。此对象接受示例选择器和少量示例的格式化程序提示。

const prompt = new FewShotPromptTemplate({
exampleSelector,
examplePrompt,
suffix: "Question: {input}",
inputVariables: ["input"],
});

const formatted = await prompt.invoke({
input: "Who was the father of Mary Ball Washington?",
});
console.log(formatted.toString());


Question: Who was the maternal grandfather of George Washington?

Are follow up questions needed here: Yes.
Follow up: Who was the mother of George Washington?
Intermediate answer: The mother of George Washington was Mary Ball Washington.
Follow up: Who was the father of Mary Ball Washington?
Intermediate answer: The father of Mary Ball Washington was Joseph Ball.
So the final answer is: Joseph Ball


Question: Who was the father of Mary Ball Washington?

下一步

您现在已经学习了如何在提示中添加少量示例。

接下来,查看本节中关于提示模板的其他操作指南,有关 使用聊天模型进行少量提示 的相关操作指南,或其他 示例选择器操作指南


此页面是否有帮助?


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