本文将会介绍,如何找到API文档和相应语言SDK,并使用PHP调用SDK实现本地请求API的完成过程及遇到的问题和解决方法。
API文档
1.打开官网
ChatGPT: Optimizing Language Models for Dialogue
2.找到API
3.查看文档
4.找到sdk库
OpenAI API
5.主流语言
6.PHP SDK链接
这两个都可以用,这里只做了第二个的使用讲解。
本地调用
Tectalic是一个sdk,所有API的使用方法都已经封装好,具体业务逻辑需要我们去另外实现调用。
1.下载解压
下载解压到网站根目录,重命名为chatGPT。
2.新建demo
创建一个demo.php,从文档里拷贝一个例子到本地demo。
3.注意php版本
4.更新本地类库
发现这个类 提示有问题。
请求响应500
发现Authentication类中\Http\Messag库文件没有
看一下composer.json require有php-http/message
应该是GPT SDK中没有这个库文件;为防止其他类库文件不存在,
使用composer更新一下本地类库。
ChatGPT文件夹下打开命令行,执行命令:
composer update
5.加载依赖
require __DIR__ . '/vendor/autoload.php';
Authentication类显示正常了。
6.安装GuzzleHttp
在访问一下报错:
Fatal error: Interface 'Psr\Http\Client\ClientInterface' not found in D:\phpstudy_pro\WWW\chatGPT\src\Client.php on line 43
GuzzleHttp类库找不到。这个类库是Guzzle 是一个 PHP HTTP 客户端。在框架中一般都安装好了;现在没在框架中所以需要重新安装一下。
安装:
还是在chatGPT文件夹命令行执行
composer require guzzlehttp/guzzle
安装完成,显示如下:
7.更新本地证书
请求报错:
Fatal error: Uncaught GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem: unable to get local issuer certificate
其原因可能是本地的CURL的SSL证书太旧了或者没有该证书,导致不识别此证书
解决方法:
下载最新的证书(https://curl.haxx.se/ca/cacert.pem),编辑 php.ini 文件,找到 curl.cainfo,去掉 curl.cainfo 前面的注释“;”,然后在后面写上cacert.pem证书的完整路径及文件名
接下来重启php服务即可。
8.未成功响应
报错:
Fatal error: Uncaught Tectalic\OpenAi\ClientException: Unsuccessful response. HTTP status code: 401
原因:
提示未成功响应,401又表示未经授权;看着像是api key有问题。
调试半天,又换成python试了试,
总算找到原因,去掉getenv()函数
这个是用来取环境配置中的变量,我这边直接定义了key,不需要用这个函数。
去掉之后,尝试成功!
9.最终实现
代码如下:
header('content-type:text/html;charset=utf8 ');require __DIR__ . '/vendor/autoload.php';$open_api_key = '你的open api key';
$openaiClient = \Tectalic\OpenAi\Manager::build(new \GuzzleHttp\Client(),new \Tectalic\OpenAi\Authentication($open_api_key)
);/** @var \Tectalic\OpenAi\Models\Completions\CreateResponse $response */
$response = $openaiClient->completions()->create(new \Tectalic\OpenAi\Models\Completions\CreateRequest(['model' => 'text-davinci-002','prompt' => '北京今天的天气怎么样?使用中文回答',// 设置问题'max_tokens' => 256, // 设置答案长度 不设置只显示一部分字符])
)->toModel();echo $response->choices[0]->text;
最终效果:
总结:
文档还是很不完善,从上午开始弄,到下午才算完成;发现使用API,得到的答案和GPT网站答案都不一致,同样问题多问几次API的答案就乱了,也不知道回答的是什么。
开始我还以为可能需要翻墙请求呢,实际不需要,不过也响应很慢,在项目中使用,还是再观察。接下来在调试几天,看看别的功能和参数。