惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
Scott Helme
Scott Helme
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
C
CERT Recently Published Vulnerability Notes
P
Privacy & Cybersecurity Law Blog
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
Martin Fowler
Martin Fowler
Cisco Talos Blog
Cisco Talos Blog
罗磊的独立博客
MyScale Blog
MyScale Blog
博客园 - 【当耐特】
L
LangChain Blog
AWS News Blog
AWS News Blog
Security Latest
Security Latest
C
CXSECURITY Database RSS Feed - CXSecurity.com
P
Proofpoint News Feed
T
True Tiger Recordings
aimingoo的专栏
aimingoo的专栏
宝玉的分享
宝玉的分享
月光博客
月光博客
The Hacker News
The Hacker News
L
Lohrmann on Cybersecurity
The GitHub Blog
The GitHub Blog
Stack Overflow Blog
Stack Overflow Blog
S
SegmentFault 最新的问题
Recorded Future
Recorded Future
S
Security Archives - TechRepublic
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
Y
Y Combinator Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
博客园 - 聂微东
GbyAI
GbyAI
N
News and Events Feed by Topic
The Cloudflare Blog
Engineering at Meta
Engineering at Meta
Last Week in AI
Last Week in AI
博客园 - 三生石上(FineUI控件)
G
Google Developers Blog
A
About on SuperTechFans
K
Kaspersky official blog
NISL@THU
NISL@THU
S
Securelist
Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX - 技术

V2EX

