多平台内容发布工具 · 七牛云 × XEngineer 新工科计划 第二批参赛作品(议题二)
🎬 Demo 视频(2.5 分钟):https://b23.tv/3jWGsgj · 🔗 在线体验:http://101.133.166.220:3000
一份内容(文字 / 语音 / 视频)→ AI 按平台调性自动改写 → 发布前合规预检 → 各平台原生预览 → 一键导出 / 发布 全链路跑在七牛云,国内可直接访问、零密钥配置即可试用。
它解决什么 · 核心能力 · 60 秒体验 · 架构设计 · 七牛云能力 · 技术栈 · 本地运行 · 部署 · 工程质量 · 路线图 · 原创声明
一个负责多平台内容运营的人,每天要把一份内容手动改成小红书 / 公众号 / 知乎 / 微博 / B站 / 抖音 六种原生风格、守各平台规范、防违规、再逐个后台发出去——逐平台手改是时间黑洞,小红书格式错乱是高频翻车,发错一条违规内容更是事故。
polypost 把这条链收进一个内容运营控制台。核心理念是 「加速人,而不是取代人」:自动做掉批量适配 + 初步合规,把容易出错、违规的地方标出来让运营一眼扫到、快速改,人只需复检一遍、一键发。详见 docs/产品愿景与需求.md。
| 能力 | 说明 |
|---|---|
| 按平台调性 AI 改写 | 同一份内容产出 6 平台(小红书 / 微博 / 知乎 / B站 / 公众号 / 抖音)原生风格稿(标题 / emoji / 话题标签 / 版式各异),七牛 LLM;🧠 智能选型按内容类型推荐最合适模型(图文笔记 → 豆包 / 长文 → Qwen3 / 视频 → Kimi),一键采纳。 |
| 视频 → 图文(创新) | 上传视频 → 七牛 Dora avthumb(pfop 持久化)抽音轨为 mp3 → 七牛 ASR 转写为正文初稿,再走多平台改写。 |
| 语音 → 图文 | 浏览器现场录音 / 上传音频 / 一键示例 → 七牛 ASR 转写填入正文。 |
| 🔑 品牌词 · 禁改词 + 校验没丢(创新 ·「加速人」核心) | 运营标记品牌词 / 禁改词(产品名 / 价格 / 卖点)→ 改写时作为硬约束注入 LLM → 每平台成稿后自动核对,丢了在该卡红条提示,点编辑 / AI 重改补回。 |
| 真实发布前合规预检 | 接七牛内容审核,fail-closed(异常一律转人工,绝不放行);原稿 + 各平台成稿双层审核;顶部「红绿灯」聚合 pass / review / block。 |
| 易错点标注 | 扫描广告法违禁 / 绝对化 / 医疗夸大 / 诱导词,在原稿面板与成稿里标红 + 给改写建议。 |
| 可编辑预览 + AI 重改 | 每张平台原生预览卡可手动改(改完自动重跑合规复检、更新红绿灯),或 🤖 AI 去违禁 / 绝对化重写;改完一键导出 / 发布。 |
| 多图笔记 | 导入 / 拖拽多张图(第 1 张为封面);小红书缩略图条 / 微博九宫格 / 各平台图集;导出整包带全部图。 |
| 平台原生预览 | 把成稿渲染成读者在小红书 / 微博 / 知乎 / B站 / 公众号 / 抖音 实际刷到的样子(含抖音暗色竖版视频卡),一眼看出格式对不对;每张卡一键复制。 |
| 审核必经 → 发布管理(导出 / 定时 / 发布) | 内容须过合规审核才进发布管理:📦 导出全平台包(各平台文案 + 图打成 zip,半自动真闭环,手机粘贴即发)、⏰ 定时、🧪 模拟发布。发布方式诚实标注 真实 / 半自动 / 模拟:仅公众号草稿是真实 API,其余无开放发布接口走半自动、未真实推送;数据看板亦标注演示数据。 |
| 作品 > 平台版本(各平台独立走流程) | 一个作品挂多个平台版本,每个独立走 待审 → 通过(待发布)→ 发布,可逐个或全部操作、可逐步撤回;审批流(✓ 已通过 / ✗ 已驳回 + 理由)+ 数据看板。 |
流程是一条线:① 创作 → ② 审核 → ③ 发布 → ④ 数据(左侧导航即此顺序,审核必经、无直接发布旁路)。
- 打开在线地址 → 创作台已预填样例稿,点 「生成多平台预览」 → 右侧出各平台原生风格卡(emoji 种草 / 理性 / 正式 文案迥异——按调性改写,非复制粘贴);勾上「抖音」还能看暗色竖版视频卡。
- 正文工具栏点 🎙 语音 →「用示例语音」 → 七牛 ASR 几秒转写(零配置验证 ASR);视频 → 图文同样支持(Dora 抽音轨 + ASR)。
- 「更多」里填 🔑 品牌词 · 禁改词(如
限时399)→ 生成 → 哪个平台改丢了会红条报警;任一卡 ✏️ 编辑 / 🤖 AI 重改。 - 点卡片 「提交审核」(创作台唯一出口)→ 卡片从预览消失、转入 ② 合规中心。
- 合规中心:各平台版本逐个过七牛内容审核,命中的违禁 / 敏感词标红列出并给改写建议;可就地 ✏️ 改违禁词、通过 / 驳回(作品级「全部通过 / 退回重做」)。
- 进 ③ 发布管理:已过审的内容 「📦 导出全平台包」(各平台文案 + 图打包,手机粘贴即发)/ 发布 / 定时;发布方式 真实 / 半自动 / 🧪 模拟 诚实标注。左下 「🎬 载入演示数据」 → 看合规中心 / 发布管理 / ④ 数据看板(均如实标注演示数据)。
graph TD
IN["输入<br/>文字 / 语音 / 视频"] --> DORA["七牛 Dora<br/>视频抽音轨 pfop"]
IN --> ASR["七牛 ASR"]
DORA --> ASR
IN --> CC["CanonicalContent<br/>平台无关内容模型"]
ASR --> CC
CC --> REG["PlatformRegistry"]
REG --> AD["每平台 Adapter<br/>adaptationProfile 调性"]
AD --> LLM["七牛 LLM 按调性改写<br/>智能选型 + 卖点约束"]
LLM --> TF["transform<br/>纯函数投影 payload"]
TF --> CEN["七牛内容审核<br/>原稿+成稿 fail-closed"]
CEN --> PV["可编辑预览 + AI 重改<br/>读者视角原生卡"]
PV --> PUB["导出包 / 定时 / 模拟发布"]
PUB --> LC["生命周期 / 审批 / 数据"]
统一内容模型 CanonicalContent + 平台适配契约 PlatformAdapter<TDraft, TPrepared, A> + 注册表 + 类型化流水线。新增一个平台 = 写一个 Adapter(或一个配置对象)+ 注册一行,核心编排层零改动:
// 抖音正是这样内置的——一个配置对象 + 一行注册(本作品现含 6 个平台)
const DOUYIN = createMockPlatformAdapter({
platform: "douyin",
displayName: "抖音",
capabilities: { bodyFormat: "plain", maxTitleLength: 30, maxImages: 12, maxTags: 5, allowExternalLinks: false, supportsVideo: true },
adaptationProfile: { tone: "短平快、强钩子、玩梗", emojiPolicy: "sparse", hashtagPolicy: { use: true, max: 5, placement: "end" }, forbiddenClaims: ["绝对化用语"] },
});
registry.register(DOUYIN);TDraft(转换后)与 TPrepared(资产准备后)用泛型区分,从类型层面阻止未准备好的内容流到 publish。
| 七牛能力 | 用途 | 端点 |
|---|---|---|
| AI 大模型推理 | 按平台调性改写(LLM)、语音 / 视频转写(ASR) | api.qnaigc.com/v1(OpenAI 兼容) |
| 内容审核 | 发布前合规预检(文本,fail-closed) | ai.qiniuapi.com/v3/text/censor(QiniuMac 鉴权) |
| Kodo 对象存储 | 录制 / 上传音视频托管成公网 URL 喂给 ASR / Dora | 区域自动解析 + 上传凭证 |
| Dora 媒体处理 | 视频抽音轨为 mp3(avthumb,pfop 持久化异步 + 轮询) |
api.qiniu.com/pfop(QBox 鉴权) |
| 依赖 | 版本 | 用途 |
|---|---|---|
next |
16.2.6 | 全栈框架(App Router, Turbopack) |
react / react-dom |
19.2.4 | UI |
typescript |
^5 | 类型 |
tailwindcss / @tailwindcss/postcss |
^4 | 样式 |
motion |
^12 | 动效(motion/react) |
lucide-react |
^1.17 | 界面线性图标 |
jszip |
^3.10 | 「导出全平台包」客户端打包 zip |
geist |
^1.7 | 自托管字体(构建期不外联 Google Fonts) |
openai |
^6 | 调七牛 AI 推理(OpenAI 兼容,仅改 baseURL) |
zod |
^4 | API 输入校验 |
vitest |
^4 | 单元测试 |
eslint / eslint-config-next |
^9 / 16.2.6 | 代码规范 |
node:crypto 用于七牛 QiniuMac / 上传凭证签名(Node 内置)。
npm install
cp .env.example .env.local # 填入七牛云 key(QINIU_AI_API_KEY 必填;AK/SK + Kodo 可选,启用合规与语音托管)
npm run dev # http://localhost:3000
npm test # vitest(63 例)
*.workers.dev在中国大陆被 GFW 解析污染、评委打不开,因此弃用 Cloudflare,改用国内 Node 服务器 + 原生next start。
# 1) 本机:同步代码 + 后端密钥到服务器
rsync -az --exclude node_modules ./ root@<服务器IP>:~/polypost/
# 2) 服务器:一键部署(装 Node、swap、build、pm2 守护 next start :3000)
bash ~/polypost/deploy/setup.sh国内裸 IP + 非标准端口免备案;密钥预置后端 env,评委零配置。见 deploy/setup.sh。当前实例:http://101.133.166.220:3000 。
- 安全两轮硬化(经对抗式审查):合规 fail-closed、
publish服务端重校验(收 content 不收前端 payload,重跑 transform + 合规,闸门不可绕过)、Zod 输入校验 + 资源上限、模型 allowlist、URL SSRF 防护、pass-only 发布闸门。 - 测试:
vitest63 例——QiniuMac 签名串格式、合规 fail-closed 各分支、发布越权拦截、语音 WAV 编码、请求 schema、风险词扫描、必保留要点解析 / 校验。 - 规范:Conventional Commits;每个 PR 只做一件事 + 四段描述(改了什么 / 功能 / 思路 / 测试);跨三天持续提交 40+ PR。
- UI 自测:用浏览器自动化(真实 Chrome 截图)对关键流程做端到端自测,交付前自查。
- 6 平台调性改写(小红书 / 微博 / 知乎 / B站 / 公众号 / 抖音)· 🧠 智能选型 · 真实合规预检(原稿 + 成稿双层)· 易错点标注 · 可编辑预览 + 🤖 AI 重改 · 🔑 锁定关键卖点
- 语音 → 图文 · 视频 → 图文(Dora
avthumb抽音轨 + ASR)· 多图笔记 · 一键导出全平台包 · ⏰ 定时发布 · 内容生命周期 / 审批 / 数据看板 · 部署上线 - 公众号真实草稿(
draft/add,需已认证服务号凭据)· 小红书模板封面生成 · 真实数据回流
- 第三方依赖均为开源库,见上表。
- 核心逻辑(内容模型、Adapter 架构与注册表、调性适配、智能选型、合规预检与复检、语音 / 视频转写链路、Dora pfop 封装、锁定卖点校验、可编辑预览 + AI 重改、平台原生预览、多图打包导出、风险词扫描)均为本作品原创,未复用历史代码。