Next.js + Tiptap + ChatGPT 全栈开发知识库平台 AI 写作

大家好,我是双越老师~

背景

最近这 2 个月我一直致力于【划水AI】项目的研发,最近终于有了阶段性的进展:即将开启第一期的内部测试。

本文分享这段时间的开发过程和一些思考,包括:技术选型,项目搭建,富文本编辑器,AI 写作,AI 处理文本,CI/CD 等。

当前开发的仅仅是一期的功能,待一期测试、上线稳定以后,我会再逐步迭代二期、三期。2024年专心搞好这个项目。

为何要做这件事

早在今年 3 月我就发表过一篇文章 前端转全栈: Next.js + ChatGPT 开发 AIGC 知识库(AI 写作) 欢迎围观~ 得到很多同学的关注和点赞,这也鼓励我从 4 月开始就投入该项目的设计和开发。

我觉得,作为一个自由开发者,必须要有自己的技术产品,自己的代表作。当年我在百度、滴滴工作时,公司项目是我的技术产品,后来离职了 wangEditor 就是我的代表作。再后来我宣布不再维护 wangEditor ,就需要新的个人代表作,我选择了去开发这个项目:AIGC 知识库平台。

不过,开发这样一个产品是非常具有挑战性的,它比制作一门 ke程 可麻烦多了,比开发 wangEditor 也要麻烦。

  • ke程 中的项目一般都是本地开发、演示,然后讲解清楚就好了。而 划水AI 是要真实上线的,一上线就有带来各种问题和挑战。如,各种线上服务(域名、证书、服务器、Serverless、数据库、存储、统计等)需要购买和管理,线上用户多了会遇到各种 bug 和优化,需要持续迭代升级。
  • wangEditor 只是前端的一个工具,而 划水AI 是一个全栈项目,就像前者是发动机,后者是整车,它俩不是一个级别的东西。
  • 有时候会费力不讨好。大家更喜欢看各种标题党文章、视频,很少会有人能踏实的关注一个复杂的项目,这是难免的。PS:所以目前收获这么多支持,我觉得非常难得,感谢所有支持者。

但挑战,也就代表着能力。做有挑战性的事情,并且能做出来,能做好,这就代表着个人综合技术能力和经验。

这和你们写简历是一样的,通过写上各种 nb 的项目、亮点,来证明自己的技术能力和工作能力。

我也需要不断的提升自己、证明自己,用真实的项目去证明,而不是光做个ke程、写个文章、录个视频 ------ 那都是次要的。

技术选型

这次我毫不犹豫的选择了 node 全栈,且倾向于 React 选择了 Next.js 。前端技术栈已经稳定了,未来前端破局的方式就是全栈,这个在国外已经实践了两三年了。

有些同学评论说:后段不应该用 node 应该用 java python 或者 go ,这话是没毛病的。但是呢,我不会 java python 和 go ,如果现学现卖的话,技术栈转行可是不容易。而且,我们开发的就是一个 web 应用,没有太多过于复杂的功能,node 是完全可以应对的。至于说 node 性能不好,我可以在硬件配置方面弥补,成本不大。

倾向于 React ,第一是我个人更喜欢 React 一些,第二是我评审过很多前端简历,看到好多人只会 Vue 不会 React ,我就更想通过一个 React 项目来帮助大家。其实我还写过一篇文章 React 和 Vue 对比 22 个方面,React 更简单

Next.js 是最流行的 node SSR 框架,母公司 vercel 的商业化也做的非常成功。近期 React19 即将发布,一些更新也能说明 React 自己也是往 Server component 方面发力。

所以,选择 node 全栈没问题,选择 React 更没问题。

架构设计

整体架构设计如下图。

开发过程

当前开发的是一期功能。待一期测试、上线稳定以后,会再继续迭代升级二期、三期,到时再分享。

分 4 个阶段

第一阶段主要是搭建项目环境,开发基础的 UI 结构,开发基础的功能,如数据库操作、用户登录等。最后能跑通基础的增删改查流程即可,比较简单,好入门。

第二阶段主要开发富文本编辑器的功能,使用 tiptap ,引入基础功能,开发自定义扩展功能,开发各种菜单。最后做出一个简洁易用的 block-editor ,下文有截图。

第三阶段主要对编辑器进行性能和体验的优化,开发图片上传功能,并开发左侧列表的层级结构(这部分也很麻烦),还有删除、收藏、搜索等,最后得到一个完善的知识库平台。

第四阶段主要集成 AI 接口,包括 AI 写作、AI 处理文本,还有 AI 接口报错的兼容、中止 AI 请求,还有限制 AI token 数量,定期领取,防止滥用。

每天我都会详细记录研发过程,包括设计、思考、调研、查询的过程,bug 的解决过程,还有详细的代码提交记录。跟着这份资料,你能体验真实项目的研发过程,积累真实项目经验,也能开发出同样的项目功能。

block-editor 块编辑器

基于 tiptap 开发 block editor ,支持各种常见的富文本格式。并且实现了 slash command ,即在编辑器中输入 / 即可唤起格式菜单,如下图。

PS:富文本编辑器这部分的开发是非常麻烦的,但我记录的很详细,很多同学都跟着做出来了。

阿里云 OSS + CDN 存储图片

开通阿里云 OSS 和 CDN 功能(这俩都可免费使用),开发图片上传服务,并集成到 tiptap 编辑器中。