ai studio 被疯狂封 api 怎么回事 Zerolang 好像还没人讨论? [问与答] token 用量究竟是怎么算的? 香港众安银行开户返 300HKD+50USD 英伟达股票兑换券 活动时间 5.28 日至 7.1 日截止。 vibe coding 了个辅助颈腰椎病康复的体态相机小工具 有在用免费 VPS 的吗?可以当梯子用吗? 这个 sechub 网站搬运了很多 V 站的内容,站方能管到它吗 我的 AI(LLM) 和 vibe coding 使用技巧已经落伍了吗 我做了一个 Agent Team 协作平台——Rudder:让 Agent Team 在实践中成长 react 这个技术栈到底是如何做到每天都有新发现的? 我终于找到了 24 小时进行 coding 的终极方法,你可以在帖子当中看到最佳的 Vibe coding 助手 我不想看你的产出 Anker 已经不是原来的 Anker 了,从苹果生态到饭圈生意,一路从龙头企业做到现在韭菜头子。 [产品发布] [产品自荐] 业余两周做了个 AI Visual Agent,自动选模型、写 prompt、调参数,想请 V 友帮忙看看 [深圳] 居家办公距离南山科兴地铁 50 分钟有推荐的小区吗 [推广] 📊 [抽奖+1] 多券商开户福利(万 0.854/两融低至 3.x),回帖抽 coding plan 欢迎各位分子 AirPods4 降噪版在地铁上的表现实在糟糕,关门声差点我把送走 [酷工作] 远程 AI 前端招聘 30-50K 活过来了,继续推广一下我的 codex 中转站,依旧免费送 30 刀 复杂内网里的 WebRTC + gRPC 音视频通话方案:信令、媒体链路与自恢复 寻找 App 平台规则与技术合规咨询顾问 / 团队 做了个宠物拍立得风格照片生成器,给你的猫狗来张照片吧 [问与答] 国内网盘,大家都试过有哪些好用的原生支持 webdav 的网盘? [酷工作] [Golang] 兼职/全职大量招聘|团队扩招—跨境电商 AI+SaaS 用多模态大模型来做语音输入,效果碾压 typeless [推广] [FK Claude] 满血 Claude 折扣中转站 最近 claude code 频繁卡死有碰到同样问题的吗 [问与答] 香港金管局:就内地投资者开户核查倒查至 2023 年 1 月。啥意思? 各位小微企业创业的大佬,欢迎联系我购买财务软件 麻将洗牌 40 张牌跟踪, YOLO+ByteTrack 累积 1942 ID, SAM 2 / Cutie / CoTracker3 哪个能救? [Claude] 跪求 Claude 使用高手 [分享发现] 小米开发者计划送了 820 亿 token + 240 亿 credits,有人用得完吗? 有需要的可以用我的 前几天看到有坛友有 NAS 托管需求 ,刚好我们这边可以放这个 和大家讨论讨论可行性 [OpenAI] 高考期间国产 AI 工具部分功能或将禁用 哪些兄弟有 token 渠道,采购需求! [酷工作] 阿里国际急招 Agent 开发,流程快,最核心的交易业务,速来 网站公安备案,安全评估大家是怎么处理的 vibe 了一个可视化 sing-box 配置编辑器 寻找视觉处理大佬,多目标 mask 跟踪, SAM2, CoTracker3 / TAPIR (点跟踪)等 香港那边是不是开不了投资账户了 伪装成技术博客的本地 TXT 小说阅读器,让你在办公室光明正大地摸鱼 [问与答] 选择还房贷还是选择理财冲掉房贷利息? 中转站 token 掺水检查 关于懒猫微服,你需要一场面对面的交流,直播预告 [分享发现] 果然便宜没好货,用 Deepseek v4pro 写出来的程序 用 opus 4.7 审计出来了 500 多个 bug,笑死 去那种不大的咖啡店里学习简直是种折磨。 [深圳] 暑假想让老婆孩子来深圳,短租 2 个月,求推荐靠谱的找房方式 codex 中转站 0.05x 倍率 高并发 0.03x [分享发现] 知乎这文章,乱写毒人的吧? 想学习 AI 应用开发练手,用哪家的什么套餐比较好啊 claude code 日更两次,现在启动上下文足够长的窗口也比以前快了 第一版很粗糙,欢迎体验面向全球用户的校友社区 - AlumniCircle(校友圈) 今天 Codex 经常在思考中卡死了 [分享发现] 新开了一个英国银行账户 [程序员] 我又来了,给大家分享一下这几天积累的几个 skills [分享创造] Vibe 了一个机器人工具 33 岁阿里 5 年,平薪去长沙 vs 继续卷杭州,怎么选? [VPS] 收购一台 VPS, colocrossing 家的 [NAS] 利用本地 NAS 解决商业/公益 Emby 服务器无法转码的问题 入手了 一加 15T,说说感受 Apple Store ChatGPT 土耳其区可以年付吗? 『记个到』v1.6 更新:任务分享、统一管理、统计信息和反馈记录 Next2V:原生鸿蒙 V2EX 社区客户端已上架市场 最近接 AI Agent / AI 工作流 / 企业内部自动化相关的远程项目。 国际阿里云/腾讯云|AWS/谷歌云 sm 账号 7 折充值! 看看大家的 AGENTS.md/claude.md 里面都有什么好东西 [深圳] CWILL 招聘内推:产品经理 / Golang / 运维 / AI 解决方案 PM 打 BOSS 技术能聊吗? 之前站内看到的汽水音乐的谷歌搜索结果中有危险网址的问题还在 [AI Agent 智能体] 为什么国内的大模型很少能支持 openAi responses api 的 [推广] [打工人药丸] 瞒着老板,偷偷送 5 个海外住宅 IP 兑换码(全球 195+ 国家选),新用户速来! [分享发现] 今天刷抖音发现有一个在线摸鱼表格莫名其妙的火了 [编程] codex 任何地区都登录不上了 域名注册哪家便宜 [程序员] 聊一聊各位大佬们在 Vibe coding 环境下用的技术栈? 隔壁 L 站小作文好难啊 内核(驱动)内存泄露 [问与答] 你们用 opus 和 gpt 的时候 effort 开的是 medium 还是 extra high [问与答] 可以大陆直连,支持 openai image2 的中转站有吗? [生活] 想买个桨板配套的救生衣,有推荐的吗?帮忙给个链接 [职场话题] 想知道你们曾经离职的主要核心原因都是什么? 讲讲我的中转站建站历程,大家似乎都不太关注中转站实际使用的模型,最近我的 gpt-oss-120b(别名成 GPT-5.5)蜜罐被盗刷炸了 [程序员] codex app 一定要开 tun 模式才能用吗? [问与答] 写了一个免费的 LLM4Rec(大模型推荐系统)的课程,不确定 0 基础能看懂吗? [生活] 中排量摩托车求推荐! 本地大模型最佳 Mac 配置选择 不主动不拒绝不表态的女生,还有必要继续吗? [首发/急招] 搞定万卡调度后,我们决定去 Web3 用 Go + Agent 掀翻天花板! 微软 Azure 的 openai 服务有需要组队的么? 从产品初始化到迭代,总抓不准真实用户需求?我做了一个让用户反馈驱动产品决策的工具 Feedalyze 现在还有哪些值得推荐的机场 每天 6 毛钱的 AI 日报系统 —— AI Daily 又进化了 [程序员] 小米 token plan 明天到期,只用了 1%,搞了什么好呢 怎么优化重构 AI 生成的代码方便后面维护? 求助 GPT 的升级规则 game sinnermaker 最近沉迷低价 plus,推广区的赛博鸡蛋都有点懒得领了,分享一下我的使用方案 [电动汽车] 从没体验过智能电车,要实现这些需求得什么价位? 可靠的小道消息, minimax3 真的要来了(附 minimax 邀请链接) qoder 偷偷在干啥?
历经 4 个月,基于 Tiptap 和 NestJs 打造一款 AI 驱动的智能文档协作平台
moment082 · 2025-09-24 · via V2EX

