国内不翻墙调用chatgpt api

openai开放的api接口调用很简单,只要用post请求就可以了。但是因为地区限制,国内无法直接使用这个方法。

curl https://api.openai.com/v1/chat/completions \-H "Content-Type: application/json" \-H "Authorization: Bearer **" \-d '{"model": "gpt-3.5-turbo","messages": [{"role": "user", "content": "Say this is a test!"}],"temperature": 0.7}'


我们可以通过他来进行套壳转发来完成国内对openai的访问。

域名申请

首先申请一个域名

 https://www.freenom.com
硅云

这两个网站都可以获得免费域名,我使用的是硅云,注册信息要用身份证实名认证,大概信息填写后等2-4个小时就有结果了。

cloudflare托管


然后在couldflare的主页添加站点进行域名托管

可以看到要使用couldflare托管需要更改网站的dns
我是在硅云申请的,在硅云的域名界面点击管理就可以进入域名管理后台

点击修改dns,可以看到默认dns就是刚刚couldflare上要我们删除的,在自定义域名中填上刚刚couldflare让我们填写的dns点击确定就可以修改了。修改后等2-4个小时就可以在couldflare的站点界面看到该域名底下的有效了。表明我们的网站被couldflare托管。需要注意的是如果将网站在couldflare托管的话,中国访问网站的速度会比较慢建议新建一个网站专门处理这些需要外网的请求转发。

配置worker



点击workers创建一个服务,默认的确定即可

点击快速编辑将左边代码换成如图所示,点击保存并部署。然后可以在这里测试一下,使用post请求调用chatgpt,将域名api.openai.com换成我们的域名,像官网一样调用即可,如图可以看见我们问了一个问题:腰酸背痛怎末办?也可以在没有使用梯子的情况下看到chatgpt给了回答。左侧代码如图

const TELEGRAPH_URL = 'https://api.openai.com';addEventListener('fetch', event => {event.respondWith(handleRequest(event.request))
})async function handleRequest(request) {const url = new URL(request.url);url.host = TELEGRAPH_URL.replace(/^https?:\/\//, '');const modifiedRequest = new Request(url.toString(), {headers: request.headers,method: request.method,body: request.body,redirect: 'follow'});const response = await fetch(modifiedRequest);const modifiedResponse = new Response(response.body, response);// 添加允许跨域访问的响应头modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');return modifiedResponse;
}

python可以这么调用post访问。然后下面是输出

import requests
import json
def testerhome_login():data_str ={"model": "gpt-3.5-turbo","messages": [{"role": "user", "content": "乳腺癌怎么治疗?"}],"temperature": 0.7}data=json.dumps(data_str)headers = {"Content-Type": "application/json","Authorization":"Bearer [apikey]"}url = "【域名】/v1/chat/completions"res = requests.request("post",url=url, headers=headers, data=data)print(res.text)print(json.loads(res.text)['choices'][0]['message']['content'])print(res.status_code)return json.loads(res.text)['choices'][0]['message']['content']
if __name__ == '__main__':testerhome_login()

[apikey]替换为你的apikey,【域名】替换为你申请的域名即可

本文链接:https://my.lmcjl.com/post/6734.html

展开阅读全文

4 评论

留下您的评论.