Coder Social home page Coder Social logo

869413421 / chatgpt-web Goto Github PK

View Code? Open in Web Editor NEW
3.2K 34.0 749.0 3.77 MB

基于ChatGPT3.5 API实现的私有化web程序

License: Apache License 2.0

Go 51.11% HTML 5.86% CSS 4.31% Dockerfile 2.90% Makefile 0.42% TypeScript 34.88% Less 0.51%
chatgpt website

chatgpt-web's Introduction

chatgpt-web

Release Github stars Forks

本项目可以一键部署属于自己定制化的 chatgpt web 程序(兼容gpt3.5), 只需下载release中对应平台的项目文件,修改配置后执行,打开 http://127.0.0.1:8080 ,便可以获得属于自己的chatgpt网站。

参考项目:codegen

项目当前默认为示例中AI聊天机器人参数,可以根据自己需求定制化。

注意,每个参数都可能影响你得到不一样的聊天效果,改变一个参数你就可能得到另一种回答,所以请自己尝试去调试,不要上来就抱怨人工智障。文档中有二十多中参数示例,如AI聊天机器人 ,产品名称生成,python代码修复器等等等...

详情参考官方详细参数示例

更新记录

  • fix: 支持gpt-4模型,修改前端空白BUG。 2023-03-30
  • fix: 增加用户模块,认证页面,接口jwt验证。 2023-03-27
  • fix: 修复前端富文本显示问题,优化dockerfile。 2023-03-27
  • fix: 优化前端显示界面。 2023-03-20
  • feat: 增加接口代理配置。 2023-03-20
  • fix: 修复前端部分BUG,优化富文本代码格式。 2023-03-13
  • feat: 增加socsk5代理的支持,命令行参数配置。2023-03-13
  • feat: 增加docker-compose.yaml。2023-03-08
  • fix: 修复basic auth 。 2023-03-08
  • feat:修改为默认不开启代理。2023-03-06
  • feat:增加代理配置,解决国内无法使用。2023-03-04

项目功能

  • 请求openai增加代理(防墙)
  • AI性格设定
  • 兼容3.0和3.5API
  • 基本问答界面
  • 参数可配置
  • markdown语法
  • 提问上下文

使用前提

有openai账号,并且创建好api_key,注册事项可以参考此文章

快速开始

第一种:直接下载二进制(适合对编程不了解的同学)

非技术人员请直接下载release中的压缩包 ,请根据自己系统以及架构选择合适的压缩包,下载之后直接解压运行。

下载之后,在本地解压,即可看到可执行程序,与配置文件:

# windows
1.下载压缩包解压
2.复制文件中config.dev.json更改为config.json
3.将config.json中的api_key替换为自己的
4.双击exe运行,启动服务

# linux
$ tar xf chatgpt-web-v0.0.2-darwin-arm64.tar.gz # 解压
$ cd chatgpt-web-v0.0.2-darwin-arm64
$ cp config.dev.json # 根据情况调整配置文件内容
$ ./chatgpt-web  # 直接运行

# 如果要守护在后台运行
$ nohup ./chatgpt-web &> run.log &
$ tail -f run.log

第二种:基于源码运行(适合了解go语言编程的同学)

# 获取项目
$ git clone https://github.com/869413421/chatgpt-web.git

# 进入项目目录
$ cd chatgpt-web

# 复制配置文件
$ copy config.dev.json config.json

# 启动项目
$ go run main.go

使用docker运行

你可以使用docker快速运行本项目。 第一种:基于环境变量运行

# 运行项目,环境变量参考下方配置说明
$ docker run -itd --name chatgpt-web --restart=always \
 -e APIKEY=换成你的key \
 -e APIURL= \
 -e MODEL=gpt-3.5-turbo-0301 \
 -e BOT_DESC=你是一个AI助手,我需要你模拟一名温柔贴心的女朋友来回答我的问题. \
 -e MAX_TOKENS=512 \
 -e TEMPREATURE=0.9 \
 -e TOP_P=1 \
 -e FREQ=0.0 \
 -e PRES=0.6 \
 -e PROXY=http://host.docker.internal:10809 \
 -e AUTH_USER= \
 -e AUTH_PASSWORD= \
 -p 8080:8080 \
 --add-host="host.docker.internal:host-gateway" \
 qingshui869413421/chatgpt-web:latest

注意host.docker.internal会指向容器所在宿主机的IP,因此只需要更改端口为你的代理端口即可。

运行命令中映射的配置文件参考下边的配置文件说明。

第二种:基于配置文件挂载运行

# 复制配置文件,根据自己实际情况,调整配置里的内容
$ cp config.dev.json config.json  # 其中 config.dev.json 从项目的根目录获取

