肝了大半年,我用 Next.js + Yjs 撸了一个类 Notion 的全栈 AI 协作编辑器 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
moment082
V2EX    分享创造

肝了大半年,我用 Next.js + Yjs 撸了一个类 Notion 的全栈 AI 协作编辑器

  •  1
    &nbs;
  •   moment082 22 小时 55 分钟前 700 次点击

    在开始之前,首先贴上项目地址:

    github 地址

    项目预览地址

    如果这个项目对你有帮助,欢迎 star ,如果你想进群学习或者参与开发,请添加我微信 yunmz777

    简介

    DocFlow 是一款面向团队协作的块级文档编辑器。它融合了 Notion 的灵活性与飞书的协作能力,通过块级内容架构、实时协同编辑和 AI 辅助功能,帮助团队高效完成文档创作与知识管理。

    我们希望通过技术手段减少协作摩擦,让文档编辑更接近团队的真实工作流。无论是产品规划文档、技术方案设计,还是会议记录整理,DocFlow 都能提供流畅的创作体验。

    核心特性

    DocFlow 参考了 Notion 与飞书的设计理念,将内容以块为单位进行组织。每个块都是独立的编辑单元,可以灵活组合与调整,同时支持实时协作与 AI 辅助。

    • 块级编辑器:支持文本、标题、列表、代码块、表格、图片、视频等 20+ 种内容类型,通过拖拽即可调整块级元素的顺序与层级关系。

    • 实时协作:基于 Yjs CRDT 算法实现多人同步编辑,自动处理编辑冲突。支持实时光标跟踪、成员在线状态与历史版本回溯。

    • AI 功能:内置 AI 助手,支持头脑风暴、内容润色、文档续写与智能问答。可根据上下文生成结构化内容建议。

    技术选型

    DocFlow 采用全栈 TypeScript 架构,前端基于 Next.js 构建,后端使用 NestJS 框架。通过统一的类型系统和现代化的工程实践,保证了代码质量与开发效率。

    前端架构 (Client-side)

    Next.js

    项目基于 Next.js App Router 架构,利用 React Server Components 优化首屏渲染性能。通过 Server Actions 实现前后端通信,确保类型安全的同时简化了数据流转。

    Tiptap

    编辑器核心采用 Tiptap 框架,基于 ProseMirror 构建。通过扩展机制实现了丰富的块级编辑能力,支持自定义节点与快捷命令,为用户提供接近 Notion 的编辑体验。

    Yjs

    协作功能基于 Yjs CRDT 算法实现,能够自动处理多人编辑时的冲突,保证数据最终一致性。配合 Awareness 模块,实现了实时光标追踪与在线状态同步。

    后端架构 (Server-side)

    NestJS & Prisma

    后端使用 NestJS 模块化框架,通过依赖注入实现业务逻辑解耦。Prisma ORM 提供类型安全的数据访问层,支持高效的数据库查询与迁移管理。

    Hocuspocus

    Hocuspocus 作为 Yjs 的 WebSocket 服务端,负责协调文档协作会话,处理客户端连接与数据同步。通过拦截器机制实现权限控制与数据持久化。

    Prometheus & Grafana

    集成 Prometheus 进行指标采集,通过 Grafana 可视化展示系统运行状态。监控包括 API 响应时间、数据库查询性能、WebSocket 连接数等核心指标。

    20260203091658

    Grafana 监控面板实时展示系统各项性能指标,包括请求量、响应时间、错误率等关键数据,帮助快速定位性能瓶颈。

    ELK Stack (Elasticsearch & Kibana)

    使用 Elasticsearch 存储和检索日志数据,Kibana 提供日志分析与可视化能力。支持全文搜索、日志聚合与异常检测,便于问题排查与系统审计。

    日志分析系统

    Kibana 日志分析界面,支持按时间、日志级别、服务模块等维度查询和过滤日志,提供结构化的问题排查路径。

    MinIO & RabbitMQ

    MinIO 提供对象存储服务,用于存储用户上传的图片、视频等文件。RabbitMQ 作为消息队列,处理异步任务如图片压缩、邮件发送等,避免阻塞主业务流程。

    功能介绍

    DocFlow 将 AI 能力集成到编辑器中,通过理解文档上下文来辅助内容创作。AI 不是简单的文本生成工具,而是能够理解语义、提供决策建议的智能助手。

    AI 头脑风暴

    当你有一个初步想法但不知如何展开时,AI 头脑风暴可以帮助拓展思路。输入核心概念后,AI 会从不同角度生成 3-6 个结构化方案,每个方案都包含具体的实施思路。

    AI 头脑风暴输入界面

    在编辑器中输入头脑风暴主题,AI 会基于输入内容理解你的需求场景。

    AI 头脑风暴结果展示

    AI 生成的多个方案以卡片形式展示,每个方案都有清晰的标题和详细说明。你可以选择任意方案插入到文档中,或者继续优化调整。

    这不只是简单的内容生成,AI 会根据上下文理解你的意图。无论是产品功能设计、内容分类规划,还是业务流程优化,AI 都能提供可行的思路参考,帮助快速决策。

    AI 文本润色

    AI 文本润色功能

    选中需要优化的文本段落,AI 会分析文本结构与表达方式,提供更清晰、更专业的改写建议。支持调整语气风格,如正式、简洁、友好等。

    AI 续写

    AI 续写功能会根据前文内容自然延续写作。当前文内容较长时,系统通过 RAG (检索增强生成) 技术,从文档中检索相关段落,确保续写内容与上下文保持逻辑一致,避免偏离主题。

    AI 续写功能演示

    AI 续写时会参考前文的写作风格、用词习惯和逻辑结构,生成连贯自然的后续内容。你可以继续编辑生成的文本,或者重新生成。

    AI 聊天

    目前 AI 聊天功能作为独立页面存在,后续会集成到编辑器侧边栏,与文档内容深度关联。未来计划实现 Agent 模式,类似 Cursor 那样能够自动编辑文档内容。

    7a8ba58a4ab3b592bb7fae1b45634648

    协同编辑

    多人协同编辑

    多人同时编辑时,每个用户都有独立的光标颜色标识。文档修改实时同步,冲突自动合并。右侧显示当前在线成员列表与他们的编辑位置。

    未来计划

    DocFlow 将持续优化协作体验与 AI 能力,同时加强工程化建设,提升系统可扩展性。

    工程化体系深度重构

    • 迈向 Monorepo 架构:计划基于 pnpm workspaces 和 Turborepo 将项目重构为 Monorepo 。前后端代码分离,共享类型定义与工具函数,提升代码复用率与构建效率。

    • 组件库与插件生态开放:将 Tiptap 自定义扩展(如代码沙箱、交互式图表等)提取为独立 npm 包,开放给社区使用。同时建立插件开发规范,支持第三方开发者扩展编辑器能力。

    多维协同体验升级

    • 集成 LiveKit 实时音视频:在文档协作场景中引入实时音视频通话。团队成员可以边看文档边讨论,提升复杂决策场景下的沟通效率。

    LiveKit 集成方案

    • 实时群聊系统:在文档侧边栏集成实时聊天功能,支持针对文档内容发起讨论。消息可以关联到具体的文档块,形成完整的协作反馈闭环。

    智能内核的跨越式进化

    • 基于 RAG 的私有知识库:引入 RAG (Retrieval-Augmented Generation) 技术,让 AI 能够检索用户的历史文档。AI 回答问题时会参考团队沉淀的知识资产,提供更精准的决策支持。

    • 从 Copilot 迈向 Agent:探索 AI Agent 在文档场景的应用。未来 AI 将能够自主执行任务,例如从会议纪要中提取待办事项,自动同步到第三方工具,实现从辅助创作到自动化办公的升级。

    快速开始

    环境要求

    • Node.js >= 24
    • pnpm >= 10.28.2

    本地开发

    1. 克隆仓库
    git clone https://github.com/xun082/DocFlow.git cd DocFlow 
    1. 安装依赖
    pnpm install 
    1. 启动开发服务器
    pnpm dev 
    1. 打开浏览器访问
    http://localhost:3000 

    Docker 部署

    方式一:使用 Docker Compose(推荐)

    # 使用预构建镜像 docker-compose up -d # 访问应用 http://localhost:3000 

    方式二:手动构建

    1. 构建镜像
    docker build -t docflow:latest . 
    1. 运行容器
    docker run -d \ --name docflow \ -p 3000:3000 \ -e NODE_ENV=production \ docflow:latest 
    1. 访问应用
    http://localhost:3000 

    健康检查

    容器内置健康检查端点:

    curl http://localhost:3000/api/health 

    贡献指南

    欢迎提交 Issue 和 Pull Request!

    在提交代码前,请确保:

    • 运行 pnpm type-check 通过类型检查

    • 运行 pnpm lint 通过代码检查

    • 运行 pnpm format 格式化代码

    • 遵循项目的代码规范和提交规范

    详见 CONTRIBUTING.md

    联系方式

    4 条回复    2026-02-03 15:20:39 +08:00
    xiaochena
        1
    xiaochena  
       21 小时 12 分钟前
    感谢分享、已 start
    moment082
        2
    moment082  
    OP
       20 小时 54 分钟前
    @xiaochena 感谢
    Allendeng
        3
    Allendeng  
       18 小时 9 分钟前
    好像预览不了
    moment082
        4
    moment082  
    OP
       18 小时 7 分钟前
    @Allendeng 服务器没流量了,欠费了,我得重新买一个服务器才行
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4371 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 01:28 PVG 09:28 LAX 17:28 JFK 20:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86