在 Delphi 中使用 ChatGPT

· 组件

ChatGPT 是 OpenAI 开发的大型语言模型。它使用一种称为无监督学习的技术进行训练,这意味着它被输入大量文本数据集,并学习根据前面的词语预测序列中的下一个词语。这使 ChatGPT 能够生成类人文本,可用于多种目的,如在聊天机器人中生成对用户输入的响应,或为网站和社交媒体生成内容。

ChatGPT 的主要功能之一是理解上下文并根据对话生成适当响应的能力。例如,如果您向 ChatGPT 提问,它将生成与问题相关且符合对话自然流程的响应。这得益于该模型能够"记住"对话中的先前陈述并使用该信息来指导其响应。

ChatGPT 的另一个重要功能是生成多样化响应的能力。由于它在大量文本数据集上进行了训练,它拥有广泛的知识,可以生成适合不同情境和主题的响应。这使它成为在聊天机器人中生成用户响应的有用工具,因为无论对话主题如何,它都可以提供相关且引人入胜的响应。

总体而言,ChatGPT 是一个强大的语言模型,可以生成类人文本并理解上下文和对话流程。它有广泛的应用,包括聊天机器人、内容生成和语言翻译,有可能彻底改变我们与技术交互的方式。

ChatGPT 目前没有独立 API,但您可以使用 OpenAI beta API 与 GPT-3 文本转换器交互,您只需要一个 API 密钥,可以从以下地址获取:

https://beta.openai.com/account/api-keys

开始与 API 交互。

GPT-3 Delphi 代码

获取 API 密钥后,与 API 交互非常简单。以下是使用 sgcWebSockets 库交互的示例代码。 

function AskChatGPT(const aAPI, aQuestion: string): string;
var
  oHTTP: TsgcHTTP1Client;
  oStream: TStringStream;
  vPostData: string;
  oJSON: TJSONValue;
  oArray: TJSonArray;
begin
  oHTTP := TsgcHTTP1Client.Create(nil);
  Try
    oHTTP.Request.CustomHeaders.Add('Authorization: Bearer ' + aAPI);
    oHTTP.Request.ContentType := 'application/json';
    vPostData :=
      Format('{"model": "text-davinci-003","prompt": "%s","max_tokens": 2048,"temperature": 0}',
      [aQuestion]);
    // send request
    oStream := TStringStream.Create(vPostData);
    Try
      result := oHTTP.Post('https://api.openai.com/v1/completions', oStream);
      // parse response
      oJSON := TJSonObject.ParseJSONValue(result).GetValue<TJSONValue>
        ('choices');
      result := TJSonArray(oJSON).Items[0].GetValue<TJSONString>('text').Value;
    Finally
      oStream.Free;
    End;
  Finally
    oHTTP.Free;
  End;
end; 

该函数有 2 个参数:

API:是从 https://beta.openai.com/account/api-keys 获取的 API 密钥。

Question(问题):是包含问题的消息。

API 密钥作为 Bearer Token 发送,消息使用 JSON 对象编码。服务器以 JSON 对象形式返回响应,其中可以找到文本消息。


Find below the full project and the compiled executable for Windows.