OllamaDocumentEmbedder
此组件使用与 Ollama 库兼容的 embedding 模型来计算文档列表的 embedding。
| pipeline 中的最常见位置 | 在索引管道中的 DocumentWriter 之前 |
| 强制运行变量 | “documents”:要计算 embedding 的文档列表 |
| 输出变量 | “documents”:文档列表(已添加嵌入信息) “meta”:字符串元数据字典 |
| API 参考 | Ollama |
| GitHub 链接 | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/ollama |
OllamaDocumentEmbedder 计算文档列表的 embedding,并将获得的向量存储在每个文档的 embedding 字段中。它使用与 Ollama 库兼容的 embedding 模型。
此组件计算的向量对于对文档集合执行 embedding 检索至关重要。在检索时,表示查询的向量会与文档的向量进行比较,以找到最相似或最相关的文档。
概述
OllamaDocumentEmbedder 应用于 embedding 文档列表。仅 embedding 字符串,请使用 OllamaTextEmbedder。
该组件使用将 https://:11434 作为默认 URL,因为大多数可用设置(Mac、Linux、Docker)默认使用端口 11434。
兼容的模型
除非在初始化此组件时另有指定,否则默认的 embedding 模型是 "nomic-embed-text"。请参阅 Ollama 的 库 中其他可能的预构建模型。要加载自己的自定义模型,请遵循 Ollama 的 说明。
安装
要开始使用此集成与 Haystack,请使用以下命令安装软件包:
pip install ollama-haystack
请确保您有一个正在运行的 Ollama 模型(通过 Docker 容器或本地托管)。不需要其他配置,因为 Ollama 内置了 embedding API。
Embedding 元数据
大多数嵌入的元数据包含有关模型名称和类型的信息。您可以将 可选参数(如 temperature、top_p 等)传递给 Ollama 的生成端点。
使用的模型名称将自动作为文档元数据的一部分附加。使用 nomic-embed-text 模型的示例 payload 将如下所示:
{'meta': {'model': 'nomic-embed-text'}}
用法
单独使用
from haystack import Document
from haystack_integrations.components.embedders.ollama import OllamaDocumentEmbedder
doc = Document(content="What do llamas say once you have thanked them? No probllama!")
document_embedder = OllamaDocumentEmbedder()
result = document_embedder.run([doc])
print(result['documents'][0].embedding)
#Calculating embeddings: 100%|██████████| 1/1 [00:02<00:00, 2.82s/it]
#[-0.16412407159805298, -3.8359334468841553, ... ]
在 pipeline 中
from haystack import Pipeline
from haystack_integrations.components.embedders.ollama import OllamaDocumentEmbedder
from haystack.components.preprocessors import DocumentCleaner, DocumentSplitter
from haystack.components.converters import PyPDFToDocument
from haystack.components.writers import DocumentWriter
from haystack.document_stores.types import DuplicatePolicy
from haystack.document_stores.in_memory import InMemoryDocumentStore
document_store = InMemoryDocumentStore(embedding_similarity_function="cosine")
embedder = OllamaDocumentEmbedder(model="nomic-embed-text", url="https://:11434") # This is the default model and URL
cleaner = DocumentCleaner()
splitter = DocumentSplitter()
file_converter = PyPDFToDocument()
writer = DocumentWriter(document_store=document_store, policy=DuplicatePolicy.OVERWRITE)
indexing_pipeline = Pipeline()
# Add components to pipeline
indexing_pipeline.add_component("embedder", embedder)
indexing_pipeline.add_component("converter", file_converter)
indexing_pipeline.add_component("cleaner", cleaner)
indexing_pipeline.add_component("splitter", splitter)
indexing_pipeline.add_component("writer", writer)
# Connect components in pipeline
indexing_pipeline.connect("converter", "cleaner")
indexing_pipeline.connect("cleaner", "splitter")
indexing_pipeline.connect("splitter", "embedder")
indexing_pipeline.connect("embedder", "writer")
# Run Pipeline
indexing_pipeline.run({"converter": {"sources": ["files/test_pdf_data.pdf"]}})
# Calculating embeddings: 100%|██████████| 115/115
# {'embedder': {'meta': {'model': 'nomic-embed-text'}}, 'writer': {'documents_written': 115}}
更新于 大约 1 年前
