跳至主要内容

如何使用示例选择器

先决条件

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

如果您有大量示例,您可能需要选择要包含在提示中的示例。示例选择器是负责执行此操作的类。

基本接口定义如下

class BaseExampleSelector {
addExample(example: Example): Promise<void | string>;

selectExamples(input_variables: Example): Promise<Example[]>;
}

它需要定义的唯一方法是 selectExamples 方法。这将接收输入变量,然后返回一个示例列表。每个特定实现如何选择这些示例取决于它。

LangChain 有几种不同类型的示例选择器。有关所有这些类型的概述,请参见下表。

在本指南中,我们将逐步完成创建自定义示例选择器的过程。

示例

为了使用示例选择器,我们需要创建一个示例列表。这些通常应该是示例输入和输出。为了演示目的,让我们假设我们正在选择如何将英语翻译成意大利语的示例。

const examples = [
{ input: "hi", output: "ciao" },
{ input: "bye", output: "arrivaderci" },
{ input: "soccer", output: "calcio" },
];

自定义示例选择器

让我们编写一个示例选择器,它根据单词的长度选择要选择哪个示例。

import { BaseExampleSelector } from "@langchain/core/example_selectors";
import { Example } from "@langchain/core/prompts";

class CustomExampleSelector extends BaseExampleSelector {
private examples: Example[];

constructor(examples: Example[]) {
super();
this.examples = examples;
}

async addExample(example: Example): Promise<void | string> {
this.examples.push(example);
return;
}

async selectExamples(inputVariables: Example): Promise<Example[]> {
// This assumes knowledge that part of the input will be a 'text' key
const newWord = inputVariables.input;
const newWordLength = newWord.length;

// Initialize variables to store the best match and its length difference
let bestMatch: Example | null = null;
let smallestDiff = Infinity;

// Iterate through each example
for (const example of this.examples) {
// Calculate the length difference with the first word of the example
const currentDiff = Math.abs(example.input.length - newWordLength);

// Update the best match if the current one is closer in length
if (currentDiff < smallestDiff) {
smallestDiff = currentDiff;
bestMatch = example;
}
}

return bestMatch ? [bestMatch] : [];
}
}
const exampleSelector = new CustomExampleSelector(examples);
await exampleSelector.selectExamples({ input: "okay" });
[ { input: "bye", output: "arrivaderci" } ]
await exampleSelector.addExample({ input: "hand", output: "mano" });
await exampleSelector.selectExamples({ input: "okay" });
[ { input: "hand", output: "mano" } ]

在提示中使用

我们现在可以在提示中使用此示例选择器

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

const examplePrompt = PromptTemplate.fromTemplate(
"Input: {input} -> Output: {output}"
);
const prompt = new FewShotPromptTemplate({
exampleSelector,
examplePrompt,
suffix: "Input: {input} -> Output:",
prefix: "Translate the following words from English to Italain:",
inputVariables: ["input"],
});

console.log(await prompt.format({ input: "word" }));
Translate the following words from English to Italain:

Input: hand -> Output: mano

Input: word -> Output:

示例选择器类型

名称描述
相似度使用输入和示例之间的语义相似性来决定选择哪些示例。
长度根据可以容纳在特定长度内的示例数量选择示例

下一步

您现在已经了解了一些关于使用示例选择器来进行少样本 LLM 的知识。

接下来,查看一些关于选择示例的其他技术的指南


此页面是否有帮助?


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