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
表API变更
之前Table.schema是一个属性。现在它是一个异步方法。
创建索引
Table.createIndex 方法现在既用于创建向量索引也用于创建标量索引。当前需要指定列名(要建立索引的列)。向量索引的默认设置现在更加智能,能更好地适应数据规模的变化。
嵌入函数
嵌入API已全面重构,现在更贴近Python API的风格,包括新增的embedding registry功能:
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})