GPTAPI改为流式之后消息的加载

来源:1-1 课程导学

L_sS

2024-10-18

我将接受消息改为流式的,我想做到的效果为和ChatGPT一样一条消息中一块一块的加载,现在是有一个接受到消息块的回调方法,一个结束的回调方法,我需要在addMessage方法怎么改变呢,麻烦老师说一下有什么思路好一点

  void _onSendStream(final String inputMessage) async {
    chatController.addMessage(
        _getMessageModel(ownerType: OwnerType.sender, message: inputMessage));
    setState(() {
      _sendBtnEnable = false;
    });
    String response = "";
    try {
      await completionDao.createStreamCompletions(
          prompt: _inputMessage,
          onStreamData: (String content) {
            content.replaceFirst("\n\n", "");
            response = response + content;
            debugPrint(response);
            chatController.addMessage(_getMessageModel(
                ownerType: OwnerType.receiver, message: content));
            setState(() {
              _sendBtnEnable = true;
            });
          },
          onStreamDone: () {});
    } catch (e) {
      response = e.toString();
      debugPrint(e.toString());
    }
  }

效果如图:
图片描述

写回答

1回答

L_sS

提问者

2024-10-18

已经解决了:


```

  @override

  void updateMessage(MessageModel message) {

    if (messageStreamController.isClosed) return;

    inflateMessage(message);

    initialMessageList[0] = message;

    messageStreamController.sink.add(initialMessageList);

    scrollConLastMessage();

  }

```

增加了一块修改消息,因为发出消息后没结束状态被锁定所以直接拿第一条最新的消息就行了


```

 chatController.addMessage(

        _getMessageModel(ownerType: OwnerType.sender, message: inputMessage));

    setState(() {

      _sendBtnEnable = false;

    });

    String response = "";

    try {

      await completionDao.createStreamCompletions(

          prompt: _inputMessage,

          onStreamData: (String content) {

            content.replaceFirst("\n\n", "");

            if (response == "") {

              response = response + content;

              chatController.addMessage(_getMessageModel(

                  ownerType: OwnerType.receiver, message: content));

            } else {

              response = response + content;

              chatController.updateMessage(_getMessageModel(

                  ownerType: OwnerType.receiver, message: response));

            }

            AILogger.log(response);

          },

          onStreamDone: () {

            setState(() {

              _sendBtnEnable = true;

            });

            AILogger.log('结束切换状态');

          });

    } catch (e) {

      response = e.toString();

      debugPrint(e.toString());

    }

```

然后每次修改替换最新消息的内容,在结束后切换状态


0
1
CrazyCodeBoy
嗯,很赞。
2024-10-20
共1条回复

ChatGPT + Flutter快速开发多端聊天机器人App

ChatGPT + Flutter快速开发多端聊天机器人App

343 学习 · 90 问题

查看课程