【RAG】【vector_stores096】TiDB向量存储示例分析
1. 案例目标本案例展示了如何使用TiDB Cloud的向量搜索功能与LlamaIndex集成实现高效的文档检索和语义搜索。TiDB Serverless将内置的向量搜索集成到MySQL生态系统中使用户无需额外的数据库或技术栈即可开发AI应用程序。2. 技术栈与核心依赖LlamaIndexTiDB CloudOpenAI APIllama-index-vector-stores-tidbvectorPyMySQLSimpleDirectoryReaderVectorStoreIndex3. 环境配置安装必要依赖%pip install llama-index-vector-stores-tidbvector%pip install llama-index配置OpenAI API密钥import getpassimport osos.environ[OPENAI_API_KEY] getpass.getpass(Input your OpenAI API key:)配置TiDB连接字符串# 从TiDB Cloud控制台获取连接字符串tidb_connection_string_template mysqlpymysql://USER:PASSWORDHOST:4000/DB?ssl_ca/etc/ssl/cert.pemssl_verify_certtruessl_verify_identitytruetidb_password getpass.getpass(Input your TiDB password:)tidb_connection_url tidb_connection_string_template.replace(PASSWORD, tidb_password)4. 案例实现4.1 数据准备下载并加载Paul Graham文章!mkdir -p data/paul_graham/!wget https://raw.githubusercontent.com/run-llama/llama_index/main/docs/examples/data/paul_graham/paul_graham_essay.txt -O data/paul_graham/paul_graham_essay.txtdocuments SimpleDirectoryReader(./data/paul_graham).load_data()for index, document in enumerate(documents):document.metadata {book: paul_graham}4.2 创建TiDB向量存储初始化TiDBVectorStoreVECTOR_TABLE_NAME paul_graham_testtidbvec TiDBVectorStore(connection_stringtidb_connection_url,table_nameVECTOR_TABLE_NAME,distance_strategycosine,vector_dimension1536,drop_existing_tableFalse,)4.3 构建向量索引使用TiDB向量存储创建索引storage_context StorageContext.from_defaults(vector_storetidbvec)index VectorStoreIndex.from_documents(documents, storage_contextstorage_context, show_progressTrue)注意如果由于MySQL协议的数据包大小限制在插入大量向量如2000行时遇到错误可以通过设置更小的insert_batch_size参数例如1000来缓解此问题确保数据顺利插入TiDB向量存储。4.4 语义相似性搜索基本查询query_engine index.as_query_engine()response query_engine.query(What did the author do?)print(textwrap.fill(str(response), 100))4.5 元数据过滤使用元数据过滤器进行搜索from llama_index.core.vector_stores.types import (MetadataFilter,MetadataFilters,)# 使用不等于过滤器query_engine index.as_query_engine(filtersMetadataFilters(filters[MetadataFilter(keybook, valuepaul_graham, operator!),]),similarity_top_k2,)response query_engine.query(What did the author learn?)# 使用等于过滤器query_engine index.as_query_engine(filtersMetadataFilters(filters[MetadataFilter(keybook, valuepaul_graham, operator),]),similarity_top_k2,)response query_engine.query(What did the author learn?)4.6 文档删除从向量存储中删除文档tidbvec.delete(documents[0].doc_id)5. 案例效果成功将Paul Graham的文章加载到TiDB向量存储中实现了基于语义相似性的文档检索通过元数据过滤器精确控制搜索结果支持文档的删除操作展示了TiDB向量存储与LlamaIndex的无缝集成6. 案例实现思路环境准备安装必要的Python包配置API密钥和数据库连接数据加载使用SimpleDirectoryReader加载文档数据并为文档添加元数据向量存储初始化创建TiDBVectorStore实例配置表名、距离策略和向量维度索引构建使用TiDB向量存储创建VectorStoreIndex将文档向量化存储查询处理创建查询引擎执行基本查询和带过滤条件的查询文档管理演示如何从向量存储中删除文档7. 扩展建议批量操作优化对于大规模数据可以进一步优化批量插入和查询性能高级过滤探索更复杂的元数据过滤条件如范围查询、多条件组合混合搜索结合向量搜索和传统关键词搜索提高搜索准确性性能监控添加查询性能监控优化索引配置多模态支持扩展支持图像、音频等多模态数据的向量存储和检索实时更新实现向量存储的实时更新机制保持数据同步8. 总结TiDB向量存储示例展示了如何将传统关系型数据库与现代向量搜索技术结合为AI应用提供强大的数据检索能力。通过TiDB Cloud的向量搜索功能开发者可以在熟悉的MySQL生态系统中实现高效的语义搜索无需额外的技术栈。这种集成方案特别适合已有MySQL技术基础、希望快速构建AI应用的企业和开发者。