LanceDB

LanceDB

嵌入式向量库,连本地目录或对象存储即可做多模态检索

核心功能

LanceDB 是 Rust 编写的开源嵌入式检索库,建在 Lance 列式格式之上,把向量、结构化字段和图片音视频存在同一张表里。它不需要部署服务端,连本地目录或 s3:// 路径就能用。适合多模态数据集管理与 RAG 检索的团队;相比需独立服务进程的向量数据库,它更像直接嵌进数据管线的存储层。

功能亮点

无服务端可用

pip 装完直接 lancedb.connect 指向本地目录,不用起进程

对象存储当库

连接 URI 换成 s3://、gs:// 或 az://,表直接落在云存储上

加列不重写表

Lance 支持数据演进,add_columns 传 SQL 表达式即可派生新列

多模态同表

图片音视频以 blob 存进表的列,与向量共享版本与查询语义

适用场景

• RAG 应用把向量库直接嵌进 Python 服务进程,省掉一套独立数据库的部署与运维
• 训练数据集管理,用 add_columns 派生质量分等特征列并借助版本能力回溯数据
• 多模态检索,把图片二进制与其 embedding 存进同一张表后按向量加元数据条件召回

安装配置

bash
Python:
pip install lancedb

在不支持 AVX2 的老 x86_64 CPU 上改装兼容包(与 lancedb 冲突,二选一):
pip install lancedb-compat

预发布版本(LanceDB 官方 Fury 索引):
pip install --pre --extra-index-url https://pypi.fury.io/lancedb/ lancedb

说明:官方 Quickstart 同时提供 TypeScript 与 Rust SDK 的安装方式,具体命令见该页对应标签页。查询结果转 DataFrame 前需另行 pip install polars 或 pip install pandas。

使用方法

python
连接本地目录(嵌入式用法):
import lancedb

uri = "ex_lancedb"
db = lancedb.connect(uri)

直接连对象存储:
import lancedb

uri = "s3://your-bucket/path"
# 也可以用 "gs://your-bucket/path" 或 "az://your-container/path"
db = lancedb.connect(uri)

建表并写入数据(一行里同时有文本、元数据、结构化字段和向量):
data = [
    {
        "id": "1",
        "name": "King Arthur",
        "role": "King",
        "description": "Leader of Camelot and wielder of Excalibur.",
        "stats": {"strength": 4, "magic": 1, "leadership": 5, "wisdom": 4},
        "vector": [0.7, 0.1, 0.9, 0.7],
    },
    {
        "id": "2",
        "name": "Merlin",
        "role": "Wizard",
        "description": "Advisor and prophet with deep magical knowledge.",
        "stats": {"strength": 2, "magic": 5, "leadership": 4, "wisdom": 5},
        "vector": [0.2, 0.9, 0.4, 0.9],
    },
]

table = db.create_table("characters", data=data, mode="overwrite")

向量检索:
query_vector = [0.2, 0.8, 0.4, 0.9]

result = (
    table.search(query_vector)
    .select(["name", "role", "description", "_distance"])
    .limit(2)
    .to_polars()
)
print(result)

取 Pandas DataFrame:
result = table.search(query_vector).limit(2).to_pandas()

检索时叠加元数据过滤:
curated = (
    table.search(query_vector)
    .where("stats.magic >= 4")
    .select(["name", "role", "description", "_distance"])
    .limit(2)
    .to_polars()
)

加一列派生特征(不重写整表):
table.add_columns(
    {
        "power_score": "cast(((stats.strength + stats.magic + stats.leadership + stats.wisdom) / 4.0) as float)"
    }
)

关键指标

尚未核验对标产品,此处只列本工具自身指标,不做对比结论。

指标LanceDB
价格免费
开源
上手难度入门

相关工具

优点

  • 嵌入式形态,pip install lancedb 后指定一个本地目录即可读写,不需要部署或运维服务端进程
  • 可以直接把 s3://、gs://、az:// 对象存储路径当作数据库 URI,数据不用先搬到本地
  • 底层 Lance 列式格式支持自动版本管理与数据演进,add_columns 加列无需重写整张表
  • 一张表内即可存放向量、结构化字段与图片音视频二进制,官方 SDK 覆盖 Python、TypeScript、Rust

缺点

  • 默认 lancedb wheel 按 x86-64-haswell(AVX2 + FMA + F16C)构建,在不支持 AVX2 的老 x86_64 CPU 上 import lancedb 会以 Illegal instruction 崩溃
  • lancedb 与替代包 lancedb-compat 共用同一个 lancedb/ 命名空间,安装时互相冲突,只能装其中一个,切换前需先卸载
  • 官方 Quickstart 列出的连接方式只有本地路径、对象存储 URI 与 Enterprise 的 db://,开源版没有自带的独立服务端进程
  • 预发布构建官方声明在发布 6 个月之后不保证仍可获取,真实负载建议尽量使用稳定版