Flutter向量搜索引擎插件weaviate的使用

Flutter向量搜索引擎插件weaviate的使用

Weaviate Dart Wrapper

我们提供了一个用于Weaviate REST API的Dart包装器,允许你轻松地将Weaviate集成到你的Dart项目中。

目录

安装

在你的pubspec.yaml文件中添加weaviate作为依赖:

dependencies:
  ...
  weaviate: ^1.26.4+2

然后运行flutter pub get以获取包。

API密钥

有关此主题的更多信息,请参阅Weaviate文档中的第三方API密钥部分。

如果你使用基于API的模型进行向量化或RAG,则必须为服务提供API密钥。可以使用两种方法添加第三方API密钥:环境变量和自定义头。

环境变量

目前,此包支持以下作为环境变量设置的API密钥:

  • WEAVIATE_API_KEY
  • OPENAI_API_KEY
  • HUGGINGFACE_API_KEY
  • COHERE_API_KEY

任何其他API密钥必须按照以下自定义头部分所述的方式设置。

bash/zsh

export WEAVIATE_API_KEY="YOUR_WEAVIATE_KEY"
export OPENAI_API_KEY="YOUR_OPENAPI_KEY"
export HUGGINGFACE_API_KEY="YOUR_HUGGINGFACE_KEY"
export COHERE_API_KEY="YOUR_COHERE_KEY"

Windows PowerShell

$Env:WEAVIATE_API_KEY="YOUR_WEAVIATE_KEY"
$Env:OPENAI_API_KEY="YOUR_OPENAPI_KEY"
$Env:HUGGINGFACE_API_KEY="YOUR_HUGGINGFACE_KEY"
$Env:COHERE_API_KEY="YOUR_COHERE_KEY"

Windows 命令提示符

set WEAVIATE_API_KEY="YOUR_WEAVIATE_KEY"
set OPENAI_API_KEY="YOUR_OPENAPI_KEY"
set HUGGINGFACE_API_KEY="YOUR_HUGGINGFACE_KEY"
set COHERE_API_KEY="YOUR_COHERE_KEY"

自定义头

作为环境变量的替代方案,也可以直接将API密钥添加为自定义头,如下面所示。如果给定的API密钥尚未被此包支持,则此方法很有用。由于环境变量更安全且不太可能意外提交到GitHub,因此推荐使用环境变量。

