LlamaIndex 集成指南:VespaVectorStore 实战——基于 Vespa 的混合语义检索向量存储
人工智能RAG大模型【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址https://gitcode.com/GitHub_Trending/ll/llama_index点击查看免费下载本指南围绕 LlamaIndex 官方的 Vespa 向量存储集成VespaVectorStore展开从安装、模板应用剖析、参数配置到源码级的工作原理与生产部署帮助你掌握如何将 Vespa 作为 LlamaIndex 的VectorStoreIndex底层存储实现内置 embedding 推理、BM25 文本检索、向量近邻检索与 RRF 融合排序的混合检索能力。Vespa 向量存储集成概览Vespa 集成包中。该集成最突出的特点是Vespa 原生支持 embedding 推理embedding inference无需单独运行一个 embedding 服务。Hugging Face embedder、SPLADE、ColBERT 等模型均受支持。从官方模块指南的向量存储对比表见 vector_stores.md可以看到Vespa 支持自托管self-hosted与云端cloud两种部署形态并且同时具备文本搜索BM25、语义搜索、混合搜索与元数据过滤等能力列。安装与依赖集成包的工程信息见 pyproject.toml包名llama-index-vector-stores-vespa当前版本 0.5.0Python 要求3.10,4.0核心依赖pyvespa0.40.0,0.41与llama-index-core0.13.0,0.15安装方式pip install llama-index-vector-stores-vespa若未安装pyvespa源码在导入时会直接抛出ModuleNotFoundError并提示pip install pyvespa见 base.py。本地部署场景下还需要可用的 Docker 环境Vespa Docker 镜像测试用例也以docker是否可用作为跳过条件见 test_vespavectorstore.py。包对外只暴露两个符号见init.pyfrom llama_index.vector_stores.vespa import VespaVectorStore, hybrid_template快速开始默认模板 本地 Docker 部署为了让用户开箱即用集成包内置了一个默认的混合检索模板应用hybrid_template。初始化VespaVectorStore时若未显式传入application_package该模板会被自动部署到本地 Vespa Docker 容器。from llama_index.core import VectorStoreIndex from llama_index.vector_stores.vespa import VespaVectorStore vector_store VespaVectorStore() # 默认hybrid_template local 部署 storage_context StorageContext.from_defaults(vector_storevector_store) index VectorStoreIndex(nodes, storage_contextstorage_context) retriever index.as_retriever() retriever.retrieve(Who directed inception?)这段示例同时出现在 base.py 的类 docstring 中是官方推荐的最小可用路径。整个数据流如下写路径VectorStoreIndex创建时通过StorageContext将 nodes 送入VespaVectorStore.add()逐条 feed 到 Vespa 应用读路径查询时索引将VectorStoreQuery交给query()构造 Vespa 查询体YQL rank profile取回 top-k 命中并还原为BaseNode。内置模板应用详解默认模板的完整定义在 templates.py 中是一个基于 pyvespa 的ApplicationPackage。其核心结构如下为便于阅读已展开from vespa.package import ( ApplicationPackage, Field, Schema, Document, HNSW, RankProfile, Component, Parameter, FieldSet, GlobalPhaseRanking, Function, ) hybrid_template ApplicationPackage( namehybridsearch, schema[ Schema( namedoc, documentDocument( fields[ Field(nameid, typestring, indexing[summary]), Field(namemetadata, typestring, indexing[summary]), Field( nametext, typestring, indexing[index, summary], indexenable-bm25, boldingTrue, ), Field( nameembedding, typetensorfloat(x[384]), indexing[input text, embed, index, attribute], annHNSW(distance_metricangular), is_document_fieldFalse, ), ] ), fieldsets[FieldSet(namedefault, fields[text, metadata])], rank_profiles[...], ) ], components[...], )必需字段集成正常工作必须具备以下 4 个字段README 与 base.py 的类说明均有强调字段类型作用idstring文档 ID写入时使用node.node_idtextstring文本内容开启 BM25 索引enable-bm25与命中词高亮boldingembeddingtensor (x[384])存储 embedding 向量HNSW 索引angular 距离is_document_fieldFalse表示非文档字段由text实时生成metadatastring元数据JSON 字符串所有元数据统一存放于此schema 名称必须是doc三个 rank profile 必须命名为bm25、semantic、fusion。除此之外可以自由修改模板——更换 embedding 模型、增加字段、调整排序表达式等。三个 Rank Profile 的语义模板中定义了与集成严格对应的三个排序配置bm25first_phasebm25sum其中bm25sum bm25(text)用于纯文本检索semanticfirst_phasecloseness(field, embedding)基于向量余弦相似度angular 距离对应的 closeness用于语义检索fusion继承bm25first_phase用向量 closenessglobal_phase使用reciprocal_rank_fusion(bm25sum, closeness(field, embedding))且rerank_count1000实现混合检索的倒数排名融合。内置 Embedder 组件模板内置了一个 Hugging Face embedder 组件id 为e5通过transformer-model与tokenizer-model两个参数指向 e5-small-v2 int8 ONNX 模型及其 tokenizer 文件。这正是embedding 推理内置于 Vespa的落点字段定义中indexing[input text, embed, ...]表示在 feed 文档时由 Vespa 自动调用该 embedder 将text编码为 384 维向量。初始化参数全解VespaVectorStore的构造参数默认值与说明均来自 base.py参数类型默认值说明application_packageApplicationPackagehybrid_templatepyvespa 应用包可自定义后部署到本地或 Vespa CloudnamespacestrdefaultVespa 文档 namespace文档分组default_schema_namestrdoc使用的 schema 名deployment_targetstrlocal部署目标localDocker或cloudportint8080仅local部署时生效Vespa 应用的端口embeddings_outside_vespaboolFalseembedding 是否在 Vespa 外部生成为True时由 LlamaIndex 侧提供向量urlOptional[str]None已部署应用的 URL提供后跳过部署、直接连接groupnameOptional[str]None仅 streaming 模式适用见 pyvespa 流式模式文档tenantOptional[str]None仅cloud部署适用Vespa Cloud 租户applicationOptional[str]hybridsearch应用名云部署时使用key_locationOptional[str]None控制平面私钥文件路径Vespa Cloud 签名请求用key_contentOptional[str]None私钥内容无密钥文件时直接传入auth_client_token_idOptional[str]None基于 token 的数据平面鉴权token 名在 Vespa Cloud Console 配置写入 services.xml**kwargsAny—传递给 Vespa 应用的额外参数校验逻辑application_package必须是vespa.package.ApplicationPackage实例否则抛出ValueErrordeployment_target仅接受local/cloud其余值同样抛错见 base.py。三种初始化方式与部署逻辑根据 base.py 的类说明VespaVectorStore支持三种初始化路径默认方式不传任何参数自动使用hybrid_template并部署到本地 Docker自定义应用包传入在 pyvespa 中创建的ApplicationPackage可部署到本地或 Vespa Cloud连接已部署应用传入url本地或云端皆可通过_try_get_running_app()校验先向{url}:{port}发起get_application_status()状态码非 200 则抛出ConnectionError见 base.py。部署分支_deploy()按deployment_target分派local走VespaDocker(port8080).deploy(...)cloud走VespaCloud(tenant..., application..., key_location..., key_content..., auth_client_token_id..., **kwargs).deploy()见 base.py。云端部署示例from llama_index.vector_stores.vespa import VespaVectorStore vector_store VespaVectorStore( deployment_targetcloud, tenantmy-tenant, applicationhybridsearch, key_location/path/to/control-plane.key, )核心 API 与数据流源码视角VespaVectorStore继承自BasePydanticVectorStore见 types.py并声明了stores_textTrue、is_embedding_queryFalse、flat_metadataTrue三个类属性。client属性返回底层的 pyvespaVespa应用句柄self._app。写入add / async_addadd()的核心逻辑base.py对每个 node调用node_to_metadata_dict(node, remove_textFalse, flat_metadataTrue)生成元数据字典构造 feed 条目id取node.node_idtext取node.get_content(metadata_modeMetadataMode.NONE)metadata为元数据的 JSON 字符串若embeddings_outside_vespaTrue额外写入embedding字段node.get_embedding()通过self._app.feed_iterable(...)批量 feedoperation_typefeed失败时调用默认callback记录错误日志。async_add()采用 asyncio 并发写入max_connections10、num_concurrent_requests1000、total_timeout60用Semaphore限流后经async_app.feed_data_point(...)逐条提交任一任务异常即抛出base.py。删除delete / adeletedelete(ref_doc_id)调用self._app.delete_data(schema..., namespace..., data_idref_doc_id)响应失败时抛出ValueErrorbase.py。adelete()与aquery()一样未真正异步化会同步调用对应方法并打印日志base.py。查询queryquery()的完整链路base.py由_create_query_body()根据查询模式构造 Vespa 请求体通过self._app.syncio()会话发起查询解析响应对每个 hit取fields.metadataJSON 反序列化并经metadata_dict_to_node()还原节点text取自fields.body重新set_contentsimilarities取 hit 的relevance返回VectorStoreQueryResult(nodes, ids, similarities)。查询模式与底层工作原理查询模式对应 LlamaIndex 的VectorStoreQueryMode枚举见 types.py。VespaVectorStore的模式映射与 YQL 构造如下base.py查询模式默认 rank profileYQL 构造TEXT_SEARCH/DEFAULTbm25select * from sources where userQuery()SEMANTIC_HYBRID/HYBRIDfusionselect * from sources where rank({targetHits:N}nearestNeighbor(embedding,q), userQuery()) limit K要点混合检索模式下input.query(q)的值有两种来源若create_embeddingTrue即embeddings_outside_vespaFalse传embed(query_str)让 Vespa 内部完成 embedding 推理否则直接传query.query_embeddingvector_top_k默认 10控制nearestNeighbor的targetHitsquery.similarity_top_k控制最终返回的hits与limitembedding 字段名可经由query.embedding_field指定未提供时默认embedding并打印警告请求体默认带hits: query.similarity_top_k与tracelevel: 9便于调试。当前实现限制务必知悉从 base.py 可以看到两条明确警告元数据过滤尚未实现query.filters会被忽略并打印 warningalpha 参数尚未实现混合检索中词法/语义的权重 alpha 需要在 Vespa 的 rank profile 里自行定义示例可参考 pyvespa 文档中的 Arctic embed 评估示例其他模式如SPARSE、MMR等会抛出NotImplementedErrorpersist()返回NotImplemented即该向量存储不支持本地持久化数据重复风险初始化时若容器未删除、重复部署会导致重复写入官方建议在部署之间清理 Vespa 容器。测试用例验证集成包的测试在 test_vespavectorstore.py全部依赖 Docker 环境覆盖了四条核心链路test_query_text_search写入 7 个TextNode含电影元数据以Inception做text_search查询断言命中 id3 的节点test_query_vector_search以magic, wizardry做semantic_hybrid查询断言命中Harry Potter节点验证语义检索test_delete_node删除一个节点后再次文本检索断言结果为空test_async_add_and_query用async_add写入、aquery查询验证异步 API 的一致性。测试同时印证了元数据会随文档进入 Vespa 并能在查询后被还原metadata_dict_to_node是理解端到端数据流的最佳参考。进阶方向本集成刻意保持薄封装Vespa 的大量高级能力并未直接暴露。README 中列举的进阶方向包括二进制 Matryoshka 嵌入、ColBERT 多向量检索、ONNX 模型、XGBoost/lightGBM 模型排序、多向量索引等。对于严肃的生产级用例官方建议直接阅读 Vespa 文档并按需定制应用包——ApplicationPackage本身就是完全开放的本集成只是帮你迈出第一步。赞分享人工智能RAG大模型【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址https://gitcode.com/GitHub_Trending/ll/llama_index点击查看免费下载相关推荐LlamaIndex 集成 TiDB 向量存储TiDBVectorStore 实战指南LlamaIndex 集成 TiDB 向量存储TiDBVectorStore 实战指南 导读 本文围绕 LlamaIndex 的 TiDBVectorStor人工智能RAG大模型turbovec LlamaIndex 集成实战基于 TurboQuantVectorStore 构建量化向量检索管线turbovec LlamaIndex 集成实战基于 TurboQuantVectorStore 构建量化向量检索管线 导读 本文讲解 turbovec 官方向量数据库人工智能Ryujinx免费开源的 Switch 模拟器在 Windows、Linux、macOS 上手指南Ryujinx免费开源的 Switch 模拟器在 Windows、Linux、macOS 上手指南 Ryujinx 是一个免费、开源的 Nintendo S硬件仿真图形学创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考