C++builder中的人工智能(27):如何将 GPT-3 API 集成到 C++ 中

人工智能软件和硬件技术正在迅速发展。我们每天都能看到新的进步。其中一个巨大的飞跃是我们拥有更多基于自然语言处理(NLP)和深度学习(DL)机制的逻辑性更强的AI聊天应用。有许多AI工具可以用来开发由C、C++、Delphi、Python等编程语言驱动的AI。本文将解释如何在C++ Builder中使用GPT-3 API。

我们将尝试解释GPT-3是什么,以及如何将这个人工智能API应用到我们的C++应用中。如果你对AI一无所知,并且不擅长编码基于AI的应用,你可以使用第三方AI引擎及其数据库,让你的用户体验这一热门技术带来的好处。

目录

  • 什么是AI?
  • 什么是GPT-3 API?
  • GPT-3 AI有多好?
  • GPT-3 AI如何工作?
  • 我今天可以使用GPT-3 AI吗?
  • 如何注册GPT-3?
  • 如何在没有API和C++的情况下从网页使用GPT-3?
  • 如何在C++中获取用于GPT-3的API密钥?
  • 如何使用API密钥通过REST调试器在C++中访问GPT-3 API?
  • 如何在C++中通过REST调试器从GPT-3 AI API发送请求?
  • 如何在C++中使用REST组件连接到GPT-3 API?
  • 如何在代码中创建REST连接以连接到C++中的GPT-3 API?
  • 是否有一个完整的示例,展示如何在C++中连接到GPT-3 API?

什么是AI?

人工智能(Artificial Intelligence,简称AI)指的是在机器中模拟人类智能,这些机器被编程以像人类一样“思考”并模仿他们的行为。该术语也可以应用于任何表现出与人类心智相关的特征的机器,如学习和解决问题。(参考:Investopedia)。

除了上述定义外,AI研究还有其他一些突出的分支。机器学习(Machine Learning,简称ML)是研究计算机算法自动通过经验改进的学科。虽然我们看到了所有声称产品是智能的或支持AI的广告,但实际上,还没有真正的AI。我们将所有与AI相关的事物称为AI技术。AI在其定义中可能涉及到人工通用智能(Artificial General Intelligence,简称AGI),也称为强AI。还有人工生物智能(Artificial Biological Intelligence,简称ABI)这一术语,试图模仿“自然”智能。

什么是GPT-3 API?

GPT-3,即第三代生成预训练变换器(Generative Pre-trained Transformer version 3),是一个人工智能API,是一个自回归语言模型,使用深度学习产生类似人类的文本。GPT版本由位于旧金山的AI研究实验室OpenAI创建和支持。这个API支持不同的AI引擎和数据库。

GPT-3于2020年5月推出,并在2020年7月进行了beta测试。GPT-3是GPT系列中的第三代语言预测模型,它比GPT-2提供了更好的结果。GPT-3的完整版本拥有1750亿个机器学习参数。GPT-3是自然语言处理(NLP)系统中预训练语言表示的趋势的一部分。微软于2020年9月22日宣布,它已获得GPT-3的“独家”使用权。现在,许多用户和公司可以通过公共API使用GPT-3来接收给定文本输入的文本输出。

AI正在变得更好,但尚未完美

GPT-3 AI有多好?

根据大多数测试者的说法,GPT-3生成的文本质量非常好。它如此之好,以至于很难判断是人写的还是AI API写的。这意味着它既有益处也有风险。在他们的论文中,他们警告了GPT-3的潜在危险,并呼吁研究以减轻风险。澳大利亚哲学家大卫·查默斯(David Chalmers)将GPT-3描述为“有史以来最有趣和最重要的AI系统之一”。就我个人而言,作为一个AI开发人员,在最初的几次通信测试中,我看到了大量错误的答案。它在从给定的句子生成答案方面非常有创意。请注意,这项技术仍在开发中,我发现它非常成功。GPT-3可能是通往AGI技术的一种方式。

GPT-3 AI如何工作?

