AI 能力层:从基础标记到流式对话
1. 架构分层
Plate 的 AI 能力不是单插件,而是分层构建:
- 基础层:
BaseAIPlugin(AI 标记、插入、撤销等底层 transform) - 交互层:
AIPlugin(React 侧包装) - 场景层:
AIChatPlugin(聊天、流式、锚点、批处理)
核心文件:
packages/ai/src/lib/BaseAIPlugin.tspackages/ai/src/react/ai/AIPlugin.tspackages/ai/src/react/ai-chat/AIChatPlugin.ts
2. 依赖关系设计
AIChatPlugin 显式声明 dependencies: ['ai'],这是典型的“高层能力依赖底层语义层”做法。
好处:
- 组合顺序可预测
- 不会出现 chat 层调用不到 ai transform 的隐式错误
3. 状态模型设计
AIChatPlugin options 里有一组非常关键的运行态字段:
chatSelection/chatNodes:请求上下文边界streaming/_blockPath/_blockChunks:流式写入状态mode:insert或chattoolName:工具意图路由
这说明它不是“调用接口后直接替换文本”,而是完整的编辑事务状态机。
4. 与编辑历史的耦合处理
插件里能看到针对 AI batch/history 的处理(例如 hide/reload/undo 组合),这对“可撤销 AI 操作”非常关键。
可重点强调:AI 操作必须服从 editor 历史系统,否则用户体验会断裂。
5. 为什么 Plate 的 AI 设计值得讲
- 它把 AI 当作编辑器的一部分,而不是旁路工具栏功能
- 它保留了“选择区 -> 生成 -> 接受/拒绝/重试”的可控流程
- 它支持 streaming,并在插件态维护中间状态,避免全量重渲染
6. 结合仓库演进理解
迁移文档里也提示 AI 插件处于实验性阶段(在快速迭代框架里很合理)。这不是“功能不成熟”,而是明确告诉开发者:AI 层仍在高频优化路径上。
小结
Plate AI 的价值不在于“接了哪个模型”,而在于它把 AI 输出嵌进了编辑器插件架构、历史系统和选择语义中,形成可维护、可交互的编辑流程。