分享一个国内就能使用chatgpt api的开源库chatgpt-api
chatgpt-api这个库封装了chatgpt的api方法然后通过国外代理服务器来直接访问chatgpt的api服务器,这样你在国内也能使用这个api直接访问chatgpt的api服务器,他支持cli访问,还支持gpt4。
他有两种访问方式ChatGPTAPI、ChatGPTUnofficialProxyAPI。
ChatGPTAPI- 使用gpt-3.5-turbo带有官方 OpenAI 聊天完成 API 的模型(官方的、可靠的方法,但它不是免费的)。您可以覆盖模型、完成参数和系统消息以完全自定义您的助手。ChatGPTUnofficialProxyAPI- 使用非官方代理服务器以绕过 Cloudflare 的方式访问 ChatGPT 的后端 API(使用真正的 ChatGPT 并且非常轻量级,但依赖于第三方服务器并且有速率限制)。这两种方法都有非常相似的 API,因此在它们之间进行交换应该很简单。
一、安装
npm install chatgpt
二、ChatGPTAPI访问,需要chatgpt的api
这种方式需要使用官方的apikey,地址:https://platform.openai.com/account/api-keys
获取api后就可以使用下面的方式来访问chatgpt接口了。
const API_KEY = ""//chatgpt官方的apikey async function init(){ const { ChatGPTAPI } = await import('chatgpt') const api = new ChatGPTAPI({ apiKey: API_KEY }) const res = await api.sendMessage('你好') console.log(res.text) } init();
三、ChatGPTUnofficialProxyAPI 通过accesstoken
const ACCESS_TOKEN="" async function init(){ const { ChatGPTUnofficialProxyAPI } = await import('chatgpt') / const api = new ChatGPTUnofficialProxyAPI({ accessToken: ACCESS_TOKEN, apiReverseProxyUrl: 'https://ai.fakeopen.com/api/conversation' }) const res = await api.sendMessage('你好') console.log(res.text) } init();这种凡方式需要acesstoken,那怎么获取accestoken呢,首先你必须有chatgpt的账号与密码,如果能在你电脑上登录的话就要登录chatgpt后直接访问这个网址https://chat.openai.com/api/auth/session,这将返回包含您的accessToken字符串的 JSON 的字符串,accestoken持续数天。
或者直接以下这些工具输入账号密码获取accesstoken
https://github.com/acheong08/OpenAIAuth
https://github.com/ericlewis/openai-authenticator
https://github.com/michael-dm/openai-token
总结
最后我们可以把它做成一个http的形式。
const ACCESS_TOKEN="" const express = require('express') const app = express() app.get('/message', (req, res) => { const prompt = req.query.prompt async function init(){ const { ChatGPTUnofficialProxyAPI } = await import('chatgpt') const api = new ChatGPTUnofficialProxyAPI({ accessToken: ACCESS_TOKEN, apiReverseProxyUrl: 'https://api.pawan.krd/backend-api/conversation' }) const response = await api.sendMessage(prompt) res.send(response.text) } init() }) app.listen(3000)
这两种方式访问chatgpt都是通过作者自己的代理服务器,你的apikey及accesstoken都有泄露的风险,如何担心数据泄露可以自己单间一个chatgpt的api 代理服务器,推荐使用cloudflare的worker实现,有免费使用的额度,10000次/一个月。worker代码如下:
addEventListener('fetch', event => { event.respondWith(fetchAndApply(event.request)); }) async function fetchAndApply(request) { if (request.method === 'OPTIONS') { // 对于预检请求,设置允许的请求方法、请求头和响应头 return new Response(null, { headers: { 'Access-Control-Allow-Origin': '*', // 允许的域名,可以设置具体的域名 'Access-Control-Allow-Methods': '*', // 允许的请求方法 'Access-Control-Allow-Headers': '*' // 允许的请求头,例如 Content-Type 和 Authorization } }) } let response = null; let method = request.method; let request_headers = request.headers; let url = new URL(request.url); let url_hostname = url.hostname; url.protocol = 'https:'; url.host = 'api.openai.com'; let new_request_headers = new Headers(request_headers); new_request_headers.set('Host', url.host); 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 }) 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; 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'); original_text = original_response_clone.body response = new Response(original_text, { status, headers: new_response_headers }) return response }
操作cloudflare教程地址:https://blog.bfw.wiki/user10/16396494504885620092.html
最后增加一行代码指定自己的代理服务器
apiReverseProxyUrl: '你自己的代理服务器url地址'
github地址:https://github.com/transitive-bullshit/chatgpt-api
网友评论0