# 运行项目
$ docker run -itd --name chatgpt-web -v `pwd`/config.json:/app/config.json -p 8080:8080 qingshui869413421/chatgpt-web:latest

其中配置文件参考下边的配置文件说明。

使用docker-docompose 运行

docker compose up -d

配置文件说明

{
  "api_key": "your api key",
  "api_url": "",
  "port": 8080,
  "listen": "",
  "bot_desc": "你是一个AI助手,我需要你模拟一名温柔贴心的女朋友来回答我的问题。",
  "proxy": "http://host.docker.internal:10809",
  "model": "gpt-3.5-turbo-0301",
  "max_tokens": 512,
  "temperature": 0.9,
  "top_p": 1,
  "frequency_penalty": 0.0,
  "presence_penalty": 0.6,
  "auth_user": "",
  "auth_password": ""
}
api_key:openai api_key
api_url: openai api接口地址 不填使用默认 https://api.openai.com/v1 注,该服务的提供者可以看到你的明文请求(包括你在OpenAI的key),建议自建或使用可信来源
port: http服务端口
listen: http服务监听地址,不填默认监听0.0.0.0
proxy: openai请求代理,防墙。 例如 http://127.0.0.1:7890 socks5://127.0.0.1:7890
bot_desc:AI特征,非常重要,功能等同给与AI一个身份设定
max_tokens: GPT响应字符数,最大2048,默认值512。max_tokens会影响接口响应速度,字符越大响应越慢。
model: GPT选用模型,默认text-davinci-003,具体选项参考官网训练场
temperature: GPT热度,0到1,默认0.9。数字越大创造力越强,但更偏离训练事实,越低越接近训练事实
top_p: 使用温度采样的替代方法称为核心采样,其中模型考虑具有top_p概率质量的令牌的结果。因此,0.1 意味着只考虑包含前 10% 概率质量的代币。
frequency_penalty:
presence_penalty:
auth_user": http基本认证用户名(空表示不开启验证)
auth_password": http基本认证密码

NGINX反向代理配置样例

这里提供一份使用NGINX反向代理该软件的样例配置,方便集成于现有的站点,添加用户认证,套TLS等,该文件一般对应于/etc/nginx/sites-available/default文件,需要自行修改。

# 监听80端口,跳转https
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    location / {
        return 301 https://$host$request_uri;
    }
}
# 监听443端口,使用https提供服务
server {
    # SSL相关配置来自 https://ssl-config.mozilla.org/
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    # 证书路径,建议Fullchain
    ssl_certificate /path/to/your/cert.pem;
    # 私钥路径
    ssl_certificate_key /path/to/your/key.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    # 执行下面的命令下载dhparam
    # curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
    ssl_dhparam /path/to/dhparam;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;
    # SSL配置结束

    server_name _;
    charset utf-8;
    client_max_body_size 5m;

    # 如果需要将chatgpt-web置于某一路径下,使用这个location配置
    location /your/path/ {
        # 基本身份认证 设定
        # 提示语
        auth_basic "Auth Require";
        # 认证配置文件 格式请参考 https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html
        auth_basic_user_file /path/to/passwd;

        # 反向代理 假设chatgpt-web监听端口为8080
        proxy_pass http://127.0.0.1:8080/;
        proxy_http_version 1.1;
        # 反向代理超时时间设定(OpenAI的反应比较慢,设定为120秒后才超时)
        proxy_read_timeout 120s;
    }

    # 如果chatgpt-web放置于根路径,使用这个location配置
    location / {
        auth_basic "Auth Require";
        auth_basic_user_file /etc/nginx/passwd;

        proxy_pass http://127.0.0.1:8080/;
        proxy_http_version 1.1;
        proxy_read_timeout 120s;

        # 位于根路径时不需要修改index.html
    }

}

Linux系统systemd服务配置

可以使用systemd配置chatgpt-web开机自启,假设可执行文件和相关资源文件放置在/var/www/chatgpt-web/目录下,chatgpt-web二进制文件需要其他用户可读可执行权限,其余资源文件需要其他用户可读权限,并且已经配置好config.json

在目录/etc/systemd/system/下新建文件chatgpt-web.service,以下是文件样例。

[Unit]
Description=chatgpt-web
Documentation=https://github.com/869413421/chatgpt-web
# 在网络启动完成后运行
After=network.target nss-lookup.target

[Service]
# 使用随机用户执行该服务
DynamicUser=yes
# 指定工作目录
WorkingDirectory=/var/www/chatgpt-web/
# 执行程序
ExecStart=/var/www/chatgpt-web/chatgpt-web

