docs(skill): 固化AI任务入口技能契约机制(09-02三入口修复后收尾)

- SKILL.md 工作台章节新增第7条「AI 任务入口技能契约(P0)」:所有 AI 会话任务入口须遵守 功能入口×技能调用契约(prompt=技能前缀常量 SKILL_HINT_{CREATE,EXTRACT,STORYBOARD,REVIEW,ACCOUNT}+业务正文+skills 参数级挂载);新增/修改入口前先读契约文档,防裸 prompt 跳步/技能声明混入业务串/BROWSER_HINT 误注入;原第7/8条顺延8/9
- 关键规则「〇执行方式判定」表格后补契约引用行
- docs/AI会话任务输入输出对照.md 全面升级:新增「功能入口×技能调用契约总表」(8入口的按钮/label/skills/前缀常量/prompt边界/代码位置)+★新增入口检查清单7项+复盘动态分支说明;prompt 模板统一为「前缀常量+正文」分层结构
- frontmatter last_change 更新;用户环境 junction 同 inode 自动同步
This commit is contained in:
maogeigei committed 2026-09-02 17:57:19 +08:00
1 parent 19e15effd0
commit 6cd96c9027
2 files changed
+53 -26

No files matched your search

+5 -3
View File
@@ -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)
@@ -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 随同步清理)