chatgpt-web
chatgpt-web copied to clipboard
feat: Deploy to Vercel
With this PR, we can deploy this project to Vercel. All environment variables defined in service/.env
can be set in Vercel project environment settings.
这个可以有~
nice
feature-vercel
分支打包运行报错
@Chanzhaoyu 是执行什么出错?我看看。
@Chanzhaoyu 是执行什么出错?我看看。
我fork了你的仓库,在vercel部署时报错 : Error: Command "./build_vercel.sh" exited with 126 BUILD_UTILS_SPAWN_126: Command "./build_vercel.sh" exited with 126
我fork了你的仓库,在vercel部署时报错 :
@baby9 我看了你的仓库,你那里的报错是因为 build_vercel.sh
没有可执行权限导致的,我猜可能是你合并代码时候出的问题。你可以直接 fork 我的项目的 release 分支看看是否能正常工作。
我fork了你的仓库,在vercel部署时报错 :
@baby9 我看了你的仓库,你那里的报错是因为
build_vercel.sh
没有可执行权限导致的,我猜可能是你合并代码时候出的问题。你可以直接 fork 我的项目的 release 分支看看是否能正常工作。
好的,感谢
修复了大家 fork 的时候遇到的编译问题。
当前还有一个问题我打算优化一下,当前由于 service 构建出来的代码量过大,超过了 vercel render function 1MB 的限制,我不得不使用 serverless function 来跑 /chat-process,这导致 /chat-process 的执行时间限制在 10s 之内(免费版的上限),很显然不太够用。不过为了优化这个点的话,我得弃用 chatgpt
这个 npm 包,这个包集成了太多用不上的功能,导致我在 terser 压缩之后仍有 3.8MB 的代码体积,远超限制。这个功能变动有点过大了,且大概率得抛弃 proxy 模式的支持,使用纯 API 方式,这个我不确定是否合适提交到这个项目,大家可以讨论一下。
统计了一下 service 代码通过 rollup 打包压缩后代码体积分布情况:
-
chatgpt
库所依赖的@dqbd/tiktoken
,由于里面包含一个巨大的 .wasm,独占 2.8MB。 - 代码中存在多种不同的 fetch polyfill 或类似库,包括
node-fetch
、isomorphic-fetch
、axios
,可以都不使用,改为使用 Node.js 自带库(其实也完全够用),可以节省 500KB。 - 不使用
express
,又可以节省 500KB。 - 其他所有杂七杂八库加起来,总共才贡献 91KB。
因此要彻底解决问题,我建议重写 service,这个我看代码量也不大,我可以重写一下。
一些计划中的设计细节:
- 自己实现 ChatGPT API 调用方法,这个总共就两个接口,自己实现一下即可。
- Access token 代理模式,依然还是使用
chatgpt
库,这个就没办法了,由于 vercel 构建的时候就能知道设置的是 APK key 还是 access token,可以在构建的时候走不通的分支,确保不用 access token 的时候就不打包。 - 仅在调试时使用
express
,发布打包的时候去掉所有express
代码,使用 vercel render function 调用规范。
统计了一下 service 代码通过 rollup 打包压缩后代码体积分布情况:
chatgpt
库所依赖的@dqbd/tiktoken
,由于里面包含一个巨大的 .wasm,独占 2.8MB。- 代码中存在多种不同的 fetch polyfill 或类似库,包括
node-fetch
、isomorphic-fetch
、axios
,可以都不使用,改为使用 Node.js 自带库(其实也完全够用),可以节省 500KB。- 不使用
express
,又可以节省 500KB。- 其他所有杂七杂八库加起来,总共才贡献 91KB。
因此要彻底解决问题,我建议重写 service,这个我看代码量也不大,我可以重写一下。
一些计划中的设计细节:
- 自己实现 ChatGPT API 调用方法,这个总共就两个接口,自己实现一下即可。
- Access token 代理模式,依然还是使用
chatgpt
库,这个就没办法了,由于 vercel 构建的时候就能知道设置的是 APK key 还是 access token,可以在构建的时候走不通的分支,确保不用 access token 的时候就不打包。- 仅在调试时使用
express
,发布打包的时候去掉所有express
代码,使用 vercel render function 调用规范。
可以用 Next 或者 Nuxt 重写下
可以用 Next 或者 Nuxt 重写下
我考虑过,不过由于 service 是个纯 api 服务,用 next 和 nuxt 没什么收益,如果用 nuxt 改造现在的 vue 代码的话,动静又太大了,基本相当于要重写前端部分逻辑了,我觉得在当下大家都在踊跃提 PR 的时候可能不太合适。
我自己试了下将项目部署到vercel, 运行是ok的, 但是 打字机效果无法实现, api 流式返回总是先半天不动,等后面一下子全部返回了, 似乎无解, 其他部署到vercel又有打字机效果的大多用的不是这种前后端分离的方式,官方有相关介绍 https://vercel.com/blog/gpt-3-app-next-js-vercel-edge-functions#the-frontend
大佬能增加打字机效果吗,我用accesstoken访问,没有打字机效果
我发现打字效果的出现貌似和网络状态有关,我完全一样的代码(#1289),在HK和SG两个不同的位置,后者正常一次一词,前者一次约5-20个词;
Got this error undefined [Request failed with status code 504] after asking for some questions. Can anyone confirm this error?