MaxMarginalRelevanceExampleSelector 笔记
概述
MaxMarginalRelevanceExampleSelector
是一个选择器,用于从一组候选示例中选择出与输入最相关且具有多样性的示例。它通过计算示例与输入之间的语义相似度,然后迭代地选择示例,同时对与已选择示例相似度过高的候选项施加惩罚。
核心概念
- 余弦相似度:用于衡量示例嵌入向量与输入嵌入向量之间的相似度。
- 边际相关性:衡量每个候选示例与输入的相似度,同时考虑与已选择示例的多样性。
- 多样性惩罚:对与已选择示例相似度过高的候选项施加惩罚,以增加选择的多样性。
使用步骤
- 导入相关库:导入
langchain
相关的模块和类。 - 定义提示模板 (
PromptTemplate
):创建一个模板,用于格式化输入和输出。 - 准备候选示例 (
examples
):准备一组示例数据,每个示例包含输入和输出。 - 创建选择器实例 (
MaxMarginalRelevanceExampleSelector.from_examples
):- 提供候选示例列表。
- 指定嵌入类(如
OpenAIEmbeddings
)来生成用于相似度计算的嵌入。 - 指定向量存储类(如
FAISS
)来存储嵌入并执行相似度搜索。 - 设置要生成的示例数量 (
k
)。
- 创建少量示例提示模板 (
FewShotPromptTemplate
):- 使用
MaxMarginalRelevanceExampleSelector
作为示例选择器。 - 定义前缀、后缀和输入变量。
- 使用
- 生成提示:使用
format
方法生成格式化的提示。
示例代码
from langchain_community.vectorstores import FAISS
from langchain_core.example_selectors import MaxMarginalRelevanceExampleSelector
from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate
from langchain_openai import OpenAIEmbeddings
# 定义提示模板
example_prompt = PromptTemplate(
input_variables=["input", "output"],
template="Input: {input}\nOutput: {output}",
)
# 准备候选示例
examples = [
{"input": "happy", "output": "sad"},
# ... 更多示例
]
# 创建选择器实例
example_selector = MaxMarginalRelevanceExampleSelector.from_examples(
examples,
OpenAIEmbeddings(),
FAISS,
k=2,
)
# 创建少量示例提示模板
mmr_prompt = FewShotPromptTemplate(
example_selector=example_selector,
example_prompt=example_prompt,
prefix="Give the antonym of every input",
suffix="Input: {adjective}\nOutput:",
input_variables=["adjective"],
)
# 生成提示
print(mmr_prompt.format(adjective="energetic"))
注意事项
MaxMarginalRelevanceExampleSelector
旨在自动平衡相似度和多样性,无需用户设置具体的阈值。- 如果在选出的示例中包含错误数据,需要手动审查并调整选择标准或提供错误反馈。
- 算法的迭代过程不需要用户干预,但了解其工作原理有助于更好地应用和调整。