ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

LlamaIndex RocksetVectorStore 向量存储集成:从安装配置到检索原理全解析

LlamaIndex RocksetVectorStore 向量存储集成:从安装配置到检索原理全解析 人工智能RAG大模型【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址https://gitcode.com/GitHub_Trending/ll/llama_index点击查看免费下载导读本文以 LlamaIndex 仓库中 Rocksetdb 向量存储集成llama-index-vector-stores-rocksetdb为对象系统讲解RocksetVectorStore的安装方式、核心参数、距离度量选择以及写入、检索、删除与集合创建四大操作背后的源码实现原理。读完本文你将能够基于 Rockset 实时分析数据库搭建 LlamaIndex 向量索引理解其如何通过 SQL VECTOR_ENFORCE实现向量检索并能根据业务场景正确选择COSINE_SIM、EUCLIDEAN_DIST与DOT_PRODUCT三种相似度度量。一、集成概览Rockset 作为 LlamaIndex 向量存储Rockset 是一个实时分析数据库原生支持 SQL 与向量检索能力。在 LlamaIndex 生态中RocksetVectorStore以独立集成包的形式存在其 API 参考文档docs/api_reference/api_reference/storage/vector_store/rocksetdb.md将该类注册为llama_index.vector_stores.rocksetdb命名空间下的公开成员。该集成包的完整源码位于 llama-index-integrations/vector_stores/llama-index-vector-stores-rocksetdb/llama_index/vector_stores/rocksetdb/base.py。从继承关系看RocksetVectorStore直接继承自llama_index.core.vector_stores.types.BasePydanticVectorStore定义于 llama-index-core/llama_index/core/vector_stores/types.py这意味着它遵循 LlamaIndex 统一的向量存储抽象add写入节点、query执行相似度检索、delete按ref_doc_id删除并保持与索引、检索器、查询引擎的即插即用兼容性。集成包的测试 tests/test_vector_stores_rocksetdb.py 正是通过断言BasePydanticVectorStore出现在RocksetVectorStore.__mro__中来验证这一继承契约。安装与依赖根据 pyproject.toml 声明该包要求 Python3.10,4.0核心依赖为rockset2.1.0,3官方 Rockset 客户端用于调用 Rockset APIllama-index-core0.13.0,0.15提供BasePydanticVectorStore、VectorStoreQuery等核心抽象。安装命令pip install llama-index-vector-stores-rocksetdb需要注意版本边界代码在初始化时尝试调用self.rs.set_application(llama_index)来标记应用名若客户端版本低于 2.1.0该方法不存在代码会捕获AttributeError并静默跳过见 base.py因此建议始终使用 2.x 版本的rockset客户端以获得完整功能。二、初始化与核心参数详解RocksetVectorStore的构造函数接收一组与集合和连接相关的参数见 base.py参数类型默认值说明collectionstr必填存储向量的 Rockset 集合名称clientAnyNone已构造的rockset.RocksetClient对象传入后优先使用text_keystrtextDEFAULT_TEXT_KEY节点文本内容对应的字段名embedding_colstrembeddingDEFAULT_EMBEDDING_KEY存储嵌入向量的列名metadata_colstrmetadata存储节点元数据的列名workspacestrcommons集合所在的 Rockset 工作区api_serverstrNoneRockset API 服务器地址api_keystrNoneRockset API 密钥distance_funcDistanceFuncCOSINE_SIM向量相似度度量其中text_key、embedding_col的默认值分别对应llama_index.core.vector_stores.utils中的DEFAULT_TEXT_KEY text与DEFAULT_EMBEDDING_KEY embedding见 utils.py保证了与 LlamaIndex 其他向量存储一致的字段约定。典型的初始化方式如下from llama_index.vector_stores.rocksetdb import RocksetVectorStore vector_store RocksetVectorStore( collectionmy_collection, api_keyyour_rockset_api_key, api_serverhttps://api.use1a1.rockset.com, embedding_colmy_embedding, metadata_colnode, distance_funcRocksetVectorStore.DistanceFunc.DOT_PRODUCT, )客户端与凭据解析优先级_get_client函数见 base.py体现了三种连接方式的解析逻辑显式传入client直接复用已构造的rockset.RocksetClient若类型不匹配会抛出ValueError显式传入api_key/api_server用于构造新客户端环境变量未传参数时读取ROCKSET_API_KEY与ROCKSET_API_SERVER环境变量。如果三者均未提供即没有client、没有api_key、也没有环境变量ROCKSET_API_KEY初始化将抛出ValueError提示必须设置三者之一。api_server若未显式指定客户端会回退到ROCKSET_API_SERVER环境变量。距离度量枚举 DistanceFuncDistanceFunc定义于 base.py包含三种度量枚举值SQL 函数适用场景COSINE_SIM默认COSINE_SIM文本语义相似度检索对向量模长不敏感EUCLIDEAN_DISTEUCLIDEAN_DIST欧氏距离值越小越相似DOT_PRODUCTDOT_PRODUCT点积相似度适合已归一化的向量度量选择直接影响排序方向构造函数中根据distance_func计算distance_order——当使用EUCLIDEAN_DIST距离越小越相似时排序为ASC其余两种相似度度量排序为DESC见 base.py。这一逻辑保证了无论选择哪种度量检索结果始终按“最相似优先”返回。三、写入向量add 方法的数据组织add方法见 base.py接收List[BaseNode]为每个节点构造一条写入记录{ self.embedding_col: node.get_embedding(), # 嵌入向量 _id: node.node_id, # 节点 ID 映射为 Rockset 主键 self.metadata_col: node_to_metadata_dict( # 元数据列 node, text_fieldself.text_key ), }随后调用self.rs.Documents.add_documents(collection..., workspace..., data[...])批量写入并返回写入成功的节点 ID 列表。元数据序列化由node_to_metadata_dict见 llama-index-core/llama_index/core/vector_stores/utils.py完成其机制值得注意将整个节点BaseNode序列化为 JSON 字符串存入元数据的_node_content字段同时记录_node_type如TextNode、IndexNode、ImageNode嵌入向量在元数据中被置空node_dict[embedding] None避免与专门的embedding_col重复存储在元数据顶层额外写入ref_doc_id以及兼容性的document_id、doc_id这正是后续按文档删除、按元数据过滤的字段基础。类声明属性RocksetVectorStore声明了三个类级字段见 base.pystores_text: bool True标记该存储保存文本内容is_embedding_query: bool True标记查询以向量嵌入作为检索输入flat_metadata: bool False标记元数据不强制扁平化即允许嵌套结构由 Rockset 的 Schema-on-read 特性支持。四、相似度检索query 方法与动态 SQLquery方法见 base.py是 RocksetVectorStore 的核心能力它把 LlamaIndex 的VectorStoreQuery对象翻译成一条动态拼装的 Rockset SQL通过self.rs.sql(...)执行。查询输入的构成VectorStoreQuery定义于 llama-index-core/llama_index/core/vector_stores/types.py携带以下检索要素query_embedding查询向量Optional[List[float]]similarity_top_k返回的 top-k 数量默认 1node_ids可选的指定节点 ID 列表用于限定检索范围filters可选的MetadataFilters元数据过滤条件。SQL 生成逻辑query生成的 SQL 遵循“SELECT 相似度 WHERE 过滤 ORDER BY LIMIT”的骨架相似度列当query.query_embedding存在时追加形如COSINE_SIM([0.1,0.2,...], embedding) AS _similarity的表达式相似度列名可通过similarity_col参数覆盖默认_similarity若无查询向量则不计算相似度此时similarities结果字段为None仅用于按 ID/过滤条件取数WHERE 子句当node_ids非空或存在元数据过滤时拼装WHERE。node_ids以OR组合成(_id... OR _id...)元数据过滤以AND组合成x.metadata.字段:参数的形式过滤值通过 SQL 参数params安全绑定避免注入风险排序与截断ORDER BY {similarity_col} {distance_order}后跟LIMIT {query.similarity_top_k}。结果还原查询结果的每一行包含_id、metadata_col以及若计算了相似度similarity_col。代码通过metadata_dict_to_node(row[self.metadata_col])见 utils.py将元数据中的_node_contentJSON 反序列化回BaseNode对象最终返回VectorStoreQueryResult(similarities..., nodes..., ids...)结果容器定义于 types.py。from llama_index.core.vector_stores.types import VectorStoreQuery query VectorStoreQuery( query_embedding[0.1, 0.2, 0.3], # 查询向量 similarity_top_k5, # 返回前 5 个最相似节点 ) result vector_store.query(query, similarity_col_similarity) # result.nodes / result.similarities / result.ids五、删除与集合创建delete 与 with_new_collectiondelete按 ref_doc_id 级联删除delete方法见 base.py接收ref_doc_id先执行一条 SQL 查出该文档关联的全部节点 IDSELECT _id FROM {workspace}.{collection} x WHERE x.metadata.ref_doc_id:ref_doc_id再通过self.rs.Documents.delete_documents(...)用DeleteDocumentsRequestData(id...)批量删除。整个流程体现了“先查后删”的两阶段实现依赖写入阶段在元数据中保留的ref_doc_id字段。with_new_collection一键建集合with_new_collection类方法见 base.py允许在初始化存储的同时创建集合通过client.Collections.create_s3_collection(workspace..., name...)创建 S3 集合若指定了dimensions参数会在集合的 ingest transformation 中注入VECTOR_ENFORCESQLSELECT *, VECTOR_ENFORCE(embedding, 1536, float) AS embedding FROM _inputVECTOR_ENFORCE会在数据摄入阶段强制校验嵌入向量的维度上述示例为 1536 维与类型float未达标的数据将被拒收不传dimensions则不做向量约束创建后轮询client.Collections.get(...)直到集合状态变为READY每 0.1 秒重试一次源码中标注了 TODO未来将补充异步、非阻塞的创建方式最后过滤掉所有值为None的参数调用cls(**args)完成RocksetVectorStore的构造。store RocksetVectorStore.with_new_collection( dimensions1536, # 强制 1536 维嵌入 collectionmy_new_collection, api_keyyour_rockset_api_key, api_serverhttps://api.use1a1.rockset.com, distance_funcRocksetVectorStore.DistanceFunc.COSINE_SIM, )六、集成到 LlamaIndex 索引流程将RocksetVectorStore接入索引的标准流程与 LlamaIndex 其他向量存储一致构建嵌入模型后用VectorStoreIndex.from_vector_store绑定存储写入节点后即可通过index.as_retriever()或index.as_query_engine()进行检索问答from llama_index.core import VectorStoreIndex, StorageContext from llama_index.core.node_parser import SentenceSplitter from llama_index.core.schema import TextNode from llama_index.vector_stores.rocksetdb import RocksetVectorStore # 1. 初始化存储 vector_store RocksetVectorStore( collectionmy_collection, api_keyyour_rockset_api_key, api_serverhttps://api.use1a1.rockset.com, ) # 2. 构造节点并写入 nodes [TextNode(text..., embedding[0.1, 0.2, ...])] vector_store.add(nodes) # 3. 建立索引 index VectorStoreIndex.from_vector_store(vector_store) # 4. 检索 / 查询 retriever index.as_retriever(similarity_top_k5) nodes retriever.retrieve(你的查询)由于RocksetVectorStore满足BasePydanticVectorStore抽象其返回的VectorStoreQueryResult可直接被索引层消费stores_textTrue与is_embedding_queryTrue两个类属性也让上层组件能够正确判断文本存储与向量查询能力。七、小结RocksetVectorStore是 LlamaIndex 向量存储家族中以“SQL 化检索”为特色的实现它复用 Rockset 的COSINE_SIM、EUCLIDEAN_DIST、DOT_PRODUCT原生 SQL 函数完成相似度计算借助VECTOR_ENFORCE在摄入阶段保证向量维度一致性并通过node_to_metadata_dict/metadata_dict_to_node这对核心工具完成节点与元数据列的双向序列化。对于已经使用 Rockset 作为实时分析主存储的团队该集成可以在不引入额外向量数据库的前提下将 LlamaIndex 的 RAG 链路直接构建在现有 Rockset 集合之上。进一步阅读可参考RocksetVectorStore 源码、集成包测试、向量存储核心抽象 与 节点序列化工具。赞分享人工智能RAG大模型【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址https://gitcode.com/GitHub_Trending/ll/llama_index点击查看免费下载相关推荐DB-GPT 集成 OceanBase Vector 实现 RAG 向量存储安装配置与源码原理全解析DB GPT 集成 OceanBase Vector 实现 RAG 向量存储安装配置与源码原理全解析 导读 本文围绕 DB GPT 将 OceanBase V人工智能AI 应用AI AgentRAG本地部署数据分析LlamaIndex 向量存储索引使用指南从入门到高级配置LlamaIndex 向量存储索引使用指南从入门到高级配置 概述 在自然语言处理和信息检索领域向量存储索引是一种高效的数据组织和查询方式。LlamaInde人工智能RAG大模型langchain/mongodb 集成包全解析从安装配置到向量搜索、缓存与开发测试实战langchain/mongodb 集成包全解析从安装配置到向量搜索、缓存与开发测试实战 langchain/mongodb 是 LangChain.js人工智能大模型AI AgentAI 应用RAG工具调用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进