背景
在大模型炙手可热的今天,各类大模型似乎已然成为人们日常工作中必不可少的辅助工具以提升工作效率本文将简述如何调用Chat GPT接口。
实现步骤
搭建反向代理服务器
在这里,默认您已经有了一台海外的服务器或VPS(服务器必须处于能正常访问Open AI服务的国家或地区,如美国、日本、台湾等地),并且拥有一个能正常解析的域名。
在这里,Bandwagon美国的VPS和Cloudflare的域名为例,进行演示。
如果您的服务器或VPS安装了宝塔面板,那么一切会变得简单。但如果您没有安装宝塔面板,也是没有影响,因为您可以通过直接配置nginx的方式以实现。这里博主以宝塔面板方式进行演示。
将域名解析到您的服务器
这一步没什么好说的,我解析了一个二级域名到我的服务器,得到的域名类似:openai.您的域名.后缀
登录宝塔面板并创建一个网站
在这一步之前应该会提示安装php和nginx,安装一下就行了,很简单,没什么好说的.
填入刚刚解析好的域名,然后php版本选择纯静态就行了,然后点提交。稍微加载一下之后就会提示我们创建成功。
创建反向代理
点击设置,然后点击反向代理
紧接着,点击添加反向代理
然后填入Open AI的api地址信息(代理名称可以随便起一个名字),然后提交:
现在我们需要修改一下配置文件中的一些信息,点击配置文件:
在配置文件中添加这两行配置,然后保存:
配置如下:
proxy_ssl_server_name on;
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
!!!如果不配置这两项,后续访问会直接报错502
部署SSL证书
点击左侧菜单栏中SSL选项
点击Let's Encrypt
选项卡,然后把域名勾选项,点申请即可
点击强制HTTPS(可选操作),然后保存
测试是否正确被代理
在浏览器中访问您的域名,如果出现如下提示,那么表示代理配置成功,反之,则表示配置可能有问题
创建API KEY
默认您已经有了Chat GPT账号(如您没有,可购买一个,微信:NOW-2021-11-1
),并充值了费用(因为现在open ai已经不再赠送5美金费用了),充值需要有贝宝或者visa信用卡
导航到:https://platform.openai.com/api-keys
点创建新密钥,根据提示创建
编写代码调用Chat GPT接口
Java代码(通过hutool工具包发送请求)
package cn.tianmigangwan.component;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
/**
* @author Dai Yi daiyi.lucky@gmail.com
* @since 2024-07-19 15:04
*/
public class TestClass {
private static final String API_KEY = "你的api key";
private static final String API_URL = "https://你的反向代理域名地址/v1/chat/completions";
public static void main(String[] args) {
try {
// 创建 messages 数组
JSONArray messagesArray = new JSONArray();
JSONObject message = new JSONObject();
message.set("role", "user");
message.set("content", "请帮我写一个Java的快速排序代码");
messagesArray.add(message);
// 创建请求体
JSONObject requestBody = new JSONObject();
requestBody.set("model", "gpt-3.5-turbo");
requestBody.set("messages", messagesArray);
// 发送 POST 请求
HttpResponse response = HttpRequest.post(API_URL)
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + API_KEY)
.body(requestBody.toString())
.execute();
// 处理响应
if (response.getStatus() == 200) {
String responseBody = response.body();
System.out.println("Response: " + responseBody);
} else {
System.err.println("Error: " + response.getStatus() + " - " + response.body());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
Python代码
import http.client
import json
# 替换为你的 API 密钥
API_KEY = '你的api key'
API_URL = '你的反向代理域名地址'
# 创建请求头
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {API_KEY}'
}
# 创建请求体
data = {
'model': 'gpt-3.5-turbo',
'messages': [
{'role': 'user', 'content': 'python有什么优势'}
]
}
json_data = json.dumps(data)
# 发送 POST 请求
conn = http.client.HTTPSConnection(API_URL)
conn.request("POST", "/v1/chat/completions", body=json_data, headers=headers)
# 获取响应
response = conn.getresponse()
response_data = response.read().decode('utf-8') # 确保解码为 UTF-8
# 处理响应
if response.status == 200:
response_json = json.loads(response_data)
print("Response:", json.dumps(response_json, indent=2, ensure_ascii=False))
else:
print("Error:", response.status, response_data)
conn.close()
运行结果:
JavaScript代码
const API_KEY = '你的api key';
const API_URL = 'https://你的反向代理域名地址/v1/chat/completions';
const requestData = {
model: 'gpt-3.5-turbo',
messages: [
{role: 'user', content: 'Vue3相较于Vue2有什么好处!'}
]
};
fetch(API_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`
},
body: JSON.stringify(requestData)
}).then(response => response.json())
.then(data => {
console.log('Response:', JSON.stringify(data, null, 2));
})
.catch(error => {
console.error('Error:', error);
});
运行结果: