Flutter矢量图形处理插件pgvector的使用

Flutter矢量图形处理插件pgvector的使用

pgvector-dart 是一个支持 Dart 的库,用于与 PostgreSQL 数据库进行矢量图形处理。它支持 postgres 包。

开始使用

首先,在 pubspec.yaml 文件中添加 pgvector 依赖:

dart pub add pgvector

然后根据你的数据库库类型进行配置:

  • postgres

使用 postgres

导入库

import 'package:pgvector/pgvector.dart';

添加编码器

var connection = await Connection.open(endpoint,
    settings: ConnectionSettings(
        typeRegistry: TypeRegistry(encoders: [pgvectorEncoder])));

启用扩展

await connection.execute('CREATE EXTENSION IF NOT EXISTS vector');

创建表

await connection.execute('CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3))');

插入向量

await connection.execute(
    Sql.named('INSERT INTO items (embedding) VALUES (@a), (@b), (@c)'),
    parameters: {
      'a': Vector([1, 1, 1]),
      'b': Vector([2, 2, 2]),
      'c': Vector([1, 1, 2])
    });

获取最近邻居

List<List<dynamic>> results = await connection.execute(
    Sql.named('SELECT id, embedding FROM items ORDER BY embedding <-> @embedding LIMIT 5'),
    parameters: {
      'embedding': Vector([1, 1, 1])
    });
for (final row in results) {
  print(row[0]); // 打印ID
  print(Vector.fromBinary(row[1].bytes)); // 打印向量
}

添加近似索引

await connection.execute('CREATE INDEX ON items USING hnsw (embedding vector_l2_ops)');
// 或者
await connection.execute('CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100)');

使用 vector_ip_ops 进行内积计算和 vector_cosine_ops 进行余弦距离计算

你可以通过以下方式来获取完整示例:

git clone https://github.com/pgvector/pgvector-dart.git
cd pgvector-dart
createdb pgvector_dart_test
dart test

要运行示例,请执行以下命令:

cd examples/openai
createdb pgvector_example
dart run example.dart

更多关于Flutter矢量图形处理插件pgvector的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter矢量图形处理插件pgvector的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


pgvector 是一个用于处理向量数据的 PostgreSQL 扩展,它允许你在数据库中存储和查询高维向量数据。虽然 pgvector 本身不是一个 Flutter 插件,但你可以在 Flutter 应用中使用它与 PostgreSQL 数据库进行交互,以便处理和查询向量数据。

以下是如何在 Flutter 项目中使用 pgvector 的基本步骤:

1. 设置 PostgreSQL 数据库并安装 pgvector 扩展

首先,你需要在 PostgreSQL 数据库中安装 pgvector 扩展。

CREATE EXTENSION vector;

2. 创建表并存储向量数据

你可以创建一个表来存储向量数据。例如:

CREATE TABLE items (
    id SERIAL PRIMARY KEY,
    embedding VECTOR(128)
);

3. 在 Flutter 中连接到 PostgreSQL 数据库

你可以使用 postgres 插件来在 Flutter 中连接到 PostgreSQL 数据库。

pubspec.yaml 中添加依赖:

dependencies:
  postgres: ^2.3.0

然后,在 Dart 代码中连接到数据库:

import 'package:postgres/postgres.dart';

void main() async {
  final connection = PostgreSQLConnection(
    'localhost',
    5432,
    'your_database',
    username: 'your_username',
    password: 'your_password',
  );

  await connection.open();

  // 插入向量数据
  await connection.execute(
    'INSERT INTO items (embedding) VALUES (@embedding)',
    substitutionValues: {
      'embedding': [0.1, 0.2, 0.3, ..., 0.128], // 128维向量
    },
  );

  // 查询向量数据
  var results = await connection.query(
    'SELECT * FROM items ORDER BY embedding <-> @query_vector LIMIT 10',
    substitutionValues: {
      'query_vector': [0.1, 0.2, 0.3, ..., 0.128], // 查询向量
    },
  );

  for (var row in results) {
    print(row);
  }

  await connection.close();
}

4. 执行向量查询

你可以使用 pgvector 提供的操作符来执行向量查询。例如,使用 <-> 操作符来计算向量之间的欧几里得距离:

SELECT * FROM items ORDER BY embedding <-> @query_vector LIMIT 10;

5. 处理查询结果

在 Flutter 中,你可以处理查询结果并根据需要更新 UI。

6. 优化和扩展

根据你的应用需求,你可以进一步优化查询性能,例如通过创建索引来加速向量查询:

CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100);
回到顶部