Skip to main content

根据相似性选择

该对象根据与输入的相似性选择示例。它通过找到与输入具有最大余弦相似度的嵌入示例来实现这一点。

from langchain.prompts.example_selector import SemanticSimilarityExampleSelector  
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.prompts import FewShotPromptTemplate, PromptTemplate

example_prompt = PromptTemplate(
input_variables=["input", "output"],
template="输入:{input}\n输出:{output}",
)

# 这是一个虚构任务的许多示例,用于创建反义词。
examples = [
{"input": "快乐", "output": "悲伤"},
{"input": "高", "output": "矮"},
{"input": "精力充沛", "output": "倦怠"},
{"input": "晴朗", "output": "阴暗"},
{"input": "有风", "output": "平静"},
]

example_selector = SemanticSimilarityExampleSelector.from_examples(
# 这是可供选择的示例列表。
examples,
# 这是用于生成嵌入的嵌入类,用于测量语义相似性。
OpenAIEmbeddings(),
# 这是用于存储嵌入并进行相似性搜索的VectorStore类。
Chroma,
# 这是要生成的示例数量。
k=1
)
similar_prompt = FewShotPromptTemplate(
# 我们提供了一个ExampleSelector而不是示例。
example_selector=example_selector,
example_prompt=example_prompt,
prefix="给出每个输入的反义词",
suffix="输入:{adjective}\n输出:",
input_variables=["adjective"],
)

# 使用直接本地API运行Chroma。
# 使用DuckDB内存数据库。数据将是临时的。

# 输入是一种感觉,所以应该选择快乐/悲伤的示例
print(similar_prompt.format(adjective="担心"))

# 输入是一种测量,所以应该选择高/矮的示例
print(similar_prompt.format(adjective="胖"))

# 您还可以将新示例添加到SemanticSimilarityExampleSelector中
similar_prompt.example_selector.add_example({"input": "热情", "output": "冷漠"})
print(similar_prompt.format(adjective="快乐"))

输出结果:

给出每个输入的反义词

输入:快乐
输出:悲伤

输入:担心
输出:

给出每个输入的反义词

输入:快乐
输出:悲伤

输入:胖
输出:

给出每个输入的反义词

输入:快乐
输出:悲伤

输入:快乐
输出: