如何在 Delphi 中使用ChatGPT流式传输?

lmyy7pcs  于 2023-04-11  发布在  其他
关注(0)|答案(1)|浏览(272)

我正在使用ChatGPT和 Delphi ,使用OpenAI库:https://github.com/HemulGM/DelphiOpenAI,支持流媒体,但我搞不清楚流媒体的ChatGPT机制,我可以创建一个Chat,一条返回消息就能把所有数据都拿回来。
然而,当我尝试使用流式传输时,我得到一个错误。下面的控制台代码工作正常。我提交我的聊天,我在一个“事件”中得到整个答案。我希望与ChatGPT网站的行为相同,因此令牌将在生成时显示。我的代码如下...

var buf : TStringlist;
begin
...
 var Chat := OpenAI.Chat.Create(
           procedure(Params: TChatParams)
       begin
          Params.Messages([TChatMessageBuild.Create(TMessageRole.User, Buf.Text)]);
          Params.MaxTokens(1024);
         // Params.Stream(True);
        end);
       try
            for var Choice in Chat.Choices do
              begin

                Buf.Add(Choice.Message.Content);
                Writeln(Choice.Message.Content);
              end;
        finally
         Chat.Free;
      end;

这段代码工作。当我尝试打开流时,我得到EConversionError 'The input value is not a valid Object',这导致ChatGPT返回'Empty or Invalid Response'。

egdjgwm8

egdjgwm81#

因为在这种模式下,它在这种情况下不是用JSON对象响应,而是用自己的特殊格式响应。

data: {"id": "cmpl-6wsVxtkU0TZrRAm4xPf5iTxyw9CTf", "object": "text_completion", "created": 1679490597, "choices": [{"text": "\r", "index": 0, "logprobs": null, "finish_reason": null}], "model": "text-davinci-003"}

data: {"id": "cmpl-6wsVxtkU0TZrRAm4xPf5iTxyw9CTf", "object": "text_completion", "created": 1679490597, "choices": [{"text": "\n", "index": 0, "logprobs": null, "finish_reason": null}], "model": "text-davinci-003"}

data: {"id": "cmpl-6wsVxtkU0TZrRAm4xPf5iTxyw9CTf", "object": "text_completion", "created": 1679490597, "choices": [{"text": "1", "index": 0, "logprobs": null, "finish_reason": null}], "model": "text-davinci-003"}

data: {"id": "cmpl-6wsVxtkU0TZrRAm4xPf5iTxyw9CTf", "object": "text_completion", "created": 1679490597, "choices": [{"text": ",", "index": 0, "logprobs": null, "finish_reason": null}], "model": "text-davinci-003"}

data: {"id": "cmpl-6wsVxtkU0TZrRAm4xPf5iTxyw9CTf", "object": "text_completion", "created": 1679490597, "choices": [{"text": " 2", "index": 0, "logprobs": null, "finish_reason": null}], "model": "text-davinci-003"}
...

我可以开始为图书馆设计这样的模式。

相关问题