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

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

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

Sitesurface Logo

Sitesurface Flutter OpenAI

适用于Flutter的OpenAI API客户端
此Flutter包允许您轻松地将OpenAI的API服务集成到您的Flutter应用程序中。通过此包,您可以向OpenAI的语言模型发起请求,检索完成和摘要等。


如果您觉得此包有用,请点赞👍并与其他开发人员分享。


Pub


Chat Image


需求 #

Dart >=2.18.6Flutter >=1.17.0

开始使用 #

使用Sitesurface Flutter OpenAI包,您可以通过OpenAIClient对象与OpenAI API进行交互。

为了使用API,您需要一个API密钥。您可以在这里获取一个,一旦获取到它,您就可以在OpenAIConfig构造函数中传递该密钥。

final _openAiClient = OpenAIClient(OpenAIConfig(
      apiKey: "---your API key here---",
      organizationId: "---your Organization Id here---"));
  • 完成。给定一个提示,模型会返回一个或多个预测的完成,并且还可以返回每个位置的替代标记的概率。您可以在此处了解更多信息这里。 您可以访问以下方式的完成方法:
_openAiClient.completions.createCompletion(request);

聊天机器人 #

您可以使用ChatGPTBuilder来构建您的聊天机器人。这里的messages包含用户和ChatGPT的消息。您可以使用onSend发送文本消息。

return ChatGPTBuilder(
        completionRequest: _completionRequest,
        openAIClient: _openAiClient,
        builder: (context, messages, onSend) {
          return MyMessageWidget();
        },
       );

您也可以传递一个CreateCompletionRequest来自定义请求。

final _completionRequest =
    CreateCompletionRequest(model: "text-davinci-003", maxTokens: 2048);

return ChatGPTBuilder(
        completionRequest: _completionRequest,
        openAIClient: _openAiClient,
        builder: (context, messages, onSend) {
          return MyMessageWidget();
        },
      );

问题和反馈 #

请在我们的问题跟踪器中提交Sitesurface Flutter OpenAI特定的问题、错误或功能请求。

不是特定于Sitesurface Flutter Chat的插件问题可以提交到Flutter问题跟踪器

贡献 #

欢迎您为本项目做出贡献。

如果您发现了一个错误或希望实现一个功能,但不知道如何修复/实现,请在此处提交一个问题。 如果您修复了一个错误或实现了某个功能,请发送一个拉取请求


示例代码

import 'package:chat_bubbles/chat_bubbles.dart';
import 'package:flutter/material.dart';
import 'package:sitesurface_flutter_openai/sitesurface_flutter_openai.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // 此小部件是您的应用的根节点。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      themeMode: ThemeMode.dark,
      darkTheme: ThemeData.dark(),
      home: const MyHomePage(),
      debugShowCheckedModeBanner: false,
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});
  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final _openAiClient = OpenAIClient(OpenAIConfig(
      apiKey: "---your-api-key-here---",
      organizationId: "---your-organization-id-here---"));

  final _textEditingController = TextEditingController();
  final _scrollController = ScrollController();
  final _completionRequest =
      CreateCompletionRequest(model: "text-davinci-003", maxTokens: 2048);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("ChatGPT")),
      body: ChatGPTBuilder(
        completionRequest: _completionRequest,
        openAIClient: _openAiClient,
        builder: (context, messages, onSend) {
          return Column(
            children: [
              const SizedBox(
                height: 10,
              ),
              Expanded(
                child: ListView.separated(
                    itemCount: messages.length,
                    controller: _scrollController,
                    separatorBuilder: (context, index) => const SizedBox(
                          height: 5,
                        ),
                    itemBuilder: (context, index) {
                      var isSender = !messages[index].fromChatGPT;
                      return BubbleSpecialThree(
                        isSender: isSender,
                        text: messages[index].message,
                        color:
                            isSender ? const Color(0xFF1B97F3) : Colors.white,
                        tail: true,
                        textStyle: TextStyle(
                            color: isSender ? Colors.white : Colors.grey[800],
                            fontSize: 16),
                      );
                    }),
              ),
              Row(
                children: [
                  Expanded(
                    child: Padding(
                      padding: const EdgeInsets.all(10.0),
                      child: TextField(
                        controller: _textEditingController,
                        decoration: InputDecoration(
                            hintText: "Message",
                            border: OutlineInputBorder(
                                borderRadius: BorderRadius.circular(20))),
                      ),
                    ),
                  ),
                  FloatingActionButton(
                      onPressed: () {
                        if (_textEditingController.text.trim().isEmpty) return;
                        onSend(_textEditingController.text).whenComplete(() {
                          _scrollController.jumpTo(
                              _scrollController.position.maxScrollExtent);
                        });
                        FocusScope.of(context).unfocus();
                        _textEditingController.clear();
                      },
                      child: const Icon(Icons.send)),
                  const SizedBox(
                    width: 10,
                  ),
                ],
              ),
            ],
          );
        },
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中集成并使用sitesurface_flutter_openai插件来调用OpenAI API的示例代码。这个插件允许你通过Flutter应用与OpenAI的API进行交互。

1. 添加依赖

首先,你需要在你的pubspec.yaml文件中添加sitesurface_flutter_openai依赖:

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

2. 安装依赖

在命令行中运行以下命令来安装依赖:

flutter pub get

3. 配置OpenAI API密钥

确保你已经从OpenAI官网获取了API密钥,并将其配置在你的Flutter应用中。你可以使用环境变量或者将密钥硬编码在配置文件中(注意:硬编码不是最佳实践,建议使用环境变量或安全的密钥管理服务)。

4. 编写代码

下面是一个简单的Flutter应用示例,展示了如何使用sitesurface_flutter_openai插件来调用OpenAI的API。

import 'package:flutter/material.dart';
import 'package:sitesurface_flutter_openai/sitesurface_flutter_openai.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: Center(
          child: OpenAIExample(),
        ),
      ),
    );
  }
}

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

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

  void _callOpenAI() async {
    try {
      var response = await _openAI.createCompletion(
        model: 'text-davinci-003',  // 你可以根据需要选择其他模型
        prompt: '请写一段关于Flutter的介绍。',
        maxTokens: 150,
        temperature: 0.7,
      );
      
      setState(() {
        _response = response.choices!.first.text;
      });
    } catch (e) {
      setState(() {
        _response = 'Error: ${e.message}';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('OpenAI API响应:'),
        Text(_response, style: TextStyle(fontSize: 18)),
        SizedBox(height: 20),
        ElevatedButton(
          onPressed: _callOpenAI,
          child: Text('调用OpenAI'),
        ),
      ],
    );
  }
}

注意事项

  1. API密钥管理:在生产环境中,请不要将API密钥硬编码在代码中。使用环境变量或密钥管理服务来管理你的密钥。
  2. 错误处理:示例代码中的错误处理相对简单。在实际应用中,你可能需要更复杂的错误处理逻辑。
  3. 模型选择:根据你的需求选择合适的OpenAI模型。text-davinci-003是一个功能强大的模型,但可能会产生较高的费用。
  4. API配额:OpenAI对每个API密钥都有一定的请求配额。确保你的应用不会超出配额限制。

这个示例代码应该能帮助你开始在Flutter应用中集成和使用OpenAI API。如果你有任何其他问题或需要进一步的帮助,请随时告诉我!

回到顶部