主题
React + AI 应用开发
AI 生成内容的编辑、版本、撤销和人工审核如何实现?
生成结果不是最终事实,系统要区分模型草稿、人工修改、审核状态和已发布版本。
面试官想考什么
- 用户修改 AI 文本后如何保存? 考察不可变版本。
- 撤销是回退 React state 还是服务端版本? 考察数据权威性。
- 审核中的内容能否继续被 AI 改写? 考察状态和权限。
- 如何避免审核和编辑互相覆盖? 考察并发控制。
一句话回答
text
把 AI 生成、人工编辑、审核和发布建模为带 parentVersion 的不可变版本,前端用本地 undo 提升体验,提交时用 revision/ETag 做并发校验;审核通过的是明确版本,后续 AI 修改必须生成新草稿而不是覆盖已发布内容。面试回答详解
1. 版本状态
text
generated -> edited -> pending_review -> approved -> published
|-> rejected每个版本保存 parentVersion、author、source、prompt/model metadata、content hash、createdAt 和状态。发布动作绑定版本号,不能只依赖当前页面内容。
2. 编辑体验
编辑器有本地 draft、dirty 状态、自动保存和离开提示。撤销/重做可以用操作栈或快照,但提交服务端时要携带基线 revision。多人编辑或审核时发现版本变化,应显示冲突,而不是静默覆盖。
3. AI 重写
重写选区要携带原文范围和基线 hash,返回新版本或 patch。用户确认后才合并。模型生成的 diff 不能直接写入发布版本,避免上下文过期造成错误替换。
4. 审核流程
审核员看到完整上下文、来源、风险标记和变更 diff。审核通过的是 versionId;审核期间禁止无权限用户修改,或修改后自动回到 pending_review。高风险领域需要双人审核和审计记录。
5. 回滚和指标
发布后保留历史版本,回滚只是把旧版本重新发布或建立新版本,不删除历史。观测人工修改率、拒绝率、平均审核时长、回滚率和 AI 建议采纳率,判断生成质量与审核成本。
可直接背诵的 30 秒回答
text
我会把模型生成、人工编辑、审核和发布都作为不可变版本,保存 parentVersion、作者、来源和 revision。前端 undo 只解决本地体验,提交时用 ETag 或 revision 防止覆盖;审核绑定明确 versionId,审核后任何修改都生成新草稿并重新审核。发布和回滚保留完整审计链。扩展知识
快照与操作日志
- 快照:读取简单,适合文章和消息。
- 操作日志:节省部分存储并能表达细粒度修改,但重放和调试更复杂。
- 实际项目常用版本快照加简化 diff。
面试官追问链
追问一:为什么审核通过后还要重新鉴权?
- 考察点:状态不是权限。
- 回答方向:审核人、资源归属、发布权限和内容状态都可能变化,发布接口必须重新检查。
追问二:AI patch 应该按字符还是按语义应用?
- 考察点:编辑器工程。
- 回答方向:短文本可用范围 patch,长文档更适合 block/id 或 AST 级 patch,并校验基线 hash。
追问三:怎么防止审核员看到被篡改的来源?
- 考察点:证据链。
- 回答方向:来源以服务端 sourceId 和快照为准,保存内容 hash 和检索版本,前端不能自行修改证据字段。