AI

基于openai官网接口私有ChatGPT部署教程

it不难
2023-02-23 / 0 评论 / 703 阅读 / 正在检测是否收录...

前言

ChatGPT是一个由OpenAI公司开发的大型语言模型,最近火出天际。它可以通过与人类对话,回答各种问题、提供帮助和执行任务。ChatGPT是建立在GPT(Generative Pretrained Transformer)模型上的,它在处理自然语言任务方面表现出色,并且已经被广泛应用于各种领域,例如问答系统、聊天机器人、自然语言处理和语言生成等。

划重点,根据本教程部署完成后。后续使用不在需要翻墙,速度也很快。重度用户的首选,不影响干其她事情

代理

参考: ss服务部署和客户端配置方法

国外vps

准备账号

需要注册一个国外的邮箱,同时准备一个可以接受消息的国外手机号,通过国外节点注册。

邮箱
短信

chatgpt

官方地址 ,国内无法访问。

openai

调用openai的api,部署在香港节点,省去平时使用需要全局代理上网导致其他网页速度巨慢的缺点。

api-key获取

openapi-key
申请网址: https://platform.openai.com/overview ,需要国外IP访问,香港节点也失败了。

access_token

docker启动

version: '3'

services:
  app:
    image: chenzhaoyu94/chatgpt-web
    #image: chatgpt-web
    ports:
      - 3002:3002
    environment:
      # 二选一
      OPENAI_API_KEY: sk-xxx
      # 超时,单位毫秒,可选
      TIMEOUT_MS: 60000
      # 访问权限密钥,可选
      AUTH_SECRET_KEY: xxx

反向代理

利用caddy做反向代理,同时分析每天访问来源

配置

c.webzhan.xyz {
  tls admin@webzhan.xyz
  encode gzip
  log {
      output file  /opt/logs/c.log
  }
  header / {
      Strict-Transport-Security "max-age=31536000;includeSubdomains;preload"
  }

  ## HTTP 代理配置, chatget-web服务
  reverse_proxy 10.7.8.10:3002
}

日志分析

# 生成html
## 最近7天日志
awk -v d=$(date --date="7 days ago" "+%s") '{ match($0, /"ts":([0-9]+.[0-9]+)/, a) } a[1] > d { print $0 }' /var/log/vlive/caddy/c.log > /var/log/vlive/caddy/c_result.log

/usr/local/bin/goaccess  -p /usr/local/etc/goaccess/goaccess.conf -o  /opt/vlive/app/v/p/c.html  -f /var/log/vlive/caddy/c_result.log

## 计划任务
10 0 * * * /bin/bash /opt/vlive/bin/analysis.sh

goaccess忽略面板
vim /usr/local/etc/goaccess/goaccess.conf
#ignore-panel VISITORS
#ignore-panel REQUESTS
ignore-panel REQUESTS_STATIC
ignore-panel NOT_FOUND
#ignore-panel HOSTS
#ignore-panel OS
ignore-panel BROWSERS
ignore-panel VISIT_TIMES
ignore-panel VIRTUAL_HOSTS
ignore-panel REFERRERS
#ignore-panel REFERRING_SITES
ignore-panel KEYPHRASES
ignore-panel STATUS_CODES
ignore-panel REMOTE_USER
#ignore-panel CACHE_STATUS
#ignore-panel GEO_LOCATION
ignore-panel MIME_TYPE
ignore-panel TLS_TYPE

访问

账号余额

官方地址

官方地址-余额查询

python脚本(已失效)

# -*- coding: utf-8 -*-
"""
Created on 2023-03-17 21:16:39
---------
@summary:
---------
@author: wxzy1130
"""

import os
# pip3 install httpx
import httpx
import json

#密钥
API_KEY = 'sk-xxxxxxxxxx'

#代理
PROXIES = None

def check_api_key(func):
    """
    密钥检查
    """
    def wrapper(*args, **kwargs):
        api_key = kwargs.get('api_key', API_KEY) or API_KEY
        if not api_key:
            raise ValueError('API key is required')
        if not api_key.startswith('sk-'):
            raise ValueError('API key must start with "sk-"')
        kwargs['api_key'] = api_key
        return func(*args, **kwargs)

    return wrapper

@check_api_key
def credit_summary(api_key=None):
    """
    获取结果
    """
    url = "https://api.openai.com/dashboard/billing/credit_grants"
    with httpx.Client(proxies=PROXIES) as client:
        response = client.get(
            url,
            headers={"Authorization": f"Bearer {api_key}"},
            timeout=60,
        )
        return response.json()

def print_credit_summary(data):
    """
    打印结果
    """
    total_granted = data['total_granted']
    total_used = data['total_used']
    total_available = data['total_available']

    # 计算填充字符个数
    padding = max(len('总额度'), len('已使用'), len('未使用'))

    # 打印结果
    print('结果:\n-------------------------')
    print(f'总额度{" "*(padding - len("总额度"))}: {total_granted}')
    print(f'已使用{" "*(padding - len("已使用"))}: {total_used}')
    print(f'未使用{" "*(padding - len("未使用"))}: {total_available}')

if __name__ == '__main__':
    result = credit_summary(api_key=API_KEY)
    print_credit_summary(result)

构建最新版

一开始构建失败,最后发现是自己运行服务的节点内存太小导致的。找一台内存大的服务器构建完成,然后复制过来。
# 构建
docker build -t chatgpt-web2 .

# 导出
docker save -o chatgpt-web2.tar  chatgpt-web2:latest

# 导入
docker load <  chatgpt-web2.tar

清理缓存

版本更新后,chrome本地有缓存不更新

体验

私有部署需求请自备账号,加QQ(1940728253)

参考

ChatGPT 中文调教指南
chatgpt-web

评论 (0)

取消
只有登录/注册用户才可评论