集成:Voyage AI
使用 Voyage AI 的文本嵌入和重排器
目录
Voyage AI 的嵌入和排序模型,例如 voyage-2 和 voyage-large-2,在检索准确性方面是顶尖的。在 MTEB Benchmark 上,这些模型的性能优于 intfloat/e5-mistral-7b-instruct 和 OpenAI/text-embedding-3-large 等表现最佳的嵌入模型。voyage-2 目前在 MTEB Leaderboard 上排名第二。
可用的模型可以在 嵌入文档 中找到。
安装
pip install voyage-embedders-haystack
使用
您可以使用三个组件来使用 Voyage 模型:VoyageTextEmbedder、VoyageDocumentEmbedder 和 VoyageRanker。
要为文档创建语义嵌入,请在索引管道中使用 VoyageDocumentEmbedder。要生成查询嵌入,请使用 VoyageTextEmbedder。要进行重排,请使用 VoyageRanker 和 Voyage Rerankers。
一旦您为特定用例选择了合适的组件,请使用模型名称和 VoyageAI API 密钥初始化该组件。您也可以设置环境变量 VOYAGE_API_KEY,而不是将 API 密钥作为参数传递。
有关支持的模型的信息,可以在 嵌入文档 中找到。
要获取 API 密钥,请参阅 Voyage AI 网站。
示例
以下是使用 HuggingFace 的 Simple Wikipedia 数据集的示例语义搜索管道。您可以在 examples 文件夹中找到更多示例。
加载数据集
# Install HuggingFace Datasets using "pip install datasets"
from datasets import load_dataset
from haystack import Pipeline
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
from haystack.components.writers import DocumentWriter
from haystack.dataclasses import Document
from haystack.document_stores.in_memory import InMemoryDocumentStore
# Import Voyage Embedders
from haystack_integrations.components.embedders.voyage_embedders import VoyageDocumentEmbedder, VoyageTextEmbedder
# Load first 100 rows of the Simple Wikipedia Dataset from HuggingFace
dataset = load_dataset("pszemraj/simple_wikipedia", split="validation[:100]")
docs = [
Document(
content=doc["text"],
meta={
"title": doc["title"],
"url": doc["url"],
},
)
for doc in dataset
]
使用 VoyageDocumentEmbedder 和 DocumentWriter 将文档索引到 InMemoryDocumentStore 中。
doc_store = InMemoryDocumentStore(embedding_similarity_function="cosine")
retriever = InMemoryEmbeddingRetriever(document_store=doc_store)
doc_writer = DocumentWriter(document_store=doc_store)
doc_embedder = VoyageDocumentEmbedder(
model="voyage-law-2",
input_type="document",
)
text_embedder = VoyageTextEmbedder(model="voyage-law-2", input_type="query")
# Indexing Pipeline
indexing_pipeline = Pipeline()
indexing_pipeline.add_component(instance=doc_embedder, name="DocEmbedder")
indexing_pipeline.add_component(instance=doc_writer, name="DocWriter")
indexing_pipeline.connect("DocEmbedder", "DocWriter")
indexing_pipeline.run({"DocEmbedder": {"documents": docs}})
print(f"Number of documents in Document Store: {len(doc_store.filter_documents())}")
print(f"First Document: {doc_store.filter_documents()[0]}")
print(f"Embedding of first Document: {doc_store.filter_documents()[0].embedding}")
使用 InMemoryEmbeddingRetriever 和 VoyageTextEmbedder 查询语义搜索管道。
text_embedder = VoyageTextEmbedder(model="voyage-law-2", input_type="query")
# Query Pipeline
query_pipeline = Pipeline()
query_pipeline.add_component(instance=text_embedder, name="TextEmbedder")
query_pipeline.add_component(instance=retriever, name="Retriever")
query_pipeline.connect("TextEmbedder.embedding", "Retriever.query_embedding")
# Search
results = query_pipeline.run({"TextEmbedder": {"text": "Which year did the Joker movie release?"}})
# Print text from top result
top_result = results["Retriever"]["documents"][0].content
print("The top search result is:")
print(top_result)
许可证
voyage-embedders-haystack 根据 Apache-2.0 许可证的条款分发。
