Flutter OpenAI客户端插件openai_client的使用

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

Flutter OpenAI客户端插件openai_client的使用

ℹ️ Info

openai_client是一个非官方的、完全用Dart编写的客户端,允许你在Dart或Flutter项目中轻松使用OpenAI API。以下是API实现状态:

APIs Dart class Implementation status
Models OpenAIModels
Completions OpenAICompletions
Chat OpenAIChat
Edits OpenAIEdits
Images OpenAIImages
Embeddings OpenAIEmbeddings
Files Not present
Fine-tunes Not present
Moderations OpenAIModerations

🧰 Installation

你可以通过在pubspec.yaml文件中添加依赖来安装这个包:

dependencies:
  openai_client: last_version

安装后只需在项目中导入该包即可:

import 'package:openai_client/openai_client.dart';

🚀 Getting Started

要使用API,你需要有一个API密钥。你可以在这里获取一个,并在创建客户端时通过OpenAIConfiguration构造函数传递它。

// 创建配置
final conf = OpenAIConfiguration(
    apiKey: 'Your API key',
    organizationId: 'Your organization ID', // 可选
);

// 创建新客户端
final client = OpenAIClient(configuration: conf);

🐛 Debugging

为了测试和调试目的,你可以使用内置的Logger来更轻松地检查请求和响应的状态。默认情况下,Logger是禁用的。你可以通过将enableLogging属性设置为true来启用它。

// 启用了日志记录功能的客户端实例
final client = OpenAIClient(
    ...
    enableLogging: true,
);

🎯 Examples

下面是一个简单的命令行应用程序示例,允许你测试客户端。你可以在example文件夹中找到它。

import 'dart:convert';
import 'dart:developer';
import 'dart:io';

import 'package:openai_client/openai_client.dart';
import 'package:openai_client/src/model/openai_chat/chat_message.dart';

Future<void> main() async {
  // 加载来自环境变量或文件的应用凭证。
  final configuration = await loadConfigurationFromEnvFile();

  // 创建一个新客户端。
  final client = OpenAIClient(
    configuration: configuration,
    enableLogging: true,
  );

  // 获取模型列表。
  final models = await client.models.list().data;
  // 打印模型列表。
  log(models.toString());

  // 根据ID获取模型。
  final modelId = await client.models.byId(id: 'text-davinci-002').data;
  // 打印模型。
  log(modelId.toString());

  // 创建补全。
  final completion = await client.completions
      .create(
        model: 'text-davinci-002',
        prompt: 'Batman was sleeping in his room when suddenly',
      )
      .data;
  // 打印补全结果。
  log(completion.toString());

  // 创建聊天。
  final chat = await client.chat.create(
    model: 'gpt-3.5-turbo',
    messages: const [
      ChatMessage(
        role: 'user',
        content: 'How do you think is Batman dealing with Robin recently?',
      )
    ],
  ).data;
  // 打印聊天内容。
  log(chat.toString());

  // 创建编辑。
  final edit = await client.edits
      .create(
        model: 'text-davinci-edit-001',
        instruction: 'Fix the spelling mistakes',
        input: 'Batmaen and Robin were playing ches in the Batcave',
      )
      .data;
  // 打印编辑结果。
  log(edit.toString());

  // 创建图片。
  final image = await client.images
      .create(
        prompt: 'Batman is walking down the street with his friends',
        n: 2,
      )
      .data;
  // 打印图片信息。
  log(image.toString());

  // 创建嵌入。
  final embedding = await client.embeddings.create(
    model: 'text-similarity-babbage-001',
    input: ['Batman was talking to Alfred'],
  ).data;
  // 打印嵌入信息。
  log(embedding.toString());

  final moderation =
      await client.moderations.create(input: 'Batman is a bad boy').data;
  // 打印审核信息。
  log(moderation.toString());

  // 关闭客户端并终止HTTP连接。
  client.close();
}

