两条命令搞定 ChatGPT API 的调用问题
自2022年11月30日 OpenAI 发布 ChatGPT 以来,虽然时有唱衰的声音出现,但在OpenAI不断推陈出新,陆续发布了OpenAPI、GPT-4、ChatGPT Plugins之后,似乎让大家看到了一个聊天机器人往操作系统入口进军的升纬之路。
ChatGPT能被认为是操作系统级别的入口平台,那么必然会催生各行各业应用的重新入局。对此,作为一名开发者来说,面对这样的变革,应该尽早的去了解与实践,在蓝海里更容易找到一份自己的位置。目前DD知道的就有不少小伙伴在基于其API做一些出海的应用。
最近,DD也花了不少时间去研究和体验了一些有趣的内容。比如:尝试跑了一些基于其API实现的类ChatGPT应用:

还有比如下面这个通过拖拽就能轻松调试和构建智能聊天应用的开源工具:

在这几天的不断尝试过程中,DD发现一个比较麻烦的问题,就是这些应用都需要OpenAI的API Key。

作为开发者来说,相信不少小伙伴知道如何获取了,这里就不细节说了,大家可以Google一下,有大量的资料。
这里具体说说另外一个问题:由于我们本地调试、服务器部署等原因,在请求 https://api.openai.com 的时候,很容易造成IP混乱,稍有不慎就有可能被封号。所以,我们最好还是有一个稳定的位于国外的调用来源,这样日常开发调试就能更效率一些。
那么如何快捷方便的来搞定呢?下面就给大家分享一个利用阿里云函数计算(有大量免费试用额度)来实现的方案。
命令行部署
准备工作
- 点击链接(https://t.aliyun.com/U/nb5Ka1),进入管理“控制台”,开通函数计算FC

安装最新版本的nodejs,不会的可以看官网:https://nodejs.org/
执行命令安装Serverless Devs Tool
npm安装:
$ npm install @serverless-devs/s -g
yarn安装:
$ yarn global add @serverless-devs/s
- 通过该链接(https://usercenter.console.aliyun.com/#/manage/ak ),获取阿里云的AccessKey。一定要把这里获取的AccessKey ID和AccessKey Secret记下来,下面马上要用。
- 为Serverless Devs Tool配置阿里云的AccessKey
$ s config add
? Please select a provider: Alibaba Cloud (alibaba)
Refer to the document for alibaba key: http://config.devsapp.net/account/alibaba
? AccessKeyID 此处填写AccessKeyID
? AccessKeySecret 此处填写AccessKeySecret
? Please create alias for key pair. If not, please enter to skip alibaba-access
Alias: alibaba-access
AccountID: 自动获取AccountID
AccessKeyID: 此处填写AccessKeyID
AccessKeySecret: 此处填写AccessKeySecret
Configuration successful
两行命令实现部署
在完成了上面的准备工作之后,接下来我们只需要两行命令即可完成代理服务的部署!
第一步:初始化项目。执行命令**s init openai-proxy**,创建openai-proxy项目。
$ s init openai-proxy
More applications: https://registry.serverless-devs.com
? Please input your project name (init dir) openai-proxy
file decompression completed
创建应用所在的地区
? 地域 us-west-1
? please select credential alias aliyun-key
Thanks for using Serverless-Devs
You could [cd /Users/zhaiyongchao/IdeaProjects/test/openai-proxy] and enjoy your serverless journey!
️ If you need help for this example, you can use [s -h] after you enter folder.
Document Star: https://github.com/Serverless-Devs/Serverless-Devs
More applications: https://registry.serverless-devs.com
会有几个选项,一直回车就好,如果想修改也行,自己根据需要选择即可。
第二步:一键部署。进到初始化好的openai-proxy目录下,然后执行命令**s deploy**直接部署到阿里云上。不要怀疑,就是这么丝滑,一键完成!
$ s deploy
Config check:
Online status => Target Status
routeConfig: [
0: {
+ qualifier: undefined
}
]
? Domain [auto] was changed, please confirm before deployment:
* You can also specify to use local configuration through --use-local during deployment) use local
Generated auto custom domain...
Generated custom domain (3.78s)
⠙ Generated auto custom domain...
注意:当前域名并非阿里云官方域名,由 CNCF Project Serverless Devs 社区提供,仅供测试使用。
Note: The current domain name is not the official domain name of Alibaba Cloud. It is provided by the CNCF Project Serverless Devs community for testing purposes only
Generated domain (23.38s)
Checking Service, Function, Triggers (1.53s)
Creating Service, Function, Triggers (9.57s)
Creating custom domain (1.7s)
Tips for next step
======================
* Display information of the deployed resource: s info
* Display metrics: s metrics
* Display logs: s logs
* Invoke remote function: s invoke
* Remove Service: s remove service
* Remove Function: s remove function
* Remove Trigger: s remove trigger
* Remove CustomDomain: s remove domain
...

在部署完成之后,最后面会有上图这样的一段输出,记住红线部分的域名,这是可以直接访问。你可以尝试访问一下,如果返回如下信息,说明部署成功了。
{
"error": {
"message": "Invalid URL (GET /)",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
同时,我们也可以通过这个链接https://fcnext.console.aliyun.com/us-west-1/services 去阿里云的控制台找到创建的这个函数服务:

应用中心部署
如果你不喜欢命令行的部署方式的话,还可以通过应用中心实现部署,方法更简单!
第一步:点击链接(https://t.aliyun.com/U/nb5Ka1),进入管理“控制台”,开通函数计算FC

访问应用中心:http://www.devsapp.cn/details.html?name=openai-proxy
第二步:点击“一键部署”按钮

第三步:点击“创建并部署默认环境”

接下来就是等着阿里云的精彩表演:

完成部署之后,可以看到如下图的操作列中,有“访问域名”链接,点击后就可以获取到用来代理的域名了。

使用代理访问API
通过简单的五步操作,我们已经完成了一个OpenAI调用的代理搭建,还记得上面最后配置的域名不?接下来就可以随便找一个开源项目来使用一下试试。
比如可以用这个项目来验证一下:https://github.com/ddiu8081/chatgpt-demo
方法很简单,只需要
- 拉取代码:
git clone git@github.com:ddiu8081/chatgpt-demo.git - 安装依赖:
npm install - 复制
.env.example文件,命名为.env文件,把申请的OPENAI_API_KEY填上,再把OPENAI_API_BASE_URL填写上面配置好的代理地址,比如:http://openai-proxy.abc123.com

- 启动应用:
npm start,控制台输出如下信息,代表启动成功
> chatgpt-api-demo@0.0.1 start
> astro dev
astro v2.1.7 started in 209ms
┃ Local http://localhost:3000/
┃ Network use --host to expose
- 打开浏览器,访问:http://localhost:3000/,可以看到如下页面:

尝试给他设定一个角色,然后发几句话试试吧,如果可以收到AI回复,那就代表已经完成代理。
当然,你也可以选择很多其他的应用来验证和使用,比如下面这些有趣的项目:
总结
通过本文的方法搭建之后,由于已经有一个位于海外的调用来源,所以在本地开发和线上测试的时候,可以都直接用同一个API Key即可,本地日常使用也不需要采用其他特殊手段了,是不是安逸不少呢?
最后,聊聊为什么选择函数计算来部署,主要还是几个方面的考虑:
- 轻松部署:可以看到只需要简单几步,就完成了,非常适合这类轻量级的应用部署。
- 免运维:几乎不需要运维,大大减少了日常繁琐的精力投入,可以更专注业务开发了。
- 省钱利器:函数计算拥有弹性伸缩的能力,最小可以缩为零,也就是如果不调用,都不会产生费用。
进一步思考下,函数计算还是非常适合于开发ChatGPT应用的。由于OpenAPI的API Key是按量计费的,函数计算也是按量计费的,那么这样的按量计费模式可以继续传递到用户侧。如果用户侧的调用实现采用函数计算的方式来部署,那么可以说除了基础控制模块存在固定成本之外,用户侧的成本和收益是强绑定关系。只要架构合理,充分利用函数计算的弹性伸缩能力,那就可以构建出一个低成本运行但却又能自动应对突发大流量的强壮应用。
其实,巧妙的应用函数计算来构建偏向用户侧的应用,不光对于ChatGPT有用。对于一些SaaS应用的场景来说,也可以深入思考和尝试,除了弹性伸缩的能力之外。借助函数计算提供的API能力,还能利用其实现SaaS租户的资源隔离。写着写着似乎又偏题了…
回到ChatGPT的正题,如果你还在纠结,未来ChatGPT是否会淘汰程序员的话,那就一起行动起来吧!与其被ChatGPT取代,不如征服ChatGPT,做它的主人!
参考资料
- https://github.com/Ice-Hazymoon/openai-scf-proxy/
- https://www.aliyun.com/product/fc
- https://github.com/ddiu8081/chatgpt-demo
欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源
两条命令搞定 ChatGPT API 的调用问题的更多相关文章
- centos7以上安装python3,一条命令搞定。
直接复制下面的命令就搞定 yum install python34 python34-pip python34-setuptools 使用方法: python3 ---.py pip3 install ...
- 强大的windbg定位内存泄露,两句命令搞定!
1.简单配置在windbg程序目录下有个gflags.exe,运行后设置: 运行CMD.EXE,输入"D:\Debugging Tools for Windows (x86)\gflags. ...
- 四条命令搞定mysql主从
一 . 环境准备 先上拓扑图
- 【网站建设】Linux上安装MySQL - 12条命令搞定MySql
从零开始安装mysql数据库 : 按照该顺序执行 : a. 查看是否安装有mysql:yum list installed mysql*, 如果有先卸载掉, 然后在进行安装; b. 安装mysql客 ...
- Linux上安装MySQL - 12条命令搞定MySql
从零开始安装mysql数据库 : 按照该顺序执行 : a. 查看是否安装有mysql:yum list installed mysql*, 如果有先卸载掉, 然后在进行安装; b. 安装mysql客 ...
- 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)
前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...
- 一条SQL搞定信息增益的计算
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 周东谕,2011年加入腾讯,现任职于腾讯互娱运营部数据中心,主要从事游戏相关的数据分析和挖掘工作. 信息增益原 ...
- 对百度WebUploader的二次封装,精简前端代码之图片预览上传(两句代码搞定上传)
前言 本篇文章上一篇: 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传) 此篇是在上面的基础上扩展出来专门上传图片的控件封装. 首先我们看看效果: 正文 使用方式同 ...
- [转] Java程序员学C#基本语法两个小时搞定(对比学习)
Java程序员学C#基本语法两个小时搞定(对比学习) 对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. ...
- 怎样在两小时内搞定 OpenStack 部署?(转)
怎样在两小时内搞定 OpenStack 部署? OpenStack的安装是一个难题,组件众多,非常麻烦.如果手工部署OpenStack,可能需要好几天,使用RDO,就是几个命令,再加一两个小时的等待. ...
随机推荐
- Go语言中密码加密校验
使用go自带的库bcrypt bcrypt是不可逆的加密算法,无法通过解密密文得到明文. bcrypt和其他对称或非对称加密方式不同的是,不是直接解密得到明文,也不是二次加密比较密文,而是把明文和存储 ...
- Python抓取数据具体流程
之前看了一段有关爬虫的网课深有启发,于是自己也尝试着如如何过去爬虫百科"python"词条等相关页面的整个过程记录下来,方便后期其他人一起来学习. 抓取策略 确定目标:重要的是先确 ...
- Python爬虫之Scrapy框架爬虫实战
Python爬虫中Scrapy框架应用非常广泛,经常被人用于属于挖掘.检测以及自动化测试类项目,为啥说Scrapy框架作为半成品我们又该如何利用好呢 ?下面的实战案例值得大家看看. 目录: 1.Scr ...
- jsp第8个作业
public boolean addMail(Msg msg){ Statement st =null; Connection con=null; try{ //获取连接 con = getConne ...
- OSIDP-内存管理-07
专业术语 页框:内存中固定长度的块. 页:外存中固定长度的块. 段:外存中可变长度的块. 内存管理需求 重定位:程序从内存换出到外存后,再换回内存时,在内存空间中的位置和原先的位置有极大可能不相同.此 ...
- 【PostgreSql】more than one owned sequence found
do --check seq not in sync $$ declare _r record; _i bigint; _m bigint; begin for _r in ( Select DIST ...
- Android studio SDK配置
因为两个月前装过一次Android studio,所以完全按教程走不通. 已有Android studio的情况下,先在configue下配置SDK的位置,这里可能会报一个错,platforms不存在 ...
- sql server clr json to table
背景 SQL SERVER 2016 之前版本不支持 直接解析json 步骤: 1 vs 数据库项目 2 生成dll 3 加入信任 DECLARE @hash AS BINARY(64) = (SEL ...
- 解决和根源:Unsolicited response received on idle HTTP channel starting with xxx
环境:golang,使用http client,服务器:iis +aspx.net动作:head请求或其他此问题见于各种请求情况.核心是,http在活动期间收到了非预期的信息.一开始我也很纳-闷,因为 ...
- python 部署django项目到公网 无法连接
https://blog.csdn.net/xiongzaiabc/article/details/108448390 服务器后台运行: https://www.jianshu.com/p/4041c ...