当 AI 技术刚刚兴起时,我加入了一家 AI 初创公司。由于我们在项目中有着对高级编辑功能的需求,我第一次接触到了 Tiptap 。让我印象深刻的是,Tiptap 与其他编辑器相比,最大亮点在于它的灵活性和可扩展性。这种高度的定制能力,让我们能够根据需求随时调整和扩展编辑器的功能,完全满足了我们的独特要求。

经过一段时间的研究,我渐渐认为 Tiptap 应该是我未来选择的首选编辑器。另外现在公司很久就不干了,项目也没有上线,我完全可以复刻里面的核心功能。

现在在 dashboard 页面上能看到的基本就是将来要实现的核心功能了。

首先先贴相关地址:

Github 地址

在线预览

微信联系方式或加群:yunmz777

项目介绍

DocFlow 是一个基于 Tiptap 和 Yjs 构建的智能协作写作平台,类似飞书的文档功能,支持多人实时协作编辑。平台结合了 AI 生成内容和 RAG 知识库搜索,帮助用户在创作过程中快速获取相关信息,并提供智能写作建议。

DocFlow 还将具备类似 Dify 的工作流编排功能,用户可以创建自动化流程,定义不同任务和操作的执行顺序,实现任务的不同输入输出。通过这个功能,团队可以高效地管理创作过程,构建智能代理( Agent )来自动处理内容生成、文档整理等任务,极大提升生产力。

无论是文档写作、知识管理,还是复杂流程的自动化,DocFlow 都能提供强大的支持,帮助团队优化工作流并提升创作效率。

项目采用的 NextJs 和 NestJs 的全栈架构,

首选是前端的技术栈核心主要有以下几个:

  1. Next.js:用于构建 React 应用,支持服务器端渲染( SSR )和静态生成( SSG ),非常适合 SEO 优化和提升页面加载速度。

  2. Tiptap:现代化的富文本编辑器,支持高度定制和扩展,适合各种文档编辑需求,并与 React 集成良好。

  3. TailwindCSS:通过实用类构建响应式和现代化界面的 CSS 框架,提高开发效率和灵活性。

  4. Radix UI:提供高质量、无样式的 UI 组件库,帮助开发者快速构建无障碍和响应式界面。

  5. Framer Motion: 用于 React 应用的动画库,提供丰富的动画效果,增强用户体验。

  6. React Query:高效的数据获取和同步库,用于管理远程数据的加载、缓存和同步。

未来做流程编排的话会使用 React Flow 。

