CHAT-GPT API调用方案
GPT接口调用方案
前言
本方案仅供学习参考使用,请勿用在非法途径,如果有硬性gpt接口需求,可以选择国产的百度飞桨大模型,具体调用方式可以查看官方文档,支持大陆AI技术发展,打破技术垄断。
本方案是为了防止因为各种锁区原因导致的账号封禁提供的一种低成本的api调用方案
如果有海外服务器可以自行搭建代理
这里使用Cloudflare的GateWay代理
若直接使用大陆服务器调用api可能会封号
1创建一个网关
使用平台 Cloudflare
1.1创建账户
Cloudflare | Web Performance & Security
1.2创建网关
Cloudflare | Web Performance & Security
2 连接到你的程序
相关文档:Connecting your application · Cloudflare AI Gateway docs
AI 网关为您创建的每个网关提供多个端点 - 每个提供商一个端点,以及一个通用端点。通用终结点需要根据架构进行一些调整,但支持其他功能。例如,其中一些功能是在请求第一次失败时重试请求,或者在请求失败时配置回退模型/提供程序。
可以使用通用终结点联系每个提供商。有效负载需要一个消息数组,并且每条消息都是一个具有以下参数的对象:
provider
:要将此消息定向到的提供商的名称。可以是 openai/huggingface/replicateendpoint
:您尝试访问的提供程序 API 的路径名。例如,在 OpenAI 上,它可以是 ,而对于 HuggingFace,这可能是 .在特定于每个提供程序的部分中查看详细信息。chat/completions``bigstar/code
authorization
:联系此提供商时应使用的授权 HTTP 标头的内容。这通常以“令牌”或“持有者”开头。query
:提供商在其官方 API 中期望的有效负载。
# 使用 curl 命令向指定的 URL 发送一个 POST 请求
curl https://gateway.ai.cloudflare.com/v1/ACCOUNT_TAG/GATEWAY -X POST \
# 设置请求头的内容类型为 JSON 格式
--header 'Content-Type: application/json' \
# 设置请求体的数据为一个 JSON 数组,包含三个对象,每个对象代表一个 GPT 接口的调用
--data '[
{
# 设置第一个接口的提供者为 huggingface
"provider": "huggingface",
# 设置第一个接口的端点为 bigcode/starcoder,这是一个用于生成代码的模型
"endpoint": "bigcode/starcoder",
# 设置第一个接口的请求头
"headers": {
# 设置授权方式为 Bearer Token,$TOKEN 是你的 API 密钥
"Authorization": "Bearer $TOKEN",
# 设置内容类型为 JSON 格式
"Content-Type": "application/json"
},
# 设置第一个接口的查询参数
"query": {
# 设置输入为 console.log,这是一个 JavaScript 语句
"input": "console.log"
}
},
{
# 设置第二个接口的提供者为 openai
"provider": "openai",
# 设置第二个接口的端点为 chat/completions,这是一个用于聊天的模型
"endpoint": "chat/completions",
# 设置第二个接口的请求头
"headers": {
# 设置授权方式为 Bearer Token,$TOKEN 是你的 API 密钥
"Authorization": "Bearer $TOKEN",
# 设置内容类型为 JSON 格式
"Content-Type": "application/json"
},
# 设置第二个接口的查询参数
"query": {
# 设置模型为 gpt-3.5-turbo,这是一个最新的 GPT 模型
"model": "gpt-3.5-turbo",
# 设置流式响应为 true,这意味着你可以实时看到模型的输出
"stream": true,
# 设置消息数组,包含一个对象,代表你的输入
"messages": [
{
# 设置角色为 user,表示这是你的消息
"role": "user",
# 设置内容为 "What is Cloudflare?",这是你想问的问题
"content": "What is Cloudflare?"
}
]
}
},
{
# 设置第三个接口的提供者为 replicate
"provider": "replicate",
# 设置第三个接口的端点为 predictions,这是一个用于生成文本的模型
"endpoint": "predictions",
# 设置授权方式为 Token,$TOKEN 是你的 API 密钥
"authorization": "Token $TOKEN",
# 设置第三个接口的查询参数
"query": {
# 设置版本为一个哈希值,表示你要使用的模型的版本
"version": "2796ee9483c3fd7aa2e171d38f4ca12251a30609463dcfd4cd76703f22e96cdf",
# 设置输入为一个对象
"input": {
# 设置提示为 "What is Cloudflare?",这是你想问的问题
"prompt": "What is Cloudflare?"
}
}
}
]'
代理平台
https://developers.cloudflare.com/
普通调试
我的控制台:AI Gateway | Tly1300452403@163.com's Account | Cloudflare
curl -X POST https://gateway.ai.cloudflare.com/v1/82fa06a46d6aaa72246a915b87ba4a06/gpt-os-467/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?"
}
]
}
'
使用Java 开源框架gpt
package pers.os467.support.core.gpt;
import com.plexpt.chatgpt.ChatGPT;
import com.plexpt.chatgpt.ChatGPTStream;
import com.plexpt.chatgpt.entity.chat.Message;
import com.plexpt.chatgpt.listener.ConsoleStreamListener;
import com.plexpt.chatgpt.util.Proxys;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.net.Proxy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.stream.Collectors;
/**
* open ai 客户端
*
* @author plexpt
*/
@Slf4j
public class ConsoleChatGPT {
public static Proxy proxy = Proxy.NO_PROXY;
public static void main(String[] args) {
System.out.println("ChatGPT - Java command-line interface");
System.out.println("Press enter twice to submit your question.");
System.out.println();
System.out.println("按两次回车以提交您的问题!!!");
System.out.println("按两次回车以提交您的问题!!!");
System.out.println("按两次回车以提交您的问题!!!");
System.out.println();
System.out.println("Please enter APIKEY, press Enter twice to submit:");
String key = getInput("请输入APIKEY,按两次回车以提交:\n");
check(key);
// 询问用户是否使用代理 国内需要代理
System.out.println("是否使用代理?(y/n): ");
System.out.println("use proxy?(y/n): ");
String useProxy = getInput("按两次回车以提交:\n");
if (useProxy.equalsIgnoreCase("y")) {
// 输入代理地址
System.out.println("请输入代理类型(http/socks): ");
String type = getInput("按两次回车以提交:\n");
// 输入代理地址
System.out.println("请输入代理IP: ");
String proxyHost = getInput("按两次回车以提交:\n");
// 输入代理端口
System.out.println("请输入代理端口: ");
String portStr = getInput("按两次回车以提交:\n");
Integer proxyPort = Integer.parseInt(portStr);
if (type.equals("http")) {
proxy = Proxys.http(proxyHost, proxyPort);
} else {
proxy = Proxys.socks5(proxyHost, proxyPort);
}
}
// System.out.println("Inquiry balance...");
// System.out.println("查询余额中...");
// BigDecimal balance = getBalance(key);
// System.out.println("API KEY balance: " + balance.toPlainString());
//
// if (!NumberUtil.isGreater(balance, BigDecimal.ZERO)) {
// System.out.println("API KEY 余额不足: ");
// return;
// }
while (true) {
String prompt = getInput("\nYou:\n");
ChatGPTStream chatGPT = ChatGPTStream.builder()
.apiKey(key)
.proxy(proxy)
.build()
.init();
System.out.println("AI: ");
//卡住
CountDownLatch countDownLatch = new CountDownLatch(1);
Message message = Message.of(prompt);
ConsoleStreamListener listener = new ConsoleStreamListener() {
@Override
public void onError(Throwable throwable, String response) {
throwable.printStackTrace();
countDownLatch.countDown();
}
};
listener.setOnComplate(msg -> {
countDownLatch.countDown();
});
chatGPT.streamChatCompletion(Arrays.asList(message), listener);
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private static BigDecimal getBalance(String key) {
ChatGPT chatGPT = ChatGPT.builder()
.apiKey(key)
.proxy(proxy)
.build()
.init();
return chatGPT.balance();
}
private static void check(String key) {
if (key == null || key.isEmpty()) {
throw new RuntimeException("请输入正确的KEY");
}
}
@SneakyThrows
public static String getInput(String prompt) {
System.out.print(prompt);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
List<String> lines = new ArrayList<>();
String line;
try {
while ((line = reader.readLine()) != null && !line.isEmpty()) {
lines.add(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return lines.stream().collect(Collectors.joining("\n"));
}
}
通过上面简单程代理连接即可获取到返回信息
模型表
通过科学上网进入openai控制终端查看模型
目前,OpenAI 的 API 有以下几种模型:
- GPT-4 Turbo:这是最新的 GPT 模型,具有 128k 上下文、更新的知识体系和最广泛的功能集。它的价格为每 1000 个 token 0.03 美元(约 0.21 元)的 prompt 和 0.06 美元(约 0.42 元)的 completion。
- GPT-4:这是之前的 GPT 模型,具有广泛的通识知识和领域专业知识。它的价格为每 1000 个 token 0.06 美元(约 0.42 元)的 prompt 和 0.12 美元(约 0.85 元)的 completion。
- GPT-3.5 Turbo:这是一个高效且经济实惠的 GPT 模型,支持 16k 上下文窗口,并经过对话优化。它的价格为每 1000 个 token 0.002 美元(约 0.014 元)。
- Fine-tuning models:这是一种自定义模型,可以使用自己的训练数据微调 OpenAI 的基础模型。微调模型后,只需要为使用请求中的 token 付费,价格与基础模型相同。
- Embedding models:这是一种嵌入式模型,可以构建先进的搜索、聚类、主题建模和分类功能。它的价格为每 1000 个 token 0.001 美元(约 0.007 元)。
- Image models:这是一种图像模型,可以生成和编辑新颖的图像和艺术品。它提供了三种分辨率层次,价格分别为每 1000 个 token 0.01 美元(约 0.07 元)、0.02 美元(约 0.14 元)和 0.04 美元(约 0.28 元)。
- Audio models:这是一种音频模型,可以将语音转录为文本,并将多种语言翻译成英语。它的价格为每 1000 个 token 0.01 美元(约 0.07 元)。
本教程提供了一种不容易被锁区封号的代理gpt接口方案,若有需要可以按照上面步骤配置
How to get API key?
方法一
你可能需要直接购买gpt的 API key
方法二
你需要一个非锁区国家的手机号,信用卡
用手机号注册谷歌等邮箱(不要是大陆邮箱即可)
注册openai账号
按照上面的模型表价位,按照你的需求用信用卡在billing中充值账户余额即可
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 1300452403@qq.com