使用Flask技术托管ChatGPT API

  • 使用Flask API托管ChatGPT API,这样做可以绕过OpenAI的限制,可以做到无需魔法即可在国内使用ChatGPT API
  • 程序完全开源免费,为了保护用户的隐私,程序不会记录用户的API Key和对话记录

安装教程

使用Docker安装

复制下列代码,并自行修改配置

version: '3'

# GPL协议开源,禁止商用,禁止修改后闭源,禁止盈利!!!

services:
  web:
    image: sengedev/chatgpt:latest   # 镜像地址
    ports:
      - "5000:5000" # 端口号,如果端口冲突,请修改
    restart: always # 重启策略
    environment:
      API_KEY: YourOpenAIApiKey # 请替换为你的OpenAI API Key,前往https://platform.openai.com/account/api-keys获取
      HOUR_LIMIT: 50  # 限制每小时调用次数,如果不想限制,则不设置该变量
      MINUTE_LIMIT: 3 # 限制每分钟调用次数,如果不想限制,则不设置该变量
      SECOND_LIMIT: 1 # 限制每秒调用次数,如果不想限制,则不设置该变量
      ROUTE: api  # 路由,如果不想设置,则不设置该环境变量
      LANG: zh_CN # 语言,目前支持简体中文、繁体中文、英文、俄语

字段含义

字段含义
API_KEYAPI密钥,配置后无需请求头即可完成调用,不建议设置,除非你开启了IP地址白名单
HOUR_LIMIT每小时调用次数限制,如果设置为0则无限制
MINUTE_LIMIT每分钟调用次数限制,如果设置为0则无限制
SECOND_LIMIT每秒调用次数限制,如果设置为0则无限制
ROUTE例如你的网站是https://chatgpt.example.com ,路由为api,则请求链接为 https://chatgpt.example.com/api
LANGAPI提示语言 支持简体中文、繁体中文、英语和俄语

从GitHub下载源代码

https://github.com/senge-dev/docker-chatgpt

实例介绍

使用教程

下方是一个示例API地址,请替换为您自己的IP/域名。

API链接: https://chatgpt.example.com/

获取ChatGPT回答

请求方式:POST,路由:/api

请求参数

数据描述是否必需
sys_content系统配置,对ChatGPT的一些限制
user_content向ChatGPT发送的内容
model模型,默认使用text-davinci-003模型
api_keyAPI密钥,必须配置,除非你在Docker-comppose中添加了API密钥
max_tokens最大生成的token数量,默认为100,最大为3500
continuous连续对话参数,可以进行迭代来实现上下文对话操作

返回值

  • 成功
{
    "code": 200,
    "msg": "success",
    "data": {
        "response": "ChatGPT回答的内容"
    }
}
  • 失败
{
    "code": "4xx",
    "msg": "failed",
    "data": {
        "response": "请求失败的原因"
    }
}
  • 常见返回值
code描述
200成功
400请求参数错误(API未填写或填写错误、模型使用错误、缺少prompt或prompt为空)
401未授权
403禁止访问
404请求路径不存在
500服务器内部错误
429请求过于频繁

默认调用次数限制(每个IP)

API完全开放使用,无需申请,但是需要自行申请API Key

时间段频率
无限制
小时120次
分钟20次
1次

示例代码

https://chatgpt.example.com/api 替换为你的服务器IP/域名地址

连续对话

import requests
import json
token = {
    "api_key": "Your API Key",  # 替换成你自己的API Key
    "url": "https://chatgpt.example.com/api"    # 替换成你自己搭建的实例
}
url = token["url"]
sys_prompt = input("sys> ")
continuous_dialogue = [{"role": "system", "content": sys_prompt}]
while True:
    user_input = input("user> ")
    if user_input.lower() in ['exit', 'quit']:
        break
    data = {
        "system_content": sys_prompt,
        "user_content": user_input,
        "model": "gpt-3.5-turbo",
        "api_key": token["api_key"],
        "continuous": [],
        "max_tokens": 3000
    }
    response = requests.post(url, json=data)
    if response.status_code != 200:
        print(f"请求失败,状态码:{response.status_code},服务器返回值:{response.text}")
        continue
    else:
        result = json.loads(response.text)
    print(f"ChatGPT> {result['current_response']}")
    # 连续对话迭代
    continuous_dialogue.append({"role": "user", "content": user_input})
    continuous_dialogue.append({"role": "assistant", "content": result['current_response']})
print("程序已退出")

非连续对话

import sys
import requests
import json
token = {
    "api_key": "Your API Key",  # 替换成你自己的API Key
    "url": "https://chatgpt.example.com/api"    # 替换成你自己搭建的实例
}
# ChatGPT API Demo
url = token["url"]
sys_prompt = input("sys> ")
user_input = input("user> ")
data = {
    "system_content": sys_prompt,
    "user_content": user_input,
    "model": "gpt-3.5-turbo",
    "api_key": token["api_key"],
    "continuous": [],
    "max_tokens": 3000
}
response = requests.post(url, json=data)
if response.status_code != 200:
    print(f"请求失败,状态码:{response.status_code},服务器返回值:{response.text}")
    sys.exit(1)
else:
    result = json.loads(response.text)
print(f"ChatGPT> {result['current_response']}")