前言
開發 ChatGPT 應用,我覺得最前置的點就是能使用 ChatGPT API 接口。首先我自己要能成功訪問,這沒問題,會魔法就可以本地調用。
那用戶如何調用到我的應用 API 呢,我的理解是通過用戶能訪問到的中轉服務器向 OpenAI 發起訪問。所以我需要準備代理。
我現在使用的是 Cloudflare 代理,他們專門開放了一個 AI Gateway 功能,用于在全球各地發起對 OpenAI API 的訪問。現在測試階段好像還是免費的,而且 Cloudflare 每天有10w次免費處理請求的機會。
這里只是我個人的拙見,如果大佬們有更好的方法歡迎批評指正!
如何調用 ChatGPT API
首先我們不急著一步到位。我們先嘗試一下自己通過外網的方式調用 ChatGPT API,看能否成功訪問。
ChatGPT 賬號申請和魔法的部分我就不詳細展開了,相信大多數有開發應用需求的同學都已經準備好了。
API 使用需要注冊一個自己賬號的密鑰,往賬戶里充值一定的起始金額(20$)。官方教程如下:Quickstart tutorial - OpenAI API 如果自己已經可以實現本地運行程序調用 API 的同學這部分可以跳過了。
需要注意的點:
-
密鑰申請總是出錯。這里我是瘋狂的嘗試注冊密鑰,刷了可能快幾十遍才刷出來。結果第一次成功注冊,忘記保存了,順手把頁面關掉了,但是密鑰類似 github ssh key,只有注冊成功的時候會完整顯示,后面就看不到了,所以我又刪掉了舊密鑰重新刷了很多次。
-
自己測試能否成功調用 API,其實也不用測試官方用例哈哈,他那個 token 太多太費錢了,我一般就是只測試個 hello 看有沒有回復。
from openai import OpenAI client = OpenAI()completion = client.chat.completions.create(model="gpt-3.5-turbo",messages=[{"role": "user", "content": "hello"}] )print(completion.choices[0].message)
窮孩子是這樣的。
Cloudflare AI Gateway 配置
現在可以使用 ChatGPT API 了,但是應用目標用戶不一定能使用(如果你要求用戶必須開魔法才能用你的軟件,會損失一大批用戶的)。我們利用 Cloudflare 代理中轉請求。
cloudflare 控制臺:https://dash.cloudflare.com/
注冊賬號后,在左側可以看到 AI 板塊(大家可以忽略掉我的 jingqinggpts.com,那個不用配置,是我自己瞎嘗試的hh)。
點擊 ‘AI’ - ‘AI Gateway’ 進行注冊。
注冊完成后,在 ‘$UserName API Endpoints’ 可以看到 API 使用方法示例。
curl -X POST https://gateway.ai.cloudflare.com/v1/9f02226921e1ee7cd9adb9c655bb2883/jingqinggpts/openai/chat/completions \-H 'Authorization: Bearer XXX' \-H 'Content-Type: application/json' \-d ' {"model": "gpt-3.5-turbo","messages": [{"role": "user","content": "What is Cloudflare?"}]}
'
注意,Bearer 后面的 XXX 要改為自己的 API 密鑰。
content 里的內容也是可以修改的。
Postman 發送 post 請求調用 API
接下來我們就可以嘗試通過發送 http post 請求到 cloudflare 的 AI Gateway Endpoint 調用 API,不用魔法。
postman 是我個人選用的 http 測試應用,當然不只局限于這個,curl 等方法都可以。
配置如下(可以把上面的 curl 語句粘貼到地址欄里,會自動解析地址和 header 部分,json data 需要補充)(注意選擇 post 請求):
[{"provider": "openai","endpoint": "chat/completions","headers": {"authorization": "Bearer XXX","content-type": "application/json"},"query": {"model": "gpt-3.5-turbo","messages": [{"role": "user","content": "hello"}]}}
]
點擊 send 查看有無收到回應。
Python 發送 post 請求調用 API
本質上和上面是一樣的,只是 Python 調用了 request 包發送 post 請求。我這里就是給大家提供一下我的調用思路。
import requests
import jsonALLOWED_PROVIDERS = ["openai", "azure-openai", "huggingface"]def send_request(python_data):# provider = json_request["provider"]# if provider not in ALLOWED_PROVIDERS:# raise ValueError(f"Provider '{provider}' is not allowed.")url = f"https://gateway.ai.cloudflare.com/v1/9f02226921e1ee7cd9adb9c655bb2883/jingqinggpts"headers = {'Content-Type': 'application/json',}response = requests.post(url, json=python_data, headers=headers)return response.json()json_data = """
[{"provider": "openai","endpoint": "chat/completions","headers": {"authorization": "Bearer XXX","content-type": "application/json"},"query": {"model": "gpt-3.5-turbo","messages": [{"role": "user","content": "hello"}]}}
]
"""python_data = json.loads(json_data)
print(python_data)try:response = send_request(python_data)print(response)
except Exception as e:print(f"Error sending request: {e}")print(f"Response content: {python_data}")
回應如下: