查看原文
其他

技术应用 | 使用PHP开发ChatGPT问答网页

The following article is from 简言 Author 韩林涛

ChatGPT的背景

2023年3月2日,OpenAI开放了ChatGPT的API,无论是个人开发者,还是企业,都可以通过这个API来正式使用ChatGPT了。

很多人看不太懂这个新闻,感觉从2022年12月到2023年的3月大家都不已经在各种调戏ChatGPT了吗?怎么ChatGPT才开放API?

GPT-3是什么?

其实,在OpenAI开放ChatGPT的API之前,大家使用的是一个叫GPT-3的模型,GPT-3的全称是:Generative Pre-Training 3,即“生成式预训练模型第三代”。它的第一代是OpenAI公司在2018年发布的,是基于谷歌2017年发布的Transformer模型打造的。所以GPT也可以称为:Generative Pre-Trained Transformer。

OpenAI公司从2018年开始,每年发布一代GPT,参数量分别是1.17亿、15亿和1750亿,训练的原始数据量也从第一代的5GB、第二代的40GB,提升到第三代的45TB。

对于这么大的模型,训练一次的成本据估计达到140万美元,甚至更多。

GPT-3和ChatGPT什么关系?

第三代GPT模型(GPT-3)包含了ada、babbage、curie、davinci等模型,这几个模型的名字也很有趣。

Ada是英国浪漫主义诗人拜伦的女儿,全名是: Augusta Ada King, Countess of Lovelace,她是世界上第一位程序员,所以有许多与计算机技术相关的项目都以Ada命名。

Babbage是英国数学家Charles Babbage,被誉为现代计算机之父。Ada与Babbage的关系非常好,曾经参与过Babbage的计算机设计,翻译了许多相关的资料。

Curie就是大家熟知的居里夫人,全名是:Marie Curie

Davinci就是达芬奇。

这四个GPT-3模型所使用的训练数据的时间都是截至2019年10月,其中:ada模型速度最快、成本最低的,能够回答一些非常基本的问题;babbage模型、curie模型也都很快,成本很低,问题回答质量比ada更高,davinci模型则是其中最好的模型。

这几个GPT-3模型都支持用户拿自己的数据去训练。

那ChatGPT跟GPT-3有什么关系呢?

从名字就可以看出来,GPT-3是第三代生成式预训练模型,而ChatGPT则是用于会话任务(Chat)的生成式预训练模型。GPT-3是通用的模型,ChatGPT是专门为会话任务设计的,所以ChatGPT使用的数据量也少于GPT-3。前面介绍了GPT-3有1750亿参数,ChatGPT只有15亿参数。

因为ChatGPT一推出后非常火,所以大家都习惯使用“ChatGPT”这个名字来涵盖所有的模型。

GPT-3.5又是什么?

ChatGPT是专门设计用来完成会话任务的GPT模型,从技术升级的角度来看,还没有到第四代GPT模型,所以OpenAI公司将其划到了GPT-3.5系列模型中。

在GPT-3.5的各个模型中,分别包含了Ada模型、Babbage模型、Curie模型、Davinci模型和Turbo模型。

根据OpenAI的官方文档,Ada模型擅长解析文本、分类等任务;Babbage模型擅长分类任务、语义匹配任务;Curie模型擅长翻译、复杂分类、生成概要等任务;Davinci模型是最强大的模型,可以完成前面所有的任务,而且还能够更好的理解文本,解决逻辑问题,进行推理等等,所以Davinci模型也是这几个模型中最贵的一个。

除了上面这四个模型外,GPT-3.5模型中还有一个Turbo模型,Turbo这个词的词根是龙卷风、旋风,在汽车里面有涡轮增压器,通过废气加压来提升汽车的动力,所以Turbo就是一个增强型模型。

GPT-3.5的Turbo模型是和ChatGPT模型基本上一样的模型,针对会话任务进行了增强,而且在其他方面上的能力也与Davinci模型相当。

2023年3月2日,OpenAI公司发布的就是GPT-3.5的Turbo模型,模型名称为:gpt-3.5-turbo。

而且,不仅模型能力更强,价格也更便宜了:每1000个token的价格为0.002美元。根据官方计算方法,1000个token相当于750个英文单词,0.002美元相当于0.0138元人民币,所以相当于每个英文单词的价格为:0.0000184元人民币。1000个英文单词的价格为:0.0184元人民币,不到2分钱。

本文要介绍的,就是如何调用gpt-3.5-turbo模型,为了方便理解,就写成了如何调用ChatGPT模型,为了吸引眼球就加了一个“40行代码”作为文章前缀,因为调用这个模型确实太简单了。

为什么要用PHP来调用呢?主要原因还是PHP更适合拿来做成网页,比用Python要简单一些。

准备工作

OpenAI公司在官网上提供了调用ChatGPT API的curl命令:

curl https://api.openai.com/v1/chat/completions
-H "Authorization: Bearer $OPENAI_API_KEY"
-H "Content-Type: application/json"
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "What is the OpenAI mission?"}]
}'

网上有非常多的工具可以将这段代码直接转换成PHP代码:

https://incarnate.github.io/curl-to-php/

以下是转换生成的PHP代码:

// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v1/chat/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n \"model\": \"gpt-3.5-turbo\",\n \"messages\": [{\"role\": \"user\", \"content\": \"What is the OpenAI mission?\"}]\n}");

$headers = array();
$headers[] = 'Authorization: _ENV["Bearer OPENAI_API_KEY"];
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);


这段代码怎么用呢?

我们首先得有一个可以运行PHP代码的环境,这个可以观看以下视频,如何安装小皮面板:

https://www.bilibili.com/video/BV1Lr4y1k7yQ/

运行代码

当PHP代码运行环境安装完成后,就可以在根目录下创建一个文件夹,然后把代码放进去。

我创建一个名为chatgpt的文件夹,在里面创建一个index.php的文件,然后把代码放进去:

这里我隐去了我的OpenAI Key,大家需要自己想办法去注册。

如果直接运行这段代码,会报错:

需要稍微修改一下:

<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v1/chat/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{
\"model\": \"gpt-3.5-turbo\",
\"messages\": [{\"role\": \"user\", \"content\": \"What is the OpenAI mission?\"}]
}"
);

$headers = array();
$headers[] = "Authorization: Bearer "."*******f";
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);

$result = json_decode($result);

var_dump($result);
?>

我主要调整的是两点:

一个是加了这两行代码:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

有时候网址不是HTTPS的安全链接,无法正常调用API,所以加上这两行后就可以避开这个问题。

还有一个是这两行代码:

$result = json_decode($result);

var_dump($result);

这样可以将ChatGPT输出的结果全部打印出来。

代码修改完之后,在浏览器中输入:localhost/chatgpt,得到的结果如下:

object(stdClass)#1 (6) { [“id”]=> string(38) “chatcmpl-6pdRzXsBNHyePAdfYVo1ocCbYilkR” [“object”]=> string(15) “chat.completion” [“created”]=> int(1677764395) [“model”]=> string(18) “gpt-3.5-turbo-0301” [“usage”]=> object(stdClass)#2 (3) { [“prompt_tokens”]=> int(14) [“completion_tokens”]=> int(120) [“total_tokens”]=> int(134) } [“choices”]=> array(1) { [0]=> object(stdClass)#3 (3) { [“message”]=> object(stdClass)#4 (2) { [“role”]=> string(9) “assistant” [“content”]=> string(647) " As an AI language model, I do not have personal beliefs or opinions, but I can provide information. OpenAI’s mission is to promote and develop safe AI technologies that benefit and serve humanity as a whole. They aim to do this by creating and advancing artificial intelligence in a responsible and ethical manner, while also promoting transparency and collaboration within the scientific community. OpenAI is committed to ensuring that the benefits of AI are broadly and fairly distributed, and that the risks are understood and addressed. Their ultimate goal is to create a future where AI is used to improve people’s lives in meaningful ways." } [“finish_reason”]=> NULL [“index”]=> int(0) } } }

这样看还不是很美观,点击浏览器的查看网页源代码,可以看到结构更清晰的结果:

即:


object(stdClass)#1 (6) {
["id"]=>
string(38) "chatcmpl-6pdRzXsBNHyePAdfYVo1ocCbYilkR"
["object"]=>
string(15) "chat.completion"
["created"]=>
int(1677764395)
["model"]=>
string(18) "gpt-3.5-turbo-0301"
["usage"]=>
object(stdClass)#2 (3) {
["prompt_tokens"]=>
int(14)
["completion_tokens"]=>
int(120)
["total_tokens"]=>
int(134)
}
["choices"]=>
array(1) {
[0]=>
object(stdClass)#3 (3) {
["message"]=>
object(stdClass)#4 (2) {
["role"]=>
string(9) "assistant"
["content"]=>
string(647) "

As an AI language model, I do not have personal beliefs or opinions, but I can provide information. OpenAI's mission is to promote and develop safe AI technologies that benefit and serve humanity as a whole. They aim to do this by creating and advancing artificial intelligence in a responsible and ethical manner, while also promoting transparency and collaboration within the scientific community. OpenAI is committed to ensuring that the benefits of AI are broadly and fairly distributed, and that the risks are understood and addressed. Their ultimate goal is to create a future where AI is used to improve people's lives in meaningful ways."

}
["finish_reason"]=>
NULL
["index"]=>
int(0)
}
}
}

从上面这个结果中可以看到,我们真正想要的答案在这里:

["content"]=>
string(647) "

As an AI language model, I do not have personal beliefs or opinions, but I can provide information. OpenAI's mission is to promote and develop safe AI technologies that benefit and serve humanity as a whole. They aim to do this by creating and advancing artificial intelligence in a responsible and ethical manner, while also promoting transparency and collaboration within the scientific community. OpenAI is committed to ensuring that the benefits of AI are broadly and fairly distributed, and that the risks are understood and addressed. Their ultimate goal is to create a future where AI is used to improve people's lives in meaningful ways."


为了让网页直接输出这段文字内容,我们进一步修改代码:

<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v1/chat/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{
\"model\": \"gpt-3.5-turbo\",
\"messages\": [{\"role\": \"user\", \"content\": \"What is the OpenAI mission?\"}]
}"
);

$headers = array();
$headers[] = "Authorization: Bearer "."*************";
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);

$result = json_decode($result);

echo $result->choices[0]->message->content;

?>


输出效果为:


其实我们就改了一行代码,将:

var_dump($result);


修改为:

echo $result->choices[0]->message->content;

这行代码的作用是从ChatGPT返回的结果中一层一层的寻找自己想要的字符串,然后把它输出出来。

如此一来,使用PHP来调用ChatGPT API就成功了。

优化代码

如果我们希望获得一个输入框,然后在输入框输入自己想要的问题,并从ChatGPT那里得到答案,我们还要再进一步修改代码:

<form action="" method="POST">
<textarea name="question" rows="10" cols="30">
<?php
if(isset($_POST["question"]))
{
echo $_POST["question"];
}else{
echo "请在这里输入问题";
}
?>

</textarea>
<input type="submit" value="回答" />
</form>

<?php
if(isset($_POST["question"]))
{
$prompt = $_POST["question"];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v1/chat/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"model\": \"gpt-3.5-turbo\",\"messages\": [{\"role\": \"user\", \"content\": \"".$prompt."\"}]}");
$headers = array();
$headers[] = "Authorization: Bearer "."*******";
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
$result = json_decode($result);
$output = $result->choices[0]->message->content;
echo '<textarea rows="10" cols="30">'.$output.'</textarea>';
}

?>


网页中显示的效果如下:

尝试问一个问题:

以上代码一共40行,而且还可以更少。

结语

通过上面这个案例,我向大家展示了ChatGPT是如何轻松调用的,一个可以放在公开网络上供大家访问的简易版ChatGPT只需要40行代码,甚至更少的代码。

这给我们带去了无尽的想象空间,我们可以围绕ChatGPT开发更多有趣的应用。

如:

chatGPT应用于语言教育和语言服务的两个案例

将 ChatGPT 与线上英语教学平台融合的初步探索和功能演示

将双语术语与ChatGPT相结合提升机器翻译质量

声明:本公众号转载此文章是出于传播行业资讯、洞见之目的,如有侵犯到您的合法权益,请致信:chongchong@lingotek.cn,我们将及时调整处理。谢谢支持!


-END-

本文转载自:简言
转载编辑:Pickey


关注我们,获取更多资讯!

往期回顾

行业动向1. 行业资讯 | 2023年中国翻译协会培训一号公告
2. 行业资讯 | 外文局翻译院智能翻译实验室官方公众号上线!3. 行业动态 | “ChatGPT时代翻译技术新进展与新问题专题沙龙”圆满举行4. 行业规范 | ISO术语标准汇总(部分)
5. 精彩回顾 | 翻译搜索技术沙龙(第八期)圆满举行
行业洞见1. 行业观察 | 王立非 李昭:ChatGPT为翻译与外语教育转型按下“加速键”2. 行业观察 | ChatGPT对翻译行业的影响
3. 行业观察 | 一名联合国译员的日常——专访联合国中文翻译处处长陈忠良
4. 行业洞察 | 被称为下一代风口的AIGC到底是什么?
5. 行业洞察 | 刘世界:语料数据处理与实践应用

行业技术1. 技术应用 | 英译汉,如何去掉汉字数字英文之间的空格2. 技术应用 | SKELL: 轻松拿捏在线语料库
3. 技术科普 | AIGC 时代的提示 (Prompt) 基本概念与技巧 ── 以 ChatGPT 为例4. 技术动态|国外资深口译员是如何选择口译工具的?
5. 技术应用 | TermWiki:术语检索利器

精品课程1. 2023年2月工作坊|翻译搜索与论文写作工作坊即将开课(附问卷中奖名单)2. 翻译技术2023全年班限时预售!技术小白速速加入~3. 有哪些翻译技术0基础小白相见恨晚的翻译技术课程?4. 翻译技术不好学?如何做到体系化学习?本文为你揭晓!5. 一天一块钱,承包全年全方位语言服务知识学习!
资源干货1. 书籍推荐 | 人人都用的上的《翻译搜索指南》2. 书籍推荐|戴光荣、王华树等合力编写翻译技术入门级指南3. “螺蛳粉”用英语怎么说?CNN这个表达也是绝了!4. 双语干货 | 时政话语中数字化简称的翻译策略及汇总5. 语言趣谈 | 和ChatGPT谈机器翻译与翻译AI应用
招聘就业1. 招聘快报丨中译英:外宣文件2. 就业干货 | 蒙特雷毕业生:在Facebook担任本地化项目经理是怎样的体验?3. 招聘快报 | 北京博硕星睿招聘课程销售顾问(可线上)4. 招聘快报 | 英雄互娱招聘海外游戏本地化运营5. 实习资讯 | 疫情阻隔优质实习?硬核语言专业线上实习机会来了!
继续滑动看下一个
语言服务行业
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存