Flutter数据库管理插件chromadb的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter数据库管理插件chromadb的使用

Chroma Dart Client

Chroma Dart Client 是一个用于与 Chroma 插件交互的 Dart 客户端。它提供了创建、列出、获取、修改和删除集合的功能,以及添加、插入、获取、更新、查询、计数、预览和删除项目等功能。

特性

  • 创建、列出、获取、修改和删除集合。
  • 添加、插入、获取、更新、查询、计数、预览和删除项目。
  • 获取版本和心跳。
  • 重置数据库。

使用说明

运行 docker-compose up -d --build 可以在本地计算机上启动后台服务。

初始化客户端

final client = ChromaClient();

默认情况下,客户端期望服务器运行在 http://localhost:8000。可以通过传递 host 参数来更改此设置。

方法介绍

相关于集合的方法
// 列出所有集合
await client.listCollections();

// 创建新集合
final collection = await client.createCollection(name: 'testname');

// 获取现有集合
final collection = await client.getCollection(name: 'testname');

// 删除集合
await client.deleteCollection(name: 'testname');
工具方法
// 获取 Chroma 版本
final version = await client.version();

// 获取 Chroma 心跳
final heartbeat = await client.heartbeat();

// 重置整个数据库 - 这个操作无法撤销!
await client.reset();
集合上的方法
// 获取集合中的项数量
await collection.count();

// 向集合中添加新项
// 一次添加
await collection.add(
  ids: ['id1'],
  embeddings: [[1.5, 2.9, 3.4]],
  metadatas: [{'source': 'my_source'}],
);

// 或者一次添加多个,最多可达 100k+!
await collection.add(
  ids: ['uri9', 'uri10'],
  embeddings: [[1.5, 2.9, 3.4], [9.8, 2.3, 2.9]],
  metadatas: [{'style': 'style1'}, {'style': 'style2'}],
);

// 包含文档(你需要为集合提供 EmbeddingFunction 才能嵌入文档)
await collection.add(
  ids: ['uri9', 'uri10'],
  documents: ['doc1000101', 'doc288822'],
  metadatas: [{'style': 'style1'}, {'style': 'style2'}],
);

// 或使用 upsert,如果记录已经存在则会更新而不是抛出错误
await collection.upsert(
  ids: ['id1'],
  embeddings: [[1.5, 2.9, 3.4]],
  metadatas: [{'source': 'my_source'}],
  documents: ['This is a document'],
);

// 获取集合中的项
final res = await collection.get();

// 方便快捷,获取集合中的前 5 项
await collection.peek();

// 进行最近邻搜索以查找相似的嵌入或文档,支持过滤
await collection.query(
  queryEmbeddings: [[1.1, 2.3, 3.2], [5.1, 4.3, 2.2]],
  nResults: 2,
  where: {'style': 'style2'},
);

// 删除项
await collection.delete();

许可证

Chroma Dart Client 按照 MIT License 许可证发布。

示例代码

import 'package:chromadb/chromadb.dart';

void main() async {
  final client = ChromaClient();
  final collection = await client.createCollection(name: 'test');
  await collection.add(
    ids: ['id1', 'id2'],
    embeddings: [
      [1.0, 2.0, 3.0],
      [4.0, 5.0, 6.0],
    ],
    metadatas: [
      {'source': 'source1'},
      {'source': 'source2'},
    ],
  );
  final result = await collection.query(
    nResults: 2,
    queryEmbeddings: [
      [1.0, 2.0, 3.0],
    ],
  );
  print(result);
}

更多关于Flutter数据库管理插件chromadb的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据库管理插件chromadb的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用chromadb插件进行数据库管理的示例代码。chromadb是一个轻量级的SQLite数据库管理插件,尽管在实际应用中,Flutter社区更常使用sqflite等插件,但假设chromadb有类似的API设计,以下代码可以作为一个基础模板。

请注意,由于chromadb并非一个广泛认知的插件,以下代码是基于假设的API设计,实际使用时请参考chromadb的官方文档进行调整。

首先,确保在你的pubspec.yaml文件中添加chromadb依赖:

dependencies:
  flutter:
    sdk: flutter
  chromadb: ^x.y.z  # 请替换为实际版本号

然后运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中创建一个数据库管理文件,例如database_manager.dart

import 'package:flutter/material.dart';
import 'package:chromadb/chromadb.dart'; // 假设chromadb的导入路径

class DatabaseManager {
  Chromadb? _db;

  DatabaseManager._privateConstructor();

  static final DatabaseManager _instance = DatabaseManager._privateConstructor();

  factory DatabaseManager() => _instance;

  Future<void> openDatabase(String dbName) async {
    _db = await Chromadb.openDatabase(dbName);
  }

  Future<void> closeDatabase() async {
    if (_db != null) {
      await _db!.close();
      _db = null;
    }
  }

  Future<void> createTable() async {
    if (_db != null) {
      await _db!.execute('''
        CREATE TABLE IF NOT EXISTS users (
          id INTEGER PRIMARY KEY,
          name TEXT NOT NULL,
          email TEXT NOT NULL UNIQUE
        )
      ''');
    }
  }

  Future<void> insertUser(String name, String email) async {
    if (_db != null) {
      await _db!.insert('users', {
        'name': name,
        'email': email,
      });
    }
  }

  Future<List<Map<String, dynamic>>> getAllUsers() async {
    if (_db != null) {
      return await _db!.query('users');
    } else {
      return [];
    }
  }
}

然后,在你的主应用程序文件中使用这个数据库管理器,例如main.dart

import 'package:flutter/material.dart';
import 'database_manager.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  DatabaseManager? _dbManager;
  List<Map<String, dynamic>>? _users;

  @override
  void initState() {
    super.initState();
    _dbManager = DatabaseManager();
    initDatabase();
  }

  Future<void> initDatabase() async {
    await _dbManager!.openDatabase('my_database.db');
    await _dbManager!.createTable();
    // 插入示例数据
    await _dbManager!.insertUser('Alice', 'alice@example.com');
    await _dbManager!.insertUser('Bob', 'bob@example.com');
    setState(() {
      _users = _dbManager!.getAllUsers();
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Chromadb Example'),
        ),
        body: _users != null
            ? ListView.builder(
                itemCount: _users!.length,
                itemBuilder: (context, index) {
                  Map<String, dynamic> user = _users![index];
                  return ListTile(
                    title: Text('${user['name']} (${user['email']})'),
                  );
                },
              )
            : Center(child: CircularProgressIndicator()),
      ),
    );
  }

  @override
  void dispose() {
    _dbManager!.closeDatabase();
    super.dispose();
  }
}

在这个示例中,我们创建了一个DatabaseManager类来管理数据库操作,包括打开和关闭数据库、创建表、插入数据和查询数据。然后在主应用程序中,我们初始化数据库并显示所有用户。

请注意,由于chromadb并非一个广泛使用的插件,上述代码可能需要根据实际插件的API进行调整。务必查阅chromadb的官方文档和示例代码以获取准确的使用方法。

回到顶部