Flutter插件dvdb的介绍与使用指南

Flutter插件dvdb的介绍与使用指南

在本指南中,我们将探讨如何在Flutter应用中使用DVDB插件。DVDB是一个轻量级的矢量数据库插件,可以本地存储用户数据,并且支持Android和iOS平台。

为什么创建DVDB?

我们来自Fast Code AI,正在开发一个需要在设备上创建隐私保护型矢量数据库的应用。经过调研,我们发现SVDB(SVDB:适用于iOS设备的矢量数据库)能够很好地满足我们的需求。然而,我们需要一个同样适用于Android设备的矢量数据库。遗憾的是,我们没有找到适用于Android设备的矢量数据库。因此,我们决定创建一个统一的矢量数据库,既可以在Android也可以在iOS设备上运行。在本项目中,我们使用Dart语言实现了一个矢量数据库,可以在Flutter应用中使用。

DVDB亮点 ✨

  • 隐私优先:用户的私人数据不会离开设备,也不会存储在我们的服务器上。你拥有你的数据和嵌入。
  • 无需服务器:DVDB在设备上本地运行,零延迟,无需服务器维护!
  • 支持OpenAI嵌入:只需几行代码即可将OpenAI嵌入添加到DVDB中。
  • 自定义嵌入:你可以创建自己的嵌入并添加到DVDB中,而不是使用OpenAI嵌入。
  • 多平台支持:无论你是Android团队还是iOS团队,DVDB都支持两种平台,使应用程序开发变得更加轻松。

启动你的DVDB之旅 🚀

安装Flutter

  1. 步骤1:从官方网站下载并安装Flutter SDK。
  2. 步骤2:使用你喜欢的IDE设置开发环境,并安装Dart插件。
  3. 步骤3:在终端中运行flutter doctor以确保一切配置正确。

安装我们的DVDB

  1. 步骤4:运行git clone https://github.com/FastCodeAI/DVDB.git

DVDB快速启动:魔法几分钟! 🎩✨

在设置了代码库之后,就可以开始使用DVDB了!查看examples/vector_db_example.dart文件以了解DVDB的工作原理。在命令行中运行以下脚本:

dart example/vector_db_example.dart

如果你想在你的Flutter项目中使用DVDB,只需在pubspec.yaml文件中添加以下依赖项并开始使用:

dependencies:
  DVDB:
    path: ./path_to_dvdb_folder/DVDB/

探索更多关于DVDB 🔍

性能基准测试结果

下表展示了SVDB与DVDB在iPhone 14上的性能对比结果。

插入n个文档

# 向量数量 SVDB (ms) DVDB (ms)
100 9801.3 15.9
500 277903.0 45.36

搜索

# 向量数量 SVDB (ms) DVDB (ms)
100 34.9418 15.9485
500 93.7644 33.3472

下表展示了DVDB在Android手机上的性能基准测试结果。

插入n个文档

# 向量数量 DVDB (ms)
100 264.379
500 891.433

搜索

# 向量数量 DVDB (ms)
100 67.309
500 155.228

示例代码

import 'dart:typed_data';
import 'package:dvdb/dvdb.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;

const String openaiApiKey = 'sk-your_api_key'; // 替换为你的OpenAI API密钥
const String openaiUrl = 'https://api.openai.com/v1/embeddings';

void main() async {
  var headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer $openaiApiKey'
  };

  var collection = DVDB().collection("Test");
   
  var texts = ['cat', 'dog', 'lion'];

  for (var text in texts) {
    try {
      var requestBody = jsonEncode({
        'input': text,
        'model': 'text-embedding-ada-002'
      });

      var response = await http.post(Uri.parse(openaiUrl), headers: headers, body: requestBody);

      if (response.statusCode == 200) {
        var jsonResponse = jsonDecode(response.body);
        Float64List embedding = jsonResponse['data'][0]['embedding'];
        print('Response from OpenAI: ${embedding.runtimeType}');
        collection.addDocument(null, text, embedding);
      } 
      else {
        print('Request failed with status: ${response.statusCode}.');
        print('Response body: ${response.body}');
      }
    } 
    catch(e) {
      print('An error occurred: $e');
    }
  }

  try {
    var requestBody = jsonEncode({
      'input': 'tiger',
      'model': 'text-embedding-ada-002'
    });

    var response = await http.post(Uri.parse(openaiUrl), headers: headers, body: requestBody);
    if (response.statusCode == 200) {
      var jsonResponse = jsonDecode(response.body);
      Float64List embedding = jsonResponse['data'][0]['embedding'];

      final query = collection.search(embedding, numResults: 1);

      query.forEach((element) {
      
        print("${element.score} || ${element.text}");
      });
    }
    else {
      print('Request failed with status: ${response.statusCode}.');
      print('Response body: ${response.body}');
    }
  }
  catch(e){
    print(e);
  }
}

更多关于Flutter插件dvdb的介绍与使用指南的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件dvdb的介绍与使用指南的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter开发中,如果你遇到了一个名为 dvdb 的未定义功能插件,可能的原因有以下几种:

  1. 插件不存在dvdb 可能是一个不存在的插件,或者它的名称有误。
  2. 插件未正确安装:你可能没有正确安装或配置这个插件。
  3. 插件未导入:你可能忘记在代码中导入这个插件。
  4. 插件版本不兼容:插件可能与当前Flutter或Dart版本不兼容。

探索与使用 dvdb 插件的步骤

1. 确认插件是否存在

首先,你需要在 pub.dev 上搜索 dvdb,看看是否存在这个插件。如果不存在,可能你需要寻找替代品,或者确认你是否拼写错误。

2. 安装插件

如果插件存在,你可以通过以下步骤安装它:

  1. pubspec.yaml 文件中添加依赖项:

    dependencies:
      dvdb: ^1.0.0  # 请根据实际版本号填写
    
  2. 运行 flutter pub get 来获取依赖项。

3. 导入插件

在使用插件之前,确保你在 Dart 文件中导入了它:

import 'package:dvdb/dvdb.dart';

4. 使用插件

根据插件的文档或示例代码,尝试使用 dvdb 插件的功能。例如:

void main() {
  // 假设 dvdb 插件有一个 `initialize` 方法
  Dvdb.initialize();

  // 使用插件的其他功能
  // ...
}
回到顶部