Flutter轻量级嵌入插件lite_embeddings_dart的使用

Flutter轻量级嵌入插件lite_embeddings_dart的使用

Lite Embeddings for Dart

LLM Embeddings工具用于Dart语言。

  • 支持向量数据库:Chroma
  • 支持文件类型:纯文本,包括 MarkdownTXT

使用方法

准备工作

  1. 文档文件,根据 /example/docs/*.md
  2. 文件中的分隔符
    • 如果是 markdown 文件,建议使用 <!--SEPARATOR--> 作为分隔符,以便在渲染后不显示在 markdown 中。
  3. example 文件夹中添加 .env 文件,并在 .env 文件中添加以下内容:
    baseUrl = https://xxx.xxx.com         # LLM API BaseURL
    apiKey = sk-xxxxxxxxxxxxxxxxxxxx      # LLM API ApiKey
    
  4. 使用以下方法运行嵌入服务。

嵌入服务

根据 /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

1 回复

更多关于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.xmlios/Runner/Info.plist等文件中添加必要的权限和配置。这些步骤将取决于插件的具体要求和目标平台的限制。

回到顶部