pgvector/pgvector

PHP 对 pgvector 的支持

v0.2.0 2024-06-26 06:17 UTC

This package is not auto-updated.

Last update: 2024-09-18 07:33:00 UTC


README

pgvector 对 PHP 的支持

Build Status

入门指南

遵循您数据库库的说明

或者查看一些示例

Laravel

安装包

composer require pgvector/pgvector

启用扩展

php artisan vendor:publish --tag="pgvector-migrations"
php artisan migrate

您现在可以在未来的迁移中使用 vector 类型

Schema::create('items', function (Blueprint $table) {
    $table->vector('embedding', 3);
});

更新您的模型

use Pgvector\Laravel\Vector;

class Item extends Model
{
    use HasNeighbors;

    protected $casts = ['embedding' => Vector::class];
}

插入一个向量

$item = new Item();
$item->embedding = [1, 2, 3];
$item->save();

获取与记录最近的邻居

use Pgvector\Laravel\Distance;

$neighbors = $item->nearestNeighbors('embedding', Distance::L2)->take(5)->get();

也支持 InnerProductCosineL1HammingJaccard 距离

获取与向量最近的邻居

$neighbors = Item::query()->nearestNeighbors('embedding', [1, 2, 3], Distance::L2)->take(5)->get();

获取距离

$neighbors->pluck('neighbor_distance');

在迁移中添加近似索引

public function up()
{
    DB::statement('CREATE INDEX my_index ON items USING hnsw (embedding vector_l2_ops)');
    // or
    DB::statement('CREATE INDEX my_index ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100)');
}

public function down()
{
    DB::statement('DROP INDEX my_index');
}

使用 vector_ip_ops 进行内积,使用 vector_cosine_ops 进行余弦距离

PHP

启用扩展

pg_query($db, 'CREATE EXTENSION IF NOT EXISTS vector');

创建表

pg_query($db, 'CREATE TABLE items (embedding vector(3))');

插入一个向量

use Pgvector\Vector;

$embedding = new Vector([1, 2, 3]);
pg_query_params($db, 'INSERT INTO items (embedding) VALUES ($1)', [$embedding]);

获取与向量最近的邻居

$embedding = new Vector([1, 2, 3]);
$result = pg_query_params($db, 'SELECT * FROM items ORDER BY embedding <-> $1 LIMIT 5', [$embedding]);

添加近似索引

pg_query($db, 'CREATE INDEX ON items USING hnsw (embedding vector_l2_ops)');
// or
pg_query($db, 'CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100)');

查看 完整示例

升级

0.1.4

包名从 ankane/pgvector 更改为 pgvector/pgvector。在 composer.json 中更新它以移除消息。

历史

查看 变更日志

贡献

鼓励每个人帮助改进这个项目。以下是一些您可以提供帮助的方法

开始开发

git clone https://github.com/pgvector/pgvector-php.git
cd pgvector-php
composer install
createdb pgvector_php_test
composer test

运行示例

cd examples/loading
composer install
createdb pgvector_example
php example.php