资讯动态

Haystack 与 FastEmbed 集成实战:稠密/稀疏嵌入与 ColBERT 重排完整指南

发布时间:2026/9/12 16:08:42 来源:尧图企业网站定制
Haystack 与 FastEmbed 集成实战稠密/稀疏嵌入与 ColBERT 重排完整指南【免费下载链接】haystackOpen-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Built for scalable agents, RAG, multimodal applications, semantic search, and conversational systems.项目地址: https://gitcode.com/GitHub_Trending/ha/haystack本文围绕 Haystack 官方 FastEmbed 集成文档docs-website/reference_versioned_docs/version-2.18/integrations-api/fastembed.md展开系统讲解基于 Qdrant FastEmbed 的五个核心组件FastembedDocumentEmbedder、FastembedTextEmbedder、FastembedSparseDocumentEmbedder、FastembedSparseTextEmbedder以及FastembedRanker/FastembedLateInteractionRanker两个重排器。读者将掌握如何用本地 ONNX 模型为文档与查询生成稠密、稀疏嵌入如何在 Haystack Pipeline 中完成索引 → 检索 → 重排的完整流程以及如何通过model_kwargs切换到 NVIDIA GPU 或 Intel GPU/XPU 推理。一、FastEmbed 集成概览本地、快速、可移植的嵌入方案FastEmbed 是 Qdrant 推出的轻量级嵌入库核心思路是把 NLP 模型转换为 ONNX 格式通过onnxruntime在本地 CPU/GPU 上完成推理无需访问远程 API也没有网络依赖和按调用计费的问题。它非常适合需要离线批量编码、数据隐私敏感或低延迟本地推理的 RAG 与语义检索场景。Haystack 通过独立的集成包fastembed-haystack提供对 FastEmbed 的支持组件统一挂在haystack_integrations.components.embedders.fastembed与haystack_integrations.components.rankers.fastembed命名空间下。集成覆盖了嵌入与重排两条链路类别组件输入输出落点稠密 Document 嵌入FastembedDocumentEmbedderlist[Document]每个 Document 的embedding字段稠密 Text 嵌入FastembedTextEmbedderstr返回embeddinglist[float]稀疏 Document 嵌入FastembedSparseDocumentEmbedderlist[Document]每个 Document 的sparse_embedding字段稀疏 Text 嵌入FastembedSparseTextEmbedderstr返回sparse_embeddingSparseEmbedding稠密重排FastembedRankerquerylist[Document]按语义相关度排序的documents晚期交互重排FastembedLateInteractionRankerquerylist[Document]基于 ColBERT MaxSim 排序的documents在 Haystack 2.18 时代Document数据类同时承载两种向量形态稠密向量存放在embedding: list[float]字段稀疏向量存放在sparse_embedding: SparseEmbedding | None字段定义见 haystack/dataclasses/document.py。也就是说同一个Document可以同时携带稠密和稀疏两套表示为混合检索hybrid retrieval提供了数据结构基础。注意FastEmbed 组件位于独立集成包中当前仓库核心目录haystack/与test/下并不包含其源码组件接口与行为以集成文档及本仓库的Document/SparseEmbedding数据结构为准。安装pip install fastembed-haystack该包会同时拉取fastembed核心库与onnxruntime等推理依赖。若需 GPU 推理按目标硬件额外安装运行时# NVIDIA GPU pip install onnxruntime-gpu # Intel GPU / XPUOpenVINO pip install onnxruntime-openvino二、FastembedDocumentEmbedder为文档批量生成稠密嵌入FastembedDocumentEmbedder计算一批Document的稠密嵌入并把结果写入每个 Document 的embedding字段。它默认使用BAAI/bge-small-en-v1.5模型模型从 Hugging Face Model Hub 自动下载后以 ONNX 形式在本地运行。基础用法# pip install fastembed-haystack from haystack_integrations.components.embedders.fastembed import FastembedDocumentEmbedder from haystack.dataclasses import Document doc_embedder FastembedDocumentEmbedder( modelBAAI/bge-small-en-v1.5, batch_size256, ) # 文本取自 PubMed QA 数据集 document_list [ Document( content(Oxidative stress generated within inflammatory joints can produce autoimmune phenomena and joint destruction. Radical species with oxidative activity, including reactive nitrogen species, represent mediators of inflammation and cartilage damage.), meta{pubid: 25,445,628, long_answer: yes}, ), Document( content(Plasma levels of pancreatic polypeptide (PP) rise upon food intake. Although other pancreatic islet hormones, such as insulin and glucagon, have been extensively investigated, PP secretion and actions are still poorly understood.), meta{pubid: 25,445,712, long_answer: yes}, ), ] result doc_embedder.run(document_list) print(fDocument Text: {result[documents][0].content}) print(fDocument Embedding: {result[documents][0].embedding}) print(fEmbedding Dimension: {len(result[documents][0].embedding)})run()的输入必须是list[Document]输出为字典{documents: [...]}其中每个 Document 的embedding已被填充为list[float]。如果传入的不是 Document 列表组件会抛出TypeError。完整参数说明__init__( model: str BAAI/bge-small-en-v1.5, cache_dir: str | None None, threads: int | None None, prefix: str , suffix: str , batch_size: int 256, progress_bar: bool True, parallel: int | None None, local_files_only: bool False, meta_fields_to_embed: list[str] | None None, embedding_separator: str \n, model_kwargs: dict[str, Any] | None None, ) - None参数默认值说明modelBAAI/bge-small-en-v1.5模型在本地的路径或 Hugging Face Model Hub 上的模型名如BAAI/bge-small-en-v1.5cache_dirNone模型缓存目录路径也可通过环境变量FASTEMBED_CACHE_PATH设置默认存放在系统临时目录下的fastembed_cachethreadsNone单个onnxruntimesession 可使用的线程数prefix添加到每段文本开头的字符串suffix添加到每段文本末尾的字符串batch_size256一次编码的字符串数量progress_barTrue是否在嵌入过程中显示进度条parallelNone大于 1 时启用数据并行编码推荐用于大型数据集离线编码为 0 时使用全部可用核心为None时不做数据并行改用onnxruntime默认线程local_files_onlyFalse为True时只使用cache_dir中已有的模型文件不触发网络下载meta_fields_to_embedNone需要随 Document 内容一起嵌入的 meta 字段列表embedding_separator\n用于把 meta 字段拼接到 Document 内容上的分隔符model_kwargsNone透传给 FastEmbed 模型的附加关键字参数如providers[CUDAExecutionProvider]对应 NVIDIA GPU[OpenVINOExecutionProvider]对应 Intel GPU/XPU、cuda、device_ids在 GPU 上运行# NVIDIA GPU需要 onnxruntime-gpu doc_embedder FastembedDocumentEmbedder( modelBAAI/bge-small-en-v1.5, model_kwargs{providers: [CUDAExecutionProvider]}, ) # Intel GPU / XPU需要 onnxruntime-openvino doc_embedder FastembedDocumentEmbedder( modelBAAI/bge-small-en-v1.5, model_kwargs{providers: [OpenVINOExecutionProvider]}, )嵌入 Metadata让检索更精准文本元数据如标题、页码若具有区分度和语义价值可一并嵌入以提升检索质量。meta_fields_to_embed指定参与嵌入的字段embedding_separator控制拼接分隔符from haystack import Document from haystack_integrations.components.embedders.fastembed import FastembedDocumentEmbedder doc Document( contentsome text, meta{title: relevant title, page number: 18}, ) embedder FastembedDocumentEmbedder( modelBAAI/bge-small-en-v1.5, batch_size256, meta_fields_to_embed[title], ) docs_w_embeddings embedder.run(documents[doc])[documents]组件生命周期方法除__init__与run外组件还实现了两个标准生命周期方法warm_up() - None初始化组件即加载并准备 ONNX 模型。Haystack Pipeline 在运行前会统一调用各组件或run()时惰性触发的warm_up把耗时模型加载与首次推理解耦。to_dict() - dict[str, Any]把组件序列化为字典便于 YAML/JSON 保存与恢复。Haystack 的序列化体系见 haystack/core/serialization.py依赖该接口实现 Pipeline 的持久化。三、FastembedTextEmbedder为查询字符串生成稠密嵌入FastembedTextEmbedder与 Document 版对应负责把单个查询字符串编码为稠密向量通常放在查询 Pipeline 中、与检索器相连。默认模型同为BAAI/bge-small-en-v1.5。from haystack_integrations.components.embedders.fastembed import FastembedTextEmbedder text (It clearly says online this will work on a Mac OS system. The disk comes and it does not, only Windows. Do Not order this if you have a Mac!!) text_embedder FastembedTextEmbedder(modelBAAI/bge-small-en-v1.5) embedding text_embedder.run(text)[embedding]GPU 切换方式与 Document 版完全一致# NVIDIA GPU需要 onnxruntime-gpu text_embedder FastembedTextEmbedder( modelBAAI/bge-small-en-v1.5, model_kwargs{providers: [CUDAExecutionProvider]}, ) # Intel GPU / XPU需要 onnxruntime-openvino text_embedder FastembedTextEmbedder( modelBAAI/bge-small-en-v1.5, model_kwargs{providers: [OpenVINOExecutionProvider]}, )完整参数说明__init__( model: str BAAI/bge-small-en-v1.5, cache_dir: str | None None, threads: int | None None, prefix: str , suffix: str , progress_bar: bool True, parallel: int | None None, local_files_only: bool False, model_kwargs: dict[str, Any] | None None, ) - NoneFastembedTextEmbedder的参数是 Document 版的一个子集它没有batch_size单条字符串无需分批、meta_fields_to_embed与embedding_separator无 meta 可拼接其余参数语义与上表一致。run(text: str)返回{embedding: list[float]}若输入不是字符串则抛出TypeError。四、稀疏嵌入FastembedSparseDocumentEmbedder与FastembedSparseTextEmbedder稠密向量把语义压缩进固定维度的连续向量稀疏向量则相反——绝大多数维度为 0只有少数非零维度携带词项权重。FastEmbed 的稀疏模型基于 SPLADE 技术每个非零值代表该词项在 BERT WordPiece 词表中的重要性权重。稀疏嵌入的优势在于可解释性强、与词项匹配天然互补常与稠密检索组成混合检索。在 Haystack 中稀疏向量由SparseEmbedding数据类表示见 haystack/dataclasses/sparse_embedding.py它只保存两个等长列表indices: list[int]非零元素的索引values: list[float]非零元素的值。两个列表长度不一致时SparseEmbedding的__post_init__会直接抛出ValueError。它同样实现了to_dict()/from_dict()用于序列化往返。Document的sparse_embedding字段即存放该对象从 haystack/dataclasses/document.py 可以看到序列化时它会转为{indices: [...], values: [...]}字典。FastembedSparseDocumentEmbedder为一批Document生成稀疏嵌入写入每个 Document 的sparse_embedding字段。默认模型为prithivida/Splade_PP_en_v1。from haystack_integrations.components.embedders.fastembed import FastembedSparseDocumentEmbedder from haystack.dataclasses import Document sparse_doc_embedder FastembedSparseDocumentEmbedder( modelprithivida/Splade_PP_en_v1, batch_size32, ) document_list [ Document( content(Oxidative stress generated within inflammatory joints can produce autoimmune phenomena and joint destruction. Radical species with oxidative activity, including reactive nitrogen species, represent mediators of inflammation and cartilage damage.), meta{pubid: 25,445,628, long_answer: yes}, ), Document( content(Plasma levels of pancreatic polypeptide (PP) rise upon food intake. Although other pancreatic islet hormones, such as insulin and glucagon, have been extensively investigated, PP secretion and actions are still poorly understood.), meta{pubid: 25,445,712, long_answer: yes}, ), ] result sparse_doc_embedder.run(document_list) print(fDocument Text: {result[documents][0].content}) print(fDocument Sparse Embedding: {result[documents][0].sparse_embedding}) print(fNumber of non-zero elements: {len(result[documents][0].sparse_embedding.indices)})__init__( model: str prithivida/Splade_PP_en_v1, cache_dir: str | None None, threads: int | None None, batch_size: int 32, progress_bar: bool True, parallel: int | None None, local_files_only: bool False, meta_fields_to_embed: list[str] | None None, embedding_separator: str \n, model_kwargs: dict[str, Any] | None None, ) - None与稠密 Document 版相比稀疏版没有prefix/suffixbatch_size默认为 32。其余参数cache_dir/FASTEMBED_CACHE_PATH、threads、parallel、local_files_only等语义一致。model_kwargs可透传 SPLADE 模型的参数如k、b、avg_len、language。run()返回的documents列表中每个 Document 的sparse_embedding均被填充输入非法时抛TypeError。FastembedSparseTextEmbedder为单个查询字符串生成稀疏嵌入是稀疏检索查询侧的对应组件from haystack_integrations.components.embedders.fastembed import FastembedSparseTextEmbedder text (It clearly says online this will work on a Mac OS system. The disk comes and it does not, only Windows. Do Not order this if you have a Mac!!) sparse_text_embedder FastembedSparseTextEmbedder( modelprithivida/Splade_PP_en_v1 ) sparse_embedding sparse_text_embedder.run(text)[sparse_embedding]__init__( model: str prithivida/Splade_PP_en_v1, cache_dir: str | None None, threads: int | None None, progress_bar: bool True, parallel: int | None None, local_files_only: bool False, model_kwargs: dict[str, Any] | None None, ) - Nonerun(text: str) - dict[str, SparseEmbedding]返回{sparse_embedding: SparseEmbedding}非字符串输入抛出TypeError。与文档版一样model_kwargs支持k、b、avg_len、language等 SPLADE 模型参数。稀疏检索的使用边界从仓库文档可以确认的约束稀疏嵌入检索目前仅由QdrantDocumentStore支持使用前需要以use_sparse_embeddingsTrue初始化见 docs-website/docs/document-stores/qdrant-document-store.mdx并配合QdrantSparseEmbeddingRetriever或混合检索QdrantHybridRetriever使用存量集合如需启用该能力需借助migrate_to_sparse_embeddings_support工具函数迁移数据。若仅在InMemoryDocumentStore中做演示则只能使用稠密嵌入链路。五、FastembedRanker稠密模型重排检索器返回的 Top-k 结果往往存在召回宽、精度粗的问题重排器的作用是在小候选集上做二次精排。FastembedRanker使用 FastEmbed 稠密模型计算查询与各 Document 的语义相似度按相关度从高到低重排文档。默认模型为Xenova/ms-marco-MiniLM-L-6-v2这是一个针对排序任务优化的 MiniLM 变体。from haystack import Document from haystack_integrations.components.rankers.fastembed import FastembedRanker ranker FastembedRanker(model_nameXenova/ms-marco-MiniLM-L-6-v2, top_k2) docs [Document(contentParis), Document(contentBerlin)] query What is the capital of germany? output ranker.run(queryquery, documentsdocs) print(output[documents][0].content) # Berlin__init__( model_name: str Xenova/ms-marco-MiniLM-L-6-v2, top_k: int 10, cache_dir: str | None None, threads: int | None None, batch_size: int 64, parallel: int | None None, local_files_only: bool False, meta_fields_to_embed: list[str] | None None, meta_data_separator: str \n, score_threshold: float | None None, model_kwargs: dict[str, Any] | None None, ) - None参数默认值说明model_nameXenova/ms-marco-MiniLM-L-6-v2FastEmbed 模型名可用模型列表见 FastEmbed 官方 Supported Models 文档top_k10返回的文档最大数量cache_dirNone模型缓存目录可用FASTEMBED_CACHE_PATH环境变量设置默认在系统临时目录的fastembed_cachethreadsNone单个onnxruntimesession 的线程数batch_size64一次编码的字符串数量parallelNone大于 1 启用数据并行编码0 使用全部核心None使用onnxruntime默认线程local_files_onlyFalse为True时仅使用cache_dir内模型文件meta_fields_to_embedNone参与重排时拼接进 Document 内容的 meta 字段列表meta_data_separator\nmeta 字段拼接进 Document 内容的分隔符score_thresholdNone若提供只返回分数高于该阈值的文档在top_k之后应用因此输出可能少于top_k个文档model_kwargsNone透传 FastEmbed 模型参数如providers、cuda、device_idsGPU 运行示例# NVIDIA GPU需要 onnxruntime-gpu ranker FastembedRanker( model_nameXenova/ms-marco-MiniLM-L-6-v2, model_kwargs{providers: [CUDAExecutionProvider]}, ) # Intel GPU / XPU需要 onnxruntime-openvino ranker FastembedRanker( model_nameXenova/ms-marco-MiniLM-L-6-v2, model_kwargs{providers: [OpenVINOExecutionProvider]}, )run(query: str, documents: list[Document], top_k: int | None None)返回{documents: [...]}按与查询的相关度从高到低排序若top_k不大于 0抛出ValueError。score_threshold的过滤发生在top_k截断之后这一点与FastembedLateInteractionRanker不同见下文实际使用时应留意。除to_dict()外FastembedRanker还实现了from_dict()可从字典反序列化组件实例。六、FastembedLateInteractionRankerColBERT 晚期交互重排FastembedLateInteractionRanker是比普通稠密重排更精细的方案它使用 ColBERT 系列模型默认colbert-ir/colbertv2.0对查询与文档分别编码为逐 token 的嵌入矩阵再通过晚期交互Late Interaction即 MaxSim逐 token 计算相似度并聚合得分。相比把整段文本压成一个向量的做法MaxSim 能保留词级匹配信号在细粒度相关度排序上通常更优。from haystack import Document from haystack_integrations.components.rankers.fastembed import FastembedLateInteractionRanker ranker FastembedLateInteractionRanker(model_namecolbert-ir/colbertv2.0, top_k2) docs [Document(contentParis), Document(contentBerlin)] query What is the capital of germany? output ranker.run(queryquery, documentsdocs) print(output[documents][0].content) # Berlin__init__( model_name: str colbert-ir/colbertv2.0, top_k: int 10, cache_dir: str | None None, threads: int | None None, batch_size: int 64, parallel: int | None None, local_files_only: bool False, meta_fields_to_embed: list[str] | None None, meta_data_separator: str \n, score_threshold: float | None None, model_kwargs: dict[str, Any] | None None, ) - None参数表与FastembedRanker基本一致唯二差异需要特别强调model_name必须是 FastEmbed 支持的 ColBERT 模型可用列表同样参见 FastEmbed 官方 Supported Models 文档score_threshold同样用于过滤低分文档但注意ColBERT 分数是未归一化的求和值通常落在 3 到 25 区间与余弦相似度约 -1 到 1量纲完全不同。设置阈值前务必先用少量样本实测分数分布再据此确定临界值。GPU 运行示例# NVIDIA GPU需要 onnxruntime-gpu ranker FastembedLateInteractionRanker( model_namecolbert-ir/colbertv2.0, model_kwargs{providers: [CUDAExecutionProvider]}, ) # Intel GPU / XPU需要 onnxruntime-openvino ranker FastembedLateInteractionRanker( model_namecolbert-ir/colbertv2.0, model_kwargs{providers: [OpenVINOExecutionProvider]}, )run(query: str, documents: list[Document], top_k: int | None None)的返回值与约束和FastembedRanker相同top_k非法时抛ValueError并同样提供to_dict()/from_dict()序列化接口与warm_up()初始化方法。七、在 Haystack Pipeline 中组合索引 检索 重排把上述组件放进 Pipeline即可搭建一条完整的本地语义检索链路。以稠密链路为例更完整的索引/查询双 Pipeline 示例见 docs-website/docs/pipeline-components/embedders/fastembeddocumentembedder.mdxfrom haystack import Document, Pipeline from haystack.components.writers import DocumentWriter from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever from haystack.document_stores.in_memory import InMemoryDocumentStore from haystack.document_stores.types import DuplicatePolicy from haystack_integrations.components.embedders.fastembed import ( FastembedDocumentEmbedder, FastembedTextEmbedder, ) document_store InMemoryDocumentStore(embedding_similarity_functioncosine) documents [ Document(contentMy name is Wolfgang and I live in Berlin), Document(contentI saw a black horse running), Document(contentGermany has many big cities), Document(contentfastembed is supported by and maintained by Qdrant.), ] # 索引 Pipeline文档嵌入 - 写入文档库 document_embedder FastembedDocumentEmbedder() writer DocumentWriter(document_storedocument_store, policyDuplicatePolicy.OVERWRITE) indexing_pipeline Pipeline() indexing_pipeline.add_component(document_embedder, document_embedder) indexing_pipeline.add_component(writer, writer) indexing_pipeline.connect(document_embedder, writer) indexing_pipeline.run({document_embedder: {documents: documents}}) # 查询 Pipeline查询嵌入 - 稠密检索 query_pipeline Pipeline() query_pipeline.add_component(text_embedder, FastembedTextEmbedder()) query_pipeline.add_component(retriever, InMemoryEmbeddingRetriever(document_storedocument_store)) query_pipeline.connect(text_embedder.embedding, retriever.query_embedding) query Who supports fastembed? result query_pipeline.run({text_embedder: {text: query}}) print(result[retriever][documents][0]) # Document(id..., content: fastembed is supported by and maintained by Qdrant., score: 0.758..)Pipeline 运行前会先触发各组件的warm_up()完成模型加载。官方文档特别提示若查询侧 Text Embedder 与索引侧 Document Embedder 使用同一模型Haystack 会在底层复用同一份模型资源从而节省显存/内存占用——因此在双 Pipeline 架构中应尽量保持两侧模型一致。若要加入重排环节只需把FastembedRanker或FastembedLateInteractionRanker作为新组件挂到检索器之后Pipeline.connect(retriever, ranker)并在run()时传入query与检索器返回的documents。稀疏检索链路则需把QdrantDocumentStoreuse_sparse_embeddingsTrue、FastembedSparseDocumentEmbedder、FastembedSparseTextEmbedder与QdrantSparseEmbeddingRetriever/QdrantHybridRetriever组合使用。八、实操要点与常见问题模型缓存管理所有组件默认把模型缓存到系统临时目录下的fastembed_cache可通过cache_dir参数或FASTEMBED_CACHE_PATH环境变量重定向local_files_onlyTrue可强制走纯离线模式适合无外网的生产环境但需保证模型已预先下载到缓存。数据并行编码对海量文档做离线索引时设parallel 1可开启数据并行编码0 表示用满全部核心配合适当的batch_size能显著提升吞吐交互式小批量场景保持parallelNone走onnxruntime默认线程即可。前缀/后缀注入FastembedDocumentEmbedder/FastembedTextEmbedder的prefix与suffix可用于注入任务指令或领域前缀例如在文本前加Represent this sentence for retrieval: 风格指令提升嵌入在下游检索中的区分度稀疏类组件不提供这两个参数。meta 字段参与嵌入语义上有价值的元数据标题、标签等通过meta_fields_to_embed参与嵌入可提升检索精度embedding_separator控制拼接格式对重排器则对应meta_fields_to_embedmeta_data_separator。分数量纲差异FastembedRanker的分数是常规语义相似度而FastembedLateInteractionRanker的 ColBERT 分数是未归一化求和值典型区间 325两类的score_threshold需分别标定不可混用同一阈值。top_k与阈值先后顺序FastembedRanker先截断top_k再应用score_threshold因此可能出现返回少于top_k个文档的情况设置阈值时要把这一点纳入预期。类型校验Document 类组件要求输入为list[Document]Text 类组件要求输入为str重排器要求query为str、documents为list[Document]违反时分别抛出TypeError或ValueError接入自定义上游组件前应确认输出类型匹配。模型选型稠密嵌入默认BAAI/bge-small-en-v1.5稠密重排默认Xenova/ms-marco-MiniLM-L-6-v2稀疏默认prithivida/Splade_PP_en_v1SPLADE 家族ColBERT 重排默认colbert-ir/colbertv2.0。具体可用模型清单以 FastEmbed 官方 Supported Models 文档为准切换模型时注意核对组件对稠密/稀疏/ColBERT 的模型类型要求。九、总结FastEmbed 集成把 Haystack 的检索链路完整落地到本地 ONNX 推理之上FastembedDocumentEmbedder/FastembedTextEmbedder提供稠密嵌入FastembedSparseDocumentEmbedder/FastembedSparseTextEmbedder提供 SPLADE 稀疏嵌入FastembedRanker负责稠密语义精排FastembedLateInteractionRanker以 ColBERT MaxSim 提供词级晚期交互重排。所有组件共享统一的参数体系cache_dir、threads、batch_size、parallel、local_files_only、model_kwargs与生命周期契约warm_up/run/to_dict并通过model_kwargs[providers]一键切换 CPU、NVIDIA GPUCUDAExecutionProvider或 Intel GPU/XPUOpenVINOExecutionProvider。在实际项目中建议按索引侧与查询侧模型一致 稠密召回 重排精修的基线组合落地需要更强的词项级匹配时再引入稀疏链路与混合检索。相关数据结构Document.embedding、Document.sparse_embedding、SparseEmbedding的序列化细节可继续阅读 haystack/dataclasses/document.py 与 haystack/dataclasses/sparse_embedding.py稀疏检索的存储端配置可参考 docs-website/docs/document-stores/qdrant-document-store.mdx组件在平台中的可用状态可查阅 docs-website/docs/overview/platform-components.mdx。【免费下载链接】haystackOpen-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Built for scalable agents, RAG, multimodal applications, semantic search, and conversational systems.项目地址: https://gitcode.com/GitHub_Trending/ha/haystack创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价