国内使用阿里云 FC 对接 OpenAI API 方案
前言
早在 ChatGPT 22 年 11 月底首次发布时,我就在第一时间体验了一把如今热的快要爆炸的人工智能。体验感就像老鼠舔了牛皮——属实牛批。之前元宇宙爆火的时候,我并没有太大的兴趣去参与,从程序员的角度上来看,这并不能成为一个突破性的技术,并且很难被推广和收到大众的喜爱。尽管在国外类似 Roblox 这类的元宇宙游戏,已经斩获接近 1kw 以上的用户的青睐,但在我看来这似乎只是一个 MMO + The Sim 的升级版。然而 ChatGPT 非同凡响,只是看了一言,就有一种:人类文明不存在了的感觉。
尽管我在第一时间为此开发了软件,并且接入了人工智能,但是一个人的力量还是比不过团队,可以看到非常多原先的微信公众号,都开始卖课、卖会员、也有包装的非常好的换皮 GPT,最早一批变现的现在可能已经赚得盆满钵满了。GPT 并不 Open,而是逐渐 Close,限制登陆 IP,封禁批量注册用户……这也让我的脚步逐渐变缓。
无论如何,我还是打算出一篇攻略,讲解一下国内的开发者们,如何以最稳健的方式在应用中对接 ChatGpt。
前提
- 你有阿里云账号
- 你有 open ai 账号,且绑定了银行卡,能够正常调用 api
下载代理包
首先去 github 找到 openai-scf-prox 这是一个简易的代理程序,我们将使用他配合美区的云函数服务器,对国内请求进行反向代理,达到正常的调用目的。
进入控制台
进入首页之后,一开始还不能选择地区,你会看到一些账号下的基础信息。
创建服务
进入【服务及函数】菜单,这里注意选择美区的地理位置,随便选一个地区即可,然后创建服务,随便填写名称。
再点开高级选项,这里要创建一个阿里云的角色,并且分配 FC 的默认权限。其他的配置按照默认的即可(开日志功能和链路追踪要额外花钱)
创建函数
服务创建完成之后,就可以创建函数。
选择【使用自定义运行时函数创建】->【处理HTTP请求】,运行环境推荐选比较稳定的 16,然后上传第一步里下载的代理包。
在高级配置处,CPU 和内存全部选最小的,越小的免费调用额度越大 (好像是每月 1W 次?)并发度阿里云推荐压测后填写,代理包作者推荐填 2,我填的是 10,这块目前就自己用,没测试过。然后就可以创建了。
集成到应用
最后在触发器管理中,可以看到函数反向代理的 url。
以 plexpt 的 java sdk 为例,填写触发器中的内网访问地址:
以 openai 的 node sdk 为例:
测试使用
至此,一个简单的代理就完成了,国内网络均可快速调用 openai api。over!
4 条评论
下载的项目运行报错:Function instance exited unexpectedly(code 1, message:operation not permitted) with start command 'npm run start '.\nLogs:> origin@0.0.0 start\r\n> node ./bin/www\r\n\r\nnode:internal/modules/cjs/loader:959\r\n throw err;\r\n ^\r\n\r\nError: Cannot find module '/code/bin/www'\r\n[90m at Function.Module._resolveFilename (node:internal/modules/cjs/loader:956:15)[39m\r\n[90m at Function.Module._load (node:internal/modules/cjs/loader:804:27)[39m\r\n[90m at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)[39m\r\n[90m at node:internal/main/run_main_module:17:47[39m {\r\n code: [32m'MODULE_NOT_FOUND'[39m,\r\n requireStack: []\r\n} 咋整
?
在哪里授权
412错误是什么问题呀:error message:
openai.error.APIError: Invalid response object from API: '{"ErrorCode":"CAExited","ErrorMessage":"Function instance exited unexpectedly(code 1, message:operation not permitted) with start command \' \'. \\nLogs:\\u003e origin@0.0.0 start\\r\\n\\u003e node ./bin/www\\r\\n\\r\\nnode:internal/modules/cjs/loader:959\\r\\n throw err;\\r\\n ^\\r\\n\\r\\nError: Cannot find module \'/code/bin/www\'\\r\\n\\u001b[90m at Function.Module._resolveFilename (node:internal/modules/cjs/loader:956:15)\\u001b[39m\\r\\n\\u001b[90m at Function.Module._load (node:internal/modules/cjs/loader:804:27)\\u001b[39m\\r\\n\\u001b[90m at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)\\u001b[39m\\r\\n\\u001b[90m at node:internal/main/run_main_module:17:47\\u001b[39m {\\r\\n code: \\u001b[32m\'MODULE_NOT_FOUND\'\\u001b[39m,\\r\\n requireStack: []\\r\\n}"}' (HTTP response code was 412)
没有给账号授权吧