兩條命令搞定 ChatGPT API 的呼叫問題

程式猿DD發表於2023-03-30

自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混亂,稍有不慎就有可能被封號。所以,我們最好還是有一個穩定的位於國外的呼叫來源,這樣日常開發除錯就能更效率一些。

那麼如何快捷方便的來搞定呢?下面就給大家分享一個利用阿里雲函式計算(有大量免費試用額度)來實現的方案。

命令列部署

準備工作

  1. 點選連結(https://t.aliyun.com/U/nb5Ka1),進入管理“控制檯”,開通函式計算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 去阿里雲的控制檯找到建立的這個函式服務:

應用中心部署

如果你不喜歡命令列的部署方式的話,還可以透過應用中心實現部署,方法更簡單!

第一步:點選連結(https://t.aliyun.com/U/nb5Ka1),進入管理“控制檯”,開通函式計算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
  1. 開啟瀏覽器,訪問:http://localhost:3000/,可以看到如下頁面:

嘗試給他設定一個角色,然後發幾句話試試吧,如果可以收到AI回覆,那就代表已經完成代理。

當然,你也可以選擇很多其他的應用來驗證和使用,比如下面這些有趣的專案:

總結

透過本文的方法搭建之後,由於已經有一個位於海外的呼叫來源,所以在本地開發和線上測試的時候,可以都直接用同一個API Key即可,本地日常使用也不需要採用其他特殊手段了,是不是安逸不少呢?

最後,聊聊為什麼選擇函式計算來部署,主要還是幾個方面的考慮:

  1. 輕鬆部署:可以看到只需要簡單幾步,就完成了,非常適合這類輕量級的應用部署。
  2. 免運維:幾乎不需要運維,大大減少了日常繁瑣的精力投入,可以更專注業務開發了。
  3. 省錢利器:函式計算擁有彈性伸縮的能力,最小可以縮為零,也就是如果不呼叫,都不會產生費用。

進一步思考下,函式計算還是非常適合於開發ChatGPT應用的。由於OpenAPI的API Key是按量計費的,函式計算也是按量計費的,那麼這樣的按量計費模式可以繼續傳遞到使用者側。如果使用者側的呼叫實現採用函式計算的方式來部署,那麼可以說除了基礎控制模組存在固定成本之外,使用者側的成本和收益是強繫結關係。只要架構合理,充分利用函式計算的彈性伸縮能力,那就可以構建出一個低成本執行但卻又能自動應對突發大流量的強壯應用。

其實,巧妙的應用函式計算來構建偏向使用者側的應用,不光對於ChatGPT有用。對於一些SaaS應用的場景來說,也可以深入思考和嘗試,除了彈性伸縮的能力之外。藉助函式計算提供的API能力,還能利用其實現SaaS租戶的資源隔離。寫著寫著似乎又偏題了…

回到ChatGPT的正題,如果你還在糾結,未來ChatGPT是否會淘汰程式設計師的話,那就一起行動起來吧!與其被ChatGPT取代,不如征服ChatGPT,做它的主人!

參考資料

  1. https://github.com/Ice-Hazymoon/openai-scf-proxy/
  2. https://www.aliyun.com/product/fc
  3. https://github.com/ddiu8081/chatgpt-demo

歡迎關注我的公眾號:程式猿DD。第一時間瞭解前沿行業訊息、分享深度技術乾貨、獲取優質學習資源