通过阿里云函数计算解决ChatGPT API的调用问题

ChatGPT系列文章


与其被ChatGPT取代,不如征服ChatGPT,做它的主人!

文章目录

  • 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混乱,稍有不慎就有可能被封号。所以,我们最好还是有一个稳定的位于国外的调用来源,这样日常开发调试就能更效率一些。

那么如何快捷方便的来搞定呢?下面就给大家分享一个利用阿里云函数计算(有大量免费试用额度)来实现的方案。


命令行部署

准备工作

点击这里,进入管理“控制台”,开通函数计算FC
在这里插入图片描述
1、安装最新版本的nodejs,不会的可以看官网:https://nodejs.org/
2、执行命令安装Serverless Devs Tool

npm安装:
$ npm install @serverless-devs/s -g

yarn安装:
$ yarn global add @serverless-devs/s

1、通过该链接(https://usercenter.console.aliyun.com/#/manage/ak ),获取阿里云的AccessKey。一定要把这里获取的AccessKey ID和AccessKey Secret记下来,下面马上要用。
2、为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 去阿里云的控制台找到创建的这个函数服务:
在这里插入图片描述

应用中心部署

如果你不喜欢命令行的部署方式的话,还可以通过应用中心实现部署,方法更简单!

第一步:点击这里,进入管理“控制台”,开通函数计算FC
在这里插入图片描述
访问应用中心:http://www.devsapp.cn/details.html?name=openai-proxy

第二步:点击“一键部署”按钮
在这里插入图片描述
第三步:点击“创建并部署默认环境”
在这里插入图片描述
接下来就是等着阿里云的精彩表演:
在这里插入图片描述
完成部署之后,可以看到如下图的操作列中,有“访问域名”链接,点击后就可以获取到用来代理的域名了。
在这里插入图片描述

使用代理访问API

通过简单的五步操作,我们已经完成了一个OpenAI调用的代理搭建,还记得上面最后配置的域名不?接下来就可以随便找一个开源项目来使用一下试试。

比如可以用这个项目来验证一下:https://github.com/ddiu8081/chatgpt-demo

方法很简单,只需要

1、拉取代码:git clone git@github.com:ddiu8081/chatgpt-demo.git
2、安装依赖:npm install
3、复制.env.example文件,命名为.env文件,把申请的OPENAI_API_KEY填上,再把OPENAI_API_BASE_URL填写上面配置好的代理地址,比如:http://openai-proxy.abc123.com
在这里插入图片描述

1、启动应用: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

2、打开浏览器,访问:http://localhost:3000/,可以看到如下页面:
在这里插入图片描述
尝试给他设定一个角色,然后发几句话试试吧,如果可以收到AI回复,那就代表已经完成代理。

当然,你也可以选择很多其他的应用来验证和使用,比如下面这些有趣的项目:

https://github.com/mckaywrigley/chatbot-ui
https://github.com/logspace-ai/langflow

总结

通过本文的方法搭建之后,由于已经有一个位于海外的调用来源,所以在本地开发和线上测试的时候,可以都直接用同一个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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/8216.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法训练第四十九天 | 121.买卖股票的最佳时机、122.买卖股票的最佳时机II

动态规划part10121.买卖股票的最佳时机题目描述思路暴力贪心动态规划122.买卖股票的最佳时机II题目描述思路121.买卖股票的最佳时机 题目链接:121.买卖股票的最佳时机 参考:https://programmercarl.com/0121.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9…

entos7系统部署网站项目教程【超详细教程】

CentOS 7 系统部署项目教程 本文将介绍如何在 CentOS 7 系统上部署项目。在本教程中,我们将使用 Apache、PHP 和 MySQL 作为我们的主要开发工具。对于初学者来说,这是一个入门级的教程,旨在提供一些基本的概念和工具,以帮助您更好…

实践分享:如何在自己的App 中引入AI 画图

最近AIGC 简直是杀疯了,领导动不动就让我们在APP 里引入大语言模型,引入AI画图……说搞就搞!本期基于最近在app 里引入AI画图小程序的操作,给大家做一波实践分享。 Scribble Diffusion 是一个简单的在线服务,它使用 A…

Kotlin 面向对象(二)

【文字内容源于《疯狂Kotlin讲义》,代码内容原创】 Kotlin 面向对象(一)_桃子不出的博客-CSDN博客 目录 四、隐藏和封装 1、包和导包 2、Kotlin的默认导入 3、使用访问控制符 五、深入构造器 1、主构造器和初始化块 2、次构造器和构…

Redis —缓存常见异常

文章目录缓存雪崩解决办法缓存击穿解决办法缓存穿透缓存穿透的两种常见情况解决办法布隆过滤器工作原理缓存雪崩 大量缓存数据在同一时间过期(失效)或者 Redis 故障宕机时,如果此时有大量的用户请求,都无法在 Redis 中处理&#…

父子组件传值问题

文章目录前言一、问题描述二、问题解决前言 在写毕业设计,涉及了一些前端Vue.js的组件传值知识并出现了相关问题,因此进行记录。 问题 Vue.js的使用不熟练,相关组件、props等掌握不清晰前端代码书写不规范 望指正! 一、问题描述 …

php企业公司员工考勤加班系统

1、系统管理员 负责员工的基本信息管理(包括姓名、工号、所在部门信息的添加、修改和删除)和员工的上下班时间的添加。 公司考勤记录方式为刷上下班卡,卡机自动记录员工上下班时间。我直接跳过这一步,系统管理员每天在员工下班后直…

面试被问到:测试计划和测试方案有什么区别?

面试的时候,很多小伙伴都被面试官问过这个问题 “测试计划和测试方案有什么区别”? 到底有什么区别呢?我们先好好了解下这两个文档。 一、测试计划 1、测试计划是什么? 测试计划是组织管理层面的文件,从组织管理的…

派盘为您的个人数据安家

现如今,我们的生活中有着各种各样的数据。在工作中会有各种文件、邮件;在生活中则有照片和视频等。数据的来源多,时间点不一致且混乱。 数据是否能安全、稳定、长久的存储以及便捷高效的使用对我们来说相当重要。你是否经常出差需要带上电脑或者移动硬盘,想存网盘又怕丢失或…

一篇文章,弄懂蓝牙协议怎么看,进军物联网!

做过物联网相关项目的小伙伴都知道,避免不了和蓝牙,串口通信打交道。所以了解怎么看蓝牙协议基本上可以说是进军物联网的一大助力。很多新人小伙伴刚进入这个行业都是一脸懵逼的,特别是接入的时候,对方直接给了一个文档&#xff0…

【WCH】基于Keil环境CH32F203 GPIO点灯实验

【WCH】基于Keil环境CH32F203 GPIO点灯实验📌相关篇《关于CH32F203程序下载方式说明》 ✨如果是首次入门使用,请先看上面的相关篇内容,了解其下载相关事宜后,再进来学习。 GPIO模式介绍 🌿在应用手册的第十章介绍GPIO…

1mm³大小,世界首个功率破KW的单芯片激光模组诞生

近年来随着技术不断发展,激光雷达的体积、成本也在不断降低,成为了一种受到各行业关注的关键技术。它的用途越发广泛,可用于自动驾驶汽车、大气观测使用的LiDAR传感器,还可以用于医疗保健(治疗和检查分析)、…

给boss直聘的搜索结果加上hr活跃状态,少看点半年活跃的岗位

背景:这段时间找工作,无奈大环境不好,所在城市大部分公司都投了。就是没几个回复的,要么送达,要么已读不回,要么拿了简历没见邀约。然后boss为了争取我们多浏览网站,把一些陈年老醋也拿上台面&a…

阿里巴巴春招的后端面经来啦~

操作系统 一个操作系统,我们在衡量它的内存占用的时候,它一般会有哪些内存的部分? 读者答:堆和栈 补充: 这个其实是问你对free命令的理解。 主机的内存做一些清理的动作。你知道这里面会涉及到对哪些内存区域进行操…

yolov5-v7.0实例分割快速体验

简介 🚀yolov5-v7.0版本正式发布,本次更新的v7.0则是全面的大版本升级,最主要的功能就是全面集成支持了实例分割,yolov5已经集成检测、分类、分割任务。 前面几篇文章已经介绍过关于Yolov5的一些方面 yolov5目标检测:https://bl…

CIE (PCI Express) 1x, 4x, 8x, 16x总线端子说明

1、概述 PCI Express作为一种高带宽、低引脚数、串行、互连技术。它是为了取代旧的PCI和AGBus标准而设计的。PCIe比旧标准有许多改进,包括更高的最大系统总线吞吐量、更低的I/O引脚数和更小的物理占地面积、更好的总线设备性能扩展、更详细的错误检测和报告机制&am…

4.7--计算机网络之TCP篇之socket编程--(复习+深入)---好好沉淀,加油呀

1.针对 TCP 应该如何 Socket 编程? 1.服务端和客户端初始化 socket,得到文件描述符; 2.服务端调用 bind,将 socket 绑定在指定的 IP 地址和端口; 3.服务端调用 listen,进行监听; 4.服务端调用 accept&#…

版本控制工具Git的常见命令与使用方法

目录概述基础命令提交代码把代码提交到暂存区把代码提交到版本库同一笔提交想追加修改回退代码对代码进行了修改,想回退工作区的修改执行了add操作,想回退到工作区执行了commit操作,想撤销修改执行了commit操作,想回退到暂存区挑代…

二、Java 并发编程(1)

本章概要 常见的 Java 线程创建方式 继承 Thread 类实现 Runnable 接口通过 ExecutorService 和 Callable 接口实现有返回值的线程基于线程池 Java 线程池的原理 线程复用线程池的核心组件和核心类Java 线程池的工作流程线程池的拒绝策略 相对于传统的单线程,多线…

Nuxt项目动态路由带参接参

我们创建一个Nuxt项目 然后 在pages目录下创建 engineering.vue文件 参考代码如下 <template><div><div>工程界面</div><nuxt-child></nuxt-child></div> </template><script> export default {name: EngineeringPage …
最新文章