Flutter OpenAI集成插件openai_package的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter OpenAI集成插件openai_package的使用

您可以通过以下步骤在Flutter应用中使用openai_package插件来集成OpenAI的各种API功能。以下是详细的使用指南和代码示例。

支持此项目以帮助更多人受益!您可以点赞⭐。

您可以使用本项目提供的几乎所有OpenAI API功能,在您的应用中进行开发。这是一个开源且免费的软件库。

该包通过HTTP请求与API通信,使用起来非常简单。如果您是Dart/Flutter新手,也不会遇到任何困难!

请随意在您的应用中使用此包,它随时准备就绪,无需更新即可在任何时间、任何地点使用OpenAI API包。

未官方支持

OpenAI没有提供官方的Dart库。

关键特性 ✨

  • 方法设计易于使用,精确地反映了OpenAI文档,并增强了与Dart编程语言的优化功能。
  • 一次授权,可在应用中的任何位置和任何时间使用。
  • 对开发者友好。
  • 我们的包并未包含所有OpenAI API部分。很快,所有部分都会被添加进来。
  • 包含了几乎所有的已实现功能的完整示例/代码片段,位于/example文件夹中。

代码进度 (65 %) 👑

  • ✅ 认证
  • ✅ 聊天(GPT)
  • ✅ 编辑
  • ✅ 图像
  • ✅ 嵌入
  • ✅ 音频
  • ✅ 语音
  • ❌ 模型
  • ❌ 完成
  • ❌ 修订
  • ❌ 文件
  • ❌ 微调

测试进度 (45 %) 💫

  • ✅ 认证
  • ✅ 聊天(GPT)
  • ✅ 图像
  • ✅ 音频
  • ✅ 语音
  • ❌ 模型
  • ❌ 完成
  • ❌ 修订
  • ❌ 文件
  • ❌ 微调
  • ❌ 编辑
  • ❌ 嵌入

完整文档 📜

有关库的完整文档,请查看这里

使用 🟢

认证

API密钥

OpenAI API使用API密钥进行认证。您可以在API密钥部分获取您的账户的API密钥。

import 'package:openai_package/openai_package.dart';
import 'package:openai_package/src/openai/import/importAi.dart'; // 你必须添加

// lib/main.dart
void main() {
  OpenAI.apiKey = 'your-api-key';
  // ..
}

如果没有提供apiKey数据,您将收到一条警告消息,提示输入apiKey数据。

如果提供了apiKey但已过期或无效,您将从OpenAI API收到错误消息。

如果没有指定model,您将收到一条警告消息,提示选择首选模型。

如果指定了model但无效或不受支持,您将收到一条错误消息,指示问题。

设置组织

如果您想在使用OpenAI API时配置一个organization,可以使用以下代码片段:

// 输入用户的组织ID
OpenAI.organization = 'org-HZ3hl5Z89fEYVUufQOCzunok';

了解更多详情,请参阅此处

设置默认请求超时

该库使用http包进行API请求,默认超时时间为30秒。任何超过此时间的请求都会被取消并抛出异常。为了避免意外取消,您可以配置自定义默认超时:

// 将默认请求超时设置为60秒(根据需要调整)
OpenAI.connectionTimeout = Duration(seconds: 60);

这样,您的API调用现在将等待最多60秒的响应,然后再抛出异常,从而为可能较慢的请求提供更多的缓冲空间。

关键点

  • 可调节超时:使用OpenAI.requestsTimeout设置所需的响应时间。
  • 时间格式:使用Duration类指定超时时间(例如,Duration(seconds: 45))。
  • 提升灵活性:避免对较长运行的请求进行不必要的取消。

注意事项

  • 注意不要超过合理的超时时间,因为这会显著影响性能和响应性。
  • 根据您的具体用例和预期响应时间调整超时值。

其他注意事项

  • 如果需要,考虑为单个请求实现自定义超时逻辑。
  • 监控和管理增加超时值的性能影响。

聊天(GPT)

创建聊天完成

基于提供的属性提供预测的聊天消息完成:

如果您想使用旧版本:

MessageData result = await openAI.chat(version: 'old', prompt: 'hello world!');
print(result.message);

如果您想使用新版本:

/// 这段代码展示了如何使用`openAI`包进行基于聊天的对话。
/// 它创建了一个消息列表,每个消息都有一个角色(系统或用户)和内容。
/// 然后调用`openAI.chat`方法,传入消息列表来启动聊天。
/// 聊天结果会被打印出来,然后使用`FormatMessage`类格式化回复。
/// 最后,格式化的回复也会被打印出来。

List<Message> message = [
  Message(role: 'system', content: 'you are my help ai'),
  Message(role: 'user', content: 'I need help with my computer'),
];

MessageData result = await openAI.chat(messages: message);
print(result.message);

// 如果你想打印其他信息:
print(result.model);

chat方法用于与OpenAI API交互以生成对话响应。它接受各种参数来自定义对话行为。

参数

  • version: 指定要使用的OpenAI API版本。默认为’new’。
  • messages: 聊天中之前的消息列表。每个消息应该是Message类的实例。
  • prompt: 开始对话的初始提示。
  • maxTokens: 生成响应的最大令牌数。默认为100。
  • temperature: 控制响应的随机性。较高的值导致更大的随机性。默认为0.3。
  • topP: 通过从最有可能的令牌中采样来控制响应的多样性。默认为1.0。
  • n: 指定要生成的响应数量。默认为1。
  • frequencyPenalty: 应用于响应中令牌频率的惩罚。默认为0。
  • logitBias: 指定令牌的日志偏差字典。
  • logprobs: 是否包括响应中的日志概率。
  • topLogprobs: 指定响应中要包括的日志概率数量。
  • presencePenalty: 应用于响应中令牌的存在性的惩罚。
  • responseFormat: 指定响应格式。可以是’json’或’text’。
  • seed: 用于生成随机响应的种子值。
  • stop: 指定生成令牌的停止条件。
  • stream: 是否流式传输正在生成的响应。
  • speed: 控制响应生成的速度。

使用示例

import 'package:openai_package/openai_package.dart';
import 'package:openai_package/src/openai/import/importAi.dart'; // 你必须添加

void main() {
  // 初始化OpenAI实例
  OpenAI.apiKey = 'your-api-key';

  // 定义之前的消息
  List<Message> messages = [
    Message(role: 'system', content: 'Hello, how can I assist you today?')
  ];

  OpenAI openAi = OpenAI();

  // 生成响应
  Future<MessageData> response = openAi.chat(
    messages: messages,
    // for old version prompt: 'I need help with a programming problem.',
    maxTokens: 150,
    temperature: 0.7,
    n: 1,
    stream: false,  
  );
  print(response.toString());
}

OpenAI嵌入 🚀

embeddings方法允许您使用OpenAI嵌入API生成文本嵌入。文本嵌入是捕捉文本语义意义的数值表示。

参数

  • input (必需): 您想要生成嵌入的输入文本。
  • encodingFormat: 输入文本的编码格式。默认为’float’。
  • dimensions: 输入文本的维度。
  • user: 与请求关联的用户ID。
  • maxTokens: 生成响应的最大令牌数。默认为100。
  • temperature: 控制响应的随机性。较高的值导致更丰富的嵌入。默认为0.3。
  • topP: 通过从最有可能的令牌中采样来控制响应的多样性。默认为1.0。
  • n: 指定要生成的嵌入数量。默认为1。

使用

import 'package:openai_package/openai_package.dart';
import 'package:openai_package/src/openai/import/importAi.dart'; // 你必须添加

void main() async {
  // 初始化OpenAI实例
    OpenAI.apiKey = 'your-api-key';
    OpenAI.model = 'your-model';

  // 生成嵌入
  OpenAIEmbeddings embeddings = await openAi.embeddings(
    input: 'Text input for generating embeddings',
    encodingFormat: 'float',
    dimensions: 512,
    user: 'user_id',
    maxTokens: 100,
    temperature: 0.3,
    topP: 1.0,
    n: 1,
  );
  print(embeddings);
}

响应

embeddings方法的响应是一个字符串,表示为输入文本生成的embeddings

{
  "embeddings": [
    0.123,
    0.456,
    ...
  ]
}

注意事项

确保在初始化OpenAI实例时提供您的API密钥。 如果没有提供或无效的apiKey,您将收到错误消息作为输出。 确保指定的模型受嵌入应用程序支持,否则将抛出错误。