后端核心技术:

  1. NestJS:用于构建高效、可扩展的 Node.js 后端应用,支持模块化开发和依赖注入,非常适合构建企业级应用。

  2. Fastify: 高性能、低开销的 Node.js HTTP 框架,专注于优化速度,适合高并发和高效的 API 服务。

  3. Prisma: 现代的 ORM 工具,提供类型安全的数据库查询支持,适用于 PostgreSQL 、MySQL 等数据库。

  4. MQ (消息队列): 用于处理异步任务和消息传递,支持高并发、高可靠性的数据传输和任务调度。

  5. Socket.io:实时通信库,支持 WebSockets ,帮助轻松实现实时消息推送和 Web 应用之间的实时通信。

  6. Langchain: 用于与多种语言模型(如 OpenAI 的 GPT )交互的框架,支持 AI 功能的集成,如文本生成、知识图谱等。

  7. Yjs:用于构建实时协作应用的框架,支持高效的数据同步,适合实时编辑和多人协作场景。

目录结构

目录结构采用比较常见的结构:

src/
├── app/                # Next.js 应用目录,包含页面路由、布局配置等
├── components/         # 可复用的 UI 组件库
├── extensions/         # Tiptap 编辑器的自定义扩展功能
├── hooks/              # 自定义 React Hooks
├── services/           # 业务逻辑服务层(如 API 调用、请求封装等)
├── stores/             # 状态管理(如使用 Zustand 、Jotai 等)
├── styles/             # 全局样式和样式模块
├── types/              # 全局 TypeScript 类型定义
├── utils/              # 工具函数、辅助方法
├── worker/             # Web Worker 实现,用于异步或性能密集型任务
└── middleware.ts       # Next.js 中间件,用于请求拦截、认证控制等

其中 styles 里面包含了大量的 tiptap 的 css 样式,这些 CSS 文件用于为 Tiptap 提供完整的富文本样式支持。由于 Tiptap 是无头组件,所有样式(如段落、代码块、表格、列表、协同编辑等)都需自行定义。每个 CSS 文件针对一个功能模块进行样式分离,便于维护与扩展。这种拆分方式能保持样式结构清晰、职责明确。

20250923084026

每个文件代表不同插件的样式配置。例如,code.css 定义了代码块 <pre><code> 的样式,包括背景色、字体、行号等,适配 CodeBlock 插件,并支持语法高亮效果。

components 目录下,组件被分为两个不同的分类:

  • src 目录中的组件是全局公共组件或业务中可复用的组件,适用于多个页面或功能模块。

  • app 目录下的组件则是针对特定页面或布局路由组的业务组件,为避免与路由冲突,推荐将这些组件命名为 _components

核心模块

Service 封装和调用

service 目录下的 request.ts 为全局的 fetch 封装:

20250923084309

这段代码封装了一个基于 fetch 的请求工具类,支持统一的请求拦截、超时控制、错误处理和自动重试等高级功能。它提供了 getpostputdeletepatch 等 HTTP 请求方法,并返回统一格式的响应结果,方便在项目中稳定复用。

对于不同模块的请求,可以在 services 目录下创建新的子目录进行模块化封装。例如,对于 user 模块,可以在 user 目录下创建 index.ts 来封装函数逻辑,type.ts 用于定义接口的入参和出参类型。通过这种方式,不同模块的请求逻辑清晰分离,便于维护和扩展。

20250923084536

在实际调用时,无需显式使用 try...catch 来捕获错误。可以通过传入不同的错误处理逻辑,统一的 fetch 实例会自动处理错误并执行相应的处理方式。

Tiptap

借助 Tiptap 强大的扩展功能,我们可以在原有基础上轻松添加所需的功能,甚至可以在 Tiptap 上扩展整个页面。

创建扩展时,一般遵循以下原则:

import { Node } from "@tiptap/core";
import {
  NodeViewWrapper, // 用于包装 React 组件为 NodeView
  ReactNodeViewRenderer, // 用于包裹 React 节点,Tiptap 会识别它作为 NodeView 的容器
} from "@tiptap/react";

