Flutter 中使用 OpenAI GPT-3 進行語義化處理

會煮咖啡的貓發表於2022-12-14

Flutter 中使用 OpenAI GPT-3 進行語義化處理

前言

最近 openai 的 ChatGPT 火了,然後我也想著用它來做點什麼,於是就寫了個 呼叫 openai api 語言執行工具,跑個測試,以後再有功能也可以在這個程式上面試驗。

copilot 也是用的 openai codex

https://github.com/features/c...

我估計會在語義識別、關鍵字處理、AI 會話方面看看能用到生產麼。

OpenAI

https://zh.m.wikipedia.org/zh...

正文

1. 切換你的代理 IP

建議切換 韓國、日本、新加坡 畢竟節點近點。

2. 註冊 openai 賬號

https://beta.openai.com/overview

  • 如果提示你當前國家不能註冊,你把 cookie , 本地儲存都刪掉,然後切換 IP,再試試。

3. 租用手機號驗證碼

https://onlinesim.ru/v2/en/nu...

4. 準備 api key

5. 編寫 Flutter 程式碼

  • 新增 dio 包
> flutter pub add dio
  • 常量 lib/utils/constants.dart
const openaiBaseUrl = "https://api.openai.com/v1";
const openaiApiKey = "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";
key 換成你自己的
  • http 請求 lib/utils/wp_http.dart
import 'package:dio/dio.dart';

import 'constants.dart';

class DioHttpUtil {
  static final DioHttpUtil _instance = DioHttpUtil._internal();
  factory DioHttpUtil() => _instance;
  DioHttpUtil._internal();

  late Dio _dio;

  /// 初始化dio
  Dio init() {
    _dio = Dio();
    _dio.options = BaseOptions(
      baseUrl: openaiBaseUrl,
      connectTimeout: 10000, // 10秒
      receiveTimeout: 5000, // 5秒
      headers: {
        "Authorization": 'Bearer $openaiApiKey',
      },
      contentType: 'application/json; charset=utf-8',
      responseType: ResponseType.json,
    );
    return _dio;
  }

  /// post請求
  Future<Response> post(String url,
      {required Map<String, dynamic> data}) async {
    Response response = await _dio.post(url, data: data);
    return response;
  }
}
  • 初始 main.dart
void main() {
  DioHttpUtil().init();
  runApp(const MyApp());
}
  • 主介面 lib/pages/index.dart
import 'package:flutter/material.dart';

import '../utils/wp_http.dart';

class GenIndexPage extends StatefulWidget {
  const GenIndexPage({super.key});

  @override
  State<GenIndexPage> createState() => _GenIndexPageState();
}

class _GenIndexPageState extends State<GenIndexPage> {
  String choices = "";
  TextEditingController promptController =
      TextEditingController(text: "用 dart 語言寫個 dio 的單例程式");
  TextEditingController choicesController = TextEditingController();

  // 語義處理
  Widget buildTextGen() {
    return Column(
      children: [
        // 文字輸入框
        LimitedBox(
          maxHeight: 200,
          child: TextField(
            controller: promptController,
            maxLines: null,
            decoration: const InputDecoration(
              hintText: '請輸入文字',
            ),
          ),
        ),

        // 按鈕
        ElevatedButton(
          onPressed: () async {
            var res = await DioHttpUtil().post("/completions", data: {
              "model": "text-davinci-003",
              "prompt": promptController.text,
              "temperature": 1,
              "max_tokens": 1024,
            });
            if (res.data["choices"] != null) {
              choicesController.text = res.data["choices"][0]["text"];
            }
          },
          child: const Text("語義處理"),
        ),

        // 顯示 json 資料
        Expanded(
          child: TextField(
            controller: choicesController,
            maxLines: null,
            decoration: const InputDecoration(
              hintText: '顯示資料',
            ),
          ),
        ),
      ],
    );
  }

  Widget buildView() {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Center(
        child: buildTextGen(),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("OpenAI 生成工具"),
      ),
      body: buildView(),
    );
  }
}
  • 執行

我們用 web 方式就行了。

程式碼

https://github.com/ducafecat/...

結束語

如果本文對你有幫助,請轉發讓更多的朋友閱讀。

也許這個操作只要你 3 秒鐘,對我來說是一個激勵,感謝。

祝你有一個美好的一天~


© 貓哥

本文由mdnice多平臺釋出

相關文章