19
不知名管理员
当前还没有回复,欢迎成为第一个参与讨论的人。
接入 AI 接口平台,配置多种创作角色,基于灵感自动生成 Markdown 帖子。支持人工审核发布与定时发布,可开启「AI 正文优化」一键润色。
| 属性 | 值 |
|---|---|
| 插件 ID | ai-creator |
| 版本 | 1.5.0 |
| 作者 | 狡猾的骗骗花 nodey@qq.com |
| 入口 | dist/server.mjs |
| 注入方式 | 后台管理页 + 写作页 write-action provider + 后台任务 |



| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| 接口地址 | 文本 | https://api.deepseek.com |
兼容 OpenAI 协议的 API 地址 |
| 模型 | 文本 | deepseek-v4-flash |
模型标识 |
| Temperature | 数字 | 0.8 |
0-2,越高越随机 |
| 通用提示词 | 多行文本 | 内置中文社区创作规范 | 所有 AI 共享的基础创作要求 |
| API SK | 多行文本 | 空 | 每行一个,支持多 Key 轮询负载均衡 |
| 正文优化开关 | 开关 | false |
开启后在发帖页「功能区」面板显示 AI 润色入口 |
| 正文优化提示词 | 多行文本 | 内置中文编辑规范 | 优化时使用的提示词 |
| 状态 | 含义 |
|---|---|
pending |
等待创作,已入队后台任务 |
processing |
正在调用 AI 接口生成 |
success |
创作成功,待审核发布 |
failed |
创作失败,可查看错误原因并重试 |
cancelled |
管理员手动取消 |
published |
已发布到社区 |
pending → processing)防止多 Worker 并发执行write-action provider 在发帖页「功能区」面板追加「AI 正文优化」条目采用 MVC 分层架构,服务端与客户端分离:
textaddon.json ← 插件清单 dist/ server.mjs ← 入口:生命周期 + 路由注册(后台页/API/Provider/后台任务) model.mjs ← Model 层:建表、配置读写、AI CRUD、任务 CRUD controller.mjs ← Controller 层:快照聚合、action 分发、任务执行与发布 deepseek.mjs ← AI 接口:OpenAI 兼容协议调用、多 Key 轮询、JSON 解析 views.mjs ← 视图层:后台页渲染、write-action 条目生成 assets/ ai-creator-admin.js ← 客户端入口(controller → view) ai-creator-admin.controller.js ← 状态管理(快照加载、表单提交、对话框状态) ai-creator-admin.view.js ← 视图渲染(三个标签页 + 多个对话框) ai-creator.css ← 样式(.ai-creator / .aic-* 命名空间,复用宿主 CSS 变量)
text管理员 → 后台页 → POST /admin-api → handleAdminAction ├── save-platform → writeConfig / writeSecret ├── ai-create/update/delete → DB CRUD ├── task-create → DB INSERT → enqueue "generate" 后台任务 ├── task-publish → context.posts.create → markTaskPublished ├── task-schedule → scheduleTaskPublish → enqueue "publish" 后台任务 └── task-retry → 重置状态 → enqueue "generate" 后台任务 "generate" → markTaskProcessing(原子抢占)→ generatePost(DeepSeek API) → markTaskSuccess → 若 autoPublish 则 enqueue "publish" 后台任务 "publish" → 检查是否到点 → publishTask(以绑定用户身份发帖) → 未到点则按剩余时间重新排队 访客发帖页 → getWriteActionItems(检查开关)→ 注入「AI 正文优化」条目 → POST /public-api/optimize → optimizeContent → 返回润色后正文
127. 10. 172.16-31. 192.168. 等)context.writeSecret/readSecret 加密存储,不暴露在配置快照中pending → processing 通过 DB 条件 UPDATE 实现,返回受影响行数判断,防止并发重复执行markTaskPublished 仅在 status = 'success' 时更新,返回受影响行数判断是否抢占成功每次调用从 N 个 API Key 中随机选取起点,依次轮询尝试。401(鉴权失败)和 429(限流)自动切换下一个 Key;参数类 4xx 错误直接抛出(换个 Key 也无意义)。
jsconst offset = Math.floor(Math.random() * apiKeys.length)
for (let i = 0; i < apiKeys.length; i += 1) {
const apiKey = apiKeys[(offset + i) % apiKeys.length]
// 尝试调用,失败时按错误类型决定是否继续轮询
}
创作和发布均为异步后台任务,不阻塞管理后台响应:
generate — 提交灵感后立即入队,Worker 异步执行 AI 调用publish — 创作成功后入队(delayMs 按计划时间计算),到点触发发布normalizeScheduledPublishAt 校验时间距当前 ≥ 30 秒且 ≤ 一年,runScheduledPublish 执行时若仍未到点则按剩余时长重新入队:
jsconst remainingMs = new Date(task.scheduledPublishAt).getTime() - Date.now()
if (remainingMs > 0) {
await context.backgroundJobs.enqueue("publish", { taskId }, { delayMs: remainingMs })
return
}
要求 AI 返回 JSON 格式,通过 parseModelJson 容错解析——先尝试直接 JSON.parse,失败后正则提取首个 {...} 块。支持 AI 偶尔包裹 ```json 代码块的情况。
textprovider:register — 注册 write-action provider page:admin — 注册后台管理页 api:admin — 注册后台 API(快照 + 配置/任务操作) api:public — 注册公开 API(正文优化入口) config:read / config:write — 读写平台配置、通用提示词、优化配置 secret:read / secret:write — 读写 API 密钥 database:sql / database:orm — 自建表 + Prisma ORM post:create — 以绑定用户身份发帖 network:external — 调用外部 AI API background-job:register — 注册后台任务类型 background-job:enqueue — 入队后台任务
ai-creator.zip