final weaviate = Weaviate(
    weaviateUrl: clusterUrl ?? 'http://localhost:8080',
    headers: {
      'Authorization': 'Bearer YOUR_WEAVIATE_KEY'
      'X-OpenAI-Api-Key': 'YOUR_OPENAPI_KEY',
      'X-HuggingFace-Api-Key': 'YOUR_HUGGINGFACE_API_KEY',
      'X-Cohere-Api-Key': 'YOUR_COHERE_API_KEY',
    },

使用

在你的Dart文件中导入包:

import 'package:weaviate/weaviate.dart';

创建一个新的Weaviate客户端实例:

final weaviate = Weaviate(
    weaviateUrl: '[your cloud instance or other host]',
    // 添加头信息,如果API密钥未在环境变量中设置
);

现在你可以使用客户端与Weaviate API交互了。

示例

以下示例演示了Weaviate Dart包装器的使用方法:

创建对象

import 'package:weaviate/weaviate.dart';

void main() async {
  final weaviate = WeaviateClient(
    '[your cloud instance or other host]',
  );

  // 如果存在则删除模式
  await weaviate.deleteSchema('Question');
  
  // 为对象定义模式
  final schema = SchemaClass(
    className: 'Question',
    vectorizer: 'text2vec-huggingface',
    moduleConfig: Text2vecHuggingFace(
      model: 'sentence-transformers/all-MiniLM-L6-v2',
    ).toJson(),
  );

  // 将模式添加到Weaviate实例
  await weaviate.addSchema(schema);
    
  try {
    // 使用json文件作为输入文档
    final inputData = json.decode(File('jeopardy_tiny.json').readAsStringSync())
      as List<dynamic>;

    // 创建将要上传的对象
    final objects = inputData
      .map((element) => WeaviateObject(
            className: 'Question',
            properties: {
              'category': element['Category'],
              'question': element['Question'],
              'answer': element['Answer'],
            },
          ))
      .toList();

    // 以批处理方式将文档上传到你的实例
    await weaviate.batchObjects(BatchObjectRequest(objects: objects));
    
    print('Object created successfully!');
  } catch (e) {
    print('Error creating object: $e');
  }
}

查询对象

import 'package:graphql/client.dart';
import 'package:weaviate/weaviate.dart';

void main() async {
  final weaviate = WeaviateClient('[your cloud instance or other host]');
  
  try {
    final QueryOptions options = QueryOptions(document: gql(r'''{
  Get{
    Question (
      limit: 2
      where: {
        path: ["category"],
        operator: Equal,
        valueText: "ANIMALS"
      }
      nearText: {
        concepts: ["biology"],
      }
    ){
      question
      answer
      category
    }
  }
}'''));
      
    print('querying...');

    final result = await weaviate.getGraphQLClient().query(options);

    print(result.data?['Get']['Question']);
  } catch (e) {
    print('Error querying objects: $e');
  }
}

更多关于Flutter向量搜索引擎插件weaviate的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter向量搜索引擎插件weaviate的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中使用 Weaviate 作为向量搜索引擎,可以通过与 Weaviate 的 REST API 或 gRPC API 进行交互来实现。Weaviate 是一个开源的向量搜索引擎,支持语义搜索、相似性搜索等功能。以下是如何在 Flutter 应用中集成 Weaviate 的基本步骤:

1. 安装必要的依赖

首先,确保你的 Flutter 项目中安装了 httpdio 等 HTTP 客户端库,用于与 Weaviate 的 REST API 进行通信。

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.3  # 或者其他版本的 HTTP 客户端库

2. 创建 Weaviate 客户端

在 Flutter 中,你可以创建一个简单的 Weaviate 客户端类,用于封装与 Weaviate API 的交互。

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

class WeaviateClient {
  final String baseUrl;
  final String apiKey; // 如果需要 API 密钥的话

  WeaviateClient({required this.baseUrl, this.apiKey = ''});

  Future<Map<String, dynamic>> search(String className, Map<String, dynamic> query) async {
    final url = Uri.parse('$baseUrl/v1/graphql');
    final headers = {
      'Content-Type': 'application/json',
      if (apiKey.isNotEmpty) 'Authorization': 'Bearer $apiKey',
    };

    final response = await http.post(
      url,
      headers: headers,
      body: jsonEncode({
        'query': '''
          {
            Get {
              ${className}(where: $query) {
                _additional {
                  vector
                }
                # 其他字段
              }
            }
          }
        '''
      }),
    );

    if (response.statusCode == 200) {
      return jsonDecode(response.body);
    } else {
      throw Exception('Failed to load data from Weaviate');
    }
  }
}

3. 使用 Weaviate 客户端进行搜索

在你的 Flutter 应用中,你可以使用上面创建的 WeaviateClient 类来执行搜索操作。

void searchItems() async {
  final weaviateClient = WeaviateClient(
    baseUrl: 'https://your-weaviate-instance-url',
    apiKey: 'your-api-key',
  );

  try {
    final response = await weaviateClient.search('YourClassName', {
      'operator': 'Like',
      'valueString': 'search term',
    });

    print(response);
  } catch (e) {
    print('Error: $e');
  }
}

4. 处理搜索结果

Weaviate 的搜索结果通常以 JSON 格式返回。你可以根据需要对结果进行处理和展示。

void handleSearchResult(Map<String, dynamic> result) {
  final items = result['data']['Get']['YourClassName'];
  for (var item in items) {
    print(item);
  }
}
回到顶部