
Haystack 与 ArangoDB 集成指南ArangoDocumentStore 与 ArangoEmbeddingRetriever 实现向量检索与 GraphRAG【免费下载链接】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 官方集成 API 文档docs-website/reference/integrations-api/arangodb.md与配套使用指南系统讲解如何在 Haystack 中使用 ArangoDB 作为 Document Store你将掌握ArangoDocumentStore的完整初始化参数与增删查方法、ArangoEmbeddingRetriever的检索与过滤用法以及如何将二者接入 RAG Pipeline为基于图与向量混合检索的 GraphRAG 应用打下基础。ArangoDB 集成概览多模型数据库中的向量检索ArangoDB 是一款多模型数据库在单一引擎内同时支持文档Document、图Graph与键值Key-Value三种数据模型。在 Haystack 生态中ArangoDocumentStore将文档存入 ArangoDB 集合并使用 AQLArangoDB Query Language向量函数执行向量相似度检索。由于文档与文档之间的关系可以存放在同一数据库中ArangoDB 非常适合用于将语义搜索与图遍历结合的GraphRAG工作负载。在 docs-website/docs/concepts/document-store/choosing-a-document-store.mdx 的分类体系中ArangoDB 被归入Multi-model Databases多模型数据库类别其引擎类型描述为“多模型数据库图、文档、键值通过 AQL 向量搜索需 v3.12”开源状态为 YesBUSL 许可当前不提供异步支持配套检索器为 Embedding 类型。这一分类意味着如果你需要在一个引擎里同时承载知识图谱的实体关系与向量的相似度计算而不想分别维护图数据库和向量数据库ArangoDB 是值得考虑的选择。版本前提向量检索能力依赖 ArangoDB 的向量索引特性因此要求ArangoDB 3.12 或更高版本并在启动服务时通过--vector-index启动参数启用该特性。环境准备Docker 启动 ArangoDB 与安装集成包使用 Docker 启动 ArangoDB启用向量索引并设置 root 密码将 8529 端口映射到本机docker run -d -p 8529:8529 \ -e ARANGO_ROOT_PASSWORDtest-password \ arangodb:3.12 arangod --vector-index其中-p 8529:8529将 ArangoDB 默认的 HTTP 端口映射到宿主机ARANGO_ROOT_PASSWORD指定 root 用户的初始密码arangod --vector-index则是在服务端进程中显式开启向量索引能力——这是后续所有向量检索操作能够运行的前提。安装 Haystack 集成包pip install arangodb-haystack如果希望运行本文中的 Pipeline 示例还需要安装示例所用的 Sentence Transformers 嵌入器集成包pip install sentence-transformers-haystack安装完成后即可在代码中通过haystack_integrations.document_stores.arangodb与haystack_integrations.components.retrievers.arangodb两个命名空间导入相关类。ArangoDocumentStore参数详解与文档管理ArangoDocumentStore是本次集成的核心存储组件位于模块haystack_integrations.document_stores.arangodb.document_store。它把 Haystack 的Document对象持久化到 ArangoDB 集合中并通过 AQL 向量函数提供向量相似度搜索。初始化签名与参数说明__init__( *, host: str http://localhost:8529, database: str haystack, username: Secret Secret.from_env_var(ARANGO_USERNAME, strictFalse), password: Secret Secret.from_env_var(ARANGO_PASSWORD), collection_name: str haystack_documents, embedding_dimension: int 768, recreate_collection: bool False, similarity_function: Literal[cosine, dot_product, l2] cosine ) - None各参数含义如下参数默认值说明hosthttp://localhost:8529ArangoDB 服务器 URL例如http://localhost:8529。databasehaystack使用的 ArangoDB 数据库名若不存在会自动创建。usernameARANGO_USERNAME环境变量ArangoDB 用户名以Secret形式传入默认读取ARANGO_USERNAME环境变量若该变量未设置则回退为root。passwordARANGO_PASSWORD环境变量ArangoDB 密码以Secret形式传入默认读取ARANGO_PASSWORD环境变量。collection_namehaystack_documents存储文档的集合名称。embedding_dimension768文档向量的维度。必须与写入文档的嵌入向量维度一致。recreate_collectionFalse若为True在启动时删除并重建集合适用于开发调试阶段清空旧数据。similarity_functioncosine向量检索使用的相似度函数可选cosine默认、dot_product、l2。注意__init__的*表示所有参数均为关键字参数keyword-only调用时不能使用位置传参。三种相似度函数的选择similarity_function决定了检索时向量相似度的计算方式在初始化阶段配置cosine默认余弦相似度适合归一化后的嵌入向量是多数语义检索场景的首选dot_product点积当向量模长magnitude本身携带语义信息时更有意义l2欧几里得L2距离度量向量在空间中的实际距离。例如要切换到点积检索from haystack_integrations.document_stores.arangodb import ArangoDocumentStore document_store ArangoDocumentStore( hosthttp://localhost:8529, embedding_dimension768, similarity_functiondot_product, )认证方式基于 Secret 的凭据管理ArangoDB 的凭据以 Haystack 的Secret对象传递。默认情况下从环境变量读取ARANGO_USERNAME未设置时回退为root因此通常只需提供密码即可export ARANGO_PASSWORDtest-password也可以显式构造Secret传入将凭据管理与代码解耦from haystack.utils import Secret from haystack_integrations.document_stores.arangodb import ArangoDocumentStore document_store ArangoDocumentStore( hosthttp://localhost:8529, databasehaystack, usernameSecret.from_env_var(ARANGO_USERNAME, strictFalse), passwordSecret.from_env_var(ARANGO_PASSWORD), )关于 HaystackSecret的完整机制环境变量注入、本地文件、明文值等可进一步阅读 docs-website/docs/concepts/secret-management.mdx。写入与统计write_documents 与 count_documents将文档写入存储并统计数量from haystack import Document from haystack_integrations.document_stores.arangodb import ArangoDocumentStore document_store ArangoDocumentStore( hosthttp://localhost:8529, databasehaystack, collection_namedocuments, embedding_dimension768, recreate_collectionTrue, ) document_store.write_documents( [ Document( contentThere are over 7,000 languages spoken around the world today., ), Document( contentElephants have been observed to recognize themselves in mirrors., ), ], ) print(document_store.count_documents())write_documents的完整签名为write_documents( documents: list[Document], policy: DuplicatePolicy DuplicatePolicy.NONE ) - intdocuments待写入的Document列表若列表中混入非Document对象将抛出ValueError。policy重复文档的处理策略取值为DuplicatePolicy枚举包括OVERWRITE覆盖、SKIP跳过与FAIL失败默认。当策略为FAIL且发现重复文档时抛出DuplicateDocumentError。返回值实际写入的文档数量int。提示上方示例中写入的文档未携带embedding字段。若要在检索时进行向量相似度匹配文档必须包含与embedding_dimension匹配的嵌入向量。要生成真实嵌入可使用SentenceTransformersDocumentEmbedder等 Document Embedder 组件见后文 Pipeline 示例嵌入器的输出维度必须与 store 配置的embedding_dimension一致。查询与删除filter_documents 与 delete_documentsfilter_documents(filters: dict[str, Any] | None None) - list[Document]返回与给定过滤器匹配的文档列表若filters为None则返回全部文档。过滤器使用 Haystack 统一的元数据过滤语法支持$eq、$in、$gt、$and、$or等操作符详细语法可参考 docs-website/docs/concepts/metadata-filtering.mdx。delete_documents(document_ids: list[str]) - None根据文档 ID 列表删除文档。序列化to_dict 与 from_dict与其他 Haystack 组件一致ArangoDocumentStore支持通过字典进行序列化与反序列化用于 Pipeline 的 YAML/JSON 保存与加载to_dict() - dict[str, Any]将组件序列化为字典from_dict(data: dict[str, Any]) - ArangoDocumentStore从字典还原组件实例。资源释放closeclose() - None用于释放底层 Document Store 关联的同步资源。在完成索引、批量写入或需要显式回收连接时调用避免资源泄漏。ArangoEmbeddingRetriever基于嵌入的向量检索组件ArangoEmbeddingRetriever位于模块haystack_integrations.components.retrievers.arangodb.embedding_retriever负责基于嵌入向量的相似度从ArangoDocumentStore中检索文档。相似度函数cosine / dot_product / l2在ArangoDocumentStore初始化时统一配置检索器无需重复指定。在 Pipeline 中的典型位置参见 docs-website/docs/pipeline-components/retrievers/arangoembeddingretriever.mdxRAG Pipeline 中位于 Text Embedder 之后、PromptBuilder之前语义搜索 Pipeline 中作为最后一个组件输出候选文档。初始化签名与参数__init__( *, document_store: ArangoDocumentStore, top_k: int 10, filters: dict[str, Any] | None None ) - None参数默认值说明document_store必填用于检索的ArangoDocumentStore实例。top_k10返回的最大文档数量。filtersNone检索时应用的 Haystack 元数据过滤器可选。run 方法与参数覆盖机制run( query_embedding: list[float], top_k: int | None None, filters: dict[str, Any] | None None, ) - dict[str, list[Document]]query_embedding查询向量list[float]类型维度需与 store 的embedding_dimension一致top_k本次调用的覆盖值若传入则优先于初始化时的top_kfilters本次调用的覆盖过滤器若传入则优先于初始化时的filters返回值形如{documents: [...]}的字典其中documents为按相似度得分排序的Document列表。这种“初始化设置默认值、运行时按需覆盖”的设计让同一个检索器实例可以服务于不同查询规模与过滤范围无需重复实例化。独立使用示例from haystack import Document from haystack_integrations.document_stores.arangodb import ArangoDocumentStore from haystack_integrations.components.retrievers.arangodb import ( ArangoEmbeddingRetriever, ) document_store ArangoDocumentStore( hosthttp://localhost:8529, embedding_dimension3, recreate_collectionTrue, ) document_store.write_documents( [ Document( contentThere are over 7,000 languages spoken around the world today., embedding[0.1, 0.2, 0.3], ), Document( contentElephants have been observed to recognize themselves in mirrors., embedding[0.8, 0.1, 0.5], ), ], ) retriever ArangoEmbeddingRetriever(document_storedocument_store, top_k1) result retriever.run(query_embedding[0.1, 0.2, 0.3]) print(result[documents][0].content)这个最小示例展示了完整的“建库 → 写文档带嵌入→ 检索”闭环两条文档分别携带 3 维嵌入向量store 的embedding_dimension3与之匹配查询向量[0.1, 0.2, 0.3]与第一条文档完全一致在top_k1时返回该文档。序列化与资源释放与 Document Store 一致检索器同样提供to_dict() - dict[str, Any]序列化组件为字典from_dict(data: dict[str, Any]) - ArangoEmbeddingRetriever从字典还原实例close() - None释放底层 Document Store 的同步资源。实战将 ArangoDB 接入完整 RAG Pipeline将ArangoEmbeddingRetriever与嵌入器、Pipeline组合即可构建一个完整的语义检索与 RAG 查询链路。以下示例使用sentence-transformers/all-MiniLM-L6-v2输出 384 维嵌入因此 store 的embedding_dimension384from haystack import Document, Pipeline from haystack.document_stores.types import DuplicatePolicy from haystack_integrations.components.embedders.sentence_transformers import ( SentenceTransformersDocumentEmbedder, SentenceTransformersTextEmbedder, ) from haystack_integrations.document_stores.arangodb import ArangoDocumentStore from haystack_integrations.components.retrievers.arangodb import ( ArangoEmbeddingRetriever, ) document_store ArangoDocumentStore( hosthttp://localhost:8529, embedding_dimension384, recreate_collectionTrue, ) documents [ Document(contentThere are over 7,000 languages spoken around the world today.), Document( contentElephants have been observed to recognize themselves in mirrors., ), Document( contentBioluminescent waves can be seen in the Maldives and Puerto Rico., ), ] document_embedder SentenceTransformersDocumentEmbedder( modelsentence-transformers/all-MiniLM-L6-v2, ) documents_with_embeddings document_embedder.run(documents) document_store.write_documents( documents_with_embeddings[documents], policyDuplicatePolicy.OVERWRITE, ) query_pipeline Pipeline() query_pipeline.add_component( text_embedder, SentenceTransformersTextEmbedder(modelsentence-transformers/all-MiniLM-L6-v2), ) query_pipeline.add_component( retriever, ArangoEmbeddingRetriever(document_storedocument_store, top_k3), ) query_pipeline.connect(text_embedder.embedding, retriever.query_embedding) result query_pipeline.run( {text_embedder: {text: How many languages are there?}}, ) print(result[retriever][documents][0].content)该示例的关键链路索引阶段SentenceTransformersDocumentEmbedder为原始文档生成 384 维嵌入随后通过write_documents(..., policyDuplicatePolicy.OVERWRITE)写入 ArangoDB——使用OVERWRITE策略可在重复运行时安全地覆盖旧数据查询阶段Pipeline依次执行text_embedder将用户文本转为查询向量与retriever在 ArangoDB 中执行向量相似度检索连接关系query_pipeline.connect(text_embedder.embedding, retriever.query_embedding)将文本嵌入器输出的embedding直接接到检索器的query_embedding输入。运行后result[retriever][documents]即为按相似度排序的文档列表[0]为最相关文档。在此基础上可以在检索器之后继续连接PromptBuilder与生成器构成完整的 RAG 问答管线也可以利用 ArangoDB 的图能力对检索结果做图遍历实现 GraphRAG 风格的混合推理。小结与延伸阅读本文完整覆盖了 ArangoDB 集成在 Haystack 中的两个核心组件ArangoDocumentStore负责文档持久化、向量索引与相似度检索核心配置项包括host、database、凭据username/password的Secret管理、collection_name、embedding_dimension、recreate_collection与similarity_function对外提供write_documents、count_documents、filter_documents、delete_documents、to_dict/from_dict、close等方法。ArangoEmbeddingRetriever基于查询向量在 store 上执行 Top-K 相似度检索top_k与filters既可在初始化时设定也可在每次run()调用时覆盖支持标准的to_dict/from_dict序列化与close资源释放。使用前提是ArangoDB 3.12 且以--vector-index参数启用向量索引。若需进一步深入可继续阅读本仓库内的相关文档API 参考全文docs-website/reference/integrations-api/arangodb.mdDocument Store 使用指南docs-website/docs/document-stores/arangodocumentstore.mdxRetriever 使用指南docs-website/docs/pipeline-components/retrievers/arangoembeddingretriever.mdx检索器总览docs-website/docs/pipeline-components/retrievers.mdx多模型数据库选型对比docs-website/docs/concepts/document-store/choosing-a-document-store.mdx元数据过滤语法docs-website/docs/concepts/metadata-filtering.mdxSecret 凭据管理docs-website/docs/concepts/secret-management.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),仅供参考