GPT-3使用超过数十亿个标记(单词)的数据,并从这个给定的数据库中生成结果。它能够对各种输入文本产生合理的响应,这得益于它接受训练的数据量。它是一个巨大的文本预测变换器模型,打破了许多关于理解和创造书面语言难度的假设。

我今天可以使用GPT-3 AI吗?

最初,只有少数开发者能够访问这个API,现在OpenAI已经向公众开放了GPT-3的使用。它还为专业使用提供了定价计划。价格基于使用的标记数量,这实际上与单词相同。通常,“标记”一词在编程中用于指代空格之间的字母数字字符或某些其他标点符号,如点和逗号。

我找到了注册GPT-3的时间,我以前无法注册。我读了一些介绍,再次观看了Embarcadero的Jim McKeeth关于GPT-3的视频,并测试了GPT-3。我能够看到我很容易地将这个API适应到C++ Builder应用程序中,通过使用REST调试器。在本文中,我将解释如何注册这个最新的AI API,以及如何使用REST连接发送和接收输入和输出。

如何注册GPT-3?

直接访问https://openai.com/api/或https://beta.openai.com/playground,并从菜单中选择SignUp注册GPT-3 API。在注册过程中,需要电子邮件和手机验证。

然后从https://beta.openai.com/playground登录GPT-3。

如何在没有API和C++的情况下从网页使用GPT-3?

在开始使用游乐场之前,你可以使用示例链接https://beta.openai.com/examples。GPT-3在游乐场中有不同选项。你可以使用聊天、问答等选项。从聊天选项开始,或直接使用https://beta.openai.com/playground/p/default-chat链接。在右侧,你可以选择AI引擎和其他设置,然后与GPT-3对话以获得问题的答案。请注意,有一个标记限制。你使用的标记数量显示在生成按钮的右侧。

对我来说,能够使用全球最成功的AI应用之一的最新版本是非常有趣的。我相信你也会喜欢聊天。


OpenAI ChatGPT在行动

如何在C++中获取用于GPT-3的API密钥?

如果你想在你的C++应用程序中使用GPT-3,你应该获得API密钥。然后你可以使用它们通过REST连接获得答案。要创建一个新的API密钥,请单击右上角的个人菜单,然后选择“查看API密钥”菜单。如果没有API密钥,请按创建新密钥,然后你可以通过按显示来查看你的密钥,或者复制它到剪贴板,以便你可以粘贴在你的使用中。


获取你的GPT 3 AI API密钥

如何使用API密钥通过REST调试器在C++中访问GPT-3 API?

在RAD Studio中,C++ Builder有一个非常有用工具叫做REST调试器。它包含在RAD Studio C++ Builder中。它非常有用于测试REST请求,如“获取”和“发布”,以查看它们的效果并查看结果。它可以非常容易地自动设置REST组件及其参数,然后可以粘贴或复制到你的源代码中——这可能会节省你数小时的编码时间。我们可以使用RAD Studio中的REST调试器工具轻松设置组件——无论是C++ Builder还是Delphi——它都适用。如果你是REST调试器的新用户,也许先查看这篇文章是个好主意。

让我们看看如何使用REST调试器。如果你想通过REST调试器使用GPT3 API,

在发送请求之前,测试所有API密钥和我们的消息是否工作是好的。在参数部分,我们需要添加我们之前注册的API密钥。以下是如何操作的。

以下是示例。

如何在C++中通过REST调试器从GPT-3 AI API发送请求?

