Flutter OpenAI接口简化插件open_ai_simplified的使用

Flutter OpenAI接口简化插件open_ai_simplified的使用

简介

OpenAI简化插件是一个旨在为开发者提供简单直观访问OpenAI服务的应用。通过它,开发者可以以简单高效的方式将一些OpenAI的人工智能技术集成到自己的应用程序中。

状态:开发中 👷🏿 ⚠️ OpenAI提供的某些工具仍在开发中,并将在未来逐步实现。

安装

要安装OpenAI简化插件,您可以使用以下任一方法:

方法 1: flutter pub add

flutter pub add open_ai_simplified

方法 2: pubspec.yaml

或者,您可以在pubspec.yaml文件中添加以下行:

dependencies:
    open_ai_simplified: ^VERSION

替换 VERSION 为您想要的最新版本。 在您的文件顶部导入库:

import 'package:open_ai_simplified/open_ai_simplified.dart';

特性

以下是可用的一些功能:

功能 可用性
模型
补全
编辑
图像
嵌入
文件
微调
审查

开始使用

OpenAI简化插件旨在使使用其功能更加容易,因此几乎不需要配置即可使用。只需初始化其仓库并提供您的OpenAI API密钥,所有功能都将使用API建议的默认配置。如有必要,也可以更改设置。

要配置所需功能的参数,有几种方法可供选择,一种是使用包中的对象之一,另一种是传递一个包含OpenAI API提供的数据结构的Map。

使用示例

以下是一个完整的示例,展示了如何使用open_ai_simplified插件进行各种操作。

import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:open_ai_simplified/open_ai_simplified.dart';

void main() async {
  // 加载环境变量
  await dotenv.load(fileName: ".env");

  // 创建一个新的仓库
  OpenIARepository openAi = OpenIARepository();

  // 添加API密钥
  openAi.addApiKey(dotenv.env['API_KEY']!);

  // 获取可用的模型列表
  final models = await openAi.getRawModelsList();

  // 打印模型
  log(models.toString());

  // 配置补全参数,也可以使用configCompletionFromMap方法
  openAi.configCompletionFromConfig(ConfigCompletion(temperature: 0.6));

  // 创建一个补全请求
  final completion = await openAi.getCompletion('what times it?');

  // 打印补全结果
  log(completion.choices[0].text);

  // 配置编辑参数,也可以使用configEditsFromMap方法
  openAi.configEditsFromConfig(config: ConfigEdits(temperature: 0.8));

  // 创建编辑请求
  final edit = await openAi.getEdits(
      input: 'helo piple', instruction: 'fix the spelling mistakes');

  // 打印编辑结果
  log(edit.choices[0].text);

  // 配置图像参数,也可以使用configImagesFromMap方法
  // 生成图像的大小。必须是256x256、512x512或1024x1024
  openAi.configImagesFromConfig(ConfigImages(n: 1, size: '256x256'));

  // 创建图像
  final images = await openAi.getImages('horse with golden hair and dragons');

  // 打印图像URL
  images.data.forEach((element) {
    log(element.url);
  });

  // 创建图像变体,图像应为PNG文件,小于4MB且为正方形
  final imageVariation = await openAi.createAImageVariation(
    imageFile: await downloadFile(images.data[0].url),
  );
  log(imageVariation.data[0].url);

  // 编辑图像,你也可以传递另一个图像作为蒙版
  final editImage = await openAi.editImage(
      image: await downloadFile(images.data[0].url),
      prompt: 'give a new hair style to the horse');

  // 打印编辑后的图像URL
  log(editImage.data[0].url);

  /// 创建嵌入
  final embedding = await openAi.createEmbedding(prompt: 'sabado a noite');

  /// 打印嵌入
  log(embedding.data[0].embedding.toString());

  /// 获取文件列表
  final list = await openAi.getFilesList();

  /// 打印文件列表
  log(list.data.toString());

  /// 上传文件,该文件包含用于跨各种端点/功能的文档
  /// 目前,组织上传的所有文件大小不得超过1GB
  final uploadedFile = await openAi.uploadFile(
      file: File('director/xxx.jsonl'), purpose: 'fine-tune');

  /// 打印上传的文件信息
  log(uploadedFile.toString());

  /// 删除文件并返回有关已删除文件的信息
  final deletedFile = await openAi.deleteFile(fileId: 'fileId');

  /// 打印有关已删除文件的信息
  log(deletedFile.toString());

  /// 获取有关文件的信息作为FileData对象
  /// 你也可以使用retriveRawFileInfo方法以Map形式获取信息
  final fileInfo = await openAi.retriveFileInfo(fileId: 'fileId');

  /// 打印文件信息
  log(fileInfo.toString());

  /// 获取特定文件的内容
  final fileContent = await openAi.retriveFileContent(fileId: 'fileId');

  /// 打印文件内容
  log(fileContent.toString());

  /// 判断文本是否违反OpenAI的内容政策,返回ModerationResponse对象
  final moderationInfo =
      await openAi.moderationCheck(input: 'I want to kill them.');

  /// 打印审查信息
  log(moderationInfo.results[0].categories.toString());

  /// 创建一个作业,从给定的数据集中微调指定的模型,返回FineTunesResponse对象
  final fineTunesCreated =
      await openAi.createFineTunes(trainingFile: 'ID of an uploaded file');

  /// 打印创建的微调信息
  log(fineTunesCreated.toString());

  /// 列出组织的微调作业,返回ListFineTunesResponse对象
  final listFineTunes = await openAi.getListFineTunes();

  /// 打印微调列表信息
  log(listFineTunes.data[0].toString());

  /// 获取有关微调作业的信息,返回FineTunesResponse对象
  final retrivedFileTune =
      await openAi.retriveFineTune(fineTuneId: 'ID of an uploaded file');

  /// 打印微调信息
  log(retrivedFileTune.toString());

  /// 立即取消微调作业,返回FineTunesResponse对象
  final canceledFineTune =
      await openAi.cancelFineTune(fineTuneId: 'fineTuneId');

  /// 打印取消的微调信息
  log(canceledFineTune.toString());

  /// 删除微调模型,你必须在组织中具有Owner角色,返回Map
  final deletedFineTune = await openAi.deleteFineTunelModel(model: 'model');

  /// 打印删除的微调信息
  log(deletedFineTune.toString());
}

Future<File> downloadFile(String url) async {
  Dio simple = Dio();
  String savePath = '${Directory.systemTemp.path}/${url.split('/').last}';
  await simple.download(url, savePath,
      options: Options(responseType: ResponseType.bytes));

  File file = File(savePath);
  return file;
}

更多关于Flutter OpenAI接口简化插件open_ai_simplified的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter OpenAI接口简化插件open_ai_simplified的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用open_ai_simplified插件与OpenAI API进行交互的代码示例。这个插件简化了与OpenAI API的集成,使得调用变得更加直观。

首先,确保你已经在pubspec.yaml文件中添加了open_ai_simplified依赖:

dependencies:
  flutter:
    sdk: flutter
  open_ai_simplified: ^最新版本号  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,我们编写Flutter代码来演示如何使用这个插件。

1. 配置OpenAI API密钥

在使用插件之前,你需要在OpenAI平台上获取一个API密钥,并将其配置在Flutter应用中。这通常可以通过环境变量或者硬编码的方式(不推荐在生产环境中硬编码密钥)。

import 'package:open_ai_simplified/open_ai_simplified.dart';

void main() {
  // 配置OpenAI API密钥
  OpenAi.apiKey = '你的OpenAI API密钥';

  runApp(MyApp());
}

2. 调用OpenAI API

下面是一个完整的示例,演示如何使用open_ai_simplified插件来完成文本生成任务(例如,使用GPT-3模型)。

import 'package:flutter/material.dart';
import 'package:open_ai_simplified/open_ai_simplified.dart';

void main() {
  OpenAi.apiKey = '你的OpenAI API密钥';
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('OpenAI Simplified Example'),
        ),
        body: Center(
          child: GenerateTextButton(),
        ),
      ),
    );
  }
}

class GenerateTextButton extends StatefulWidget {
  @override
  _GenerateTextButtonState createState() => _GenerateTextButtonState();
}

class _GenerateTextButtonState extends State<GenerateTextButton> {
  String responseText = '';

  void generateText() async {
    try {
      // 配置请求参数
      var params = CreateCompletionRequest(
        prompt: '请写一个关于Flutter的简短介绍。',
        maxTokens: 150,
        temperature: 0.7,
      );

      // 调用OpenAI API
      var response = await OpenAi.createCompletion(params);

      // 更新UI
      setState(() {
        responseText = response.choices!.first.text!;
      });
    } catch (e) {
      print('Error: $e');
      setState(() {
        responseText = 'Error fetching response.';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        TextButton(
          onPressed: generateText,
          child: Text('Generate Text'),
        ),
        Text(
          responseText,
          style: TextStyle(fontSize: 18),
          maxLines: 10,
          overflow: TextOverflow.ellipsis,
        ),
      ],
    );
  }
}

3. 运行应用

现在,你可以运行你的Flutter应用,点击“Generate Text”按钮,应该会看到由OpenAI API生成的关于Flutter的简短介绍。

注意事项

  1. API配额和费用:请注意,OpenAI API的使用可能会产生费用,并且每个API密钥都有配额限制。
  2. 安全性:不要在客户端代码中硬编码API密钥。最好使用安全存储(如Firebase、环境变量等)来管理密钥。
  3. 错误处理:示例代码中的错误处理非常基础。在实际应用中,你可能需要更详细的错误处理和用户反馈。

希望这个示例能帮你更好地理解如何在Flutter项目中使用open_ai_simplified插件与OpenAI API进行交互。

回到顶部