[Install]
WantedBy=multi-user.target

保存后使用systemctl daemon-reload更新systemd配置文件,使用systemctl start/stop chatgpt-web启动/停止服务,使用systemctl enable/disable chatgpt-web启用/禁用服务开机自启。

可以使用journalctl --unit chatgpt-web.service查看程序日志。

免责声明 Disclaimers

The code is for demo and testing only. 代码仅用于演示和测试。

⚠⚠⚠请勿将本系统代码用于商业用途!

仿冒或冒用ChatGPT、OpenAI名义开展经营活动,可能构成《商标法》、《反不正当竞争法》下的一系列侵权行为; 以之牟利造成消费者损失的,可能产生《商标法》、《反不正当竞争法》、《消费者权益保护法》下的民事或行政责任,情节严重并造成重大损失的,还有可能构成刑事犯罪; 如果提供这种跨境经营服务存在私自搭建国际信道的情形,还有可能违反《网络安全法》、《刑法》的相关规定,承担行政责任或构成刑事犯罪。

chatgpt-web's People

Contributors

869413421 avatar byebyebruce avatar eryajf avatar orzroa avatar pd12bbf7608ae1 avatar rxliuli avatar totnz avatar zhin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chatgpt-web's Issues

docker使用user 和password配置后好像没有效果

如题:docker使用user 和password配置后好像没有效果。我使用了您提供的两种docker部署方式,但是均无效。我的无效是指,没有任何地方让我来输入使用的账号或密码。谢谢

一直加载

我知道已经被墙了,但是我挂了代理也没用,是不能用clash吗

贡献一个k8s部署方式

#替换your api key和your ing domian即可
`apiVersion: apps/v1
kind: Deployment
metadata:
name: chatgpt-web
labels:
app: chatgpt-web
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: chatgpt-web
template:
metadata:
name: chatgpt-web
labels:
app: chatgpt-web
spec:
containers:
- name: chatgpt-web
image: qingshui869413421/chatgpt-web:latest
ports:
- containerPort: 8080
env:
- name: APIKEY
value: your api key


apiVersion: v1
kind: Service
metadata:
name: chatgpt-web
namespace: default
spec:
selector:
app: chatgpt-web
ports:

  • name: http
    protocol: TCP
    port: 8080
    targetPort: 8080

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: chatgpt-web
namespace: default
spec:
rules:

  • host: your ing domian
    http:
    paths:
    • path: /
      backend:
      serviceName: chatgpt-web
      servicePort: http`

希望有积极的前端开发者来帮我实现以下功能

由于作者非专业前端,前端能力实在有限,希望有积极的前端开发者来帮我实现以下功能:

  • feat: 增加AI性格设定界面
  • feat: 增加登录认证界面
  • feat: 对话交互增加流式响应
  • feat: 增加对话历史列表,查看历史对话功能
  • perf: 优化markdown代码格式,增加代码复制功能

除了第一点,简单来说抄一下官网功能。目前前端代码在 chat-new 目录下,基于react实现。

返回 “请求出错,undefined”

环境:

  1. 拉取的 docker hub 下的later版本
  2. 服务器是美国的
  3. 启动命令参考自

https://github.com/869413421/chatgpt-web#%E4%BD%BF%E7%94%A8docker%E8%BF%90%E8%A1%8C 第二种方式启动

  1. 配置如下:
{
  "api_key": "sk-uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "port": 8080,
  "bot_desc": "以下是与AI助手的对话。助手乐于助人,富有创造力,聪明且非常友好",
  "model": "gpt-3.5-turbo-0301",
  "max_tokens": 512,
  "temperature": 0.8,
  "top_p": 1,
  "frequency_penalty": 0.0,
  "presence_penalty": 0.6
}

报错如下:
image

被墙了?

"Post "https://api.openai.com/v1/chat/completions\": dial tcp 157.240.8.50:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond."
国内IP挨墙了?

感觉不像是chatgpt在回答问题

问了很多问题得到都是类似于国产智能助手的那种比较僵化的回答,跟网页版体验完全不一样,不知道这是为什么,人机参数都是按照官网设置的

VPS 上docker 运行, http://vps地址:8081 没有反应

看日志文件:root@Debian:~# docker logs chatgpt-web --follow
2023-03-06 04:51:54,916 CRIT Supervisor is running as root. Privileges were not dropped because no user is specified in the config file. If you intend to run as root, you can set user=root in the config file to avoid this message.
2023-03-06 04:51:54,918 INFO supervisord started with pid 1
2023-03-06 04:51:55,921 INFO spawned: 'chatgpt-web' with pid 6
2023-03-06 04:51:56,933 INFO success: chatgpt-web entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