现在我们可以向REST调试器添加请求详情,让我们看看如何在REST调试器中使用GPT-3的请求。

  • 在“Request”标签中选择POST方法,
  • 在URL部分添加GPT-3 API URL(即**https://api.openai.com/v1**,URL可能会更改),
  • 选择Content-Typeapplication/json
  • 并添加自定义“ body”,示例如下。 
 
{"prompt": "it was a rainy day for","max_tokens": 150
}

这里,我们希望使用GPT3生成“it was a rainy day for”句子之后的新的单词和句子。最大标记数设置为150。以下是示例截图。

现在你可以按“Send Request”按钮进行测试。检查“Response”“Body”,如果响应正常,这意味着你已经成功通过REST客户端运行GPT-3。在这一步之后,现在你可以在C++ Builder中创建一个简单的REST客户端,如下例所示。

如何在C++中使用REST组件连接到GPT-3 API?

通过在C++ Builder中使用以下3个REST组件,可以轻松地进行简单的REST连接。

  1. 创建一个新的多设备C++ Builder应用程序,将所有单元和项目文件保存到一个文件夹。
  2. 添加一个按钮(TButton)和一个Memo(TMemo)组件以查看所有JSON数据。
  3. 拖动RESTClient(TRESTClient)、RESTRequest(TRESTRequest)和RESTResponse(TRESTResponse)并安排它们的位置以查看它们的名称。
  4. 点击RESTClient1,在对象检查器窗口中,设置其BaseURL属性为RESTful web服务(即对于GPT-3,“**https://api.openai.com/v1**”)。双击其Params和你的web服务的参数(即对于GPT-3,值=”Authentication”和access_key的值Value=YOUR API KEY参数)
  5. 现在我们可以连接到任何带有适当参数的REST服务,并且我们可以从这个服务器到一个TJSONValue变量或组件属性中获取响应消息,如下所示

如何在代码中创建REST连接以连接到C++中的GPT-3 API?

如果你有RESTClient(TRESTClient)、RESTRequest(TRESTRequest)和RESTResponse(TRESTResponse)组件,你也可以在代码中使用它们。首先,你应该通过对象检查器或在你的代码中将它们绑定,如下所示。


RESTRequest1->Client   = RESTClient1;
RESTRequest1->Response = RESTResponse1;

 如果你已经设置了你的REST组件,这里有一个示例连接到C++中的GPT-3 AI API。

	// Set REST ClientRESTClient1->BaseURL = "https://api.openai.com/v1";RESTClient1->AddParameter( "Authorization",   "Bearer sk-Hr123DasdXcA451Sxy2z1x3D51ARg3hy99ru2d34",TRESTRequestParameterKind::pkHTTPHEADER);// Set REST RequestRESTRequest1->Method   = TRESTRequestMethod::rmPOST;RESTRequest1->Response = RESTResponse1;RESTRequest1->Response->ContentType = "application/json";RESTRequest1->Response->ContentEncoding="UTF-8";RESTRequest1->ClearBody();RESTRequest1->Body->Add("{ \"prompt\": \"it was a rainy day for\",	  \"max_tokens\": 150 }", Rest::Types::TRESTContentType::ctNotLeadChar);RESTRequest1->Execute();// Get REST ResponseTJSONValue *jValue = RESTResponse1->JSONValue;// Print REST ResponseMemo1->Lines->Add(jValue->ToString());

 

是否有一个完整的示例,展示如何在C++中连接到GPT-3 API?

这里有一个完整的C++ Builder FMX项目示例,不要忘记添加按钮、Memo、RESTClient、RESTRequest和RESTResponse。


#include <fmx.h>
#pragma hdrstop#include "GPT3_Example_Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)  : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{// Set REST ClientRESTClient1->BaseURL = "https://api.openai.com/v1";RESTClient1->AddParameter( "Authorization",   "Bearer sk-Hr123DasdXcA451Sxy2z1x3D51ARg3hy99ru2d34",TRESTRequestParameterKind::pkHTTPHEADER);// Set REST RequestRESTRequest1->Method   = TRESTRequestMethod::rmPOST;RESTRequest1->Response = RESTResponse1;RESTRequest1->Response->ContentType = "application/json";RESTRequest1->Response->ContentEncoding="UTF-8";RESTRequest1->ClearBody();RESTRequest1->Body->Add("{ \"prompt\": \"it was a rainy day for\",	  \"max_tokens\": 150 }", Rest::Types::TRESTContentType::ctNotLeadChar);RESTRequest1->Execute();// Get REST ResponseTJSONValue *jValue = RESTResponse1->JSONValue;// Print REST ResponseMemo1->Lines->Add(jValue->ToString());
}

如果你在设置组件时遇到问题,或者在连接到REST Web服务时遇到连接问题,你也可以使用REST调试器来测试REST请求(获取、发布等),它可以非常容易地自动设置这些REST组件及其参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/473401.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【项目开发】URL中井号(#)的技术细节

未经许可,不得转载。 文章目录 前言一、# 的基本含义二、# 不参与 HTTP 请求三、# 后的字符处理机制四、# 的变化不会触发网页重新加载五、# 的变化会记录在浏览器历史中六、通过 window.location.hash 操作七、onhashchange 事件八、Google 对 # 的处理机制前言 2023 年 9 月…

AUTOSAR_EXP_ARAComAPI的7章笔记(5)

☞返回总目录 相关总结&#xff1a;典型的 SOME/IP 多绑定用例总结 7.3.3 典型的SOME/IP多绑定用例 在前面的章节中&#xff0c;我们简要提到&#xff0c;在一个典型的SOME/IP 网络协议的部署场景中&#xff0c;AP SWC不太可能自己打开套接字连接来与远程服务通信。为什么不…

Jenkins下载安装、构建部署到linux远程启动运行

Jenkins详细教程 Winodws下载安装Jenkins一、Jenkins配置Plugins插件管理1、汉化插件2、Maven插件3、重启Jenkins&#xff1a;Restart Safely插件4、文件传输&#xff1a;Publish Over SSH5、gitee插件6、清理插件&#xff1a;workspace cleanup system系统配置1、Gitee配置2、…

Flutter:Dio下载文件到本地

import dart:io; import package:dio/dio.dart;main(){// 创建dio对象final dio Dio();// 下载地址var url https://*******.org/files/1.0.0.apk;// 手机端路径String savePath Directory.systemTemp.path/ceshi.apk;print(savePath);downLoad(dio,url,savePath); }downLo…

【C++笔记】C++三大特性之多态

【C笔记】C三大特性之多态 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】C三大特性之多态前言一.多态1.1 多态的概念1.2 虚函数1.3 虚函数的重写/覆盖1.4 多态的定义及实现 二.虚函数重写的⼀些其他问题2.1 协变(…

2.STM32之通信接口《精讲》之USART通信

有关通信详解进我主页观看其他文章&#xff01;【免费】SPIIICUARTRS232/485-详细版_UART、IIC、SPI资源-CSDN文库 通过以上可以看出。根据电频标准&#xff0c;可以分为TTL电平&#xff0c;RS232电平&#xff0c;RS485电平&#xff0c;这些本质上都属于串口通信。有区别的仅是…

麒麟V10,arm64,离线安装docker和docker-compose

文章目录 一、下载1.1 docker1.2 docker-compose1.3 docker.service 二、安装三、验证安装成功3.1 docker3.2 docker-compose 需要在离线环境的系统了里面安装docker。目前国产化主推的是麒麟os和鲲鹏的cpu&#xff0c;这块的教程还比较少&#xff0c;记录一下。 # cat /etc/ky…

云原生之运维监控实践-使用Telegraf、Prometheus与Grafana实现对InfluxDB服务的监测

背景 如果你要为应用程序构建规范或用户故事&#xff0c;那么务必先把应用程序每个组件的监控指标考虑进来&#xff0c;千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》 去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章&#xff0c;当…

三十九、Python(pytest框架-中)

一、执行用例的方式 1.工具执行 2.在终端使用命令行运行 命令&#xff1a;pytest -s 用例代码文件 -s 的作用是输出显示代码中的 print。 3.在主函数main中执行 if __name__ "__main__": # 主函数pytest.main([-s, 用例代码文件]) import pytestclass TestDemo…

丹摩征文活动|丹摩助力selenium实现大麦网抢票

丹摩征文活动&#xff5c;丹摩助力selenium实现大麦网抢票 1.引言 在人工智能飞速发展的今天&#xff0c;丹摩智算平台&#xff08;DAMODEL&#xff09;以其卓越的AI算力服务脱颖而出&#xff0c;为开发者提供了一个简化AI开发流程的强大工具。通过租赁GPU资源&#xff0c;丹…

【计算机网络】协议定制

一、结构化数据传输流程 这里涉及协议定制、序列化/反序列化的知识 对于序列化和反序列化&#xff0c;有现成的解决方案&#xff1a;①json ②probuff ③xml 二、理解发送接收函数 我们调用的所有发送/接收函数&#xff0c;根本就不是把数据发送到网络中&#xff01;本质都是…

大数据-226 离线数仓 - Flume 优化配置 自定义拦截器 拦截原理 拦截器实现 Java

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

AI行业动态:AGI预测、模型进化与工具革新

本周&#xff0c;人工智能&#xff08;AI&#xff09;领域的新闻层出不穷&#xff0c;从关于通用人工智能&#xff08;AGI&#xff09;何时到来的预测&#xff0c;到模型训练与推理技术的突破&#xff0c;再到各种实用工具的更新迭代&#xff0c;精彩纷呈。让我们一起深入了解这…

vue3 如何调用第三方npm包内部的 pinia 状态管理库方法

抛砖引玉: 如果在开发vue3项目是, 引用了npm第三方包 ,而且这个包内使用了Pinia 状态管理库,那我们如何去调用 npm内部的 Pinia 状态管理库呢? 实际遇到的问题: 今天在制作npm包时遇到的问题,之前Vue2版本的时候状态管理库用的Vuex ,当时调用npm包内的状态管理库很简单,直接引…

AWTK-WIDGET-WEB-VIEW 实现笔记 (4) - Ubuntu

Ubuntu 上实现 AWTK-WIDGET-WEB-VIEW 开始以为很简单&#xff0c;后来发现是最麻烦的。因为 Ubuntu 上的 webview 库是 基于 GTK 的&#xff0c;而 AWTK 是基于 X11 的&#xff0c;两者的窗口系统不同&#xff0c;所以期间踩了几个大坑。 1. 编译 AWTK 在使用 Linux 的输入法时…

C++之内存管理

​ &#x1f339;个人主页&#x1f339;&#xff1a;喜欢草莓熊的bear &#x1f339;专栏&#x1f339;&#xff1a;C入门 目录 前言 一、C/C内存分配 二、 malloc、calloc、realloc、free 三、C内存管理方式 3.1 new/delete 操作内置类型 3.2 new和detele操作自定义类型…

Visual Studio 2017 快捷键设置-批量注释和批量取消注释

一.批量注释设置&#xff1a; 1&#xff09;打开Visual Studio 2017,点击菜单栏中的“工具”&#xff0c;然后选中“选项”&#xff1a; 2&#xff09;选中“键盘”&#xff0c;在“显示命令包含”输入框中输入“注释”&#xff1a; 3&#xff09;选中“编辑&#xff1a;注释选…

从零入门激光SLAM(二十三)——direct_visual_lidar_calibration全型号激光雷达-相机标定包

大家好呀&#xff0c;我是一个SLAM方向的在读博士&#xff0c;深知SLAM学习过程一路走来的坎坷&#xff0c;也十分感谢各位大佬的优质文章和源码。随着知识的越来越多&#xff0c;越来越细&#xff0c;我准备整理一个自己的激光SLAM学习笔记专栏&#xff0c;从0带大家快速上手激…

蓝桥杯备赛(持续更新)

16届蓝桥杯算法类知识图谱.pdf 1. 格式打印 %03d&#xff1a;如果是两位数&#xff0c;将会在前面添上一位0 %.2f&#xff1a;会保留两位小数 如果是long&#xff0c;必须在数字后面加上L。 2. 进制转化 2.1. 十进制转任意进制&#xff1a; 十进制转任意进制时&#xff…

【STL】set,multiset,map,multimap的介绍以及使用

关联式容器 在C的STL中包含序列式容器和关联式容器 1.关联式容器&#xff1a;它里面存储的是元素本身&#xff0c;其底层是线性序列的数据结构&#xff0c;比如&#xff1a;vector&#xff0c;list&#xff0c;deque&#xff0c;forward_list(C11)等 2.关联式容器里面储存的…