baseline: dsh 工作区基线快照(2026-09-10,全新历史起点)
本提交为 dsh_mcn_workshop 仓库的首个提交(旧仓 dsh_MCNProject 已停用), 完整固化 C:/Users/Administrator/.dsh 当前磁盘状态。 1) 临时数据清理:移出 sessions/(81M)、logs/、skill-backup-20260906/(14M)、 scripts/__pycache__、storages/workspace.json.bak —— 合计 94M(.dsh 162M → 68M) 2) 凭据脱敏:.credentials.yaml(含明文 DEEPSEEK_API_KEY)移出 git 跟踪并加入 .gitignore;mcn-data-insight/scripts/setup_redfox_key.py 中真实 key 示例改为占位符 3) .gitignore 增补 logs/、skill-backup-*/ 规则 4) 技能结构以当前磁盘状态为准:skills/ = mcn-short-video / impeccable / taste-skill / dsh-multi-user-migration;旧技能目录(mcn-dou-analysis、storyboard-prompt、 short-video-script、browser-harness、mcn-data-insight)与 profiles/web/node_modules/dsh-vision-router 本地已不存在,本提交记为删除
This commit is contained in:
commit
856e632807
880 files changed
+225426
No files matched your search
+59
@@ -0,0 +1,59 @@
|
||||
# dsh 插件 AI 会话任务输入输出对照(宿主版契约)
|
||||
|
||||
> 建立:2026-09-05(V1.0 工作台同步工程 P4 产物)| 权威性:宿主端任务入口的单一事实来源
|
||||
> 对应 V1.0 版:`D:\AI技能\mcn-short-video\project\短视频脚本创作\V1.0\mcn-work-shop\docs\AI会话任务输入输出对照.md`
|
||||
> 边界约定:dsh 侧任务一律由宿主创建**专属 AI 会话**执行(非 V1.0 automations 直写);技能挂载 = prompt 内声明技能路径(`~/.dsh/skills/<name>/`,全局注册);会话内调用本地接口用 pwsh(基地址 `$env:DSH_WEB_URL`,兜底 3081→3080)。
|
||||
|
||||
## 一、任务入口总表(触发端点 × 会话 × 技能 × 写回)
|
||||
|
||||
| # | 触发端点(POST) | 会话命名 | 工作区分组 | 并发/防重 | 技能(prompt 声明路径) | 写库回调(会话内调用) | 产物去向 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 1 | `/mcn/api/video/rewrite` {videoId} | `dsh_rewrite-{logId}` | 创作任务 | 8 并发;同会话 running→409 | short-video-script(S1-S11 改写) | `POST /mcn/api/rewrite/save {id,script}` | rewrite_log(video_id>0, gen_method=ref) |
|
||||
| 2 | `/mcn/api/rewrite/original` {accountId, reqText?, attachText?} | `dsh_rewrite-{logId}` | 创作任务 | 8 并发;同会话 running→409 | short-video-script(S1-S11 原创) | 同上 | rewrite_log(video_id 空, gen_method=new)=原创选题中心 |
|
||||
| 3 | `/mcn/api/account/persona/extract` {accountId} | `dsh_persona-{accountId}` | 解析任务 | 每账号独立;running/60s→409 | mcn-dou-analysis 功能三 | `external/import` data 模式 analyses.type=persona + `account/update`(content/track) | account_persona + hot_accounts |
|
||||
| 4 | `/mcn/api/account/analysis/start` {accountId} | `dsh_acctana-{accountId}` | 解析任务 | 每账号独立;running/60s→409 | mcn-dou-analysis 功能四 | `external/import` data 模式 analyses.type=account | account_analysis |
|
||||
| 5 | `/mcn/api/video/analyze` {videoId} | `dsh_video-analyze-{videoId}` | 解析任务 | 8 并发;running/60s→409 | mcn-dou-analysis 功能五 | `video/source/backfill`(幂等补录) | account_video_source/analysis + 文件 |
|
||||
| 6 | `/mcn/api/storyboard/create` {rewriteId} | `dsh_storyboard-{logId}` | 分镜 | 8 并发 | mcn-video-prompt F4(storyboard-prompt) | `storyboard/save {id,script}` | storyboard_log |
|
||||
| 7 | `/mcn/api/review/start` {logId,type} | `dsh_review-{type}-{id}` | 创作任务 | 4 并发;running→409 | mcn-script-review(script-review 复盘技能) | `review/save` | script_review(ai/compare 按 rewrite_id、source 按 video_id) |
|
||||
| 8 | `/mcn/api/account/refresh-web` {id} | `dsh_refresh-{id}` | 解析任务 | 浏览器任务全局串行互斥 | mcn-dou-analysis(网页采集) | `external/import` data 模式 | hot_accounts/account_videos |
|
||||
| 9 | `/mcn/api/external/stage` {dir\|account} | `dsh_import-{key}` / `dsh_external-import` | 解析任务 | 浏览器任务串行;60s 防抖 | mcn-dou-analysis(导入分析/网页采集) | `external/import` | hot_accounts 族 |
|
||||
| 10 | `/mcn/api/ranking/update` {force?} | `dsh_rank-update`(固定会话 followup) | 其他/榜单更新 | 单任务;30min 冷却+在跑防重(`~/.dsh/mcn-rank-update.json`) | mcn-data-insight(落盘规范) | 无(文件落盘) | `抖音榜单/{账号周榜\|账号日榜\|视频热榜\|点赞榜}/` |
|
||||
| 11 | `/mcn/api/creative` {prompt, sessionId?}(旧版自由创作,记 creative_log;新入口优先走 #2) | `dsh_short-video-script` / 指定 | 创作任务 | 固定会话串行 | prompt 自带 | 无(遗留兼容) | creative_log 计数 |
|
||||
|
||||
## 二、只读/写回辅助端点(非会话入口)
|
||||
|
||||
ranking 四榜 `GET /mcn/api/ranking?board=week|day|hot|likes`;custom-scripts/custom-script/rewrite-stats(原创中心);accounts(含 video_count/rewrite_count、排除 del_flag);videos(account 账号级放开爆款窗 / days 天数 / parsed);account/videos、account/persona、account/analysis;rewrite/list(复盘列表,含 review_* 摘要与 running);review/detail、review/full;storyboard/list;batch/delete(accounts 软删+videos/rewrites 连坐);account/favorite/update;task/status(含 creative/import/imports/analyze/persona/rewrite/review/accountAnalysis);sessions、session/detail;stats、tracks、external/preview、video/detail、video/script、video/source(backfill)。
|
||||
|
||||
## 三、会话生命周期约定(与 V1.0 差异点)
|
||||
|
||||
- 1 任务 = 1 会话(固定名复用除外:#10);会话按前缀归组(创作任务/解析任务/分镜/计划任务/对标创作/其他)。
|
||||
- 完成后会话保留(供「MCN任务会话」查看);**完成清理**:结果已入库(taskDone)且 >30 分钟无写入 → 物理删除释放 MCP;**长期清理**:>24h 无活动且非运行中 → 删除。
|
||||
- 会话删除防 id 复用污染:删除改写/分镜/复盘记录时同步删除对应会话目录(rewrite/delete 已内置,batch/delete 同)。
|
||||
- 浏览器任务(#8/#9)全局串行互斥 + 固定调试 Chrome 9223 端口复用标签页(prompt 注入 chromeHint)。
|
||||
|
||||
## 四、新增/修改 AI 入口检查清单(宿主版,同步 V1.0 09-02 七项工程约束)
|
||||
|
||||
1. [ ] 端点语义:入参校验(账号/视频存在性、del_flag)、404/409/400 边界完整;并发与防重(同账号/同视频 60s 窗口)写明错误文案
|
||||
2. [ ] 会话命名走既有前缀(config.js 常量),新前缀需登记:启动修复正则 / resume 分支 / 完成清理 / 会话列表分组 / taskDone 判定(index.js 五处)
|
||||
3. [ ] prompt 结构:任务背景 → 「调用技能」声明(`~/.dsh/skills/<name>/`,需实际存在)→ 步骤(数据准备/样本/两段式/红线)→ 产物路径约定 → 写库回调(含 JSON 转义与编码警告:优先文件+curl --data-binary,禁 Invoke-RestMethod 直传中文)→ 完成汇报要求 → 沙箱拒绝时的 escalation 指引
|
||||
4. [ ] 技能边界声明(禁止越权:提炼不抓取、复盘不改脚本、解析不创作等)
|
||||
5. [ ] 浏览器类任务才有 chromeHint;非浏览器任务 prompt 禁止含「账号信息|视频列表|采集|导入账号|网页采集|浏览器」字样(防误触发浏览器锁语义——dsh 侧锁为宿主互斥非正则注入,但文案污染会误导模型)
|
||||
6. [ ] 写库回调幂等:save/import 类接口服务端自动去重或覆盖语义写明
|
||||
7. [ ] 验证:`node --check`;重启后接口冒烟(只读断言);真实任务用「功能验证账号白名单」;客户端改动强刷走查
|
||||
|
||||
## 五、V1.0 SKILL_HINT_* 到 dsh prompt 的等价映射
|
||||
|
||||
| V1.0 前缀常量 | dsh 宿主所在端点 | 说明 |
|
||||
|---|---|---|
|
||||
| SKILL_HINT_CREATE(S1-S11 自动模式) | video/rewrite、rewrite/original | 声明+业务正文在宿主拼接;人设/选题由服务端组装(video/rewrite)或客户端组装需求(original) |
|
||||
| SKILL_HINT_EXTRACT | persona/extract | 等价 |
|
||||
| SKILL_HINT_ANALYZE | account/analysis/start | 等价(09-04 新增对齐) |
|
||||
| SKILL_HINT_VIDEO_PARSE | video/analyze | dsh 用 source/backfill 回写,无 unmatched 端点(对账结论见 Architecture/双端功能同步基线表.md) |
|
||||
| SKILL_HINT_STORYBOARD | storyboard/create | 等价 |
|
||||
| SKILL_HINT_REVIEW | review/start(三模式) | dsh 增加 source 视频级共享与 compare 前置语义 |
|
||||
| SKILL_HINT_ACCOUNT | refresh-web / external/stage | 等价 |
|
||||
| SKILL_HINT_RANKING | ranking/update | 等价(含幂等铁律与计费提醒) |
|
||||
|
||||
## 六、双端防漂移
|
||||
|
||||
任何一侧新增任务入口/技能契约变更:先更新 `dsh-plugin-dev/Architecture/双端功能同步基线表.md` 与本文档,再改代码;回归对照本表逐行核销。
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
# 外部账号数据导入处理规范
|
||||
|
||||
> 适用范围:`/mcn/api/external/stage → preview → import`(data 模式)链路中,AI 对
|
||||
> `…/账号对标/<账号名>/` 文件夹的归一化处理。首次沉淀:2026-08-16 王微斯账号导入(1 账号 / 54 视频 / 14 分析)。
|
||||
|
||||
---
|
||||
|
||||
## 一、目录结构识别
|
||||
|
||||
| 文件 | 用途 |
|
||||
|------|------|
|
||||
| `账号信息.json` | 账号资料 → `accounts` |
|
||||
| `短视频表格.xlsx` | 13 列视频表 → `videos`(54 条) |
|
||||
| `*账号设定.md` | → `analyses[persona]`;**同时是「定位/内容」的提取来源** |
|
||||
| `*账号数据分析.md` | → `analyses[account]` |
|
||||
| `视频对标/<视频标题>/` 下:`*_拆解分析.md` + `原视频解析.json`(或 `content.json`+`analysis.json`) | → `analyses[video]`;json 的 `title` 用于匹配 xlsx 视频 |
|
||||
|
||||
> 注:`原视频解析.json` 与 `analysis.json`+`content.json` 是同一批解析数据的两种导出变体,
|
||||
> 均含 `title`,匹配时先读 `原视频解析.json`、没有再读 `content.json`。
|
||||
|
||||
---
|
||||
|
||||
## 二、定位/内容(hot_accounts.content)提取规则 ★核心
|
||||
|
||||
1. **来源**:`*账号设定.md` 的「一、账号核心定位」章节(键:赛道 / 账号类型 / 核心受众 / 核心标签 / 内容路线 / 情绪锚点 …)。
|
||||
2. **必须转纯文本段落**:去掉 markdown 表格样式(`|`、`---`、`**` 加粗标记),格式为 `键名:值` 逐行段落。
|
||||
3. **不得与简介(bio)相同**:`content` 与 `bio` 是两个字段。
|
||||
- 账号信息.json 里只有 bio,没有定位 → 定位一律从账号设定.md 提取;
|
||||
- 提取不到时才允许用 `bio` 兜底(代码层已实现 `content: info.content || info.bio`,data 模式传 `content` 优先)。
|
||||
4. **赛道(hot_accounts.track)**:从「账号核心定位」的「赛道」键提取,**取第一个主赛道**(`" / "` 分隔取首段),如 `生活vlog赛道`;代码层已支持 `track: info.track`。
|
||||
4. **示例(王微斯,已入库)**:
|
||||
|
||||
```
|
||||
赛道:生活vlog赛道 / 甜宠情感剧情 / 乙女向沉浸体验
|
||||
账号类型:固定主角+轮换搭档——女主王微斯固定不变,每期搭讪不同类型高颜值男主,但风格统一、情绪底色一致
|
||||
核心受众:18-35岁女性、磕糖爱好者、颜控党、乙女向代入感爱好者,对浪漫邂逅有情感投射的年轻群体
|
||||
核心标签:第一视角沉浸撩汉 + 直球拽姐拿捏 + 纯情帅哥反差萌破防
|
||||
内容路线:街头搭讪破冰 → 极限推拉互撩 → 肢体接触升温 → 深夜交心破防 → 浪漫收尾升华
|
||||
情绪锚点:王微斯 = 替所有女生完成"主动追帅哥"的爽文体验,每期换一个帅哥被她拿捏
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、其余归一化规则(沿用)
|
||||
|
||||
### accounts
|
||||
- `nickname → account_name`;`douyin_id` / `sec_uid` 保持字符串;
|
||||
- `followers` / `total_likes` 保留展示格式(如 `409.2万`);`works_count` / `age` 转 int;
|
||||
- 丢弃非标准字段(如 `video_count_collected`);可附 `source_dir` 溯源。
|
||||
|
||||
### videos(xlsx 13 列)
|
||||
- 列名别名匹配:视频ID / 视频标题 / 视频地址 / 点赞数 / 点赞(显示) / 评论数 / 分享数 / 收藏数 / 播放量 / 视频时长 / 发布时间 / 标签;
|
||||
- `tags` 按逗号拆分数组(保留 `#` 前缀);
|
||||
- 数字列转 int;`duration` / `publish_time` 保留源格式字符串;
|
||||
- 播放量为 0 属源数据缺失,照实入库。
|
||||
|
||||
### analyses
|
||||
- `persona`:`*账号设定.md` 全文;
|
||||
- `account`:`*账号数据分析.md` 全文;
|
||||
- `video`:`*_拆解分析.md` 全文;`video_aweme_id` **必须**匹配到 xlsx 视频:
|
||||
匹配优先级 = json title 精确 → 归一化包含(去空白/标点)→ 相似度 >0.8 → md 头部「视频标题」→ 文件夹名首段;
|
||||
- `summary`:优先取 md 内「结论/核心定位/核心结论」章节,取不到用开头 200 字。
|
||||
|
||||
### 其他
|
||||
- 去重由脚本层处理(content 字节精确比对);
|
||||
- ⚠️ Python 读文件默认 CRLF→LF 归一,需按源文件**字节精确**回写(`open(p,'rb').read().decode('utf-8')`),否则 dir 模式去重比对失败;
|
||||
- 大体积 data 请求需服务端 readBody 已修复(Buffer 拼接解码),否则多字节字符可能损坏为 U+FFFD。
|
||||
Reference in new issue
Block a user