openai的api接入,及代理设置

您所在的位置:网站首页 openai额度 openai的api接入,及代理设置

openai的api接入,及代理设置

2023-03-14 02:22| 来源: 网络整理| 查看: 265

api接口申请

Tips:最近openai的api已经被墙了,所以需要科学上网。注册openai账号。生成api key,初始赠送18美金使用额度,额度用完之后需要自行购买,具体的价格和模型相关。

image.pngimage.pngimage.png

api接入 Tips:准备好申请的key和梯子后,就可以开始我们的openai之旅了。以下示例以python执行。

安装openai模块

pip install openai

调用openai接口

import openai import os openai.api_key = ('申请的key') model_engine_id = "text-davinci-002" prompt = "帮我生成一段话,因为工作的原因,错误过了和女朋友的约会 " completions = openai.Completion.create( engine=model_engine_id, prompt=prompt, max_tokens=60, ) message = completions.choices[0].text.strip() print(message)

查看输出结果

I'm sorry for missing our date. I was really looking forward to seeing you, but something came up at work and I had to stay late. I hope you understand.自建代理 Tips:没有梯子或者没有海外云服务器的话,可以自建代理。使用cloudFlare作为域名解析服务,原来有一个闲置的域名在阿里云,将ns解析的dns服务器转到cloudFlare

参考域名解析从阿里云转向cloudFlare

1、cloudFlare下准备域名

注册Cloudflare账号,然后将阿里云上的域名添加到CloudFlare 网站--添加站点--输入要托管的域名--添加站点

image.png

解析前的dns服务器

image.png

将阿里云上的dns服务器

http://ns1.bdydns.cn

http://ns2.bdydns.cn

改成

http://konnor.ns.cloudflare.com

http://nadia.ns.cloudflare.com

image.png

2、Cloudflare Workers搭建代理参考worker创建workers路由--管理workers--创建服务

image.pngimage.png

将如下代码写入编辑框并保存

// Website you intended to retrieve for users. const upstream = 'api.openai.com' // Custom pathname for the upstream website. const upstream_path = '/' // Website you intended to retrieve for users using mobile devices. const upstream_mobile = upstream // Countries and regions where you wish to suspend your service. const blocked_region = [] // IP addresses which you wish to block from using your service. const blocked_ip_address = ['0.0.0.0', '127.0.0.1'] // Whether to use HTTPS protocol for upstream address. const https = true // Whether to disable cache. const disable_cache = false // Replace texts. const replace_dict = { '$upstream': '$custom_domain', } addEventListener('fetch', event => { event.respondWith(fetchAndApply(event.request)); }) async function fetchAndApply(request) { const region = request.headers.get('cf-ipcountry').toUpperCase(); const ip_address = request.headers.get('cf-connecting-ip'); const user_agent = request.headers.get('user-agent'); let response = null; let url = new URL(request.url); let url_hostname = url.hostname; if (https == true) { url.protocol = 'https:'; } else { url.protocol = 'http:'; } if (await device_status(user_agent)) { var upstream_domain = upstream; } else { var upstream_domain = upstream_mobile; } url.host = upstream_domain; if (url.pathname == '/') { url.pathname = upstream_path; } else { url.pathname = upstream_path + url.pathname; } if (blocked_region.includes(region)) { response = new Response('Access denied: WorkersProxy is not available in your region yet.', { status: 403 }); } else if (blocked_ip_address.includes(ip_address)) { response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', { status: 403 }); } else { let method = requesthod; let request_headers = request.headers; let new_request_headers = new Headers(request_headers); new_request_headers.set('Host', upstream_domain); new_request_headers.set('Referer', url.protocol + '//' + url_hostname); let original_response = await fetch(url.href, { method: method, headers: new_request_headers, body: request.body }) connection_upgrade = new_request_headers.get("Upgrade"); if (connection_upgrade && connection_upgrade.toLowerCase() == "websocket") { return original_response; } let original_response_clone = original_response.clone(); let original_text = null; let response_headers = original_response.headers; let new_response_headers = new Headers(response_headers); let status = original_response.status; if (disable_cache) { new_response_headers.set('Cache-Control', 'no-store'); } new_response_headers.set('access-control-allow-origin', '*'); new_response_headers.set('access-control-allow-credentials', true); new_response_headers.delete('content-security-policy'); new_response_headers.delete('content-security-policy-report-only'); new_response_headers.delete('clear-site-data'); if (new_response_headers.get("x-pjax-url")) { new_response_headers.set("x-pjax-url", response_headers.get("x-pjax-url").replace("//" + upstream_domain, "//" + url_hostname)); } const content_type = new_response_headers.get('content-type'); if (content_type != null && content_type.includes('text/html') && content_type.includes('UTF-8')) { original_text = await replace_response_text(original_response_clone, upstream_domain, url_hostname); } else { original_text = original_response_clone.body } response = new Response(original_text, { status, headers: new_response_headers }) } return response; } async function replace_response_text(response, upstream_domain, host_name) { let text = await response.text() var i, j; for (i in replace_dict) { j = replace_dict[i] if (i == '$upstream') { i = upstream_domain } else if (i == '$custom_domain') { i = host_name } if (j == '$upstream') { j = upstream_domain } else if (j == '$custom_domain') { j = host_name } let re = new RegExp(i, 'g') text = text.replace(re, j); } return text; } async function device_status(user_agent_info) { var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; var flag = true; for (var v = 0; v < agents.length; v++) { if (user_agent_info.indexOf(agents[v]) > 0) { flag = false; break; } } return flag; }

image.png

选择触发器,将自己的域名执行worker(目前国内国内墙了worker的域名,但是没有墙IP,所以将自己的域名指向worker的ip)。添加自定义域。

image.png

配置完后,可以尝试下ping自己的域名,此时的ip应该就是指向了CloudFlare。

2、替换官方域名http://api.openai.com为自身代理域名import openai import os openai.api_base = "https://自己的域名/v1" openai.api_key = ('自己的key') model_engine_id = "text-davinci-002" prompt = "帮我生成一封邮件,约定下周一的见面时间和地点" completions = openai.Completion.create( engine=model_engine_id, prompt=prompt, max_tokens=300, ) message = completions.choices[0].text.strip() print(openai.api_base) print(message)

执行结果:

image.png



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3