Flutter OpenAI接口集成插件dart_openai的使用

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

Flutter OpenAI接口集成插件dart_openai的使用

简介

dart_openai 是一个开源的客户端包,它允许开发者轻松地将OpenAI强大的AI模型集成到他们的Dart/Flutter应用程序中。这个库提供了简单直观的方法来请求OpenAI的各种API,包括GPT-3语言模型、DALL-E图像生成等。该包设计轻量且易于使用,使您可以专注于构建应用程序,而不是处理HTTP请求的复杂性和错误。

安装和配置

添加依赖

pubspec.yaml 文件中添加 dart_openai 作为依赖:

dependencies:
  dart_openai: ^latest_version # 替换为最新版本号

加载API密钥

我们建议从 .env 文件中加载您的API密钥以确保安全性。可以使用 envied 包来实现这一点:

// .env
OPEN_AI_API_KEY=<REPLACE WITH YOUR API KEY>

// lib/env/env.dart
import 'package:envied/envied.dart';
part 'env.g.dart';

@Envied(path: ".env")
abstract class Env {
  @EnviedField(varName: 'OPEN_AI_API_KEY') // the .env variable.
  static const apiKey = _Env.apiKey;
}

// lib/main.dart
void main() {
  OpenAI.apiKey = Env.apiKey; // 初始化包并设置API密钥
}

使用示例

创建文本补全

以下是如何创建基于给定提示的文本补全:

Future<void> main() async {
  // 设置OpenAI API密钥
  OpenAI.apiKey = Env.apiKey;

  // 创建文本补全
  final completion = await OpenAI.instance.completion.create(
    model: "text-davinci-003",
    prompt: "Dart is",
  );

  // 打印输出结果
  print(completion.choices.first.text);
}

生成图片

根据提供的提示生成图片:

final image = await OpenAI.instance.image.create(
  prompt: "an astronaut on the sea",
  n: 1,
  size: OpenAIImageSize.size1024,
  responseFormat: OpenAIImageResponseFormat.url,
);

for (var item in image.data) {
  print(item.url);
}

内容审核

检查输入内容是否违反OpenAI的内容政策:

final moderation = await OpenAI.instance.moderation.create(
  input: "I will cut your head off",
);

print(moderation.results.first.categories.violence);

进阶功能

聊天(ChatGPT)

创建聊天对话完成:

final userMessage = OpenAIChatCompletionChoiceMessageModel(
  content: [
    OpenAIChatCompletionChoiceMessageContentItemModel.text(
      "Hello my friend!",
    ),
  ],
  role: OpenAIChatMessageRole.user,
);

final chatStream = OpenAI.instance.chat.createStream(
  model: "gpt-3.5-turbo",
  messages: [userMessage],
  seed: 423,
  n: 2,
);

chatStream.listen((event) {
  final content = event.choices.first.delta.content;
  print(content);
}, onDone: () {
  print("Done");
});

细调(Fine-Tuning)

创建一个新的细调任务:

final fineTune = await OpenAI.instance.fineTune.create(
  trainingFile: "FILE_ID",
);

print(fineTune.status);

错误处理

任何来自OpenAI API端的错误都会抛出 RequestFailedException 异常,可以在代码中捕获并处理这些异常:

try {
  final errorVariation = await OpenAI.instance.image.variation(
    image: File(/*PATH OF NON-IMAGE FILE*/),
  );
} on RequestFailedException catch(e) {
  print(e.message);
  print(e.statusCode);
}

结语

dart_openai 提供了丰富的功能和良好的文档支持,能够帮助您快速上手并充分利用OpenAI的强大能力。如果您有任何问题或需要进一步的帮助,请参考官方文档或参与社区讨论。


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

1 回复

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


当然,以下是如何在Flutter项目中使用dart_openai插件来集成OpenAI接口的示例代码。这个插件可以让你在Flutter应用中方便地调用OpenAI的API,比如GPT或其他模型。

首先,确保你的Flutter项目已经创建,并且你已经在pubspec.yaml文件中添加了dart_openai依赖:

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

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

接下来,你需要配置OpenAI的API密钥。通常,你会在你的环境变量或配置文件中存储这个密钥。为了演示目的,这里直接在代码中硬编码(不推荐在生产环境中这样做):

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: OpenAIExample(),
    );
  }
}

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

class _OpenAIExampleState extends State<OpenAIExample> {
  final OpenAI openAI = OpenAI(apiKey: '你的OpenAI API密钥');  // 请替换为你的实际API密钥
  String responseText = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter OpenAI接口集成'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () async {
                try {
                  var completion = await openAI.createCompletion(
                    prompt: '写一个关于Flutter的简单介绍。',
                    model: 'text-davinci-003',  // 你可以根据需要选择不同的模型
                    maxTokens: 150,
                    temperature: 0.7,
                  );
                  setState(() {
                    responseText = completion.choices.first.text;
                  });
                } catch (e) {
                  setState(() {
                    responseText = 'Error: ${e.message}';
                  });
                }
              },
              child: Text('生成文本'),
            ),
            SizedBox(height: 20),
            Text(
              responseText,
              style: TextStyle(fontSize: 18),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 引入了dart_openai包。
  2. 创建了一个OpenAI实例,并传入了你的API密钥。
  3. 使用OpenAI实例的createCompletion方法来生成文本。我们指定了prompt(提示词),model(使用的模型),maxTokens(生成的最大令牌数),以及temperature(控制生成文本的随机性)。
  4. 使用ElevatedButton来触发文本生成,并将结果显示在界面上。

请注意,这个示例中的API密钥是直接硬编码的,这在实际应用中是不安全的。你应该使用环境变量或安全的密钥管理服务来管理你的API密钥。

此外,dart_openai包可能会根据OpenAI的API变化而更新,所以请确保查阅最新的文档和示例代码。

回到顶部