如果您拥有大量的示例,您可能需要选择在提示中包含哪些示例。ExampleSelector 是负责执行此操作的类。 基本接口定义如下所示:
class BaseExampleSelector(ABC):
"""Interface for selecting examples to include in prompts."""
@abstractmethod
def select_examples(self, input_variables: Dict[str, str]) -> List[dict]:
"""Select which examples to use based on the inputs."""
它只需要暴露一个 select_examples
方法。该方法接收输入变量并返回一个示例列表。具体如何选择这些示例取决于每个具体实现。
LangChain的示例选择器是一个用于从一组示例中动态选择部分示例以构建提示(prompt)的重要组件。在LangChain中,有多种不同类型的示例选择器,包括自定义样例选择器、长度样例选择器、MMR样例选择器、n-gram重叠度样例选择器和相似度样例选择器。以下是这些示例选择器的简要介绍和格式清晰的回答:
-
自定义样例选择器
-
允许用户根据自己的业务逻辑和需求来定义样例的选择方式。
-
至少需要实现两个方法:
add_example
(用于添加新示例)和select_examples
(基于输入变量返回一个样例列表)。 -
用户可以通过继承
BaseExampleSelector
类并实现所需的方法来创建自定义样例选择器。
-
-
长度样例选择器
-
根据输入的长度来选择要使用的示例。对于较长的输入,它会选择较少的示例,而对于较短的输入,则会选择更多示例。
-
这在构建提示时需要控制上下文窗口长度时特别有用。
-
使用时,可以导入
LengthBasedExampleSelector
类,并传入示例列表来创建长度样例选择器。
-
-
MMR样例选择器
-
MMR(Maximum Marginal Relevance)是一种常用于信息检索和推荐系统的排序算法,也适用于样例选择。
-
MMR样例选择器通过计算示例与输入之间的相关性以及示例之间的不相似性来选择样例。
-
具体的实现细节可能因库或框架而异,但通常用户需要指定计算相关性和不相似性的方法。
-
-
n-gram重叠度样例选择器
-
基于输入和示例之间的n-gram重叠度来选择样例。
-
n-gram是一种用于表示文本中连续n个词或字符的序列的模型。
-
通过计算输入和示例之间的n-gram重叠度,可以选择与输入内容最相关的样例。
-
-
相似度样例选择器
-
基于输入和示例之间的相似度来选择样例。
-
相似度可以使用各种方法来计算,如余弦相似度、Jaccard相似度等。
-
选择与输入内容最相似的样例可以帮助语言模型更好地理解prompt,并给出更准确的回答。
-
归纳:
LangChain的示例选择器为构建有效的提示提供了灵活的工具。用户可以根据具体的应用场景和需求选择合适的示例选择器。无论是根据长度、MMR算法、n-gram重叠度还是相似度来选择样例,都可以帮助提高语言模型的理解能力和回答准确性。同时,用户还可以根据自己的业务逻辑自定义样例选择器,以实现更精细的样例选择。