Просмотр исходного кода

feat(mode_workflow): Query 规则 达标口径改为 keep 且 综合分≥阈值(默认7,弹层可调)

刘文武 1 неделя назад
Родитель
Сommit
295e5699a3
1 измененных файлов с 23 добавлено и 5 удалено
  1. 23 5
      examples/mode_workflow/index.html

+ 23 - 5
examples/mode_workflow/index.html

@@ -2077,6 +2077,8 @@
       .qr-x:hover { background:#f2f2f2; color:#333; }
       .qr-bar { display:flex; align-items:center; gap:10px; padding:11px 20px; border-bottom:1px solid #f0f0f0; background:#fcfcfc; }
       .qr-hint { color:#888; font-size:12px; margin-left:4px; }
+      .qr-thr-lab { color:#666; font-size:12px; }
+      .qr-thr { width:46px; padding:3px 5px; border:1px solid #ddd; border-radius:6px; font-size:12px; }
       .qr-dims { padding:8px 20px 10px; max-height:32vh; overflow:auto; border-bottom:1px solid #f0f0f0; }
       .qr-row { display:flex; align-items:flex-start; gap:10px; padding:4px 0; }
       .qr-row + .qr-row { border-top:1px solid #f6f6f6; }
@@ -2468,6 +2470,7 @@
         <div class="qr-bar">
           <button class="btn seal" id="qr-score">生成正交表 &amp; 评估高亮</button>
           <button class="btn" id="qr-search-all" hidden>搜全部达标</button>
+          <label class="qr-thr-lab">达标分 ≥ <input id="qr-thr" class="qr-thr" type="number" min="0" max="10" step="0.5" value="7"></label>
           <span id="qr-hint" class="qr-hint"></span>
         </div>
         <div id="qr-dims" class="qr-dims"></div>
@@ -3696,6 +3699,8 @@
         axisPath: { action: [], type: [] },        // 动作/类型 筛选路径(l1/l2/叶子,来自 matrix,筛表显示)
         matrix: null,                              // /api/query_matrix
         scores: null,                              // 最近一次评分结果 cells
+        threshold: 7,                              // 达标 = keep 且 综合分≥此值(可在弹层调)
+        lastCost: null,
       };
       function qrChip(label, active, on, cls) {
         const b = document.createElement("button");
@@ -3823,7 +3828,7 @@
             const tier = (matrix[ai][ti] || {}).tier || 0;
             const q = qrCellQuery(actions[ai].name, t.name);
             const v = sc ? sc[`${ai}_${ti}`] : null;
-            const keep = v && v.keep;
+            const keep = qrKeep(v);
             const cls = `qr-c t${tier}` + (tier === 0 ? " dead" : "") + (keep ? " keep" : "");
             const badge = keep && v.score != null ? `<i class="qr-bd">${v.score}</i>` : "";
             html += `<td class="${cls}" data-ai="${ai}" data-ti="${ti}">${q}${badge}</td>`;
@@ -3846,12 +3851,25 @@
         const r = await api("/api/query_score?sel=" + encodeURIComponent(sel));
         if (r && r.pending) return false;
         qrState.scores = r.cells || {};
+        qrState.lastCost = r.cost_usd;
         renderQrTable();
-        const kept = Object.values(qrState.scores).filter((v) => v.keep).length;
-        $("#qr-hint").textContent = `评估完成:keep ${kept} 格 · $${r.cost_usd ?? "?"}`;
-        $("#qr-search-all").hidden = kept === 0;
+        qrRefreshKeep();
         return true;
       }
+      // 达标 = Sonnet keep 且 综合分≥阈值;高亮/计数/搜全部达标 统一口径
+      function qrKeep(v) { return !!(v && v.keep && v.score != null && v.score >= qrState.threshold); }
+      function qrRefreshKeep() {
+        if (!qrState.scores) return;
+        const k = Object.values(qrState.scores).filter(qrKeep).length;
+        $("#qr-hint").textContent = `达标(keep 且 ≥${qrState.threshold}):${k} 格`
+          + (qrState.lastCost != null ? ` · 评分 $${qrState.lastCost}` : "");
+        $("#qr-search-all").hidden = k === 0;
+      }
+      $("#qr-thr").addEventListener("input", () => {
+        const x = parseFloat($("#qr-thr").value);
+        qrState.threshold = isNaN(x) ? 0 : x;
+        if (qrState.scores) { qrClosePop(); renderQrTable(); qrRefreshKeep(); }
+      });
       $("#qr-score").onclick = async () => {
         renderQrTable();   // 先按当前 chips 刷新拼词
         $("#qr-hint").textContent = "提交评分…";
@@ -3904,7 +3922,7 @@
       });
       // 搜全部达标:逐格起任务(朴素循环,失败不阻断)
       $("#qr-search-all").onclick = async () => {
-        const keeps = Object.entries(qrState.scores || {}).filter(([, v]) => v.keep);
+        const keeps = Object.entries(qrState.scores || {}).filter(([, v]) => qrKeep(v));
         if (!keeps.length) return;
         if (!confirm(`将对 ${keeps.length} 个达标 query 各起一次搜索(小红书+公众号 各20),确认?`)) return;
         let ok = 0;