TCVectorDB向量数据库的配置与使用!
TCVectorDB向量数据库的配置与使用!
月伴飞鱼虽然目前绝大部分开源向量数据库都是海外的,配置起来也非常简单,性能也很高。
但是因为网络的原因,如果将向量数据库部署到海外,而产品面向国内,网络延迟是一个必要考虑的问题。
- 所以考虑国内服务提供商的云向量数据库往往是最佳的选择。
腾讯云向量数据库(TCVectorDB)是一款全托管的自研企业级分布式数据库服务, 专用于存储、检索、分析多维向量数据。
该数据库支持多种索引类型和相似度计算方法,索引支持千亿级向量规模,可支持百万级 QPS 及毫秒级查询延迟。
而且目前认证过的腾讯云账号可以免费使用 TCVectorDB 一个月时间。
TCVectorDB 产品链接:https://cloud.tencent.com/product/vdb
TCVectorDB 产品文档:https://cloud.tencent.com/document/product/1709
LangChain TCVectorDB 翻译文档:
TCVectorDB 和 Pinecone 的设计理念非常接近,在腾讯云向量数据库中也有对应的 数据库、集合、记录 等概念。
数据库:
分为普通向量数据库和 AI 数据库,其中 AI 数据库无需外部配置文本分割、Embedding、文档解析等功能。
底层全部有腾讯云实现,而普通向量数据库则需要外部程序处理。
它只能接收传递的数据,并没有处理功能,但是功能更加可定制化。
集合:
集合是数据库的下一个单位,类似与传统数据库中的 表,在集合中,需要设置集合名称、分片数、索引等信息。
记录:
集合的每一条数据就是记录。
TCVectorDB 默认只能在内网中链接使用,在生产环境中,也尽可能不将数据库暴露到外网中。
但是在开发中,则需要配置并开启外网访问功能,配置好外网访问功能、API 秘钥后,需要在项目中导入对应的环境变量。
1 | TC_VECTOR_DB_URL=xxx |
接下来安装对应的 Python 包,命令如下:
1 | pip install tcvectordb |
接下来就可以像 Faiss、Pinecone 一样正常使用即可,整体功能和 Pinecone 几乎一模一样。
只是 filter、namespace 等概念的操作有些许差异。
内置 Embedding 导入数据与查询
TCVectorDB
向量数据库内置了 Embedding 模型,并支持 5 种嵌入方式。使用内置的 Embedding 模型速度会更快(而且目前 LangChain 封装的 TCVectorDB 使用内置 Embedding 没有 Bug)。
不过限制也比较多,迁移数据库时,所有的文本全部需要重新生成。
内置 Embedding 模型文档说明&计费:
1 | import os |
输出示例:
1 | 添加文档id列表: ['1721204162283324200-8452797147690134545-0', '1721204162283324200-4748609318240602995-1', '1721204162283324200-5687737768520280782-2', '1721204162283324200--327905253905429573-3', '1721204162283324200--4217514370195306218-4', '1721204162283324200-5510932568003309936-5', '1721204162283324200-7945499047074485108-6', '1721204162283324200-8077162730065074156-7', '1721204162283324200-36196153077512649-8', '1721204162283324200-3472252428185052217-9'] |
外部 Embedding 导入数据与查询
除了使用内置的 Embedding 模型,TCVectorDB 也支持传递自定义的文本嵌入模型。
- 但是在 LangChain 中封装的 TencentVectorDB 存在一个 Bug。
当传递外部 Embedding 模型时,必须配置
meta_fields
属性,并且指定字段名称为 text。然后将 metadatas 中的数据添加上 text 这个字段,向量数据库才会记录原文信息。
meta_fields
的字段是告知 TCVectorDB 需要存储 metadata 中的哪些字段。如果没有设置,metadata 中的所有字段均不会被保存。
如果没有记录原文信息,在进行检索操作时,会因为找不到原文,从而没法创建 Document 文档,引发报错。
1 | # langchain_community/vectorstores/tencentvectordb.py->TencentVectorDB::add_texts |