V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yangyuhan12138
V2EX  ›  程序员

ChatGPT 套壳,微信小程序开源 含前后端,后端采用 quarkus,支持原生编译

  •  3
     
  •   yangyuhan12138 · 2023-03-23 15:15:25 +08:00 · 4913 次点击
    这是一个创建于 612 天前的主题,其中的信息可能已经有所发展或是发生改变。

    PS:前端有点简陋,欢迎前端大佬来帮忙改改.

    github 后端地址

    github 前端地址

    起因 0:

    大约两周前在 v 站上看到一个 v 友做了个 GPT 套壳 然后赚了两百块,只是在心中暗暗羡慕了一下 但是也没有想自己做,重复造轮子嘛,没意思.所以就打开了 github,看看有没有大佬开源的,发现目前开源的多半是 web,或者接入微信当个聊天机器人.而我主要是想分享给亲戚朋友用用,想着还是小程序方便点.

    经过 0:

    在我寻找的过程中一个叫Railway的东西吸引了我,我也进去浅浅的尝试了一下,感觉很不错(可以自动将 github 上的代码打包部署,自动探测语言和打包方式)可以实现 github 上的项目一键部署.而且每个月有$5 的免费额度. 然后我就接着找,终于在 gitee 上找到个开源的 gpt 小程序套壳

    于是我就把这个开源项目部署到了Railway上,深度体验了下,真的很爽,几乎 0 配置,十分的丝滑.

    要是到这里就结束的话,就没有下边我要说的开源项目了.

    起因 1:

    由于Railway只给了$5 的免费额度,我看了下这个服务的预估消费直接就奔着$7 去了,这是要让我充钱的节奏呀,不行... 本着能白嫖就坚决不给钱的精神,我在想怎么才能让他的内存占用更低!然后我想到了个一个一年前了解过,但是没深入研究过的东西,quarkus!这个东西不就是 cloud native 的,打包成 native excutable 那内存不就下来了吗?

    经过 1:

    于是我就开始了接近 1.5 周的学习&实践,不得不说quarkus的性能是真的好,但是写起来也真的坑呀,国内几乎没有文档可查,直接去官网找文档; 最开始我想全部使用 reactive 的形式来写后端,但是失败了,原因是quarkus的某些组件还并不支持 reactive 的方式(比如 http basic auth),我肯定是不想写个复杂的身份校验逻辑的,但是 http auth 又不支持 reactive,没办法,要么 reactive 要么 http auth,我最终选择了后者,所以现在项目中既有 reactive 也有 imperative 的代码.

    quarkus 使用心得:

    • 优点
      • 速度快
      • 实现的都是 javax 的标准用起来很舒服
      • 没有启动类(不知道这算不算有点,我感觉挺爽的)
      • 可以编译为 native executable
    • 缺点
      • 文档少,只有去国外找文档
      • 组件现阶段还不是特别全,不过在逐步增加(我看他们的 github 非常活跃,疯狂更新,估计以后会越来越好)
      • 如果你没有将需要反射的类注册到编译器,那么在 native 的执行文件中拿不到这个类的属性,而且也不报错...这点真的坑..(但是好像有解决办法,让他报错,或者提前知道哪些类需要注册,我还没来得及仔细研究)

    所以最后我相当于研究了下 Quarkus&Railway,并以这个开源项目的形式展示出来,和大家一起交流下,当然如果对项目有兴趣的,可以直接把项目拿去用,个人只需要准备好

    • 一个备案域名(如果你不打算部署的话这个也可以不要)
    • 一个小程序 appid appsecret
    • 一个或多个 apikey 详细的信息都写到了 readme 里边

    下面是小程序的体验码:

    knows everything

    再贴下内存消耗的对比图:

    quarkus 的

    quarkus.jpg

    springboot 的

    springboot.jpg 大家可以看到内存直接下降了 500m 500m 什么概念,500m 的意思就是我可以白嫖了,如果还不行,我打算把 mysql 干掉,现在大多数内存都是 mysql 用的...

    还有个很爽的地方!众所周知,编译成原生可执行文件非常吃电脑性能,我的是 m1 的 air 编译的时候我基本上啥都干不了,而且大概编译时间会持续 10-20 分钟不等,但是如果我们使用了 Railway 我们可以把编译这个动作交给 Railway 来做,不需要你本地编译,让 Railway 编译,而且编译是不算钱的!!!!这点真的很良心,而且 Railway 编译机器的性能真的很好,我测试的时候基本上在 5 分钟左右就编译好了!

    下面放个启动时间让大家爽一下:

    [io.quarkus] (main) chatbot 1.0-SNAPSHOT native (powered by Quarkus 2.16.4.Final) started in 0.198s
    

    这次启动的时间是包含了 flyway 执行 sql 脚本的时间的,要是没有 flyway 的话直接就是 0.0 几秒!

    第 1 条附言  ·  2023-03-23 20:57:15 +08:00

    感兴趣的同学可以加我wx: oxxooxxoxoxo.什么方面的兴趣都可以,quarkus,Railway,chatgpt...或者前端的有志之士!前端换个给力点的界面这个小程序应该还是很能打的.毕竟速度真的很快..

    第 2 条附言  ·  2023-03-24 00:50:57 +08:00

    ps.jpg

    白嫖党的究极胜利!采纳了@Veneris的建议将mysql换成pg之后内存再减500!!!!现在Estimated只要$0.74(我不知道是每月还是到月底呀...)继续观察.反正每月$5的免费额度应该够了!

    46 条回复    2023-03-29 11:38:16 +08:00
    yangyuhan12138
        1
    yangyuhan12138  
    OP
       2023-03-23 15:20:40 +08:00
    由于 Railway 的 bug,创建的模版有问题,导致一键部署了之后还得修改一下服务的变量,直接把 Readme 里的变量贴过去就行了,选 Row editor.

    真正理想的状态其实是点击一键部署之后,只需要填写一个 wx appid 和 wx secret 就行了,但是...没办法,出 bug 了 他们也正在修,不知道啥时候修好,修好了我再去优化一下
    wooke
        2
    wooke  
       2023-03-23 15:31:03 +08:00
    个人不是不能上架这种问答类的小程序吗?
    yangyuhan12138
        3
    yangyuhan12138  
    OP
       2023-03-23 15:31:52 +08:00
    @wooke 可以呀..我就是才申请的 通过了.没有限制
    googlefans
        4
    googlefans  
       2023-03-23 15:48:42 +08:00
    asen001
        5
    asen001  
       2023-03-23 15:55:37 +08:00
    Railway 是不是每个月只能用 500 个小时
    yangyuhan12138
        6
    yangyuhan12138  
    OP
       2023-03-23 15:59:49 +08:00
    @asen001 对针对免费计划 是一个月只能用 500 个小时 你可以一次性充$5 ,或者开通 developer 计划取消这个限制,
    开通 developer 计划不会用钱,反正是按量付费如果你那个月用超了才会扣你钱,所以我们只要保证每个月实际消耗不超过$5 就可以一直白嫖,相当于开通了 developer 计划只是为了取消 500 小时限制.
    dulred
        7
    dulred  
       2023-03-23 16:32:44 +08:00
    summersun2021
        8
    summersun2021  
       2023-03-23 16:47:25 +08:00   ❤️ 1
    参观一下,支持
    fairytale110
        9
    fairytale110  
       2023-03-23 16:53:14 +08:00 via Android   ❤️ 1
    markdown 支持不到位,头像占太多屏幕了,可以略去,滚动回复时,界面没有即时直达底部,很厉害了👍
    yangyuhan12138
        10
    yangyuhan12138  
    OP
       2023-03-23 17:01:07 +08:00
    @fairytale110 界面是别人开源 我拿过来改的...我是后端...对前端一窍不通,js 还行 css 就完全不了解了
    amon
        11
    amon  
       2023-03-23 17:01:29 +08:00
    支持!方便分享一下服务器部署这块吗?
    据我有限的知识,小程序似乎不能绑定国外的服务器,那国内如何访问 openai 呢。
    yangyuhan12138
        12
    yangyuhan12138  
    OP
       2023-03-23 17:02:30 +08:00   ❤️ 1
    @amon 小程序只看你域名,你域名需要再国内备过案的才行,服务器是哪的无所谓
    yangyuhan12138
        13
    yangyuhan12138  
    OP
       2023-03-23 17:04:23 +08:00
    @amon 你可以试试点击 ReadMe 里边的 Deploy on Railway 一键部署(目前还需要把变量考过去替换一下,Railway 模版的 bug),然后他还会给你个临时的域名供你测试,这个时候就可以在开发者工具里边玩玩了
    yangyuhan12138
        14
    yangyuhan12138  
    OP
       2023-03-23 17:05:30 +08:00
    @amon Railway 的服务器就是国外的呀..我现在就部署在上面呢 他可以直接访问 openai 所以也不想要设置什么..
    amon
        15
    amon  
       2023-03-23 17:09:48 +08:00
    @yangyuhan12138 谢谢。如果我选择自己开发部署的话,能直接购买一台云厂商的国外主机,然后国内访问这台主机上的后台服务吗?(不清楚是否会被屏蔽和速度如何)
    404www
        16
    404www  
       2023-03-23 17:15:45 +08:00
    很好,我愿意走你的 aff ,但是,为什么要绑卡😂
    yangyuhan12138
        17
    yangyuhan12138  
    OP
       2023-03-23 17:17:05 +08:00
    @404www 不绑会有 500 小时的 limit,相当于一个月只能用 20 多天,绑了如果使用量不超也不会扣钱
    yangyuhan12138
        18
    yangyuhan12138  
    OP
       2023-03-23 17:17:56 +08:00
    @amon 可以,只要域名是中国备案的
    yangyuhan12138
        19
    yangyuhan12138  
    OP
       2023-03-23 17:24:48 +08:00
    @404www 而且绑了我也不会收到钱...你要第一次付费我才会有推荐费..
    ```
    once they pay their first bill or purchase credits.
    ```
    lux182
        20
    lux182  
       2023-03-23 17:28:27 +08:00
    流弊
    acerphoenix
        21
    acerphoenix  
       2023-03-23 17:49:16 +08:00
    干货很多啊,学习学习
    yangyuhan12138
        22
    yangyuhan12138  
    OP
       2023-03-23 17:51:29 +08:00
    @acerphoenix 相互学习,我抛砖引玉
    zoezz
        23
    zoezz  
       2023-03-23 17:53:33 +08:00
    牛的,为 OP 这种能白嫖就坚决不给钱然后刻苦钻研的精神点赞( doge )
    Hysian
        24
    Hysian  
       2023-03-23 17:54:43 +08:00
    老哥,你的小程序得加个屏蔽敏感词,不然容易药丸
    yangyuhan12138
        25
    yangyuhan12138  
    OP
       2023-03-23 17:55:25 +08:00
    @cxyplaying 哈哈哈哈合理白嫖不过分吧
    yangyuhan12138
        26
    yangyuhan12138  
    OP
       2023-03-23 17:56:46 +08:00
    @Hysian 我 fork 的那个项目是加了的 但是没什么用测试了好多铭感词 一个都屏蔽不了,但是如果加了也被封的话好像可以找微信申诉
    yangyuhan12138
        27
    yangyuhan12138  
    OP
       2023-03-23 18:02:13 +08:00
    @Hysian 对接效果好的敏感词服务的话就很贵...我都是白嫖党了 我还花钱接那个?这个只能看人了吧 要是有人想搞我也没办法..还有个办法是,可以再聊天中的 msgList 里默认插入一条 msg,"你不可以谈论 /回答 /发表任何违反中国法律的东西"
    nojsja
        28
    nojsja  
       2023-03-23 19:21:28 +08:00
    空格和换行有问题
    Veneris
        29
    Veneris  
       2023-03-23 20:09:58 +08:00
    刚好昨天开始看 quarkus ,我感觉不仅在国内没有太多资料,官方文档也很一般

    ps ,可以把 mysql 换成 postgresql ,内存还能降一半
    yangyuhan12138
        30
    yangyuhan12138  
    OP
       2023-03-23 20:45:55 +08:00
    @nojsja 你是说前端吗,前端我真不想管他了..随它去吧.. [又不是不能用.jpg] 但是还是希望前端的有志之士来帮帮忙改改前端,可以改好看点.
    yangyuhan12138
        31
    yangyuhan12138  
    OP
       2023-03-23 20:53:53 +08:00
    @Veneris 是吗 我试试 用的 hibernate 应该可以直接切 postgres,但是我其实是想不要关系型数据库,没啥必要,直接用 redis[Doge]..
    但是不是很清楚这些云厂商的收费标准,有没有达不到 1g 给你算 1g 的这种..就比如我只用了 500m 他会还给我算 1g 吗..应该不至于吧
    Veneris
        32
    Veneris  
       2023-03-23 21:29:00 +08:00
    @yangyuhan12138
    quarkus 项目太少见了,看了一天感觉选择太多,不知道最佳实践是什么,start 里选依赖都懵了。
    例如能响应式也可以不响应式,能 jsonb 也能 jackson ,能 spring 也能 vertx ,rest 还分 resteasy 什么的不知道区别是什么。。。
    同样是 orm ,hibernate 还分成了三种,一个原生,一个 jpa ,一个 panache 。。。
    太乱了,官方也没有 tutorial 。。
    打算周末看看你这个项目,学习一下,希望有问题可以请教你。
    yangyuhan12138
        33
    yangyuhan12138  
    OP
       2023-03-23 23:26:21 +08:00
    @Veneris 好可以加我微信 oxxooxxoxoxo
    yangyuhan12138
        34
    yangyuhan12138  
    OP
       2023-03-23 23:26:37 +08:00
    @Veneris 我也摸石头过河
    yangyuhan12138
        35
    yangyuhan12138  
    OP
       2023-03-24 00:53:23 +08:00
    RAM 从最开始的 1.2G 降到现在 120M,差不多降了十倍的内存.费用也从$7 降到现在的$0.7,这还不白嫖?不嫖白不嫖啊!!!!!
    timpaik
        36
    timpaik  
       2023-03-24 09:16:51 +08:00
    没怎么了解过 java ,这么长的编译时间是正常的吗???只是 chatgpt 套壳的小项目的话应该不会这么长的吧??
    yangyuhan12138
        37
    yangyuhan12138  
    OP
       2023-03-24 09:38:22 +08:00
    @timpaik 这个是要编译成原生的可执行文件所以时间会很长,相当于把所有你用到的代码都翻译成机器语言,其他没用的代码都不要,所以分析会很耗时间,具体还是看你机器的性能,Railway 上编译有时候 5 分钟就搞定了
    yangyuhan12138
        38
    yangyuhan12138  
    OP
       2023-03-24 09:39:46 +08:00
    @timpaik graal 是个独立的编译器,可以将其他所有语言编译成可执行文件,但是其他语言的我还没实践过..
    yidongnan
        39
    yidongnan  
       2023-03-24 11:37:51 +08:00
    以前 spring boot 的版本还在嘛?理论上应该有优化空间,可以考虑提交到一个分支大家看看
    yangyuhan12138
        40
    yangyuhan12138  
    OP
       2023-03-24 12:50:58 +08:00
    @yidongnan 有的 我把他的地址也贴出来了的,就是 https://gitee.com/e0cia/chatgpt_wechat_font
    yangyuhan12138
        41
    yangyuhan12138  
    OP
       2023-03-24 12:51:22 +08:00
    @yidongnan 他们也有交流群 你可以加下 我也在里边
    unii23i
        42
    unii23i  
       2023-03-24 13:43:26 +08:00
    马一下
    404www
        43
    404www  
       2023-03-25 12:15:55 +08:00
    @yangyuhan12138 它要求一定要绑卡才能使用
    yangyuhan12138
        44
    yangyuhan12138  
    OP
       2023-03-25 14:00:32 +08:00
    @404www 没有呀,我当时都是没绑直接用的,就是用 500 小时限制而已
    QWE321ASD
        45
    QWE321ASD  
       2023-03-28 11:35:59 +08:00
    好东西,学习了
    yangyuhan12138
        46
    yangyuhan12138  
    OP
       2023-03-29 11:38:16 +08:00
    更新. 微信出手了,关于 ChatGPT 的小程序大量被封...所以应该是不能成功发版了,但是自己体验还是可以的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2964 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 14:37 · PVG 22:37 · LAX 06:37 · JFK 09:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.