docker run -itd --name chatgpt-web --restart=always \
 -e APIKEY= api \
 -e MODEL=gpt-3.5-turbo-0301 \
 -e BOT_DESC=你是一个AI助手,我需要你模拟一名温柔贴心的女朋友来回答我的问题. \
 -e MAX_TOKENS=512 \
 -e TEMPREATURE=0.9 \
 -e TOP_P=1 \
 -e FREQ=0.0 \
 -e PRES=0.6 \
 -p 8081:8081 \
 qingshui869413421/chatgpt-web:latest

端口号冲突了,所以改了。

帮忙看看是什么问题啊

提几个建议

1、支持保存以前的对话(类chatGPT交互)
2、管理员查看记录
3、增加登录逻辑
4、可以改欢迎词

docker pull出错

docker pull qingshui869413421/chatgpt-web后提示
mediaType in manifest should be 'application/vnd.docker.distribution.manifest.v2+json' not 'application/vnd.oci.image.manifest.v1+json'

虽然GO能运行,但是还是习惯用DOCKER,咋办?

401: incorrected api key

image
我用的是最新的0.0.7.
更换过新生成的key也是一样的。
但是用curl试试是没有问题的
curl https://api.openai.com/v1/chat/completions \

-H "Authorization: Bearer sk-xxxxxxxx"
-H "Content-Type: application/json"
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "What is your name?"}]
}'

建议可以自定义监听地址

目前程序默认监听所有地址,在某些需要使用NGINX等软件套SSL等情况下监听所有地址不太安全,建议配置文件添加选项 listen 设定程序监听地址,默认监听 0.0.0.0 ,用户可以自行更改为例如 127.0.0.1 这样的地址

请教一下能不能加一个简单的密码登录

因为要放在服务器上,所以想加一个简单的登录防止其他人使用。我对go语言不熟,chatGPT给出的例子我也不知道如何整合进去。
以下是他的回答

好的,那么您可以将示例代码中的模板文件名更改为index.html,并更新内容,以添加密码登录表单。以下是您可以使用的index.html文件示例,您可以将其替换为现有的index.html文件:

<title>AI Chatbot</title> {{if .PasswordIncorrect}}

Password incorrect, try again.

{{end}} Password: Submit

注意,这个模板文件使用了Go模板语言,它允许您在HTML中嵌入动态内容。模板使用{{if .PasswordIncorrect}}语句来检查是否有密码不正确的错误,并显示相应的消息。密码输入框使用HTML表单的标准方式添加。

然后,将以下更改应用于main.go文件:

package main

import (
"html/template"
"net/http"
)

const password = "mySecretPassword"

var tpl = template.Must(template.ParseFiles("index.html"))

type ViewData struct {
PasswordIncorrect bool
}

func indexHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
// 获取密码并检查是否正确
r.ParseForm()
if r.Form.Get("password") == password {
// 密码正确,渲染页面
tpl.Execute(w, ViewData{false})
return
} else {
// 密码不正确,渲染登录表单
tpl.Execute(w, ViewData{true})
return
}
}
// 尚未提交密码,渲染登录表单
tpl.Execute(w, ViewData{false})
}

func main() {
http.HandleFunc("/", indexHandler)
http.ListenAndServe(":8080", nil)
}

在这里,我们为模板文件定义了一个名为ViewData的结构体类型,该结构体可以传递用于HTML模板的变量。我们修改了indexHandler函数,以使用ViewData{false}或ViewData{true}作为模板数据来渲染index.html,表明密码是否不正确或者需要输入密码。

最后,请注意,我们使用了一个常量来存储密码,这不是最安全的方式。在实际的Web应用程序中,应该使用一些安全的方法来存储和管理密码,例如使用密码哈希和盐值,或者将密码存储在安全的数据库中并使用加密传输。

改进意见

有时候需要chatgpt切换不同的设定,而这需要重新修改配置文件,能否做一个快速切换功能,可以在已经设置好的设定中快速切换,方便使用

"bot-desc"参数设定的问题

非常感谢作者,这个项目,一下子让操作方便多了。
我是小白,只会依照步骤操作,有点疑问,想请教一下大家。
如果设定了语法标准英语类角色,是不是在其他方面的回答就会弱一点?有些专业领域的问题是不是需要来回切换一下角色?
一般性事务的话,是不是基本不用专门调整参数了吧?默认即可解决大多数情况了。
两个疑惑,
1、后期有时间会在清空对话旁边有简易的ai 切换 比如: 软件工程师,修改润色,问题回答,之类的按钮切换?
2、Windows的这个dos窗口能否后台运行,不在任务栏出现。
非常感谢。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.