SQLiteVec

Swift 对 sqlite-vec 的绑定

安装

Swift Package Manager

Swift Package Manager 是一种用于管理 Swift 代码分发的工具。

  1. 将以下内容添加到您的 Package.swift 文件中
dependencies: [
    .package(url: "https://github.com/jkrukowski/SQLiteVec", from: "0.0.9")
]
  1. 构建您的项目
$ swift build

用法

import SQLiteVec

// initialize the library first
try SQLiteVec.initialize()

// example data
let data: [(index: Int, vector: [Float])] = [
    (1, [0.1, 0.1, 0.1, 0.1]),
    (2, [0.2, 0.2, 0.2, 0.2]),
    (3, [0.3, 0.3, 0.3, 0.3]),
    (4, [0.4, 0.4, 0.4, 0.4]),
    (5, [0.5, 0.5, 0.5, 0.5]),
]
let query: [Float] = [0.3, 0.3, 0.3, 0.3]

// create a database
let db = try Database(.inMemory)

// create a table and insert data
try await db.execute("CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[4])")
for row in data {
    try await db.execute(
        """
            INSERT INTO vec_items(rowid, embedding)
            VALUES (?, ?)
        """,
        params: [row.index, row.vector]
    )
}

// query the embeddings
let result = try await db.query(
    """
        SELECT rowid, distance
        FROM vec_items
        WHERE embedding MATCH ?
        ORDER BY distance
        LIMIT 3
    """,
    params: [query]
)

// print the result
print(result)

它应该打印以下结果

[
    ["distance": 0.0, "rowid": 3],
    ["distance": 0.19999998807907104, "rowid": 4],
    ["distance": 0.20000001788139343, "rowid": 2]
]

示例

您可以在 examples 目录中找到更多示例。

测试

$ swift test

要在 Docker Swift 镜像上进行测试,请运行

$ docker build -f Dockerfile -t linuxbuild . && docker run linuxbuild

代码格式化

此项目使用 swift-format。要格式化代码,请运行

swift format . -i -r --configuration .swift-format

致谢

本项目基于以下项目,并使用了其中的一些代码: