Docker镜像:ChatGPT Flask API
本文发布于 204 天前,最后更新于 173 天前,其中文章内容可能会较为陈旧,如果文章内容失效或文章部分资源无法访问,请在本文评论区进行反馈。

使用前必读

  • 该项目为Beta版本项目,稳定版项目请前往GitHubDocker,当测试完成后Beta版本会同步更新。
  • Beta版本对项目进行了重构,支持连续对话功能,优化了输出内容。
  • 本教程搭建的只是一个API的桥梁,并非直接开箱即用
  • 本人后续ChatGPT相关的教程将请移步https://chatgpt-api.pro
搭建或使用前请务必保证自己拥有API Key,如果没有,请使用自己的OpenAI账号申请。
通知
由于本链接要发到BiliBili官网,便于看不懂视频的用户查看本链接,为了防止吞评论,不再提供API服务,需要自行搭建,希望谅解。

如果你的服务器位于以下国家或地区,你无法使用ChatGPT(可以使用中国台湾或海外的服务器)

不受支持的国家有:俄罗斯中国大陆中国香港伊朗阿富汗叙利亚埃塞俄比亚北朝鲜苏丹乍得利比亚津巴布韦索马里喀麦隆在斯瓦特中非共和国佛得角布隆迪厄立特里亚乌克兰

ChatGPT及其API无法访问的原因并非GFW封锁,而是OpenAI暂不向上述国家开放服务

  • 搭建该项目前请确保您的服务器所在地区不在不受支持的列表中
  • 如果想要摆脱支持,可以使用的方法有:更换服务器所在地或为服务器挂代理
  • 源代码使用AGPL v3开源,禁止用于商业用途
  • 禁止使用我搭建的实例来制作项目,禁止将我的API部署到网站和应用程序中,更不准使用我搭建的实例进行商用

BiliBili视频

B站视频被吞了,准备重投,重投后会第一时间上传,为了防止B站再次吞视频,本人不会提供一切服务(API搭建的技术支持除外)

自行搭建

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

version: '3'

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  # 路由,如果不想设置,则不设置该环境变量
    volumes:
      - ./logs:/app/logs # 日志保存路径

# 免责声明:不提供API代充、ChatGPT Plus代开通和代注册服务,不提供共享账号和独享账号

Docker Compose配置字段含义

字段含义
volumes持久化配置,文件映射
API_KEYAPI密钥,配置后无需请求头即可完成调用,不建议设置,除非你开启了IP地址白名单
HOUR_LIMIT每小时调用次数限制,如果设置为0则无限制
MINUTE_LIMIT每分钟调用次数限制,如果设置为0则无限制
SECOND_LIMIT每秒调用次数限制,如果设置为0则无限制
ROUTE例如你的网站是https://api.example.com,路由为route,则请求链接为https://api.example.com/route

反向代理(可选)

使用NginxProxyManager配置反向代理

反向代理后可以使用域名访问

该项目的详细介绍,请参考 我不是咕咕鸽 的教程,docker-compose代码在下方

搭建反向代理请确保80和443端口未占用,搭建后所有依赖80和443端口的项目都需要使用反向代理进行访问

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

实例介绍

使用教程

为了保证服务器的稳定运行和他人的正常访问,我限制了服务器的访问次数,当达到了限制次数,则无法继续访问。

API链接: https://chatgpt.senge.dev/api

获取ChatGPT回答

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

请求参数

数据类型描述是否必须
sys_contentstringChatGPT的提示[1]
user_contentstring用户回复内容
modelstringOpenAI模型[2]
api_keystringOpenAI API密钥[3][4]
max_tokensint最大生成的Token[5]
continuouslist连续对话参数[6]
请求参数介绍
  • [1]:默认值为:不要对上述内容进行复述,不要回复其他内容
  • [2]:默认使用的模型为:text-davinci-003
  • [3]:优先级为:api_key参数 > docker-compose中的参数,二者至少有一个不允许为空
  • [4]:如果docker-compose中设置了api,则该项允许为空,否则不允许为空
  • [5]:默认值为:256
  • [6]:连续对话的参数为列表,参数可以在上次运行时的返回值中获得。

常见HTTP状态码及其含义

code描述
200成功
400请求参数错误(API未填写或填写错误、模型使用错误、缺少prompt或prompt为空)
401未授权
403禁止访问
404请求路径不存在
500服务器内部错误
429请求过于频繁

调用次数限制(每个IP)

API完全开放使用,但是需要自行申请API Key(可以进行自定义API限制次数,以下为示例)

时间段频率
小时50次
分钟3次
1次

示例代码

Python

  • 连续对话
import requests
import json
 
url = "https://chatgpt.example.com/api"
sys_prompt = input("sys> ")
 
continuous_dialogue = []
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": "sk-U3y83c7o8nOn8i4ONnoT5uA9B6Yd75xrl9BIKihk4vCmCMzi",	# 该API为 fake API Key,请换成自己的API Key
        "continuous": [],
        "max_tokens": 100
    }
    response = requests.post(url, json=data)
    if response.status_code != 200:
        print(f"请求失败,状态码:{response.status_code}")
        print(response.text)
    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']})

  • 非连续对话
import requests
import json
 
url = "https://chatgpt.example.com/api"
sys_prompt = input("sys> ")
 
 
user_input = input("user> ")
data = {
    "system_content": sys_prompt,
    "user_content": user_input,
    "model": "gpt-3.5-turbo",
    "api_key": "sk-U3y83c7o8nOn8i4ONnoT5uA9B6Yd75xrl9BIKihk4vCmCMzi",	# 该API为 fake API Key,请换成自己的API Key
    "max_tokens": 100
}
response = requests.post(url, json=data)
if response.status_code != 200:
    print(f"请求失败,状态码:{response.status_code}")
    print(response.text)
else:
    result = json.loads(response.text)
print(f"ChatGPT回答:{result['current_response']}")
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