/// 从环境变量(`API_KEY`,`ORG_ID`)加载[OpenAIConfiguration]
///
/// 如果变量不存在,则返回`null`。
Future<OpenAIConfiguration> loadConfigurationFromEnvFile() async {
  final file = File('.env.json');
  final content = await file.readAsString();
  final json = jsonDecode(content) as Map<String, dynamic>;

  return OpenAIConfiguration(
    apiKey: json['API_KEY'] as String,
    organizationId: json['ORG_ID'] as String,
  );
}

📚 Documentation

项目的完整文档可在这里查看:链接。所有方法都有详细的文档说明,你可以轻松检查可以传递给它们的参数。

🤝 Contributing

如果你想为openai_client做出贡献,请务必查阅贡献指南

本项目使用GitHub issues仅用于跟踪请求和错误,请勿将其用于一般问题和讨论。

🪪 License

本项目根据BSD-3-Clause授权许可。此外,它与OpenAI没有任何关联。


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用openai_client插件的示例代码。这个插件允许你与OpenAI的API进行交互,比如使用GPT或其他模型生成文本。

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

dependencies:
  flutter:
    sdk: flutter
  openai_client: ^x.y.z  # 替换为最新版本号

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

接下来,我们创建一个简单的Flutter应用,用于向OpenAI的API发送请求并显示响应。

1. 配置OpenAI API密钥

在你的Flutter项目中,你需要在某处存储你的OpenAI API密钥。为了安全起见,最好不要在代码中硬编码密钥。你可以使用环境变量或Flutter的.env文件(需要额外安装一个包如flutter_dotenv来处理)。

这里我们假设你已经设置了环境变量OPENAI_API_KEY

2. 创建Flutter组件

创建一个新的Flutter组件,例如ChatScreen,用于发送请求并显示结果。

import 'package:flutter/material.dart';
import 'package:openai_client/openai_client.dart';
import 'package:dotenv/dotenv.dart' show dotenv;

class ChatScreen extends StatefulWidget {
  @override
  _ChatScreenState createState() => _ChatScreenState();
}

class _ChatScreenState extends State<ChatScreen> {
  final _controller = TextEditingController();
  String _response = '';

  @override
  void initState() {
    super.initState();
    // 加载环境变量
    dotenv.load();
  }

  void _sendMessage() async {
    String apiKey = dotenv.env['OPENAI_API_KEY']!;
    OpenAIClient client = OpenAIClient(apiKey: apiKey);

    CompletionRequest request = CompletionRequest(
      model: 'text-davinci-003',  // 你可以根据需要更改模型
      prompt: _controller.text,
      maxTokens: 150,
      temperature: 0.7,
    );

    try {
      CompletionResponse response = await client.createCompletion(request);
      setState(() {
        _response = response.choices!.first.text!;
      });
    } catch (e) {
      setState(() {
        _response = 'Error: ${e.message}';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter OpenAI Client'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextField(
              controller: _controller,
              maxLines: 10,
              decoration: InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'Enter your prompt',
              ),
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: _sendMessage,
              child: Text('Send Message'),
            ),
            SizedBox(height: 16),
            Text(
              _response,
              style: TextStyle(fontSize: 16),
            ),
          ],
        ),
      ),
    );
  }
}

3. 在主应用中使用该组件

最后,在你的主应用文件(例如main.dart)中,使用这个新的ChatScreen组件。

import 'package:flutter/material.dart';
import 'chat_screen.dart';  // 确保路径正确

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter OpenAI Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ChatScreen(),
    );
  }
}

4. 运行应用

确保你的环境变量已经正确设置(例如,在.env文件中),然后运行你的Flutter应用。你应该能够看到一个简单的界面,允许你输入文本并通过OpenAI的API生成响应。

注意事项

  • 确保你的API密钥安全,不要将其硬编码在代码中。
  • 根据你的需求调整请求参数,如模型、最大令牌数等。
  • 捕获并处理可能的错误,如网络问题或API限制。

这个示例代码提供了一个基本的框架,你可以根据需要进一步扩展和自定义。

回到顶部