Flutter轻量级嵌入插件lite_embeddings_dart的使用
Flutter轻量级嵌入插件lite_embeddings_dart的使用
Lite Embeddings for Dart
LLM Embeddings工具用于Dart语言。
- 支持向量数据库:Chroma
- 支持文件类型:纯文本,包括
Markdown
和TXT
使用方法
准备工作
- 文档文件,根据
/example/docs/*.md
- 文件中的分隔符
- 如果是
markdown
文件,建议使用<!--SEPARATOR-->
作为分隔符,以便在渲染后不显示在markdown
中。
- 如果是
- 在
example
文件夹中添加.env
文件,并在.env
文件中添加以下内容:baseUrl = https://xxx.xxx.com # LLM API BaseURL apiKey = sk-xxxxxxxxxxxxxxxxxxxx # LLM API ApiKey
- 使用以下方法运行嵌入服务。
嵌入服务
根据 /example/lite_embeddings_dart_example.dart
import 'dart:convert';
import 'dart:io';
import 'package:chromadb/chromadb.dart';
import 'package:lite_embeddings_dart/lite_embeddings.dart';
import 'package:dotenv/dotenv.dart';
EmbeddingsService embeddingsService = _buildService();
final String embeddingsModel = "text-embedding-ada-002";
Future<void> main() async {
embeddingsService.init();
String fileName = "Moore's Law for Everything.md";
String fileText = await _buildDocsText(fileName);
String separator = "<!--SEPARATOR-->";
print("fileName: $fileName, fileTextSize: ${fileText.length}, separator: $separator");
/// 列出所有文档
List<DocsInfoDto> docsInfoDtoList = await embeddingsService.listDocs();
print("docsNameDtoList: ${jsonEncode(docsInfoDtoList)}");
/// 创建新文档
CreateDocsTextDto createDocsTextDto = CreateDocsTextDto(
docsName: fileName,
text: fileText,
separator: separator,
metadata: {"vdb": "chroma", "embeddings_model": embeddingsModel}
);
DocsInfoDto docsInfoDto = await embeddingsService.createDocsByText(createDocsTextDto);
print("docsInfoDto: ${docsInfoDto.toJson()}");
/// 列出段落
String docsId = "<FROM DocsInfoDto>";
DocsIdDto docsIdDto = DocsIdDto(docsId: docsId);
DocsFullInfoDto? docsFullInfoDto = await embeddingsService.listSegments(docsIdDto);
print("docsFullInfoDto: ${jsonEncode(docsFullInfoDto?.toJson())}");
/// 查询
String questText = "Who is author?";
QueryDto queryDto = QueryDto(docsId: docsId, queryText: questText, nResults: 3);
QueryResultDto queryResultDto = await embeddingsService.query(queryDto);
print("queryResultDto: ${jsonEncode(queryResultDto)}");
/// 更新段落
SegmentInfoDto segmentInfoDto = SegmentInfoDto(id: segmentId, text: newText, metadata: metadata);
UpdateSegmentDto updateSegmentDto = UpdateSegmentDto(docsId: docsId, segment: segmentInfoDto);
await embeddingsService.updateSegment(updateSegmentDto);
/// 插入段落
SegmentDto segmentDto = SegmentDto(text: newText, metadata: metadata);
InsertSegmentDto insertSegmentDto = InsertSegmentDto(docsId: docsId, segment: segmentDto, index: 2);
await embeddingsService.insertSegment(insertSegmentDto);
/// 删除段落
DeleteSegmentDto deleteSegmentDto = DeleteSegmentDto(docsId: docsId, id: segmentId);
await embeddingsService.deleteSegment(deleteSegmentDto);
/// 重命名文档
DocsInfoDto docsInfoDto = DocsInfoDto(docsId: docsId, docsName: newDocsName);
DocsInfoDto docsInfoDtoResult = await embeddingsService.renameDocs(docsInfoDto);
/// 删除文档
DocsIdDto docsIdDto = DocsIdDto(docsId: docsId);
await embeddingsService.deleteDocs(docsIdDto);
embeddingsService.dispose();
}
EmbeddingsService _buildService() {
EmbeddingsService embeddingsService = EmbeddingsService(Chroma(baseUrl: "http://localhost:8000"));
return embeddingsService;
}
Future<String> _buildDocsText(String docsName) async {
String folder = "${Directory.current.path}${Platform.pathSeparator}example${Platform.pathSeparator}docs";
File file = File(folder + Platform.pathSeparator + docsName);
String docsString = await file.readAsString();
return docsString;
}
更多关于Flutter轻量级嵌入插件lite_embeddings_dart的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter轻量级嵌入插件lite_embeddings_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
关于Flutter轻量级嵌入插件lite_embeddings_dart
的使用,以下是一个简单的代码示例,展示了如何集成和使用该插件。请注意,由于lite_embeddings_dart
可能是一个特定项目或社区维护的插件,并非官方插件,以下示例基于一般插件的使用方式,具体实现可能需要根据实际插件文档进行调整。
首先,确保你已经在pubspec.yaml
文件中添加了lite_embeddings_dart
插件的依赖项(假设该插件已经在pub.dev上发布或者你有本地的包路径):
dependencies:
flutter:
sdk: flutter
lite_embeddings_dart: ^x.y.z # 替换为实际版本号或本地路径
然后,运行flutter pub get
来获取依赖项。
接下来,在你的Flutter应用中,你可以按照以下方式使用lite_embeddings_dart
插件。以下是一个基本的示例,展示如何在Flutter中嵌入一个轻量级的视图或组件。
import 'package:flutter/material.dart';
import 'package:lite_embeddings_dart/lite_embeddings_dart.dart'; // 假设插件提供了这样的导入路径
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Lite Embeddings Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Lite Embeddings Demo'),
),
body: Center(
child: LiteEmbedding(
// 假设LiteEmbedding是插件提供的一个组件
// 以下参数根据插件的实际需求进行调整
url: 'https://example.com/lite-embedding-content', // 例如,嵌入内容的URL
parameters: {
'param1': 'value1',
'param2': 'value2',
},
onLoaded: () {
// 当嵌入内容加载完成时回调
print('Lite embedding loaded');
},
onError: (error) {
// 当嵌入内容加载出错时回调
print('Error loading lite embedding: $error');
},
),
),
);
}
}
// 假设LiteEmbedding是插件定义的一个组件类
// class LiteEmbedding extends StatefulWidget {
// final String url;
// final Map<String, String> parameters;
// final VoidCallback onLoaded;
// final Function(dynamic) onError;
// LiteEmbedding({
// required this.url,
// required this.parameters,
// required this.onLoaded,
// required this.onError,
// });
// @override
// _LiteEmbeddingState createState() => _LiteEmbeddingState();
// }
// class _LiteEmbeddingState extends State<LiteEmbedding> {
// // 实现嵌入逻辑,例如使用PlatformViews或MethodChannel与原生代码交互
// @override
// Widget build(BuildContext context) {
// // 返回实际的嵌入视图或占位符
// return Container(
// child: Text('Lite Embedding Placeholder'), // 占位符,实际应返回嵌入的视图
// );
// }
// }
注意:上述代码中的LiteEmbedding
组件及其相关方法和参数是假设的,实际使用时需要参考lite_embeddings_dart
插件的官方文档或源代码。由于lite_embeddings_dart
可能是一个非官方或特定项目的插件,因此没有具体的API文档链接可以提供。在实际开发中,你需要查阅该插件的README文件或源代码以了解如何正确使用。
如果lite_embeddings_dart
插件涉及到与原生代码的交互(如Android的WebView
或iOS的WKWebView
),则可能还需要在android/app/src/main/AndroidManifest.xml
和ios/Runner/Info.plist
等文件中添加必要的权限和配置。这些步骤将取决于插件的具体要求和目标平台的限制。