// 👉 你的自定义组件(实际渲染逻辑)
import MyReactComponent from "./MyReactComponent";

// 👉 定义扩展
export const MyNode = Node.create({
  name: "myNode", // 节点名称,必须唯一
  group: "block", // 节点分组,可选 block / inline / list
  atom: true, // 原子节点,不可编辑内部内容
  draggable: true, // 是否允许拖拽移动
  inline: false, // 是否是 inline 类型,默认为 block

  // HTML -> Node 映射(反序列化)
  parseHTML() {
    return [
      {
        tag: 'div[data-type="my-node"]', // 将 HTML 标签映射到该节点
      },
    ];
  },

  // Node -> HTML 映射(序列化)
  renderHTML({ HTMLAttributes }) {
    return [
      "div",
      { ...HTMLAttributes, "data-type": "my-node" }, // 使用自定义数据属性
      "", // 空的内容,原子节点不包含可编辑内容
    ];
  },

  // 客户端渲染视图( NodeView )—— 仅在浏览器中执行
  addNodeView() {
    // 仅在客户端执行 NodeView 渲染
    if (typeof window !== "undefined") {
      return ReactNodeViewRenderer(MyReactComponent);
    }
    return null; // SSR 时跳过 NodeView
  },

  // 自定义命令:插入该节点
  addCommands() {
    return {
      insertMyNode:
        () =>
        ({ commands }) => {
          return commands.insertContent({
            type: this.name,
          });
        },
    };
  },
});

创建完成之后可以在这里添加并导出:

20250923084804

这两个文件都要。

Prisma

Prisma 非常好用,懂的都懂,项目目前 Mysql 的架构如下图所示:

20250923092635

Rabbitmq

目前项目中的 AI 播客生成采用消息队列机制进行处理,主要是因为 TTS 接口存在较高的请求并发。通过使用消息队列,我们确保每次只处理一个请求,从而避免了并发请求对系统性能的影响。

20250923163214

功能展示

协同编辑

协同编辑我们可以再文档这里点击文件进行分享,并且可以设置文件的权限以及是否需要密码等:

20250923174959

之后可以将这个 URL 分享给其他用户,点击之后会有这样的效果:

20250923175045

这个功能跟百度网盘之类的分享类似,这里的主要使用了 RBAC 和 ACL 进行权限控制。

之后我们就可以进行协同编辑了:

collaborate

AI 续写和 AI 问答

AI 续写和 AI 问答的功能正在逐步挣钱,目前以及支持 RAG 了,先看效果:

continue.gif

上面的是续写的,接下来展示 AI 问答的,首先我们可以上传我们自己的一些内容:

20250923182314

之后我们执行 AI 问答:

20250923182418

你可以看到我们添加的内容被我们输出到了这里了,这个就是我们当前的 RAG 的功能,当然后续会继续增强:

20250923182554

他的原理如下流程图所示:

20250923183116

从文档处理角度来看,实现流程如下:

20250923183138

AI 播客

AI 播客处理流程是用户上传简历和选择相对应的面试官,但是最好是相同简历对应面试官类型,不然可能生成出来的内容乱七八糟的:

20250923183508

其他

关于编辑器里面还有很多内容没有介绍到,更多的可自行体验:

20250923183627

20250923183658

后续会继续增强,添加导入导出等功能。

未来

将来要做的内容非常核心,例如侧边栏这边的:

20250923183820

除了前面讲了这这些 Agent 和流程编排,将来还会实现如下核心功能:

  1. 添加组织,增强权限管理。

  2. 对应文档支持评论功能

  3. 接入 Sentry 埋点监控

  4. 后端接入 Prometheus 监控

总结

如果你对 AI 应用与富文本编辑器生态感兴趣,欢迎为本仓库点亮 Star 并开启 Watch ,获取最新迭代。

希望了解更多服务(企业咨询、插件定制、参与开发、私有化部署等),请添加微信 yunmz777(备注:DocFlow )。我将邀请你进入技术交流群,与一线开发者交流实践经验、获取路线图。

Github 地址

在线预览