功能开发以后,我又做了很多优化(为了性能、用户体验、存储带宽等费用),这部分很有意思。例如:

  • 上传时压缩图片尺寸和体积,通过 Canvas 压缩
  • 下载时,压缩图片尺寸,通过阿里云 OSS 提供的动态尺寸参数
  • 上传过程中可预览图片,增强使用体验
  • 图片加载过程中,提前占位,防止重绘重排时的抖动
  • 上传图片时,动态设置宽度,防止"高瘦型"图片宽度 100% 而占用很大高度
  • 图片懒加载

如下图,这个图片的原始文件有 2M ,经过上述一系列优化后,网页中显示只有 422kb ,优化掉 80%

调用 ChatGPT API 实现 AI 写作功能

在项目开始之前我就有调研,并记录文章 用 Node.js 调用 ChatGPT API 实现 Stream 流式聊天效果

基于这个能力,再结合富文本编辑器,实现了 AI 写作功能。包括:续写、头脑风暴、写大纲、写总结,或者自定义命令。如下图

还有 AI 处理文本,在编辑器中选中一段文本,可交给 AI 操作:扩展、精简、切换语气、翻译、解释、修复语法错误等。如下图

还有,每个人都限制了 AI token 的使用数量,如果不够用可以每周定期领取一部分。AI token 也是需要购买的,所以要防止滥用,而且要考虑未来商业化的可能。

设想一下,如果你是一名文字工作者,经常需要写一些内容或者创意,有了 AI 写作的加持,那工作效率就大大提高。

即便你是程序员,每周写写周报,写工作总结,使用 AI 辅助也比你自己写的要好很多。

Github Action + Docker 部署测试机

划水AI 项目分为多个环境:开发环境,测试环境,预览环境,线上环境。真实项目一般都这样分。

测试环境使用 Github Action 做 CI/CD ,使用 Docker 部署到一台 Linux 机器,是亚马逊 AWS 的云服务器。

在此前的部署过程中,经常遇到 255 报错,不是很稳定。后来经过综合分析,彻底解决了这个问题,原因和解决方案我都记录的很清楚。

阿里云 FC Serverless 部署预览环境

预览环境和线上环境,使用 Serverless 服务(不用考虑配置,按量付费),即阿里云函数计算 FC 。配置连接 github 代码库,提交代码会自动触发应用部署,CI/CD

如有报错,可以通过调用请求和函数日志,查看到报错信息

最近就遇到过几次 maxMemoryUsage 报错,经排查是在 Server Action 中使用 redirect 导致的问题。

这就是真实上线的项目,你会遇到很多问题(本地开发遇不到的),甚至很多怪异的、不常见的问题。你要努力排查、分析、解决这些问题 ------ 这就是你的真实项目经验。

内部测试

无论是内部测试,还是公开测试,除非正式上线,都需要限制用户自由注册。为此我开发了邀请码机制,测试用户需要验证邀请码,否则无法访问功能。

我还整理了详细的测试用例,测试人员要覆盖这些功能点,并给出测试反馈。测试也要体系化、规范化,不是瞎点一顿。

参与内部测试、公开测试,可以亲自体验一个真实项目的测试过程,这也是难得的项目经验积累。

我的开发感受

我的最大感受是:一个真实上线、业务复杂的项目,所带来的冲击。这是本地开发 demo 得不到的。

参与项目的很多同学在qun里讨论说:跟着 wiki 和代码做能做出来,但自己做不出来。有很多功能不知道如何从 0 开始设计,很多流程不知道如何搭建,甚至都不知道需要什么流程,什么方式是最佳的。

CI/CD 流程、测试机、预览环境的一些报错,分析解决这些问题的过程,都是这个项目独有的。

写简历或者面试,总是会谈到项目的亮点,其实能解决实际的问题就是亮点。公司招聘为何那么看重实际项目经验,尤其是大厂、复杂项目的实际经验?也是这个原因。一个线上、复杂的项目,能顶 100 个本地练手的 demo 项目。

未来计划

先完成当前功能的测试(内部测试、公开测试)和上线。测试期间还需要修改 bug ,增加统计、监控、报警等功能,做一些提高稳定性的建设。

上线后,再去迭代开发二期、三期,如协同编辑、VIP 、手机号登录等。关注我,到时再分享。

相关推荐
爱喝奶茶的企鹅1 小时前
Next.js 14 性能优化:从首屏加载到运行时优化的最佳实践
react.js
Domain-zhuo1 小时前
如何提高webpack的构建速度?
前端·webpack·前端框架·node.js·ecmascript
政采云技术2 小时前
React前端权限管理思路
前端·react.js
田猿笔记2 小时前
解决 Node.js 单线程限制的有效方法
node.js
蟾宫曲2 小时前
Node.js 工具:在 Windows 11 中配置 Node.js 的详细步骤
windows·npm·node.js·前端工具
傻小胖3 小时前
React 脚手架使用指南
前端·react.js·前端框架
web135085886353 小时前
前端node.js
前端·node.js·vim
若川4 小时前
Taro 源码揭秘:10. Taro 到底是怎样转换成小程序文件的?
前端·javascript·react.js
真的很上进13 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
滚雪球~15 小时前
npm error code ETIMEDOUT
前端·npm·node.js