diff --git a/project/短视频脚本创作/V1.0/SKILL.md b/project/短视频脚本创作/V1.0/SKILL.md index 56fb184..b67a900 100644 --- a/project/短视频脚本创作/V1.0/SKILL.md +++ b/project/短视频脚本创作/V1.0/SKILL.md @@ -9,7 +9,7 @@ description: > 诊断脚本质量、设计账号人设、选题策划、生成分镜、广告植入设计、生成创作回顾。 version: "1.0" updated_at: "2026-09-02" -last_change: "工作台任务执行方式铁律固化(09-02):工作台场景创作/改写/重写/复盘必须走 POST /api/run 提交 AI 会话任务(skills 参数绑定技能),禁止会话内直接写脚本草稿;SKILL.md 关键规则新增「〇执行方式判定」+工作台章节第6条+调度文档第八节「重新执行历史任务标准姿势」;09-01 调度机制实测定稿(scheduled_at=now+5s+显式写next_run_at,替代08-31旧认知);工作台端口统一迁移 8899→8900" +last_change: "工作台新增第7条「AI 任务入口技能契约(P0)」:所有 AI 会话任务入口须遵守功能入口×技能调用契约(prompt=技能前缀常量+业务正文+skills 参数级挂载),新增/修改入口前先读 mcn-work-shop/docs/AI会话任务输入输出对照.md(含新增入口检查清单7项)——防裸 prompt 跳步/技能声明混入业务串/BROWSER_HINT 误注入(09-02 提炼/分镜/复盘三入口缺约束修复后固化,data-pages.js 四前缀常量);原第7/8条顺延为8/9;09-02 前:工作台任务执行方式铁律固化(创作/改写/复盘必须走 POST /api/run+skills 参数,禁会话内手写草稿)+09-01 调度机制实测定稿+端口 8899→8900" deployment: "source" agent_created: true --- @@ -72,8 +72,9 @@ agent_created: true 4. **数据边界**:数据库读工作台自有副本 `mcn-work-shop/mcn-plugin.db`(由 dsh 库复制而来,与 dsh 原库 `~/.dsh/mcn-plugin.db` 完全隔离,两边各访问各的互不影响);周榜读 `D:\dshworkspace\抖音榜单\*.json` 文件 5. **AI 任务触发(Automation 方案)**:各数据页「导入/创作/解析/改写/提炼/复盘」按钮点击后 → 工作台后端 `POST /api/run` → 向 `~/.workbuddy/workbuddy.db` 的 `automations` 表写入一条**一次性任务**(`schedule_type='once'`、**`scheduled_at=now+5s`(带秒)且显式写 `next_run_at=now+5000`**、`cwds=["D:\\AgentSkill\\mcn-workshop"]`)→ WorkBuddy 客户端调度器按 `next_run_at` 扫描拾取(周期≤30s)→ 创建 AI 会话执行 → **会话归入 `mcn-workshop` 空间分组**(左侧会话栏按 cwd 分组,可在该分组查看任务执行过程与结果)。参考 dsh 插件 `dsh-plugin-mcn` 的 `/mcn/api/creative` 模式(固定会话 followup 触发);前端 5 秒防连点。**调度机制/状态机/并发上限/排查命令详见同目录 `自动化任务调度机制.md`(09-01 实测定稿,勿再按旧认知 `scheduled_at=now` 直写——会因 next_run_at 为空而卡死)** 6. **工作台任务执行方式铁律(P0,09-02 固化)**:凡工作台场景的**创作/改写/重写/复盘/解析**类任务(含"重新执行历史任务"),必须通过 `POST /api/run` 提交 AI 会话任务执行(automation 触发 → 独立 AI 会话按技能 S1-S11 执行 → 写库 rewrite_log/入库),**禁止在会话内直接产出脚本草稿**(不会入库、不在左侧会话栏可见、不走技能会话,等于"影子脚本")。**重新执行历史任务 = 复用原任务的 prompt(人设卡+视频选题+创作要求+落库字段)+ `skills:['短视频脚本创作']` 提交新任务**——新任务自动加载当前技能版本(含最新优化),无需手工搬内容。执行方式判定细则见「关键规则 〇·执行方式判定」。 -7. 本功能仅 V1.0 源技能环境提供,**不同步 dsh/Lite 副本** -8. **改完必重开页面(硬性约定)**:对工作台任何页面/代码改动完成后,**最后一步必须用 present_files 重新打开对应页面**(带 hash 直接定位,如 `http://localhost:8900/#/accounts`),让用户在 WorkBuddy 内置浏览器立即看到最新效果。原因:内置浏览器无 CDP 调试端口(9222/9224 等均无响应),无法模拟 F5;重开页面是唯一可靠刷新方式。此约定对工作台所有 UI 改动强制生效 +7. **AI 任务入口技能契约(P0,09-02 固化)**:工作台每个触发 AI 会话任务的入口都必须遵守「功能入口 × 技能调用契约」——任务 prompt = **固定技能声明前缀常量**(SKILL_HINT_CREATE/EXTRACT/STORYBOARD/REVIEW/ACCOUNT,分别对应 创作/提炼/分镜/复盘/账号抓取)+ **业务正文**,并传对应 `skills` 数组(参数级技能挂载)。**新增/修改任何入口时先读 `mcn-work-shop/docs/AI会话任务输入输出对照.md`(契约总表 + 新增入口检查清单 7 项),再动手**——防裸 prompt 跳步(09-02 三入口缺约束根因)、防技能声明混入业务串、防非抓取任务命中 server.js BROWSER_HINT 正则被误注入浏览器锁。 +8. 本功能仅 V1.0 源技能环境提供,**不同步 dsh/Lite 副本** +9. **改完必重开页面(硬性约定)**:对工作台任何页面/代码改动完成后,**最后一步必须用 present_files 重新打开对应页面**(带 hash 直接定位,如 `http://localhost:8900/#/accounts`),让用户在 WorkBuddy 内置浏览器立即看到最新效果。原因:内置浏览器无 CDP 调试端口(9222/9224 等均无响应),无法模拟 F5;重开页面是唯一可靠刷新方式。此约定对工作台所有 UI 改动强制生效 --- ## MCP 依赖(摘要) @@ -321,6 +322,7 @@ agent_created: true > 判定口诀:**"这个产物要不要进工作台(rewrite_log/入库/左侧会话栏)?"**——要进,就走任务;不进,才可会话内产出。 > 重新执行历史任务 = 复用原任务 prompt(从 automations 表取)+ `skills` 参数提交新任务,任务自动应用当前技能版本。 +> **组装 prompt/选择 skills 时遵守「功能入口 × 技能调用契约」**(工作台章节第 7 条 + `mcn-work-shop/docs/AI会话任务输入输出对照.md`)——任务必须带技能前缀常量(SKILL_HINT_*)+ 对应 `skills` 数组。 ### 〇·1、方案与执行分离(P0) diff --git a/project/短视频脚本创作/V1.0/mcn-work-shop/docs/AI会话任务输入输出对照.md b/project/短视频脚本创作/V1.0/mcn-work-shop/docs/AI会话任务输入输出对照.md index 9601f32..e384015 100644 --- a/project/短视频脚本创作/V1.0/mcn-work-shop/docs/AI会话任务输入输出对照.md +++ b/project/短视频脚本创作/V1.0/mcn-work-shop/docs/AI会话任务输入输出对照.md @@ -1,27 +1,32 @@ # MCN 工作台 · AI 会话任务输入输出对照 -> 更新:2026-09-01 | 范围:工作台所有触发 AI 会话任务(/api/run → 左侧会话栏后台会话)的功能入口 +> 更新:2026-09-02 | 范围:工作台所有触发 AI 会话任务(/api/run → 左侧会话栏后台会话)的功能入口 > 统一规则(用户定):**创作类任务 prompt 一律「账号设定(人设卡)在前,选题信息在后」**;无人设时以「该账号暂无账号设定,请先提取」提示占位(同样前置)。 +> **★prompt 与技能边界分离(09-02 定版)**:任务 prompt = **固定技能声明前缀常量**(加载 Skill + 模式 + 边界规则,与业务正文解耦)+ **业务正文**(人设/选题/需求)。前缀常量在 data-pages.js / app.js 顶部与 SKILL_HINT_CREATE 同层管理,禁止把技能声明写进业务字符串、禁止各技能声明互相污染/误触发。 ## 触发链路(所有入口共用) -按钮点击 → 确认弹窗(confirmRun / confirmAiScript / confirmSaveAccount)→ `executeTask()` → `POST /api/run`(server.js 写 automations 表,scheduledAt=now+5s + next_run_at=now+5000)→ 客户端调度器拾取 → 左侧会话栏「mcn-workshop」空间后台会话执行 → 轮询 `/api/run/status`(done/error/review)→ 完成刷新页面。 +按钮点击 → 确认弹窗(confirmRun / confirmAiScript / confirmSaveAccount)→ `executeTask()` → `POST /api/run`(server.js 写 automations 表,scheduledAt=now+5s + next_run_at=now+5000,`skills` 数组→`skills_json` 参数级技能挂载)→ 客户端调度器拾取 → 左侧会话栏「mcn-workshop」空间后台会话执行 → 轮询 `/api/run/status`(done/error/review)→ 完成刷新页面。 -## 功能对照表 +## 功能入口 × 技能调用契约总表 -| # | 功能入口 | 按钮 | 任务名(label) | 输入(prompt 注入) | 输出 | 代码位置 | -|---|---------|------|--------------|--------------------|------|---------| -| 1 | 账号列表(#/accounts) | AI创作 | 创作指令 | 账号名 + 【账号设定(人设卡)】(完整、剔非创作章节) + 选题方向(手输 或 AI 结合人设生成) | 全新故事脚本 | confirmAiScript | -| 2 | 账号详情(#/account/:id)视频列表 | AI创作 | 创作指令 | 账号名 + 【账号设定(人设卡)】+ 视频选题块(有「# 选题」段→直接用;无→【视频解析内容(供提炼选题)】+ 提炼指令)或 未解析→先解析再创作 | 全新故事脚本 | renderAccountDetail data-rewrite | -| 3 | AI写脚本(#/rewrites)视频列表 | AI创作 | 创作指令 | 同 2(按 accountId 拉人设,带 video_url) | 全新故事脚本 | renderRewrites data-rewrite | -| 4 | 账号详情(#/account/:id) | 提炼账号设定 | 提炼指令 | 账号名 | 人设卡(12段账号设定) | renderAccountDetail data-extract | -| 5 | 脚本对比弹窗(AI脚本 vs 源脚本) | 生成分镜 / 重新生成 | 分镜指令 | 视频标题 + AI脚本(该条 AI 创作的故事脚本) | AI 分镜提示词(按分镜技能) | openRewriteCompare fireGenSb | -| 6 | AI脚本诊断(#/reviews) | 复盘 | 复盘指令 | 该条 AI 脚本(后台按 mcn-script-review 技能执行) | 评分式复盘报告(AI/源/对比三模式) | renderReviews data-review-row | -| 7 | 周榜(#/ranking / 首页) | 分析 / 关注 | 保存指令 | 账号名 + 主页 URL | 账号信息 + 视频列表入库 | confirmSaveAccount | -| 8 | 账号列表(#/accounts) | 添加 | 添加指令 | 账号名称 + 账号地址(可选) | 网页采集账号信息 + 视频列表入库 | openImportAccounts | +| # | 功能入口 | 按钮 | label | 技能(skills_json) | 前缀常量 | prompt 边界要点 | 代码位置 | +|---|---------|------|-------|------------------|---------|----------------|---------| +| 1 | 账号列表(#/accounts)弹窗 | AI创作 | 创作指令 | `['短视频脚本创作']` | `SKILL_HINT_CREATE` | 完整人设卡(剔非创作章节)+选题方向;未解析先解析再创作 | data-pages.js confirmAiScript ~L386 | +| 2 | 账号详情(#/account/:id)视频列表 | AI创作 | 创作指令 | `['短视频脚本创作']` | `SKILL_HINT_CREATE` | 人设卡+视频选题块(topic/content/未解析三分支) | data-pages.js renderAccountDetail ~L720 | +| 3 | AI写脚本(#/rewrites)视频列表 | AI创作 | 创作指令 | `['短视频脚本创作']` | `SKILL_HINT_CREATE` | 同 2 | data-pages.js renderRewrites ~L929 | +| 4 | 账号详情(#/account/:id) | 提炼账号设定 | 提炼指令 | `['mcn-dou-analysis']` | `SKILL_HINT_EXTRACT` | 功能三提炼;仅基于库中已有解析数据,**禁数据抓取字样**(防 BROWSER_HINT 误注入) | data-pages.js ~L732 | +| 5 | 脚本对比弹窗 | 生成分镜 / 重新生成 | 分镜指令 | `['短视频分镜脚本']` | `SKILL_HINT_STORYBOARD` | F4 生成分镜;只产出分镜提示词不改写脚本 | data-pages.js openRewriteCompare fireGenSb ~L1007 | +| 6 | AI脚本诊断(#/reviews) | 复盘 / 更新 | 复盘指令 | `['脚本复盘']` | `SKILL_HINT_REVIEW` | 独立会话一脚本一上下文;按有无源脚本动态分支(三模式 vs 独立10维) | data-pages.js startReview ~L1130 | +| 7 | 周榜(#/ranking / 首页) | 分析 / 关注 | 保存指令 | `['mcn-dou-analysis']` | `SKILL_HINT_ACCOUNT` | 浏览器流程:账号信息+视频列表入库 | app.js confirmSaveAccount | +| 8 | 账号列表(#/accounts) | 添加 | 添加指令 | `['mcn-dou-analysis']` | `SKILL_HINT_ACCOUNT` | 浏览器流程:网页采集账号信息+视频列表入库 | app.js openImportAccounts | + +> 红线提示:入口 7/8 走 mcn-dou-analysis 浏览器抓取流程(会被 server.js BROWSER_HINT 正则命中自动追加互斥锁),入口 4(提炼)**刻意规避**抓取字样——新增/修改入口 prompt 时须核对 `server.js` L516 BROWSER_HINT 正则(匹配 `账号信息|视频列表|保存并分析|采集|导入账号|网页采集|浏览器`),避免提炼/复盘等非抓取任务被误注入浏览器锁约束。 ## 各功能 prompt 结构与顺序 +> 所有 prompt 均以对应前缀常量开头(如 `${SKILL_HINT_CREATE}\n`),下方省略前缀只展示业务正文结构。 + ### 1/2/3 创作类(账号设定前 → 选题后) **已解析 + 有「# 选题」段**(mode=topic): @@ -64,40 +69,60 @@ 请贴合上述账号设定(人设与内容规则)创作。 ``` -### 4 提炼账号设定 +### 4 提炼账号设定(SKILL_HINT_EXTRACT + 正文) ``` 请为达人「{name}」提炼账号设定(生成人设卡)。 ``` +> 前缀已约束:功能三流程、先判账号类型、基于库中已有 MCP 解析数据、人设卡 12 段、禁生成/改写脚本、不含商业变现、不执行数据抓取。 -### 5 生成分镜(转换类,无账号设定/选题概念) +### 5 生成分镜(SKILL_HINT_STORYBOARD + 正文,转换类) ``` -请将视频《{title}》的 AI 脚本{重新}展开成 AI 分镜提示词(按分镜技能生成镜头级描述)。 +请将视频《{title}》的 AI 脚本{重新}展开成 AI 分镜提示词(F4 生成分镜,镜头级描述)。 ``` +> 前缀已约束:短视频分镜脚本技能 F4 流程与格式(时间戳分段/实体绑定/6 层结构),只产出分镜提示词不改写脚本。 -### 6 复盘评分(诊断类,由技能定义输入输出) -``` -请对这条 AI 脚本做复盘评分(AI脚本 / 原视频脚本 / 对比分析三种模式),按 mcn-script-review(脚本复盘)技能执行。 +### 6 复盘评分(SKILL_HINT_REVIEW + 正文,诊断类,由技能定义输入输出) ``` +# 有源脚本(三模式) +请对这条 AI 脚本做复盘评分(AI脚本 / 原视频脚本 / 对比分析三种模式)。 -### 7 保存并分析账号 +# 无源脚本(独立分析·10 维评分制;video_id=0 或无 source 时) +请对这条 AI 脚本做质量复盘评分(独立分析模式·10 维评分制)。该脚本无原视频脚本,只评 AI 脚本本身,不做源脚本复盘、不做对比分析。 +``` +> 前缀已约束:工作台复盘任务执行方式(独立会话/一脚本一上下文)+ 技能边界(只分析建议不改脚本不触发创作)。 + +### 7 保存并分析账号(SKILL_HINT_ACCOUNT + 正文) ``` 请帮我把抖音账号「{name}」保存并分析(账号信息 + 视频列表):{url} ``` -### 8 添加账号 +### 8 添加账号(SKILL_HINT_ACCOUNT + 正文) ``` 请帮我把抖音账号 {账号名称「x」, 账号地址「y」} 添加:通过抖音网页获取账号信息与视频列表,写入账号列表并保存到本地 ``` ## 关键细节 +- **前缀常量定义位置**:data-pages.js 顶部 L7-16(SKILL_HINT_CREATE/EXTRACT/STORYBOARD/REVIEW)、app.js 顶部 L27(SKILL_HINT_ACCOUNT)。所有入口 prompt 必须带对应前缀,`executeTask/confirmRun` 必须传 `skills` 数组(参数级技能挂载→skills_json)。 - **人设卡注入**:完整拼入(不截断),仅通过 `personaForCreate()` 剔除「## 十一、当前需解决的问题」及之后章节(分析师视角内容非创作素材);三处创作入口统一。 - **视频选题提取**:`extractVideoTopic(content)` 取解析 content 的「# 选题」段(到下一个 `\n# ` 标题止);无该段(老脚本为分镜头表格式)→ `buildTopicBlock` mode=content 携带全文 + 提炼指令,AI 先提炼选题再创作。 -- **按钮命名**:全部统一「AI创作」(2026-09-01),弹窗标题同;「提炼账号设定」「生成分镜」「复盘」「分析/关注」「添加」为各自独立任务。 -- **未解析分支**:带 video_url 时 prompt 内嵌「视频地址:{url}」;账号列表视频(#/rewrites)用 r.url,账号详情视频列表用 r.aweme 拼 https://www.douyin.com/video/{aweme}(历史遗留,建议统一为 video_url)。 +- **复盘动态分支**:点击复盘/更新按钮时 async 查 `/api/dsh/video-script?videoId=N` 判 source 非空 → 有源=三模式文案;无源(含 video_id=0)改独立分析文案;查询失败保守按有源(不误砍);`dataset.lock` 防 await 窗口期连点。 - **已有数据处理**:AI 会话任务执行时若库中/产出目录已有该账号数据(人设卡/视频解析/分析报告),技能侧按**复用优先 + 询问更新**处理,实时数据(账号信息/视频列表)仍必须重新获取(红线禁回填);「已有」须校验内容质量(存在≠有效)。完整决策表见 `{分析技能}/references/铁律避坑规则/已有数据处理规则.md`(2026-09-01 新增)。 +## ★新增 AI 入口检查清单(09-02 固化,防跳步/防裸 prompt 回归) + +工作台新增任何触发 AI 会话任务的按钮/入口时,逐条核对: + +1. [ ] **前缀常量**:prompt 以对应技能前缀常量开头(创作=CREATE、提炼=EXTRACT、分镜=STORYBOARD、复盘=REVIEW、账号抓取=ACCOUNT),禁止裸业务文本 +2. [ ] **skills 参数**:executeTask/confirmRun 传入对应 `skills: ['技能名']`(技能名=SKILL.md frontmatter name) +3. [ ] **prompt/业务边界分离**:技能声明只在前缀内,业务正文(人设/选题/需求)不夹带技能指令;desc 仅用户可见摘要 +4. [ ] **BROWSER_HINT 规避**:非浏览器抓取类任务(提炼/复盘/创作)的 prompt 不得含 server.js 正则命中词(账号信息|视频列表|保存并分析|采集|导入账号|网页采集|浏览器) +5. [ ] **顺序规范**:创作类「账号设定前、选题后」;复盘类一脚本一上下文不混审 +6. [ ] **模式语义**:创作类带 ⚡自动模式声明(S1-S11 完整流程禁跳步直出 S9) +7. [ ] **验证**:改完 `node --check` + 重开页面(带 `?v=` 版本参数),对照本表核对该入口的 prompt/label/skills + ## 验证 - 脚本:`cdp-verify-aicreate.mjs`(hook confirmRun 捕获 prompt,断言账号设定在前、选题在后、无 undefined 泄漏、未解析分支账号信息前置) - 覆盖:①#/rewrites 已解析(topic/content 两模式)②#/rewrites 未解析 ③账号详情已解析 +- 前缀/BROWSER_HINT 校验:临时脚本逐字匹配 server.js L516 正则核对四前缀不命中(验证后即清,tmp 随同步清理)