From 24358b2df35b074e26d9cb724de1273ea3931e2d Mon Sep 17 00:00:00 2001 From: maogeigei Date: Wed, 2 Sep 2026 14:26:56 +0800 Subject: [PATCH] =?UTF-8?q?fix(workbench):=20=E5=A4=8D=E7=9B=98=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E6=8C=89=E6=9C=89=E6=97=A0=E6=BA=90=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=88=86=E6=94=AFprompt=E2=80=94=E2=80=94?= =?UTF-8?q?=E6=97=A0=E6=BA=90(=E8=BE=93=E5=85=A5=E9=80=89=E9=A2=98/?= =?UTF-8?q?=E6=9C=AA=E8=A7=A3=E6=9E=90=E8=A7=86=E9=A2=91)=E4=BB=85AI?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E8=AF=84=E5=88=86=EF=BC=8C=E7=A6=81=E5=B9=BB?= =?UTF-8?q?=E8=A7=89=E5=AF=B9=E6=AF=94=EF=BC=9B=E6=9F=A5=E8=AF=A2=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E4=BF=9D=E5=AE=88=E6=B2=BF=E7=94=A8=E4=B8=89=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F(09-02)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .workbuddy/memory/2026-09-02.md | 5 +++ .../V1.0/mcn-work-shop/public/data-pages.js | 35 ++++++++++++++----- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/.workbuddy/memory/2026-09-02.md b/.workbuddy/memory/2026-09-02.md index 9bfca3f..24ab4d3 100644 --- a/.workbuddy/memory/2026-09-02.md +++ b/.workbuddy/memory/2026-09-02.md @@ -163,3 +163,8 @@ ## AI脚本诊断列表 生成方式列收拢两种取值(14:20) - 原 GEN 映射死代码(rewrite/new/abc→爆款视频创作/账号列表创作/ABC融合创作,后端 listRewrites 从不返回 genMethod,恒显示爆款视频创作) - 改为按 `rewrite_log.video_id>0` 判定:有参考视频(视频/详情页 AI创作入口,prompt 参考视频选题)=「参考选题」;无 video_id(账号列表 confirmAiScript 入口,手输/AI生成选题)=「输入选题」;删 GEN 常量。当前库 26 行全有 video_id → 全显示参考选题(如实) + +## 复盘按钮 prompt 按有无源脚本动态分支(14:24) +- 问题:复盘 prompt 固定要求「AI脚本/原视频脚本/对比分析三模式」,输入选题创作(video_id=0,无原视频脚本)或无源脚本视频会无对象可比 → AI 可能幻觉编造源脚本对比,污染 source/compare 数据 +- 落地:点击复盘/更新按钮时 async 查 `/api/dsh/video-script?videoId=N` 判 source 非空 → 有源=原三模式文案;无源(含 video_id=0)prompt/desc 改「仅 AI 脚本质量复盘评分(独立分析模式·10 维评分制),不做源脚本复盘与对比分析」+title 改「AI脚本复盘」;查询失败保守按有源(沿用原文案不误砍);dataset.lock 防 await 窗口期连点 +- 检查发现遗留风险:按钮复盘 prompt 不含脚本全文/标识(executeTask 不透传行数据),AI 会话定位脚本依赖会话侧库访问——若点击复盘常跑偏,根因在此需另行注入 diff --git a/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js b/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js index 06046fd..2d4d557 100644 --- a/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js +++ b/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js @@ -922,15 +922,32 @@ async function renderReviews(view) { bindPager(view, (p) => { page = p; render(); }); view.querySelectorAll('[data-open]').forEach((a) => a.addEventListener('click', () => openScriptDetail(a.dataset.open))); view.querySelectorAll('[data-review]').forEach((a) => a.addEventListener('click', () => openReviewDetail(a.dataset.review))); - view.querySelectorAll('[data-review-row]').forEach((b) => b.addEventListener('click', () => { - confirmRun({ - title: '复盘评分', - desc: '将对该 AI 脚本做复盘评分(AI脚本 / 原视频脚本 / 对比分析三种模式),按 mcn-script-review(脚本复盘)技能执行。', - prompt: '请对这条 AI 脚本做复盘评分(AI脚本 / 原视频脚本 / 对比分析三种模式),按 mcn-script-review(脚本复盘)技能执行。', - label: '复盘指令', - skills: ['脚本复盘'], - btn: b, - }); + view.querySelectorAll('[data-review-row]').forEach((b) => b.addEventListener('click', async () => { + if (b.dataset.lock) return; b.dataset.lock = '1'; // 防 await 窗口期重复点击 + try { + // 按该脚本是否有原视频源脚本决定复盘范围:有 → 三模式;无(输入选题/视频未解析)→ 仅 AI 脚本评分 + const row = items.find((x) => String(x.id) === String(b.dataset.reviewRow)); + let hasSource = false; + if (row && Number(row.video_id) > 0) { + const vs = await api('/api/dsh/video-script?videoId=' + row.video_id).catch(() => ({ ok: false, error: 1 })); + hasSource = !!(!vs.error && vs.ok && vs.source && String(vs.source).trim()); // 查询失败视为有源(沿用原文案,不误砍对比模式) + } + const [desc, prompt] = hasSource + ? ['将对该 AI 脚本做复盘评分(AI脚本 / 原视频脚本 / 对比分析三种模式),按 mcn-script-review(脚本复盘)技能执行。', + '请对这条 AI 脚本做复盘评分(AI脚本 / 原视频脚本 / 对比分析三种模式),按 mcn-script-review(脚本复盘)技能执行。'] + : ['将对该 AI 脚本做质量复盘评分(该脚本无原视频脚本,仅评 AI 脚本:独立分析模式·10 维评分制),按 mcn-script-review(脚本复盘)技能执行。', + '请对这条 AI 脚本做质量复盘评分(独立分析模式·10 维评分制)。该脚本无原视频脚本,只评 AI 脚本本身,不做源脚本复盘、不做对比分析,按 mcn-script-review(脚本复盘)技能执行。']; + confirmRun({ + title: hasSource ? '复盘评分' : 'AI脚本复盘', + desc, + prompt, + label: '复盘指令', + skills: ['脚本复盘'], + btn: b, + }); + } finally { + delete b.dataset.lock; + } })); }; render();