ChatGPT API 本地如何调用

7 篇文章 0 订阅

本文将会介绍,如何找到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的答案就乱了,也不知道回答的是什么。

开始我还以为可能需要翻墙请求呢,实际不需要,不过也响应很慢,在项目中使用,还是再观察。接下来在调试几天,看看别的功能和参数。

 

  • 13
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值