chatgpt-web icon indicating copy to clipboard operation
chatgpt-web copied to clipboard

feat: Deploy to Vercel

Open huandu opened this issue 1 year ago • 12 comments

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.

huandu avatar Mar 26 '23 17:03 huandu

这个可以有~

praiseqin avatar Mar 27 '23 15:03 praiseqin

nice

LiJunYi2 avatar Mar 28 '23 05:03 LiJunYi2

feature-vercel 分支打包运行报错

Chanzhaoyu avatar Mar 28 '23 07:03 Chanzhaoyu

@Chanzhaoyu 是执行什么出错?我看看。

huandu avatar Mar 28 '23 11:03 huandu

@Chanzhaoyu 是执行什么出错?我看看。

我fork了你的仓库,在vercel部署时报错 : Error: Command "./build_vercel.sh" exited with 126 BUILD_UTILS_SPAWN_126: Command "./build_vercel.sh" exited with 126

baby9 avatar Mar 28 '23 12:03 baby9

我fork了你的仓库,在vercel部署时报错 :

@baby9 我看了你的仓库,你那里的报错是因为 build_vercel.sh 没有可执行权限导致的,我猜可能是你合并代码时候出的问题。你可以直接 fork 我的项目的 release 分支看看是否能正常工作。

huandu avatar Mar 28 '23 13:03 huandu

我fork了你的仓库,在vercel部署时报错 :

@baby9 我看了你的仓库,你那里的报错是因为 build_vercel.sh 没有可执行权限导致的,我猜可能是你合并代码时候出的问题。你可以直接 fork 我的项目的 release 分支看看是否能正常工作。

好的,感谢

baby9 avatar Mar 28 '23 14:03 baby9

修复了大家 fork 的时候遇到的编译问题。

当前还有一个问题我打算优化一下,当前由于 service 构建出来的代码量过大,超过了 vercel render function 1MB 的限制,我不得不使用 serverless function 来跑 /chat-process,这导致 /chat-process 的执行时间限制在 10s 之内(免费版的上限),很显然不太够用。不过为了优化这个点的话,我得弃用 chatgpt 这个 npm 包,这个包集成了太多用不上的功能,导致我在 terser 压缩之后仍有 3.8MB 的代码体积,远超限制。这个功能变动有点过大了,且大概率得抛弃 proxy 模式的支持,使用纯 API 方式,这个我不确定是否合适提交到这个项目,大家可以讨论一下。

huandu avatar Mar 29 '23 12:03 huandu

统计了一下 service 代码通过 rollup 打包压缩后代码体积分布情况:

  • chatgpt 库所依赖的 @dqbd/tiktoken,由于里面包含一个巨大的 .wasm,独占 2.8MB。
  • 代码中存在多种不同的 fetch polyfill 或类似库,包括 node-fetchisomorphic-fetchaxios,可以都不使用,改为使用 Node.js 自带库(其实也完全够用),可以节省 500KB。
  • 不使用 express,又可以节省 500KB。
  • 其他所有杂七杂八库加起来,总共才贡献 91KB。

因此要彻底解决问题,我建议重写 service,这个我看代码量也不大,我可以重写一下。

一些计划中的设计细节:

  • 自己实现 ChatGPT API 调用方法,这个总共就两个接口,自己实现一下即可。
  • Access token 代理模式,依然还是使用 chatgpt 库,这个就没办法了,由于 vercel 构建的时候就能知道设置的是 APK key 还是 access token,可以在构建的时候走不通的分支,确保不用 access token 的时候就不打包。
  • 仅在调试时使用 express,发布打包的时候去掉所有 express 代码,使用 vercel render function 调用规范。

huandu avatar Mar 29 '23 18:03 huandu

统计了一下 service 代码通过 rollup 打包压缩后代码体积分布情况:

  • chatgpt 库所依赖的 @dqbd/tiktoken,由于里面包含一个巨大的 .wasm,独占 2.8MB。
  • 代码中存在多种不同的 fetch polyfill 或类似库,包括 node-fetchisomorphic-fetchaxios,可以都不使用,改为使用 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 重写下

Chanzhaoyu avatar Mar 30 '23 00:03 Chanzhaoyu

可以用 Next 或者 Nuxt 重写下

我考虑过,不过由于 service 是个纯 api 服务,用 next 和 nuxt 没什么收益,如果用 nuxt 改造现在的 vue 代码的话,动静又太大了,基本相当于要重写前端部分逻辑了,我觉得在当下大家都在踊跃提 PR 的时候可能不太合适。

huandu avatar Mar 30 '23 02:03 huandu

我自己试了下将项目部署到vercel, 运行是ok的, 但是 打字机效果无法实现, api 流式返回总是先半天不动,等后面一下子全部返回了, 似乎无解, 其他部署到vercel又有打字机效果的大多用的不是这种前后端分离的方式,官方有相关介绍 https://vercel.com/blog/gpt-3-app-next-js-vercel-edge-functions#the-frontend

pangao66 avatar Apr 25 '23 09:04 pangao66

大佬能增加打字机效果吗,我用accesstoken访问,没有打字机效果

tkisowen avatar Apr 28 '23 06:04 tkisowen

我发现打字效果的出现貌似和网络状态有关,我完全一样的代码(#1289),在HK和SG两个不同的位置,后者正常一次一词,前者一次约5-20个词;

liut avatar May 06 '23 02:05 liut

Got this error undefined [Request failed with status code 504] after asking for some questions. Can anyone confirm this error?

kotobuki09 avatar Jul 31 '23 15:07 kotobuki09