分享一个国内就能使用chatgpt api的开源库chatgpt-api

分享一个国内就能使用chatgpt api的开源库chatgpt-api

chatgpt-api这个库封装了chatgpt的api方法然后通过国外代理服务器来直接访问chatgpt的api服务器,这样你在国内也能使用这个api直接访问chatgpt的api服务器,他支持cli访问,还支持gpt4。

分享一个国内就能使用<a href='/tag/chatgpt.html'>chatgpt</a> api的开源库<a href='/tag/chatgpt.html'>chatgpt</a>-api

他有两种访问方式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)

分享一个国内就能使用<a href='/tag/chatgpt.html'>chatgpt</a> api的开源库<a href='/tag/chatgpt.html'>chatgpt</a>-api

这两种方式访问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

{{collectdata}}

网友评论0