OpenAI图像生成 🖼️

generateImage方法允许您使用OpenAI图像API生成图像。您可以基于提示生成图像,编辑现有图像,创建图像的变体。

参数

  • prompt (必需): 生成或编辑图像的提示。
  • n (必需): 要生成的图像数量。
  • size (必需): 要生成的图像大小。
  • edit: 指定是否执行图像编辑。默认为false
  • image: 编辑图像时的图像文件路径。
  • mask: 编辑图像时的遮罩文件路径。
  • variations: 指定是否生成图像变体。默认为false
  • response_format: 所需的响应格式。默认为"url"。
  • style: 生成图像的风格。默认为"vivid"。

使用

import 'package:openai_package/openai_package.dart';

void main() async {
  // 初始化OpenAI实例
    OpenAI.apiKey = 'your-api-key';
    OpenAI.model = 'your-model';

  // 生成图像
  OpenAIGenerateImage generatedImage = await openAi.generateImage(
    prompt: 'Generate an image of a cat playing with a ball.',
    n: 1,
    size: '256x256',
    edit: false,
    variations: false,
    response_format: 'url',
    style: 'vivid',
  );
  print(generatedImage);
  // 或
  print(generatedImage.url);
}

响应

generateImage方法的响应是一个字符串,表示生成的图像URL或图像数据,取决于指定的响应格式。

{
  "url": "https://generated_image_url.com/image.jpg"
}

注意事项

确保在初始化OpenAI实例时提供您的API密钥。 如果没有提供或无效的apiKey,您将收到错误消息作为输出。 editvariations参数控制要执行的图像生成操作类型。 imagemask参数在执行图像编辑时是必需的。

OpenAI音频转录 🎙️

transcriptions方法允许您使用OpenAI音频API转录音频文件。您可以转录音频文件的多种格式和语言。

参数

  • audioUrl (必需): 要转录的音频文件的URL。
  • response_format: 响应的格式。默认为"text"。
  • language: 音频文件的语言(如果有)。
  • prompt: 转录的可选提示。
  • temperature: 控制生成文本的随机性。默认为0.3。
  • topP: 选择下一个令牌的累积概率。默认为1.0。
  • n: 要生成的完成数量。默认为1。

使用

import 'package:openai_package/openai_package.dart';

void main() async {
  // 初始化OpenAI实例
    OpenAI.apiKey = 'your-api-key';
    OpenAI.model = 'your-model';

  // 转录音频
  String transcription = await openAi.transcriptions(
    audioUrl: 'https://example.com/audio.mp3',
    response_format: 'text',
    language: 'en',
    prompt: 'Transcribe the following audio clip:',
    temperature: 0.3,
    topP: 1.0,
    n: 1,
  );
  print(transcription);
}

响应

transcriptions方法的响应是一个字符串,表示转录的文本。

{
  "transcription": "The transcribed text will be here."
}

注意事项

确保在初始化OpenAI实例时提供您的API密钥。 如果没有提供或无效的apiKey,您将收到错误消息作为输出。 audioUrl参数应该直接指向音频文件的URL。 支持的音频文件格式包括MP3、MP4、MPEG、MPG、M4A、WAV和WebM。 language参数是可选的,可用于指定音频文件的语言。 prompt参数是可选的,可用于为转录提供更多上下文。

OpenAI 文本到语音(TTS) 🎤

speech方法允许您使用OpenAI文本到语音(TTS)API将文本转换为语音。您可以自定义各种参数,如语音、速度和输出格式。

参数

  • input (必需): 要转换为语音的文本。
  • voice: 用于语音的语音。默认为’alloy’。
  • response_format: 语音输出的格式。默认为’mp3’。
  • output: 保存语音的输出文件名。默认为’speech.mp3’。
  • speed: 语音生成速度。默认为1.0。

支持的模型和声音

TTS应用程序支持的模型和声音如下:

  • 模型: “tts-1”, “tts-1-hd”
  • 声音: “alloy”, “echo”, “fable”, “onyx”, “nova”, “shimmer”

使用

import 'package:openai_package/openai_package.dart';

void main() async {
  // 初始化OpenAI实例
    OpenAI.apiKey = 'your-api-key';
    OpenAI.model = 'your-model';

  // 将文本转换为语音
  String result = await openAi.speech(
    input: 'Hello, how are you?',
    voice: 'alloy',
    response_format: 'mp3',
    output: 'speech.mp3',
    speed: 1.0,
  );
  print(result); // 文件下载到speech.mp3
}

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

1 回复

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


当然,以下是一个关于如何在Flutter应用中使用openai_package插件来集成OpenAI API的代码案例。这个插件假设已经封装了对OpenAI API的调用,但请注意,实际开发中可能需要根据具体的插件实现进行调整。以下是一个简化的示例,展示了如何初始化插件并使用它来进行API请求。

首先,确保你已经在pubspec.yaml文件中添加了openai_package依赖(注意:这里openai_package是一个假设的包名,实际使用时请替换为真实的包名):

dependencies:
  flutter:
    sdk: flutter
  openai_package: ^x.y.z  # 替换为实际的版本号

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

接下来,在你的Flutter应用中,你可以按照以下步骤使用openai_package

  1. 导入包并初始化
import 'package:flutter/material.dart';
import 'package:openai_package/openai_package.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter OpenAI Integration'),
        ),
        body: OpenAIExample(),
      ),
    );
  }
}

class OpenAIExample extends StatefulWidget {
  @override
  _OpenAIExampleState createState() => _OpenAIExampleState();
}

class _OpenAIExampleState extends State<OpenAIExample> {
  final OpenAI _openAI = OpenAI(apiKey: 'YOUR_OPENAI_API_KEY');  // 替换为你的OpenAI API密钥
  String _response = '';

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text('OpenAI API Response:'),
          Text(_response),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: () async {
              setState(() {
                _response = 'Loading...';
              });
              String result = await _makeOpenAIRequest();
              setState(() {
                _response = result;
              });
            },
            child: Text('Fetch from OpenAI'),
          ),
        ],
      ),
    );
  }

  Future<String> _makeOpenAIRequest() async {
    try {
      // 假设插件提供了一个名为`completion`的方法来进行文本生成
      CompletionRequest request = CompletionRequest(
        prompt: 'Write a short story about a magical forest.',
        maxTokens: 150,
        temperature: 0.7,
      );
      CompletionResponse response = await _openAI.completion(request);
      return response.choices.first.text;  // 返回生成的文本
    } catch (e) {
      return 'Error: ${e.message}';
    }
  }
}
  1. 定义请求和响应类(这些类可能需要根据实际插件的API进行调整):
class CompletionRequest {
  String prompt;
  int maxTokens;
  double temperature;

  CompletionRequest({required this.prompt, required this.maxTokens, required this.temperature});
}

class Choice {
  String text;

  Choice({required this.text});
}

class CompletionResponse {
  List<Choice> choices;

  CompletionResponse({required this.choices});
}

class OpenAI {
  String apiKey;

  OpenAI({required this.apiKey});

  // 假设这是插件提供的用于文本生成的方法
  Future<CompletionResponse> completion(CompletionRequest request) async {
    // 这里应该是实际的网络请求代码,使用http或其他网络库
    // 由于这是一个示例,我们直接返回一个模拟的响应
    String mockResponseText = '''
    {
      "choices": [
        {
          "text": "Once upon a time, in a magical forest far, far away..."
        }
      ]
    }
    ''';
    // 解析模拟响应
    Map<String, dynamic> mockResponse = jsonDecode(mockResponseText);
    List<Map<String, String>> choicesList = mockResponse['choices'] as List<Map<String, String>>;
    List<Choice> choices = choicesList.map((choice) => Choice(text: choice['text']!)).toList();
    return CompletionResponse(choices: choices);
  }
}

注意:上面的OpenAI类中的completion方法是一个模拟实现,用于展示如何处理响应。在实际应用中,你需要使用HTTP客户端(如http包)来发送请求到OpenAI的API端点,并处理实际的JSON响应。

由于openai_package是一个假设的包名,你可能需要查找一个实际的Flutter插件来与OpenAI API交互,并根据该插件的文档进行相应的调整。上述代码提供了一个基本的框架,展示了如何在Flutter应用中集成和使用这样的插件。

回到顶部