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 的数据, 效果如下:



相关推荐
2601_949950632 小时前
练题簿,把培训从“走过场”变成“真落地”
人工智能·学习·小程序·刷题·小程序推荐
诸神缄默不语4 小时前
备战 AI 出海 DAY 0:海外数据采集
大数据·人工智能
Ysn07195 小时前
YOLO-Master工程:experts.py 专家结构详解与目标检测专家设计启发
人工智能·yolo·目标检测
BingoGo5 小时前
使用 GPT-6 Astra 模型 请立刻更新你的 Skill 与提示词
人工智能
香菜+5 小时前
端侧视频分析 · 架构笔记
人工智能
s1ckrain5 小时前
【论文阅读】A Survey on Vision–Language–Action Models for Embodied AI
论文阅读·人工智能·多模态·具身智能
深圳雨林凯AI5 小时前
图案裂变的“风格归一化“设计思路:主体保得住,画风才拉得齐|雨林凯AI技术笔记
人工智能·笔记
DevNo6 小时前
英文会议转中文纪要,三款AI工具实测体验
人工智能
深小乐6 小时前
AI 说话越来越难懂?Anthropic 员工都在用 ELI5 这个图解 Skill
人工智能
问天_观心6 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer