跳转到内容

Rust后端客户端迁移指南

为确保所有客户端具备相同的功能集,我们已将Python和Node客户端迁移至一个共同的Rust基础库。在Python中,同步和异步客户端均基于此实现。在Node环境下,新客户端以@lancedb/lancedb形式提供,取代了原有的vectordb包。

本指南描述了两个Node API之间的差异,希望能帮助希望迁移到新API的用户。

TypeScript/JavaScript

对于JS/TS用户,我们提供了一个全新的SDK @lancedb/lancedb

我们尽量保持API与前一版本尽可能相似,但仍有一些小改动。以下是最重要的变更:

创建表格

CreateTableOptions.writeOptions.writeMode 已被替换为 CreateTableOptions.mode

db.createTable(tableName, data, { writeMode: lancedb.WriteMode.Overwrite });
db.createTable(tableName, data, { mode: "overwrite" })

表API变更

之前Table.schema是一个属性。现在它是一个异步方法。

创建索引

Table.createIndex 方法现在既用于创建向量索引也用于创建标量索引。当前需要指定列名(要建立索引的列)。向量索引的默认设置现在更加智能,能更好地适应数据规模的变化。

await tbl.createIndex({
  column: "vector", // default
  type: "ivf_pq",
  num_partitions: 2,
  num_sub_vectors: 2,
});
await table.createIndex("vector", {
  config: lancedb.Index.ivfPq({
    numPartitions: 2,
    numSubVectors: 2,
  }),
});

嵌入函数

嵌入API已全面重构,现在更贴近Python API的风格,包括新增的embedding registry功能:

const embeddingFunction = new lancedb.OpenAIEmbeddingFunction('text', API_KEY)
const data = [
    { id: 1, text: 'Black T-Shirt', price: 10 },
    { id: 2, text: 'Leather Jacket', price: 50 }
]
const table = await db.createTable('vectors', data, embeddingFunction)
import * as lancedb from "@lancedb/lancedb";
import * as arrow from "apache-arrow";
import { LanceSchema, getRegistry } from "@lancedb/lancedb/embedding";

const func = getRegistry().get("openai").create({apiKey: API_KEY});

const data = [
    { id: 1, text: 'Black T-Shirt', price: 10 },
    { id: 2, text: 'Leather Jacket', price: 50 }
]

const table = await db.createTable('vectors', data, {
    embeddingFunction: {
        sourceColumn: "text",
        function: func,
    }
})

你也可以采用基于模式驱动的方法,这与我们Python SDK中的Pydantic集成方式类似:

const func = getRegistry().get("openai").create({apiKey: API_KEY});

const data = [
    { id: 1, text: 'Black T-Shirt', price: 10 },
    { id: 2, text: 'Leather Jacket', price: 50 }
]
const schema = LanceSchema({
    id: new arrow.Int32(),
    text: func.sourceField(new arrow.Utf8()),
    price: new arrow.Float64(),
    vector: func.vectorField()
})

const table = await db.createTable('vectors', data, {schema})