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
更多关于Flutter向量搜索引擎插件weaviate的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中使用 Weaviate 作为向量搜索引擎,可以通过与 Weaviate 的 REST API 或 gRPC API 进行交互来实现。Weaviate 是一个开源的向量搜索引擎,支持语义搜索、相似性搜索等功能。以下是如何在 Flutter 应用中集成 Weaviate 的基本步骤:
1. 安装必要的依赖
首先,确保你的 Flutter 项目中安装了 http
或 dio
等 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);
}
}