# 把一个ChatGPT项目上线,要折腾多少细节!

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!😄

于5.1启动,耗时3个多月开发的 OpenAI 项目,终于到了上线对外的时候。可能很多伙伴会想到,Github 不是有不少的开源项目吗,为啥还自己做?

为啥🤔。嗯,好问题!因为我是一个程序员👨🏻‍💻,我需要对各项技术的实现方案有深度的理解,我不能在工作或者面试中被提问的时候,说你去看开源项目吧。

此外大部分 Github 的开源项目主要以前端为主,并没有一个前后端结合的开发。而实际上,当我们真的需要在业务场景来使用时,就不只是前端页面,还需要在后端做各项的控制和管理。而这样的架构设计,就势必会涉及到;前后端分离前端工程架构后端工程架构(DDD)登录授权鉴权大模型SDK实现(okhttp)流式异步响应开发对接库表字段索引精细设计API多渠道路由内网穿透服务测试前后端镜像打包docker-compose 服务部署和回滚策略公众号验签配置,等等技术知识的运用。

所以,你跟开源项目学的是简单的应用,跟小傅哥学习;学的是架构设计的魅力学的是技术实现的巧妙。学的是,让你在晋升、述职、面试,时交流的底气。那么现在小傅哥把这样一个上线项目,拆分成一个个章节学习,让你也能具备这样的能力。

# 一、先看效果

体验地址:openai.itedus.cn (opens new window)



关注小傅哥的公众号【bugstack虫洞栈】回复【星球】也可以领取专属优惠券 | 加入即可学习星球的全套实战项目(Lottery、API网关、ChatGPT、IM、组件开发、插件开发等)

# 二、再说流程

当一个项目引入后端能力以后,就可以扩展非常多的能力。而所有的控制都是在做用户的行为处理,而这些行为就是业务需求。当不同的码农面对相同的业务,写出的代码可就不一样了。所以小傅哥也是希望让你能学习到怎么架构和编码出高质量的代码

📢 我告诉你,当前的需求就是;公众号扫码获取验证码登录,登录后访问 OpenAI 服务,访问后需要根据是用户绑定的APIKey还是系统APIKey分别调用,如果是系统APIKey则需要限制调用次数,而用户自己绑定的则不需要。此外调用的 OpenAI 模型和渠道不同,需要进行判断和处理。那么这样的代码你想怎么写?🤔 会不会写出 if···else 的面条代码?

如果你不想写出面条代码,那么就看看小傅哥给你设计的流程图结构。如下;

  • 首先,在这套流程中,小傅哥将核心业务和支撑核心业务的分支流程进行拆解。一切的分支都是为了支撑主干流程运行,而分支的存在和去除,都应以模块插件的方式进行使用。这样会更好的维护和使用。
  • 之后,我想说。写代码就像擦屁屁的纸,80%的面积都是保护手的。所以这除了那20%的核心点以外,要让那支撑系统运行的 80% 分支逻辑,采用设计模式进行进行分治和抽象的设计实现。
  • 所以,这里有了路由模块和规则引擎的使用。因为他们可以更好的被添加和移除。而每次变动的时候,也都是固定范围的变动,不会让整体流程都陷入测试风险中。

所以,你还觉得写代码就只是if···else吗,这哪是写代码,这TM是老子在用代码构建一个世界!

# 三、之后上线

一个系统的上线对外,会有太多太多的细节要考虑。而这样的内容,只有实践了才能真的吸收这些知识。尤其是出一些事故时,都是留下一个个技术成长的故事。

那么我们现在以 OpenAI 个人上线对外一个项目的背景进行思考 🤔,看看会有哪些点需要处理;

  1. 技术栈的使用,不宜过多。要尽量减少运维成本。比如你可以使用 Guava 替代 Redis 使用。
  2. 数据库可以考虑单独购买,避免数据丢失。但同时也需要考虑,如果数据丢失,用户可以根据自己的加密卡Key进行重新绑卡。
  3. 因为本身服务器的成本就比较高,所以尽量控制被白piao。比如任何一个Key都可以在你部署的服务上使用,其实意义不大。可以通过只授权加密 Key 的方式进行使用。
  4. 此外要考虑,多种的调用渠道,如果某个挂了。要能替换对应渠道的访问地址,所以还需要把渠道对应的地址做成可配置的,之后用户写入库里,写入的只是渠道码这样就可以方便替换。
  5. 打包部署上线,一定要先在本地测试验证,验证完全没问题在上线。否则你就单台服务器没有负载能力的情况下,基本就要挂了。
  6. 如果你在本地测试仍不放心,可以修改一个端口和一个 docker-compose-pre-v1.0.yml 进行部署测试。可千万别修改原来正式对外的 compose 直接部署,这会出问题的。
  7. 要有一个可以回滚的处理,可以配置 docker-compose-prod-v1.0.yml 版本的添加。如果1.1版本出问题,可以快速使用 1.0 版本重新部署。
  8. 数据库表的使用,要注意字段的设计,索引的设计,否则就你那一卡拉米资源的数据库配置,真的可能因为你没有索引被打挂。此外可得把用户名和密码设计的强悍一些,别被比特币勒索。
  9. 定期导出 MySQL 数据库表数据,或者有自动备份功能的数据库服务器也是可以的。
  10. 因为你的代码,确实是你的代码。这可不是公司的,也不是有别人参与的。所以为了能在迭代或者处理问题的时候,快速解决。一定是要非常好的架构,非常清晰的编码。

# 四、系统介绍

加入小傅哥的星球【码农会锁】,就可以完整的学习此套项目。另外星球还有,Lottery、API网关、IM、组件开发、插件开发等项目一起学习。

小傅哥带着大家写的项目,从来不是凑数项目,也从不写一堆的 CRUD 代码。而是按照互联网企业级中所开发项目的模式进行架构、设计和实现。所以你跟着小傅哥学习,学的是编程的思维和编码的能力。如下是系统的架构分层;

  • 以上内容,分别包括;API、WEB、SDK,以及 Dev-Ops 部署相关的内容。
  • 所以这套项目的学习,学的是前端、后端、架构、部署、运维等一整套东西,非常具有含金量。