ChatGPT 應用開發(一)ChatGPT OpenAI API 免代理調用方式(通過 Cloudflare 的 AI Gateway)

前言

開發 ChatGPT 應用,我覺得最前置的點就是能使用 ChatGPT API 接口。首先我自己要能成功訪問,這沒問題,會魔法就可以本地調用。

那用戶如何調用到我的應用 API 呢,我的理解是通過用戶能訪問到的中轉服務器向 OpenAI 發起訪問。所以我需要準備代理。

我現在使用的是 Cloudflare 代理,他們專門開放了一個 AI Gateway 功能,用于在全球各地發起對 OpenAI API 的訪問。現在測試階段好像還是免費的,而且 Cloudflare 每天有10w次免費處理請求的機會。

這里只是我個人的拙見,如果大佬們有更好的方法歡迎批評指正!

如何調用 ChatGPT API

首先我們不急著一步到位。我們先嘗試一下自己通過外網的方式調用 ChatGPT API,看能否成功訪問。

ChatGPT 賬號申請和魔法的部分我就不詳細展開了,相信大多數有開發應用需求的同學都已經準備好了。

API 使用需要注冊一個自己賬號的密鑰,往賬戶里充值一定的起始金額(20$)。官方教程如下:Quickstart tutorial - OpenAI API 如果自己已經可以實現本地運行程序調用 API 的同學這部分可以跳過了。

需要注意的點:

  1. 密鑰申請總是出錯。這里我是瘋狂的嘗試注冊密鑰,刷了可能快幾十遍才刷出來。結果第一次成功注冊,忘記保存了,順手把頁面關掉了,但是密鑰類似 github ssh key,只有注冊成功的時候會完整顯示,后面就看不到了,所以我又刪掉了舊密鑰重新刷了很多次。

    1701953583516

  2. 自己測試能否成功調用 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)
    

    窮孩子是這樣的。

    1701953938221

Cloudflare AI Gateway 配置

現在可以使用 ChatGPT API 了,但是應用目標用戶不一定能使用(如果你要求用戶必須開魔法才能用你的軟件,會損失一大批用戶的)。我們利用 Cloudflare 代理中轉請求。

cloudflare 控制臺:https://dash.cloudflare.com/

注冊賬號后,在左側可以看到 AI 板塊(大家可以忽略掉我的 jingqinggpts.com,那個不用配置,是我自己瞎嘗試的hh)。

1701954237000

點擊 ‘AI’ - ‘AI Gateway’ 進行注冊。

注冊完成后,在 ‘$UserName API Endpoints’ 可以看到 API 使用方法示例。

1701954342610

1701954532389

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 請求):

1701954792336

1701954989996

