1、背景
最近ChatGPT大火,各大媒体媒介都被刷屏了。很多人,也开发了小程序、网页接入官网的GPT3.0接口。然而,这些应用大部分问不到几句就开始要收费了。于是,我就自己做了一个免费版小程序玩一下(接入Plus接口也是免费,免费进行到底)。PS:之前用itchat接入过。但微信容易被封不推荐。公众号自动回复有5秒限制也不太推荐。
2、准备工作
-
GPT3.0接口key(可以参考注册教程: OpenAI 推出超神 ChatGPT 注册攻略来了)
-
Fastadmin 框架
-
Uniapp
3、开始拼接
3.1 安装SDK
在fastadmin项目根目录下执行:
composer require tectalic/openai
3.2 接入SDK
这里提供简单Demo,具体业务逻辑大家自己封装
$auth = new Authentication('你的接口key');
$httpClient = new Psr18Client(HttpClient::create(['verify_peer' => false, 'verify_host' => false]));
$client = new Client($httpClient, $auth, Manager::BASE_URI);
$response = $client->completions()->create(
new TectalicOpenAiModelsCompletionsCreateRequest([
'model' => 'text-davinci-003',
'prompt' => $question, // 这里是用户提交过来的问题
'max_tokens' => 2400, // 这里可以根据需要调整
])
)->toModel();
var_dump($response->choices[0]->text);
3.3 小程序接口对接
很少接触前端业务,所以这里代码可能写得不是很好。大佬们勿喷
that.$api.post({
url: that.$tern_config.appurl + that.$path.common.ai,
data: {
msg: that.content
},
dataType: 'json',
success: rs => {
// 对返回结果进行处理
let pattern =
/(https?|http|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/g
// 提取图片地址,有时接口返回图片格式:![图片主题](图片地址)
let imgs = rs.match(pattern)
imgs = imgs ? imgs : []
// 过滤图片url信息/ n 字符
let text = rs.replaceAll("openai:", "")
.replaceAll(pattern, "")
.replaceAll(/![.*?]()/g, "")
.replaceAll(/^n|n$/g, "")
that.msgList.push({
"msg": text,
"my": false,
"img": imgs
})
that.msgContent += ("openai:" + that.msg + "n")
that.msgLoad = false
that.scrollToBottom()
},
fail: rs => {
// 有时候,接口响应比较久。超过设定timeout
that.msgList.push({
"msg": '抱歉,您说的我还不懂',
"my": false,
"img": []
})
that.scrollToBottom()
that.msgLoad = false
}
})
4、成果展示
5、其他
现在国内真正训练得不错的AI模型大概有:百度文心(三月结束内侧)、华为盘古(只从会议视频上了解过)、浪潮的源1.0(正在接入、学习中)。(其他欢迎大佬们补充)
在掘金潜水很久了,这是我的第一篇文章。个人感觉没多少干货,主要受不了一些披了一层就在那边吆喝叫卖的应用。所以,写得不好。大佬们轻喷。
下一步,打算用vits进行游戏或动漫角色语音合成。让GPT返回的信息,可以用语音播放出来。有兴趣的大佬可以一起聊聊。