为什么选择对话式
传统的 CMS 后台有它的价值,但对于个人站来说太重了。登录 → 找文章列表 → 点新建 → 填标题 → 写正文 → 设标签 → 预览 → 发布——每一步都是摩擦。我想要的只是一个简单的对话窗口:说一句话,文章就创建好了。
对话式不是 UI 的简化,而是交互范式的降维。 从"操作表单"到"表达意图"。
核心设计理念:对话即操作
传统 CMS 的心智模型是:用户 → 表单 → 数据库 → 页面。每一步都是显式的。
对话式 CMS 的心智模型是:用户 → 自然语言 → AI 解析 → API → 数据库 → 页面。中间的表单层消失了,取而代之的是一层 AI 意图解析。
这带来了三个根本性的变化:
| 维度 | 传统 CMS | 对话式 CMS |
|---|---|---|
| 输入方式 | 逐字段填写 | 一句话描述 |
| 操作粒度 | 原子操作(新建/编辑/删除) | 意图驱动("帮我改一下标题") |
| 反馈循环 | 提交 → 刷新 → 查看 | 对话中即时预览 |
技术链路
整体架构
用户 → WorkBuddy/AI Agent → HTTP API → Next.js 后端 → PostgreSQL → 前台渲染
拆解为四个步骤:
- 用户在对话中描述需求:比如"帮我写一篇关于 Vibe Coding 的文章,发到产品思考分类"
- AI 解析意图,调用 API:识别出「创建文章」意图,提取标题、分类、内容等参数
- 生成草稿,返回预览:API 返回 article ID 和 previewUrl,用户可在对话中确认
- 用户确认后发布:AI 调用 publish 接口,文章即时上线
API 设计原则
// 文章生命周期:draft → published / unpublished
POST /api/dialogue/articles // 创建草稿
PUT /api/dialogue/articles/:id // 编辑草稿
POST /api/dialogue/articles/:id/publish // 发布
POST /api/dialogue/articles/:id/unpublish // 下线
// 项目管理(同一套对话接口)
POST /api/dialogue/projects // 新增项目
PUT /api/dialogue/projects/:id // 编辑项目
设计上刻意保持 RESTful 简洁性——每个端点只做一件事,让 AI Agent 能可靠地调用。不做 GraphQL 那种灵活但需要额外解析层的方案,因为对话场景下"可预测性"比"灵活性"更重要。
触发门禁:为什么需要它
在实际使用中发现一个问题:如果每次提到"写文章"都自动调用 API,会产生大量误操作。于是引入了一个触发门禁机制:
用户说"写篇文章" → 普通聊天,不触发 API
用户说"打理花园" → 进入花园模式,后续操作可调用 API
这个设计的本质是在 AI 的自由度上加一道显式的意图确认。它不是一个技术限制,而是一个 UX 设计决策——让用户自己控制什么时候进入"生产模式"。
鉴权设计
对话式 CMS 的鉴权是整个系统最敏感的部分。设计原则是最小暴露面。
双通道鉴权
| 通道 | 鉴权方式 | 用途 |
|---|---|---|
| 对话侧 | Bearer Token(固定值) | AI Agent 调用 API |
| 后台侧 | Session Cookie | 人类管理员登录管理面板 |
两套凭据完全分离,互不交叉:
// 对话侧鉴权中间件
const token = req.headers.get("authorization")?.slice(7);
if (!timingSafeEqual(token, process.env.DIALOGUE_TOKEN)) {
return Response.json({ error: "Token 无效" }, { status: 401 });
}
安全考量
- Token 硬编码在 Skill 文件中:不存数据库,不暴露在前端,只在 AI Agent 的配置文件中存在
- 使用 timingSafeEqual:防止时序攻击(timing attack),比较字符串时不因长度差异提前返回
- Token 可随时轮换:更新环境变量 + 更新 Skill 文件即可,不影响前台用户
- 对话侧只暴露内容管理接口:不能访问用户数据、系统配置等敏感端点
实际效果
上线后,我的内容创作流程从这样:
打开电脑 → 登录 CMS → 新建文章 → 写标题 → 写正文 → 设标签 → 选分类 → 保存 → 预览 → 发布
变成了这样:
打开手机 → 对 AI 说"打理花园,写一篇关于 XXX 的文章" → 确认 → 发布
步骤从 10 步缩减到 4 步,耗时从 15 分钟降到 3 分钟。更重要的是,创作不再绑定桌面环境——走在路上有个想法,掏出手机说两句,文章就上线了。
反思与展望
对话式 CMS 目前做对了几件事:
- ✅ 降低了内容创作的心理门槛:从"我要去后台操作"变成了"我随口说一句"
- ✅ 把 AI 从工具变成了协作者:不是帮你填表单,而是帮你完成整篇文章
- ✅ 保持了人工审核权:所有操作都有"草稿→确认→发布"的缓冲
但也有明显的局限:
- ❌ 不适合复杂排版:纯 Markdown 够用,但如果需要复杂的图文混排,对话式不如所见即所得
- ❌ 依赖 AI 的稳定性:如果 AI 解析意图出错,用户没有"手动操作"的退路
- ❌ 编辑历史缺失:目前没有版本管理,改坏了无法回滚
下一步计划:
- 支持文章配图(对话中贴图自动上传)
- 引入编辑历史(每次修改自动保存快照)
- 对话中支持更细粒度的操作("把第三段加粗""在第二段后面插一段引用")
对话式不是万能的,但它让"写"这个动作变得轻量。而轻量,往往是持续创作最重要的前提。
