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.hqwc.cn/news/256024.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM实现的公文管理系统

一、技术架构 前端:jsp | jquery | bootstrap 后端:spring | springmvc | mybatis 环境:jdk1.8 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 首页 03. 系统管理-角色管理 04. 系统管理-功能管理 05. 系统管理-用…

猫咪瘦弱的原因是什么?适合给消瘦猫咪长肉吃的猫罐头分享

很多小猫咪吃得很多,但是还是很瘦,这让很多猫主人感到困惑,猫咪瘦弱的原因是什么呢?铲屎那么多年,还是有点子养猫知识在身上的。那么,小猫咪瘦弱的原因是什么呢?让我们看看是不是这些原因导致的…

详细解读电力DLT698.45-2017通信规约--正向有功总电能

建立连接请看这篇:详细解读DLT698.45-2017通信规约--预连接响应http://mp.weixin.qq.com/s?__bizMzA3NjAwMjQzMQ&mid2652026396&idx1&sna0a17f005d23136c922a7c381ddb7e75&chksm8481f30cb3f67a1a94e66db77e61fe73c22b1904fcdbb0144108e132b265e7b4…

黑苹果之显卡篇

一、什么是显卡 显卡GPU(Video card、Display card、Graphics card、Video adapter)是个人计算机基础的组成部分之一,将计算机系统需要的显示信息进行转换驱动显示器,并向显示器提供逐行或隔行扫描信号,控制显示器的正…

springboot 在自定义注解中注入bean,解决注入bean为null的问题

问题: 在我们开发过程中总会遇到比如在某些场合中需要使用service或者mapper等读取数据库,或者某些自动注入bean失效的情况 解决方法: 1.在构造方法中通过工具类获取需要的bean 工具类代码: import org.springframework.beans…

华为OD机试 - 攀登者1(Java JS Python C)

题目描述 攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。 地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。其中数组元素0代表地面。 例如:[0,1,2,4,3,1,0,0,1,2,3,1,2,1,0],代表如下图所示的地图,地图中有两个山脉位置分别为 1,2,3,4,5…

数字人知识库:Awesome-Talking-Head-Synthesis

数字人知识库:Awesome-Talking-Head-Synthesis 文章目录 数字人知识库:Awesome-Talking-Head-SynthesisDatasetsSurveyAudio-drivenText-drivenNeRF & 3DMetricsTools & SoftwareSlides & Presentations Gihub:https://github.co…

【Python源码保护】02 - pyc

1. python编译过程 Python虽然是一门解释型语言,但Python程序执行时,也需要将源码进行编译生成字节码,然后由Python虚拟机进行执行,因此Python解释器实际是由两部分组成:编译器和虚拟机。 Python程序执行过程和Java类…

网工内推 | 国企网工、运维,厂商认证优先,13薪,带薪年假

01 中百集团 招聘岗位:运维工程师 职责描述: 1、对集团内使用云计算架构(Kubernetes)的系统进行规划、运维及管理相关工作。 2、对集团数据中心系统的大数据基础架构(Cloudera Distribution Hadoop)的规划…

在Windows 11中更改文件的扩展名有几种办法,个别办法可以批量修改

本文介绍了如何在Windows 11中更改文件的文件扩展名。 用简单的方法更改文件扩展名 对于大多数人来说,在Windows 11中更改文件扩展名的最简单方法是在更改文件名的同一个地方进行更改。然而,Windows默认情况下不显示文件扩展名,所以在我们可…

『TypeScript』深入理解变量声明、函数定义、类与接口及泛型

📣读完这篇文章里你能收获到 了解TypeScript变量声明与类型注解掌握TypeScript函数与方法的使用掌握TypeScript类与接口的使用掌握TypeScript泛型的应用 文章目录 一、变量声明与类型注解1. 变量声明2. 类型注解3. 类型推断 二、函数与方法定义1. 函数定义2. 方法定…

JDBC常见的几种连接池使用(C3P0、Druid、HikariCP 、DBCP)(附上代码详细讲解)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍JDBC常见的几种连接池使用(C3P0、Druid、HikariCP 、DBCP)以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学…