Flutter AI 语音助手(通过 ChatGPT)

本项目是一个通过 ChatGPT(来自 OpenAI)实现的 Flutter AI 语音助手。

本项目需要有效的 ChatGPT session token 才能访问其非官方 REST API,以及 speech_to_textflutter_tts

*有时响应缓慢,主要是由于过度使用 ChatGPT

演示

用法

import 'package:flutter_chatgpt_api/flutter_chatgpt_api.dart';
import 'package:flutter_tts/flutter_tts.dart';
import 'package:speech_to_text/speech_recognition_result.dart';
import 'package:speech_to_text/speech_to_text.dart';

 @override
  void initState() {
    super.initState();
    _api = ChatGPTApi(sessionToken: SESSION_TOKEN);
    isLoading = false;
    _initSpeech();
  }
 
  void _initSpeech() async {
    speechEnabled = await _speechToText.initialize();
    _speechToText.systemLocale().then(
          (value) => tts.setLanguage(value!.localeId),
        );
    tts.setSpeechRate(0.6);
    setState(() {});
  }

  void _startListening() async {
    await _speechToText.listen(onResult: _onSpeechResult);
    setState(() {});
  }

  void _onSpeechResult(SpeechRecognitionResult result) {
    setState(
      () {
        if (result.finalResult) {
          _buildSubmit(result.recognizedWords);
        }
      },
    );
  }
_buildSubmit(String prompt) async {
    setState(
      () {
        _messages.add(
          ChatMessage(
            text: prompt,
            chatMessageType: ChatMessageType.user,
          ),
        );
        isLoading = true;
      },
    );
    var input = prompt;
    Future.delayed(const Duration(milliseconds: 50)).then((_) => _scrollDown());
    var newMessage = await _api.sendMessage(
      input,
      conversationId: _conversationId,
      parentMessageId: _parentMessageId,
    );
    setState(() {
      _conversationId = newMessage.conversationId;
      _parentMessageId = newMessage.messageId;
      isLoading = false;
      _messages.add(
        ChatMessage(
          text: newMessage.message,
          chatMessageType: ChatMessageType.bot,
        ),
      );
      tts.speak(newMessage.message);
    });
    Future.delayed(const Duration(milliseconds: 50)).then((_) => _scrollDown());
  }

SessionToken

获取 session token

  1. 前往 https://chat.openai.com/chat 登录或注册。
  2. 打开开发者工具。
  3. 打开 Application > Cookies (在 FireFox 上是 Storage > Cookies)。

image

  1. 创建这些文件,并将您的 session token 添加到文件中,以便分别运行测试和示例。
  • lib/session_token.dart

应该看起来像这样

const SESSION_TOKEN = 'my session token from https://chat.openai.com/chat';

鸣谢

许可证

MIT 版权所有 (c) 2022,Emre Coşkunçay

如果您觉得这个项目很有趣,请考虑通过 赞助我在 Twitter 上关注我 twitter 来支持我的开源工作。

GitHub

查看 Github