AI向量数据库之LanceDB快速介绍

LanceDB

LanceDB 是一个开源的向量搜索数据库,具备持久化存储功能,极大地简化了嵌入向量的检索、过滤和管理。

LanceDB的主要特点

LanceDB 的主要特点包括:

  • 生产级向量搜索:无需管理服务器。

  • 存储、查询和过滤向量、元数据以及多模态数据(如文本、图像、视频、点云等)。

  • 支持向量相似性搜索、全文搜索和 SQL

  • 原生支持 Python 和 Javascript/Typescript

  • 零拷贝、自动版本控制:无需额外基础设施即可管理数据版本。

  • 支持 GPU 加速构建向量索引(*)。

  • 生态系统集成:与 LangChain 🦜️🔗、LlamaIndex 🦙、Apache-Arrow、Pandas、Polars、DuckDB 等工具集成,更多集成正在开发中。

LanceDB 的核心是用 Rust 🦀 编写的,并基于 Lance 构建。

Lance 是一种开源列式数据格式,专为高性能机器学习工作负载设计。

基于NodeJS 使用 LanceDB

需要先安装NodeJS,这里对 NodeJS的部分就不做过多的介绍。关于NodeJS的介绍和安装可以参考:

npm介绍及与Node.js关联

项目创建

  1. 创建一个项目目录, 这里是 lancedb

  2. 命令行切换到该目录,执行 npm init -y 初始化项目。
    这个命令就是创建 package.json 文件

  3. 创建src 目录用来存放源码
    (src目录非必要, 也有的项目是app目录,目的就是为了让项目结构更清晰)

  4. 安装lanceDB 的库

    npm install @lancedb/lancedb

该命令的作用包括:

  1. 安装 LanceDB 客户端库

    • 该命令会从 npm 仓库下载并安装@lancedb/lancedb包。

    • 安装完成后,你可以在项目中引入 LanceDB 并使用其 API 进行向量存储、查询和管理。

  2. 更新package.json

    • 安装完成后,@lancedb/lancedb会被添加到package.json文件的dependenciesdevDependencies中(取决于你是否使用了--save-dev选项)。

    • 示例:

      json

      复制

      复制代码
      "dependencies": {
        "@lancedb/lancedb": "^1.0.0"
      }
  3. 生成node_modules文件夹

    • 安装的库及其依赖会被下载到项目的node_modules文件夹中。
  4. 生成package-lock.json

    • 安装过程中会更新或生成package-lock.json文件,确保依赖版本的一致性。

编写 Javascript 代码操作LanceDB

在src 下新建一个 quickstart.js 文件,内容如下:

复制代码
import * as lancedb from "@lancedb/lancedb";

const db = await lancedb.connect("data/my-lancedb");
const table = await db.createTable("vectors", [
	{ id: 1, vector: [0.1, 0.2], item: "foo", price: 10 },
	{ id: 2, vector: [1.1, 1.2], item: "bar", price: 50 },
], {mode: 'overwrite'});


const query = table.vectorSearch([0.1, 0.3]).limit(2);
const results = await query.toArray();




const rowsByCriteria = await table.query().where("price >= 10").toArray();

以上代码的解释如下:

1. 导入 LanceDB 库

复制代码
import * as lancedb from "@lancedb/lancedb";
  • 这行代码导入了 LanceDB 的 Node.js 客户端库。

  • import * as lancedb表示将整个库的内容导入为一个命名空间lancedb,方便后续调用其 API。


2. 连接数据库

复制代码
const db = await lancedb.connect("data/my-lancedb");
  • 使用lancedb.connect()方法连接到 LanceDB 数据库。

  • "data/my-lancedb"是数据库的存储路径。如果路径不存在,LanceDB 会自动创建。

  • await表示这是一个异步操作,等待连接完成后再继续执行后续代码。


3. 创建表并插入数据

复制代码
const table = await db.createTable("vectors", [
  { id: 1, vector: [0.1, 0.2], item: "foo", price: 10 },
  { id: 2, vector: [1.1, 1.2], item: "bar", price: 50 },
], { mode: 'overwrite' });
  • 使用db.createTable()方法创建一个名为"vectors"的表。

  • 第二个参数是一个数组,表示要插入的初始数据。每条数据是一个对象,包含以下字段:

    • id: 唯一标识符。

    • vector: 向量数据(例如[0.1, 0.2])。

    • item: 项目的名称(例如"foo")。

    • price: 项目的价格(例如10)。

  • 第三个参数{ mode: 'overwrite' }表示如果表已经存在,则覆盖它。如果表不存在,则创建新表。


4. 向量搜索

复制代码
const query = table.vectorSearch([0.1, 0.3]).limit(2);
const results = await query.toArray();
  • 使用table.vectorSearch()方法进行向量搜索。

    • [0.1, 0.3]是查询向量,LanceDB 会查找与这个向量最相似的数据。
  • limit(2)表示只返回最相似的 2 条结果。

  • await query.toArray()将查询结果转换为数组并返回。

  • 结果会存储在results变量中,通常是一个包含相似向量数据的数组。


5. 条件查询

复制代码
const rowsByCriteria = await table.query().where("price >= 10").toArray();
  • 使用table.query()方法创建一个查询对象。

  • where("price >= 10")是一个过滤条件,表示只返回price字段大于或等于 10 的数据。

  • await query.toArray()将查询结果转换为数组并返回。

  • 结果会存储在rowsByCriteria变量中,通常是一个符合条件的数据数组。

在VS Code的项目目录结构如下:

运行代码

使用node .\src\quickstart.js 命令运行代码, 运行后会在项目目录下创建 data 目录存放Db 的数据, 效果如下:



相关推荐
槑槑紫21 分钟前
深度学习pytorch整体流程
人工智能·pytorch·深度学习
程序猿小D30 分钟前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的个人财务管理系统,推荐!
java·数据库·mysql·spring·毕业论文·ssm框架·个人财务管理系统
盼小辉丶35 分钟前
TensorFlow深度学习实战——去噪自编码器详解与实现
人工智能·深度学习·tensorflow
胖达不服输43 分钟前
「日拱一码」020 机器学习——数据处理
人工智能·python·机器学习·数据处理
吴佳浩1 小时前
Python入门指南-AI模型相似性检测方法:技术原理与实现
人工智能·python·llm
钢铁男儿1 小时前
C# 接口(什么是接口)
java·数据库·c#
kebijuelun2 小时前
百度文心 4.5 大模型详解:ERNIE 4.5 Technical Report
人工智能·深度学习·百度·语言模型·自然语言处理·aigc
算家计算2 小时前
ComfyUI-v0.3.43本地部署教程:新增 Omnigen 2 支持,复杂图像任务一步到位!
人工智能·开源
新智元2 小时前
毕业 7 年,身价破亿!清北 AI 天团血洗硅谷,奥特曼被逼分天价股份
人工智能·openai
新智元2 小时前
刚刚,苹果大模型团队负责人叛逃 Meta!华人 AI 巨星 + 1,年薪飙至 9 位数
人工智能·openai