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 json

ALLOWED_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

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

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

相关文章

Linux篇:进程间通信

一、进程间通信原理: 1、通信是有成本的:两个或者多个进程,实现数据层面的交互,因为进程独立性的存在,导致进程通信的成本比较高。 2、进程间通信的方式: ①基本数据 ②发送命令 ③某种协同 ④通知 .....…

C++新经典模板与泛型编程:用成员函数重载实现std::is_class

用成员函数重载实现is_class std::is_class功能,是一个C11标准中用于判断某个类型是否为一个类类型(但不是联合类型)的类模板。当时在讲解的时候并没有涉及std::is_class的实现代码,在这里实现一下。简单地书写一个IsClass类模板…

Linux学习笔记7-IIC的应用和AP3216C

接下来进入其他两种串行通信方式:SPI和I2C的学习,因为以后的项目中会用到这些通信方式,而且正点原子的开发板里面也有用I2C和SPI通信的传感器来做实例,分别是一个距离传感器和六轴陀螺仪,这样就可以很好的通过实例来学…

TCP通讯

第二十一章 网络通信 本章节主要讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 接下来会一一讲解 TCP通信 TCP通信方式呢 主要的通讯方式是一对一的通讯方式,也有着优点和缺点…

maven-assembly-plugin 自定义打包

我想把input文件夹给打包进去 pom文件 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><executions><execution><!-- 配置执行器 --><i…

黑苹果之主板篇

一、什么是主板 主板&#xff0c;又叫主机板&#xff08;mainboard&#xff09;、系统板&#xff08;systemboard&#xff09;、或母板&#xff08;motherboard&#xff09;&#xff0c;是计算机最基本的同时也是最重要的部件之一。主板一般为矩形电路板&#xff0c;上面安装了…

如何使用HadSky搭配内网穿透工具搭建个人论坛并发布至公网随时随地可访问

文章目录 前言1. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3 Cpolar稳定隧道&#xff08;本地设置&#xff09;2.4 公网访问测试 总结 前言 经过多年的基础…

ubuntu18.04 vscode 安装 vue.volar Vue Language Features (Volar) , vue3 必备插件

直接在vscode 里面下载老是失败&#xff0c;不是网络问题&#xff0c;而是vue.volar插件配置的vscode版本与vscode版本不一致导致出现安装失败 官网下载最新的 vue.volar插件 https://marketplace.visualstudio.com/ 官网搜索 vue.volar 然后打开 Vue Language Features (Vol…

基于互一致性学习的半监督医学图像分割

Mutual consistency learning for semi-supervised medical image segmentation 基于互一致性学习的半监督医学图像分割背景贡献半监督学习 其它缓解过拟合的方法实验方法损失函数Thinking 基于互一致性学习的半监督医学图像分割 Medical Image Analysis 81 (2022) 102530 背…

排序:直接选择排序

直接选择排序&#xff1a; 本质&#xff1a; 直接选择排序的本质就是在数组中进行遍历挑选出最大的元素&#xff0c;讲最大的元素放到对应的位置后&#xff0c;再次选出次大的位置&#xff0c;而后又放到对应的位置..........................直到数组成为一个有序序列。 优…

编程应用实例,养生馆会员管理系统软件统计查询教程

一、前言 编程应用实例&#xff0c;养生馆会员管理系统软件&#xff0c; 导航栏菜单有 系统设置&#xff1a;可以设置操作员的权限以及打印机参数设置。 会员信息登记&#xff1a;可以直接用手机号登记电子会员卡 会员卡充值&#xff1a;可以直接报手机号充值&#xff0c;…

蓝牙挂耳式耳机什么牌子好?推荐几款自用不错的蓝牙耳机

"放弃纠结&#xff0c;挑选蓝牙挂耳耳机从此不再头疼&#xff01;面对市面上琳琅满目的选择&#xff0c;到底哪个蓝牙耳机好用&#xff0c;成了一个谜&#xff0c;我这里有几款个人亲测过的蓝牙挂耳式耳机&#xff0c;让你在自用的道路上不再盲目&#xff0c;无论是办公、…

【项目日记(一)】高并发内存池项目介绍

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:项目日记-高并发内存池⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 项目日记 1. 前言2. 什么是高并发内存池…

【动态规划】02斐波那契数列模型_三步问题(easy)

题目链接&#xff1a;leetcode三步问题 目录 题目解析&#xff1a; 算法原理: 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码: 题目解析&#xff1a; 题目让我们求小孩到达n阶台阶的时候&#xff0c;可以有多少上楼梯方式&#xff1b; 由题可得&a…

作业12.7

1.实现一个登录窗口界面 源文件&#xff1a; #include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {//设置界面大小&#xff0c;名称与图标this->setFixedSize(1280,720);this->setWindowTitle("泰坦陨落");thi…

Adobe系列软件:创意之旅的得力助手

在数字创意领域&#xff0c;Adobe系列软件一直以其卓越的性能和广泛的应用而备受瞩目。从图像处理、视频编辑到音频编辑&#xff0c;从网页开发到排版设计&#xff0c;这些软件都提供了强大的功能和工具&#xff0c;帮助用户实现他们的创意。 让我们详细介绍这些软件的作用&…

使用python操作excel文档

导入xlsxwriter包 python轻量化的语言&#xff0c;用来操作文档简直易如反掌&#xff0c;首先你需要导入的是import xlsxwriter包&#xff0c;他包括了操作文档所需要的全部工具方法&#xff0c;你只需要调用就好了。 操作excel指南 首先你需要创建一个文件xlsxwriter.Workb…

1.10 C语言之外部变量与作用域

1.10 C语言之外部变量与作用域 一、外部变量概述二、练习 一、外部变量概述 我们说&#xff0c;函数&#xff08;不管是main函数还是其他函数&#xff09;内部定义的变量&#xff0c;其作用范围都只在函数内部&#xff0c;我们把这些变量叫做自动变量或者局部变量。除了局部变…

从文字到使用,一文读懂Kafka服务使用

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

【UE5】瞬移+马赛克过渡效果

效果 步骤 1. 新建一个工程&#xff0c;创建一个Basic关卡 2. 添加第三人称游戏资源到内容浏览器 3. 新建一个材质&#xff0c;这里命名为“M_Pixel” 打开“M_Pixel”&#xff0c;设置材质域为“后期处理” 在材质图表中添加如下节点 此时效果如下&#xff0c;已经有马赛克的…