📘 **TELUS Agriculture & Consumer Goods** 如何通过 **Haystack Agents** 转变促销交易

集成:Voyage AI

使用 Voyage AI 的文本嵌入和重排器

作者
Ashwin Mathur

PyPI PyPI - Python Version

目录

Voyage AI 的嵌入和排序模型,例如 voyage-2voyage-large-2,在检索准确性方面是顶尖的。在 MTEB Benchmark 上,这些模型的性能优于 intfloat/e5-mistral-7b-instructOpenAI/text-embedding-3-large 等表现最佳的嵌入模型。voyage-2 目前在 MTEB Leaderboard 上排名第二。

可用的模型可以在 嵌入文档 中找到。

安装

pip install voyage-embedders-haystack

使用

您可以使用三个组件来使用 Voyage 模型:VoyageTextEmbedderVoyageDocumentEmbedderVoyageRanker

要为文档创建语义嵌入,请在索引管道中使用 VoyageDocumentEmbedder。要生成查询嵌入,请使用 VoyageTextEmbedder。要进行重排,请使用 VoyageRankerVoyage 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
]

使用 VoyageDocumentEmbedderDocumentWriter 将文档索引到 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}")

使用 InMemoryEmbeddingRetrieverVoyageTextEmbedder 查询语义搜索管道。

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 许可证的条款分发。