[{"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 查看有無收到回應。

image-20231207211849624

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}")

回應如下:

1701955448102

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212789.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212789.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212789.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

成都工業學院Web技術基礎(WEB)實驗四:CSS3布局應用

寫在前面 1、基于2022級計算機大類實驗指導書 2、代碼僅提供參考,前端變化比較大,按照要求,只能做到像,不能做到一模一樣 3、圖片和文字僅為示例,需要自行替換 4、如果代碼不滿足你的要求,請尋求其他的…

Echarts 環形圖配置 環形半徑(radius) 修改文本位置(label) 南丁格爾圖(roseType)

數據 const data [{ name: 華為, value: 404 },{ name: 小米, value: 800 }, { name: 紅米, value: 540 }, { name: 蘋果, value: 157 }]設置南丁格爾圖 roseType: area設置標簽位置 label: {show: true,position: center // center 中間展示 outside 外側展示 inside 內側…

C語言動態內存經典筆試題分析

C語言動態內存經典筆試題分析 文章目錄 C語言動態內存經典筆試題分析1. 題目一2. 題目二3. 題目三4. 題目四 1. 題目一 void GetMemory(char *p){p (char *)malloc(100);} void Test(void){char *str NULL;GetMemory(str);strcpy(str, "hello world");printf(str)…

Qt設置類似于qq登錄頁面

頭文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QWindow> #include <QIcon> #include <QLabel> #include <QMovie> #include <QLineEdit> #include <QPushButton>QT_BEGIN_NAMESPACE namespace Ui { class…

中國移動公網IP申請過程

一、動機 由于從事互聯網行業10年&#xff0c;一直從事移動端&#xff08;前端&#xff09;開發工作&#xff0c;未曾深入了解過后端技術&#xff0c;以至于工作10年也不算進入互聯網的門。 所以準備在自己家用設備上搭建各種場景的服務器&#xff08;云服務對個人來說成本偏…

數據分析基礎之《numpy(2)—ndarray屬性》

一、ndarray的屬性 1、屬性方法 屬性名字屬性解釋ndarray.shape數組維度的元組&#xff08;形狀&#xff09;ndarray.ndim數組維數ndarray.size數組中的元素數量ndarray.itemsize一個數組元素的長度&#xff08;字節&#xff09;ndarray.dtype數組元素的類型使用方法 數組名.…

大數據技術8:StarRocks極速全場景MPP數據庫

前言&#xff1a;StarRocks原名DorisDB&#xff0c;是新一代極速全場景MPP數據庫。StarRocks 是 Apache Doris 的 Fork 版本。StarRocks 連接的多種源。一是通過這個 CDC 或者說通過這個 ETL 的方式去灌到這個 StarRocks 里面&#xff1b;二是還可以去直接的和這些老的 kafka 或…

阿里云服務器跨域問題解決方案

首先看一下原始代碼&#xff1a; Bean public CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source new UrlBasedCorsConfigurationSource();CorsConfiguration corsConfiguration new CorsConfiguration();corsConfiguration.addAllowedOrigin("http://…

spark rdd和dataframe的區別,結合底層邏輯

在 Apache Spark 中&#xff0c;RDD&#xff08;Resilient Distributed Dataset&#xff09;和 DataFrame 是處理數據的兩種不同的抽象。 RDD (Resilient Distributed Dataset) 底層實現&#xff1a; RDD 是 Spark 最初的數據抽象&#xff0c;表示一個分布式的、不可變的數據集…

03-詳解Nacos注冊中心的配置步驟和功能

Nacos注冊中心 服務注冊到Nacos Nacos是SpringCloudAlibaba的組件也遵循SpringCloud中定義的服務注冊和服務發現規范,因此使用Nacos與使用Eureka對于微服務來說并沒有太大區別 主要差異就是依賴不同,服務地址不同 第一步: 在父工程cloud-demo模塊的pom.xml文件中引入Spring…

nlkt中BigramAssocMeasures.pmi()方法的傳參和使用

這個問題找遍全網沒看到詳細的介紹&#xff0c;最后用讀代碼數學公式的方法才理解怎么用。 BigramAssocMeasures.pmi 作用&#xff1a;計算x和y的互信息&#xff08;互信息是什么我就不科普啦&#xff09; 這里有個誤區剛開始我以為是計算兩個詞之間的依賴程度&#xff0c;但…

flstudio21.3.2304高級版水果編曲音樂軟件

flstudio高級版是一款適用于廣泛領域的音頻編輯軟件。它支持多通道混音器和VST插件&#xff0c;包括數百種樂器和效果插件。它還為您提供了一個樂譜編輯器&#xff0c;需要對不同樂器的節奏進行必要的編輯。Flstudio具有許多內置電子合成聲音&#xff0c;可提供更廣泛的電子聲音…

自動駕駛的汽車構造

1、傳動系統 連接發動機和驅動車輪之間的動力傳動裝置&#xff0c;分為傳統動力傳動、純電動力傳動、混合動力傳動 傳動系統中幾個重要的部件 1&#xff09;離合器 直接與發動機相連的部件&#xff0c;通過摩擦、液體介質、磁力傳遞扭矩 作用&#xff1a; 保證平穩起步&a…

【Spring教程25】Spring框架實戰:從零開始學習SpringMVC 之 SpringMVC入門案例總結與SpringMVC工作流程分析

目錄 1.入門案例總結2. 入門案例工作流程分析2.1 啟動服務器初始化過程2.2 單次請求過程 歡迎大家回到《Java教程之Spring30天快速入門》&#xff0c;本教程所有示例均基于Maven實現&#xff0c;如果您對Maven還很陌生&#xff0c;請移步本人的博文《如何在windows11下安裝Mave…

Spring 面向切面編程(AOP)

一、aop介紹 &#xff08;一&#xff09;前言 一般的后端開發流程是縱向開發&#xff0c;就是controller&#xff08;控制層&#xff09;->service&#xff08;業務層&#xff09;->mapper&#xff08;數據持久層&#xff09;&#xff0c;Spring采用動態代理技術可以在…

Wireshark添加自定義協議解析

最終效果如下&#xff1a; 參考文檔&#xff1a;https://mika-s.github.io/topics/ 此參考文檔中7個例子教我們如何編寫lua腳本去識別我們自定義的協議 安裝Wireshark https://www.wireshark.org/上下載安裝包安裝即可。我的安裝路徑是D:\Install\Wireshark&#xff0c;在W…

Leetcode—389.找不同【簡單】

2023每日刷題&#xff08;五十五&#xff09; Leetcode—389.找不同 實現代碼 char findTheDifference(char* s, char* t) {int len strlen(s);int len2 len 1;int a[26] {0};int b[26] {0};if(len 0) {return t[0];}for(int i 0; i < len; i) {int idx s[i] - a;…

HTML的img常見應用屬性

1、src&#xff1a;指定圖像的URL&#xff0c;即圖像的路徑。 2、alt&#xff1a;指定圖像的替代文本&#xff0c;當圖像無法顯示時&#xff0c;會顯示替代文本。 3、width&#xff1a;指定圖像的寬度&#xff0c;可以使用像素值或百分比。 4、height&#xff1a;指定圖像的…

【設計模式--創建型--建造者模式】

建造者模式 建造者模式概述結構結果優缺點使用場景 將上述案例改為鏈式調用結果 建造者模式 概述 將一個復雜對象的構建與表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示。 分離了部件的構建&#xff08;由Builder來負責&#xff09;和裝配&#xff08;由Direct…

辦公word-從不是第一頁添加頁碼

總結 實際需要注意的是&#xff0c;分隔符、分節符和分頁符并不是一個含義 分隔符包含其他兩個&#xff1b;分頁符&#xff1a;是增加一頁&#xff1b;分節符&#xff1a;指將文檔分為幾部分。 從不是第一頁插入頁碼1步驟 1&#xff0c;插入默認頁碼 自己可以測試時通過**…