
Haystack 2.x ArcadeDB 集成实战ArcadeDBDocumentStore 与 ArcadeDBEmbeddingRetriever 的向量检索全解【免费下载链接】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 2.21 的 ArcadeDB 集成 API 参考文档docs-website/reference_versioned_docs/version-2.21/integrations-api/arcadedb.md系统讲解ArcadeDBDocumentStore与ArcadeDBEmbeddingRetriever两个核心组件的初始化参数、方法签名与调用流程。读完后你将能够用 Docker 快速拉起一个 ArcadeDB 多模型数据库通过纯 HTTP/JSON API 完成文档写入、HNSW 向量检索LSM_VECTOR 索引、元数据过滤与全量数据管理并将其接入 RAG 查询流水线。一、集成概览为什么选择 ArcadeDBArcadeDB 是一个多模型数据库Multi-model Database同一引擎内支持图、文档、键值与向量等多种数据模型。在 Haystack 的文档库选型分类中它被归入多模型数据库一类官方文档明确其特点为单一引擎支持多种数据模型、消除为不同数据表示维护多个数据库的必要性、向量检索HNSW可与图遍历和文档查询并存最适合知识图谱或实体关系复杂的应用场景见 choosing-a-document-store.mdx。ArcadeDB 集成的三个关键特性纯 HTTP/JSON API 驱动ArcadeDBDocumentStore的所有操作均通过 ArcadeDB 的 HTTP/JSON 接口完成不需要安装专用客户端驱动HNSW 向量检索底层使用 ArcadeDB 的LSM_VECTORHNSW索引做稠密向量相似性搜索SQL 元数据过滤支持将 Haystack 标准过滤字典翻译为 SQL 条件进行元数据筛选。在官方维护的核心集成列表中ArcadeDB 被列为核心集成Core integrations开源、不支持异步调用、提供 Embedding 检索器见 choosing-a-document-store.mdx 中的核心集成表格。二、安装与环境准备安装分两步先启动 ArcadeDB 服务再安装 Haystack 集成包。2.1 用 Docker 启动 ArcadeDB按官方指南arcadedbdocumentstore.mdx使用如下命令以守护模式运行并将 2480 端口映射到宿主机docker run -d -p 2480:2480 \ -e JAVA_OPTS-Darcadedb.server.rootPasswordarcadedb \ arcadedata/arcadedb:latestJAVA_OPTS中的rootPassword即为 root 用户密码请根据实际环境修改。2.2 安装集成包pip install arcadedb-haystack后续示例中还用到 Sentence Transformers 嵌入组件需要另外安装pip install sentence-transformers-haystack2.3 配置认证环境变量ArcadeDBDocumentStore的username与password参数默认从环境变量读取strictFalse即环境变量缺失时不报错允许显式传参推荐通过环境变量注入凭证export ARCADEDB_USERNAMEroot export ARCADEDB_PASSWORDarcadedb三、ArcadeDBDocumentStore存储层全参数解析ArcadeDBDocumentStore是面向 Haystack 2.x 的 ArcadeDB 文档存储通过 HTTP/JSON API 完成文档存储与向量检索。3.1 初始化参数__init__( *, url: str http://localhost:2480, database: str haystack, username: Secret Secret.from_env_var(ARCADEDB_USERNAME, strictFalse), password: Secret Secret.from_env_var(ARCADEDB_PASSWORD, strictFalse), type_name: str Document, embedding_dimension: int 768, similarity_function: str cosine, recreate_type: bool False, create_database: bool True ) - None各参数说明以 API 参考文档为准参数类型 / 默认值说明urlstr默认http://localhost:2480ArcadeDB 的 HTTP 端点地址databasestr默认haystack数据库名称usernameSecret默认读环境变量ARCADEDB_USERNAMEHTTP Basic Auth 用户名passwordSecret默认读环境变量ARCADEDB_PASSWORDHTTP Basic Auth 密码type_namestr默认Document存放文档的顶点类型Vertex type名称embedding_dimensionint默认768HNSW 索引的向量维度必须与你的 Embedder 输出维度一致similarity_functionstr默认cosine距离度量可选cosine、euclidean、dotrecreate_typebool默认False为True时初始化会先删除并重建该类型清空数据create_databasebool默认True为True时若数据库不存在则自动创建几个需要注意的实操要点维度一致性embedding_dimension决定了 HNSW 索引结构。若用SentenceTransformersDocumentEmbedder默认模型384 维却把存储初始化为 768 维向量检索将无法命中请务必对齐。零填充策略官方文档说明未带嵌入或维度不匹配的文档在写入时会被存为一个零填充向量因此这类文档可以正常写入和过滤只是不会参与有意义的向量召回见 arcadedbdocumentstore.mdx。真实嵌入建议由 Document Embedder 在索引管道中生成。序列化凭证username/password采用 Haystack 的Secret类型从环境变量读取时以strictFalse处理便于在不泄露明文的前提下完成管道 YAML 序列化/反序列化。3.2 基础读写与增删操作write_documents(documents: list[Document], policy: DuplicatePolicy DuplicatePolicy.NONE) - int count_documents() - int filter_documents(filters: dict[str, Any] | None None) - list[Document] delete_documents(document_ids: list[str]) - None delete_all_documents() - None delete_by_filter(filters: dict[str, Any]) - int update_by_filter(filters: dict[str, Any], meta: dict[str, Any]) - intwrite_documents批量写入文档返回实际写入数量。policy控制重复 ID 的处理策略。Haystack 核心的DuplicatePolicy枚举定义在 policy.py共四个取值NONE不处理默认、SKIP跳过重复、OVERWRITE覆盖、FAIL报错。delete_by_filter/update_by_filter都接受 Haystack 标准过滤字典语法与 文档库过滤体系 保持一致前者返回删除条数后者用meta批量更新匹配文档的元数据并返回更新条数。delete_all_documents清空整个存储通常配合recreate_typeTrue在重置环境时使用。最小可用示例来自 API 文档from haystack.dataclasses.document import Document from haystack_integrations.document_stores.arcadedb import ArcadeDBDocumentStore document_store ArcadeDBDocumentStore( urlhttp://localhost:2480, databasehaystack, embedding_dimension768, ) document_store.write_documents([ Document(contentThis is first, embedding[0.0]*5), Document(contentThis is second, embedding[0.1, 0.2, 0.3, 0.4, 0.5]) ])3.3 元数据探查方法这组方法用于在运行期了解存储中元数据的分布情况方便构造过滤条件count_documents_by_filter(filters: dict[str, Any]) - int count_unique_metadata_by_filter( filters: dict[str, Any], metadata_fields: list[str] ) - dict[str, int] get_metadata_fields_info() - dict[str, dict[str, str]] get_metadata_field_min_max(metadata_field: str) - dict[str, Any] get_metadata_field_unique_values( metadata_field: str, search_term: str | None None, from_: int 0, size: int 10, filters: dict[str, Any] | None None, ) - tuple[list[Any], int]count_unique_metadata_by_filter对每个指定元数据字段统计匹配文档中的唯一值数量返回{字段名: 唯一值数量}get_metadata_fields_info基于采样文档返回各元数据字段及其类型值为含type键的字典get_metadata_field_min_max返回指定字段的min与maxget_metadata_field_unique_values返回字段的唯一值列表与总数支持分页from_/size和大小写不敏感子串搜索search_term。文档中特别强调不同 Python 类型的相等值会保持区分例如整数1、浮点1.0、布尔True和字符串1会被返回为四个不同的值。3.4 序列化与生命周期to_dict() - dict[str, Any] from_dict(data: dict[str, Any]) - ArcadeDBDocumentStore close() - Noneto_dict/from_dict遵循 Haystack 2.x 的 serde 约定将 DocumentStore 与使用它的 Retriever 一起放入Pipeline后整条管道可被序列化为 YAML 并整体持久化下次加载时自动重建 ArcadeDB 连接参数。close则用于释放底层同步资源如 HTTP 会话。四、ArcadeDBEmbeddingRetriever向量相似度检索组件ArcadeDBEmbeddingRetriever通过对比查询嵌入与文档嵌入来检索文档底层走 ArcadeDB 的LSM_VECTORHNSW索引。它是与ArcadeDBDocumentStore配套的唯一 Retriever。4.1 组件速览来自组件指南arcadedbembeddingretriever.mdx的关键信息项目说明在流水线中的典型位置RAG 管道中位于 Text Embedder 之后、ChatPromptBuilder 之前语义搜索管道中的最后一个组件必需初始化变量document_store一个ArcadeDBDocumentStore实例必需运行变量query_embedding查询向量浮点数列表输出变量documents文档列表安装包arcadedb-haystack注意run的输入是query_embedding而非原始文本——需要在管道中用 Text Embedder 先把查询文本变成向量独立调用时也可直接传入向量。4.2 初始化参数__init__( *, document_store: ArcadeDBDocumentStore, filters: dict[str, Any] | None None, top_k: int 10, filter_policy: FilterPolicy FilterPolicy.REPLACE ) - Nonedocument_storeArcadeDBDocumentStore目标文档存储实例filtersdict[str, Any] | None默认None应用于每次检索的默认过滤条件top_kint默认10最多返回的文档数filter_policyFilterPolicy默认FilterPolicy.REPLACE运行时过滤与初始化默认过滤的交互策略。FilterPolicy是 Haystack 核心定义的枚举filter_policy.pyclass FilterPolicy(Enum): # 运行时过滤替换初始化过滤 REPLACE replace # 运行时过滤与初始化过滤合并运行时值优先 MERGE merge例如初始化时设置filters{field: {page: {in: [1, 2]}}}运行时再传入filters{field: {lang: {: en}}}在REPLACE策略下只应用后者的语言过滤MERGE策略下两者同时生效冲突键以运行时值为准。4.3 run 方法与独立使用示例run( query_embedding: list[float], filters: dict[str, Any] | None None, top_k: int | None None, ) - dict[str, list[Document]]参数query_embedding为搜索向量filters用于缩小结果范围top_k覆盖初始化时的默认值。返回字典含documents键即与查询向量最相似的文档列表。API 参考文档给出的完整独立调用示例from haystack import Document # Requires: pip install sentence-transformers-haystack from haystack_integrations.components.embedders.sentence_transformers import ( SentenceTransformersTextEmbedder, ) from haystack_integrations.components.retrievers.arcadedb import ( ArcadeDBEmbeddingRetriever, ) from haystack_integrations.document_stores.arcadedb import ArcadeDBDocumentStore store ArcadeDBDocumentStore(databasemydb) retriever ArcadeDBEmbeddingRetriever(document_storestore, top_k5) # Add documents to DocumentStore documents [ Document(textMy name is Carla and I live in Berlin), Document(textMy name is Paul and I live in New York), Document(textMy name is Silvano and I live in Matera), Document(textMy name is Usagi Tsukino and I live in Tokyo), ] document_store.write_documents(documents) embedder SentenceTransformersTextEmbedder() query_embeddings embedder.run(Who lives in Berlin?)[embedding] result retriever.run(queryquery_embeddings) for doc in result[documents]: print(doc.content)同样支持 serde 与资源管理三件套to_dict、from_dict以及close()释放底层 Document Store 的同步资源。4.4 接入语义搜索管道更贴近生产的做法是把嵌入器与检索器串成一条查询管道完整示例来自 arcadedbembeddingretriever.mdxfrom haystack import Document, Pipeline from haystack.document_stores.types import DuplicatePolicy from haystack_integrations.components.embedders.sentence_transformers import ( SentenceTransformersTextEmbedder, SentenceTransformersDocumentEmbedder, ) from haystack_integrations.document_stores.arcadedb import ArcadeDBDocumentStore from haystack_integrations.components.retrievers.arcadedb import ( ArcadeDBEmbeddingRetriever, ) document_store ArcadeDBDocumentStore( urlhttp://localhost:2480, databasehaystack, embedding_dimension768, recreate_typeTrue, ) 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() 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()) query_pipeline.add_component( retriever, ArcadeDBEmbeddingRetriever(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])该示例体现了 ArcadeDB 集成的典型工作流索引侧用SentenceTransformersDocumentEmbedder为文档生成向量并以DuplicatePolicy.OVERWRITE幂等写入查询侧用SentenceTransformersTextEmbedder将用户问题转为embedding再经管道连线text_embedder.embedding - retriever.query_embedding触发 HNSW 向量召回。五、实操注意事项与边界维度与度量要两端对齐embedding_dimension默认 768与similarity_function默认cosine另支持euclidean、dot在存储初始化时确定索引结构。更换 Embedding 模型或距离度量后建议将recreate_type设为True重建类型避免旧索引与新向量不一致。同步接口官方核心集成表中 ArcadeDB 的 Async Support 为 Nowrite_documents、run等方法均为同步实现高并发场景需要在应用层做请求编排。仅稠密向量当前集成只提供 Embedding 检索器不支持稀疏向量或混合BM25向量检索关键词匹配需求可利用 ArcadeDB 自身的 SQL 能力通过元数据过滤实现。零向量文档的语义无嵌入的文档以零填充向量落库可写入、可过滤、可删除但不会被相似度检索有意义地召回。多模型优势未在本集成中展开本集成只暴露了文档存储 向量检索能力ArcadeDB 的图查询能力并未被ArcadeDBDocumentStore封装如需图遍历需直接调用其 SQL/HTTP 接口。六、总结ArcadeDB 集成以两个组件构成完整闭环ArcadeDBDocumentStore基于 HTTP/JSON API 的文档存储覆盖写入含四种DuplicatePolicy、按 ID/过滤条件删除、元数据批量更新与探查唯一值、min/max、字段类型以及to_dict/from_dict管道序列化ArcadeDBEmbeddingRetriever基于 LSM_VECTORHNSW索引的相似度检索组件支持默认过滤 FilterPolicy控制运行期过滤语义输出可直接送入 ChatPromptBuilder 的documents列表。对于已经使用 ArcadeDB 承载图/文档数据的团队这套无驱动依赖 标准 DocumentStore 接口的组合可以在不改动现有技术栈的前提下为应用增加 RAG 与语义检索能力。完整 API 明细可查阅仓库内的版本化参考文档 version-2.21 integrations-api/arcadedb.md组件使用指南见 arcadedbdocumentstore.mdx 与 arcadedbembeddingretriever.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),仅供参考