Home

Awesome

ChatGPT Web

使用界面

cover3 cover cover2

性格微调功能

cover4

文本审查功能(使用OpenAI官方接口)

cover5

介绍

这是一个可以私有化部署的ChatGpt网页,使用OpenAI的官方API接入gpt-3.5gpt-4模型来实现接近ChatGPT Plus的对话效果。 源代码Fork和修改于Chanzhaoyu/chatgpt-web

与OpenAI官方提供ChatGPT Plus对比,ChatGPT Web有以下优势:

  1. 省钱(仅限gpt-3.5)
  1. 0门槛使用。你可以将自建的ChatGPT Web 站点分享给家人和朋友,他们不再需要解决网络问题,就可以轻松享受到ChatGPT Plus带来的生产力提升。
  2. 可以缓解网络封锁的影响ChatGPT Web只需要一个OpenAI API Key即可使用,如果你所在的地区无法访问OpenAI ,你可以将ChatGPT Web部署在海外服务器上,或在当地服务器上配置socks_proxy参数来转发请求给代理软件,即可正常使用。

Chanzhaoyu的原版的主要区别:

  1. 专注于易用、易部署、不操心,我将尽我所能做到对小白用户友好,因此本项目也会舍弃一些专业功能,例如:

    • 不支持accessToken这类非官方使用方式。我认为你只是希望有个稳定能用的AI助手,并不想折腾这些
    • 不支持反向代理。第三方的反代地址安全性存疑、封号也超级快!
    • 不做导入和管理Prompt模板的功能。使用者没有“这个链接干什么用的”、“什么是json文件”、“为什么要我自己审核json文件的安全性,怎么审核?”此类烦恼
  2. 可以识别语音消息:通过OpenAI官方whisper-1接口,或免费的whisper.cpp实现。懒得打字的时候很好用

  3. 可以调整ChatGpt的性格

  4. 可以调整记住的上下文数量

其它区别:

  1. 增加日语界面
  2. 优化了移动端体验

快速部署

如果你不需要自己开发,只需要部署使用,可以直接跳到 使用最新版本docker镜像启动

开发环境搭建

Node

node 需要 ^16 || ^18 版本(node >= 14 需要安装 fetch polyfill ),使用 nvm 可管理本地多个 node 版本

node -v

如果你没有安装过 pnpm

npm install pnpm -g

Python

python 需要 3.10 以上版本,进入文件夹 /service 运行以下命令

pip install --no-cache-dir -r requirements.txt

whisper.cpp编译

这一步的目的是设置本地语音识别功能,这个模块来自ggerganov/whisper

如果你的系统是windows,可以跳过这一步,因为whisper的二进制文件,我已经为你下载好,放在项目里了;

如果你的系统是linux,则需要你自己编译whisper:

cd ./tools/local-whisper/linux/
chmod +x init.sh
./init.sh

init.sh脚本执行完成之后,你将看到./tools/local-whisper/linux/whisper.cpp-master/目录,目录中有个叫main的二进制文件,这就是你需要的whisper

开发环境启动项目

启动前端服务

根目录下运行以下命令

# 前端网页的默认端口号是1002,对接的后端服务的默认端口号是3002,可以在 .env 和 .vite.config.ts 文件中修改
pnpm bootstrap
pnpm dev

启动后端服务

只有--openai_api_key是必填的启动参数,需要先去OpenAI 注册账号,然后在这里获取OPENAI_API_KEY

# 进入文件夹 `/service` 运行以下命令
python main.py --openai_api_key="$OPENAI_API_KEY"

除了openai_api_key这个必填的参数之外,还有以下可选参数可用:

也就是说你也可以这样启动

python main.py --openai_api_key="$OPENAI_API_KEY" --openai_timeout_ms="$OPENAI_TIMEOUT_MS" --api_model="$API_MODEL" --socks_proxy="$SOCKS_PROXY" --use_local_whisper="$USE_LOCAL_WHISPER" --host="$HOST" --port="$PORT"

打包和部署

前端资源打包(需要安装node)

  1. 根目录下运行以下命令
    pnpm run build
    
  2. 将打包好的文件夹dist文件夹复制到/docker-compose/nginx目录下,并改名为html
    cp dist/ docker-compose/nginx/html -r
    
  3. 配置访问权限
      # 进入文件夹 `/docker-compose/nginx`
    cd docker-compose/nginx
    # 运行add_user.sh脚本,根据提示创建用户名和密码
    # (密码文件将被保存在 /docker-compose/nginx/auth/.htpasswd)
    bash add_user.sh
    # 如果你想删除一个用户,可以使用remove_user.sh脚本
    bash remove_user.sh
    

后端服务打包为docker容器(需要安装docker和docker-compose)

  1. 进入文件夹 /service 运行以下命令
    docker build -t chatgpt-web-backend .
    

使用DockerCompose启动

使用最新版本docker镜像启动

常见问题

Q: 为什么 Git 提交总是报错?

A: 因为有提交信息验证,请遵循 Commit 指南

Q: 如果只使用前端页面,在哪里改请求接口?

A: 根目录下 .env 文件中的 VITE_GLOB_API_URL 字段。

Q: 文件保存时全部爆红?

A: vscode 请安装项目推荐插件,或手动安装 Eslint 插件。

Q: 前端没有打字机效果?

A: 一种可能原因是经过 Nginx 反向代理,开启了 buffer,则 Nginx 会尝试从后端缓冲一定大小的数据再发送给浏览器。请尝试在反代参数后添加 proxy_buffering off;,然后重载 Nginx。其他 web server 配置同理。

Q: 为什么录音功能不能用?

A: 录音需要https环境,推荐使用cloudflare的免费https证书。

Q: build docker容器的时候,显示exec entrypoint.sh: no such file or directory

A: 因为entrypoint.sh文件的换行符是LF,而不是CRLF,如果你用CRLF的IDE操作过这个文件,可能就会出错。可以使用dos2unix工具将LF换成CRLF

参与贡献

贡献之前请先阅读 贡献指南

感谢原作者Chanzhaoyu和所有做过贡献的人,还有生产力工具ChatGptGithub Copilot!

<a href="https://github.com/WenJing95/chatgpt-web/graphs/contributors"> <img src="https://contrib.rocks/image?repo=WenJing95/chatgpt-web" /> </a>

赞助

如果你觉得这个项目对你有帮助,请给我点个Star。

如果情况允许,请支持原作者Chanzhaoyu

License

MIT © WenJing95