guantao 1 день назад
Родитель
Сommit
cfc85e53b4
67 измененных файлов с 10607 добавлено и 9 удалено
  1. 11 0
      examples/process_pipeline/script/search_eval/batch_extract_procedures.py
  2. 251 0
      examples/process_pipeline/script/search_eval/build_workflows.py
  3. 4 0
      examples/process_pipeline/script/search_eval/procedure-dsl/input/creative_1.json
  4. 4 0
      examples/process_pipeline/script/search_eval/procedure-dsl/input/creative_2.json
  5. 4 0
      examples/process_pipeline/script/search_eval/procedure-dsl/input/creative_3.json
  6. 17 0
      examples/process_pipeline/script/search_eval/procedure-dsl/input/creative_4.json
  7. 26 0
      examples/process_pipeline/script/search_eval/procedure-dsl/spec/taxonomy/type_suggestions.md
  8. 0 3
      examples/process_pipeline/script/search_eval/runs_full/q0000/procedures/A_gzh_2887577d/_source.json
  9. 0 3
      examples/process_pipeline/script/search_eval/runs_full/q0000/procedures/C_gzh_8f5fbfb0/_source.json
  10. 3 0
      examples/process_pipeline/script/search_eval/runs_full/q0000/procedures/C_zhihu_20281424/_source.json
  11. 0 3
      examples/process_pipeline/script/search_eval/runs_full/q0000/procedures/C_zhihu_66632290/_source.json
  12. 1 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/.session_id
  13. 7 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_meta.json
  14. 30 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/anchors.json
  15. 71 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/patch_2a.json
  16. 82 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/patch_2b.json
  17. 325 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/task_2a.json
  18. 196 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/task_2b.json
  19. 17 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_source.json
  20. 500 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_trace.md
  21. 466 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/case-A_xhs_66d730d4-comfyui-prompt-reverse.html
  22. 221 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/case-A_xhs_66d730d4-comfyui-prompt-reverse.md
  23. 94 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/understanding.md
  24. 638 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/workflow.json
  25. 1 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/.session_id
  26. 7 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_meta.json
  27. 20 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/anchors.json
  28. 66 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/patch_2a.json
  29. 38 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/patch_2b.json
  30. 122 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/patches_2a_only.json
  31. 25 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/task_2a.json
  32. 15 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/task_2b.json
  33. 17 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_source.json
  34. 919 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_trace.md
  35. 466 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/case-B_xhs_695b81a3-gemini-canvas-prompt-tool.html
  36. 259 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/case-B_xhs_695b81a3-gemini-canvas-prompt-tool.md
  37. 73 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/understanding.md
  38. 62 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/workflow.json
  39. 1 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/.session_id
  40. 7 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_meta.json
  41. 34 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix.py
  42. 46 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix2.py
  43. 59 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix2_out.txt
  44. 138 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix_out.txt
  45. 153 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/patch_2a.json
  46. 133 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/patch_2b.json
  47. 109 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/patch_2b_fixed.json
  48. 555 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/task_2a.json
  49. 315 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/task_2b.json
  50. 3 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_source.json
  51. 644 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_trace.md
  52. 483 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/case-C_xhs_69ee4674-llm-inference.html
  53. 244 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/case-C_xhs_69ee4674-llm-inference.md
  54. 39 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/understanding.md
  55. 1027 0
      examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/workflow.json
  56. 357 0
      examples/process_pipeline/script/search_eval/scrape_selection_to_eval.py
  57. 4 0
      examples/process_pipeline/script/search_eval/scraped_selection/creative_1.json
  58. 4 0
      examples/process_pipeline/script/search_eval/scraped_selection/creative_2.json
  59. 4 0
      examples/process_pipeline/script/search_eval/scraped_selection/creative_3.json
  60. 17 0
      examples/process_pipeline/script/search_eval/scraped_selection/creative_4.json
  61. 8 0
      examples/process_pipeline/script/search_eval/workflows/q0000_A_gzh_8f5fbfb0.json
  62. 251 0
      examples/process_pipeline/script/search_eval/workflows/q0000_B_xhs_69832685.json
  63. 8 0
      examples/process_pipeline/script/search_eval/workflows/q0000_C_gzh_650ee5d6.json
  64. 733 0
      examples/process_pipeline/script/search_eval/workflows/q0010_A_xhs_66d730d4.json
  65. 156 0
      examples/process_pipeline/script/search_eval/workflows/q0010_B_xhs_695b81a3.json
  66. 8 0
      examples/process_pipeline/script/search_eval/workflows/q0010_C_xhs_69ee4674.json
  67. 9 0
      examples/process_pipeline/script/search_eval/workflows_dump.json

+ 11 - 0
examples/process_pipeline/script/search_eval/batch_extract_procedures.py

@@ -41,6 +41,8 @@ from pathlib import Path
 from statistics import mean
 from typing import Any, Dict, List, Optional, Set, Tuple
 
+import build_workflows  # 复用其 write_run: 跑完一个 q 就把合并 json 写进 workflows/
+
 HERE = Path(__file__).resolve().parent
 RUNS_FULL_DEFAULT = HERE / "runs_full"
 RUN_DSL = HERE / "procedure-dsl" / "run_procedure_dsl.py"
@@ -333,6 +335,15 @@ def main() -> None:
                 n_failed += 1
                 print(f"   ❌ {name} exit={code} (目录已占; 想重试 --force 或 手动 rm 该 dir)")
 
+        # 本 q 的 procedure 跑完 → 把合并 json 增量写进 workflows/
+        # (dry-run 不产 workflow.json, 跳过; build 失败不应中断批量, 故 try 包住)
+        if not args.dry_run:
+            try:
+                n_wf = build_workflows.write_run(qd.name, runs_dir=runs_full)
+                print(f"   🧩 workflows/: {qd.name} 写出 {n_wf} 个合并 json")
+            except Exception as e:
+                print(f"   ⚠️ build_workflows 失败 ({qd.name}): {e}")
+
     print(f"\n{'='*60}")
     print(f"📊 完成: 跑 {n_ran} / 本次已存目录跳过 {n_skipped} / 全局占用顶替 {n_global_skip} / "
           f"失败 {n_failed} / 无候选 q {n_no_cap}")

+ 251 - 0
examples/process_pipeline/script/search_eval/build_workflows.py

@@ -0,0 +1,251 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""把一个 run 目录(如 runs_full/q0000)里**每个帖子**的 workflow.json,
+与它对应的 post 信息(含 llm_evaluation)以及 query 词合并成一个 JSON。
+以帖子为单位:一个 procedure 输出一个文件,文件落在 search_eval/workflows/ 下。
+(例:q0000 有 3 个 procedure -> 写出 3 个 json)
+
+映射逻辑:
+  procedure 文件夹名形如  {FORM}_{platform}_{hash前缀}   例: A_gzh_8f5fbfb0
+  -> 读 form_{FORM}.json,在 results[] 里找 case_id 以 "{platform}_{hash前缀}" 开头的那条
+  -> 该 result 即对应的 post(post / comments / llm_evaluation / source_url ...)
+  -> query / original_q 取自 form_{FORM}.json 顶层
+
+输出文件名: {run_id}_{folder}.json    例: q0000_A_gzh_8f5fbfb0.json
+
+本模块既是 build 脚本,也是一个 HTTP 接口:
+  * build 函数(build_run / write_run)保留,供外部 import 调用或经 POST /build 触发;
+  * 接口本身实时扫描 workflows/ 目录,把里面所有 json 以数组形式返回。
+
+用法(build):
+  python build_workflows.py              # 默认处理 q0000
+  python build_workflows.py q0003        # 处理指定 run
+  python build_workflows.py --all        # 处理 runs_full 下所有 q* 目录
+
+用法(接口):
+  python build_workflows.py serve [port] # 默认 8771
+    GET  /workflows   -> 实时扫描 workflows/*.json,返回数组
+    GET  /            -> 同上(方便直接访问)
+    POST /build       -> body {"q":"q0003"} 或 {"all":true},触发 build 后返回结果
+"""
+import json
+import os
+import re
+import sys
+import glob
+from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+RUNS_DIR = os.path.join(HERE, "runs_full")
+OUT_DIR = os.path.join(HERE, "workflows")
+DEFAULT_PORT = 8771
+
+# 文件夹名: 表单字母 _ 平台 _ case_id 哈希前缀
+FOLDER_RE = re.compile(r"^([A-Za-z])_([a-z0-9]+)_([0-9a-fA-F]+)$")
+
+
+def load_json(path):
+    with open(path, encoding="utf-8") as f:
+        return json.load(f)
+
+
+def build_run(run_id, runs_dir=None):
+    """为单个 run 目录构建合并结果。
+
+    以帖子为单位:返回一个 list,每个元素是 (folder, merged_dict),
+    merged_dict 即单个帖子的合并 JSON(query + post + llm_evaluation + workflow)。
+    找不到 procedures 时返回空 list。
+    runs_dir 缺省用模块的 RUNS_DIR;外部脚本(如 batch_extract_procedures.py 用了
+    --output-dir)可传入自己的 runs_full,避免两边路径不一致。"""
+    run_dir = os.path.join(runs_dir or RUNS_DIR, run_id)
+    proc_root = os.path.join(run_dir, "procedures")
+    if not os.path.isdir(proc_root):
+        print(f"[skip] {run_id}: 没有 procedures/ 目录")
+        return []
+
+    # 缓存已加载的 form_{X}.json,并记录 query(取第一个见到的)
+    forms = {}
+    query = original_q = None
+    platforms = None
+
+    def get_form(letter):
+        nonlocal query, original_q, platforms
+        if letter not in forms:
+            forms[letter] = load_json(os.path.join(run_dir, f"form_{letter}.json"))
+            if query is None:
+                query = forms[letter].get("query")
+                original_q = forms[letter].get("original_q")
+                platforms = forms[letter].get("platforms")
+        return forms[letter]
+
+    out = []
+    for folder in sorted(os.listdir(proc_root)):
+        folder_path = os.path.join(proc_root, folder)
+        if not os.path.isdir(folder_path):
+            continue
+        m = FOLDER_RE.match(folder)
+        if not m:
+            print(f"[warn] {run_id}/{folder}: 文件夹名不符合命名规则,跳过")
+            continue
+        form_letter, platform, hash_prefix = m.groups()
+
+        wf_path = os.path.join(folder_path, "workflow.json")
+        if not os.path.isfile(wf_path):
+            print(f"[warn] {run_id}/{folder}: 没有 workflow.json,跳过")
+            continue
+        workflow = load_json(wf_path)
+
+        # 在对应 form 里按 case_id 前缀找匹配的 post
+        form_data = get_form(form_letter)
+        want_prefix = f"{platform}_{hash_prefix}"
+        hits = [r for r in form_data.get("results", [])
+                if r.get("case_id", "").startswith(want_prefix)]
+        if len(hits) != 1:
+            print(f"[warn] {run_id}/{folder}: 匹配到 {len(hits)} 条 result(期望 1),跳过")
+            continue
+        result = hits[0]
+
+        # 可选:用 _source.json 的 link 校验映射没串台
+        src_path = os.path.join(folder_path, "_source.json")
+        if os.path.isfile(src_path):
+            src = load_json(src_path)
+            if src.get("link") and src["link"] != result.get("source_url"):
+                print(f"[warn] {run_id}/{folder}: _source.link 与 result.source_url 不一致")
+
+        # 以帖子为单位合并,只保留 5 个字段
+        merged = {
+            "query_id": run_id,
+            "query": query,
+            "platform": result.get("platform", platform),
+            "post": result.get("post"),
+            "llm_evaluation": result.get("llm_evaluation"),
+            "workflow": workflow,
+        }
+        out.append((folder, merged))
+
+    if not out:
+        print(f"[skip] {run_id}: 没有可合并的 procedure")
+    return out
+
+
+def write_run(run_id, runs_dir=None):
+    entries = build_run(run_id, runs_dir=runs_dir)
+    if not entries:
+        return 0
+    os.makedirs(OUT_DIR, exist_ok=True)
+    for folder, merged in entries:
+        out_path = os.path.join(OUT_DIR, f"{run_id}_{folder}.json")
+        with open(out_path, "w", encoding="utf-8") as f:
+            json.dump(merged, f, ensure_ascii=False, indent=2)
+        print(f"[ok] {run_id}/{folder} -> {os.path.basename(out_path)}")
+    return len(entries)
+
+
+def build_runs(run_ids):
+    """对一组 run 执行 write_run,返回写出的帖子 json 总数。"""
+    total = 0
+    for run_id in run_ids:
+        total += write_run(run_id)
+    return total
+
+
+def all_run_ids():
+    """runs_full 下所有 q* 目录。"""
+    return sorted(d for d in os.listdir(RUNS_DIR)
+                  if re.match(r"^q\d+$", d)
+                  and os.path.isdir(os.path.join(RUNS_DIR, d)))
+
+
+# ---------- 接口:实时扫描 workflows/ 并以数组返回 ----------
+
+def scan_workflows():
+    """实时扫描 workflows/*.json,把每个文件读成 dict,按文件名排序返回数组。
+
+    每次调用都重新读盘,所以 build 新写入的文件会立刻在接口里出现(无缓存)。"""
+    items = []
+    for fp in sorted(glob.glob(os.path.join(OUT_DIR, "*.json"))):
+        try:
+            items.append(load_json(fp))
+        except Exception as e:
+            print(f"[warn] 读取 {os.path.basename(fp)} 失败:{e}")
+    return items
+
+
+class Handler(BaseHTTPRequestHandler):
+    def _send(self, code, obj):
+        body = json.dumps(obj, ensure_ascii=False).encode("utf-8")
+        self.send_response(code)
+        self.send_header("Content-Type", "application/json; charset=utf-8")
+        self.send_header("Access-Control-Allow-Origin", "*")
+        self.send_header("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
+        self.send_header("Access-Control-Allow-Headers", "Content-Type")
+        self.send_header("Content-Length", str(len(body)))
+        self.end_headers()
+        self.wfile.write(body)
+
+    def do_OPTIONS(self):  # CORS 预检
+        self._send(204, {})
+
+    def do_GET(self):
+        path = self.path.split("?")[0]
+        if path in ("/", "/workflows", "/api/workflows"):
+            self._send(200, scan_workflows())
+        else:
+            self._send(404, {"error": "not found"})
+
+    def do_POST(self):
+        if self.path.split("?")[0] != "/build":
+            self._send(404, {"error": "not found"}); return
+        length = int(self.headers.get("Content-Length") or 0)
+        raw = self.rfile.read(length).decode("utf-8") if length > 0 else "{}"
+        try:
+            payload = json.loads(raw)
+        except Exception as e:
+            self._send(400, {"error": f"bad json: {e}"}); return
+        if payload.get("all"):
+            run_ids = all_run_ids()
+        else:
+            q = (payload.get("q") or "").strip()
+            if not re.match(r"^q\d+$", q):  # 限定 qNN 形式,避免路径注入
+                self._send(400, {"error": f"bad q (expect 'qNN' or all=true): {q!r}"}); return
+            run_ids = [q]
+        try:
+            n = build_runs(run_ids)
+            self._send(200, {"status": "ok", "runs": run_ids, "written": n})
+        except Exception as e:
+            self._send(500, {"error": f"build failed: {e}"})
+
+    def log_message(self, *a):
+        pass
+
+
+def serve(port):
+    n = len(scan_workflows())
+    print(f"workflows 接口:http://0.0.0.0:{port}/workflows   "
+          f"(workflows/ 下当前 {n} 个 json,实时扫描)")
+    ThreadingHTTPServer(("0.0.0.0", port), Handler).serve_forever()
+
+
+def main(argv):
+    args = argv[1:]
+    if args and args[0] == "serve":
+        port = int(args[1]) if len(args) > 1 else DEFAULT_PORT
+        serve(port)
+        return
+
+    if "--all" in args:
+        run_ids = all_run_ids()
+    elif args:
+        run_ids = args
+    else:
+        run_ids = ["q0000"]
+    total_files = build_runs(run_ids)
+    print(f"\n完成:处理 {len(run_ids)} 个 run,共写出 {total_files} 个帖子 json")
+
+
+if __name__ == "__main__":
+    try:  # Windows 控制台默认 cp1252,中文 print 会崩,统一切 utf-8
+        sys.stdout.reconfigure(encoding="utf-8")
+    except Exception:
+        pass
+    main(sys.argv)

Разница между файлами не показана из-за своего большого размера
+ 4 - 0
examples/process_pipeline/script/search_eval/procedure-dsl/input/creative_1.json


Разница между файлами не показана из-за своего большого размера
+ 4 - 0
examples/process_pipeline/script/search_eval/procedure-dsl/input/creative_2.json


Разница между файлами не показана из-за своего большого размера
+ 4 - 0
examples/process_pipeline/script/search_eval/procedure-dsl/input/creative_3.json


+ 17 - 0
examples/process_pipeline/script/search_eval/procedure-dsl/input/creative_4.json

@@ -0,0 +1,17 @@
+{
+  "channel_content_id": "6981939f000000000e03da6d",
+  "title": "选题不对,努力白费;三步学会,流量自来",
+  "content_type": "note",
+  "body_text": "三步挖出爆款选题,告别内容焦虑。\n选题时找到素材与用户需求之间的隐性关联,并将其具体化。\n<爆款选题三步法口诀>\n挖需求,看四项,搜同评大痛点藏。\n转选题,套八样,细分场景跨界强。\n优化时,四法上,细分组合出奇招。\n三步走,流量涨,选题从此不慌张。\n#短视频脚本[话题]# #创作者运营[话题]# #干货[话题]# #短视频运营[话题]# #不确定性中寻找确定性[话题]# #选题[话题]# #选题方向[话题]#",
+  "like_count": 107,
+  "publish_timestamp": "2026-02-03 14:20:15",
+  "images": [
+    "http://sns-webpic-qc.xhscdn.com/202606011541/b6bfa01eeeaaa34c5ece6f4ff859b3a9/notes_pre_post/1040g3k831s479s4262005pjc26tiucj2netaivg!nd_dft_wlteh_jpg_3",
+    "http://sns-webpic-qc.xhscdn.com/202606011541/3276025dc74058725399277f0f464789/notes_pre_post/1040g3k831s479s42620g5pjc26tiucj293tgr70!nd_dft_wlteh_jpg_3"
+  ],
+  "videos": [],
+  "channel": "xhs",
+  "link": "https://www.xiaohongshu.com/explore/6981939f000000000e03da6d",
+  "_quality_score": 87.0,
+  "_quality_grade": "A"
+}

+ 26 - 0
examples/process_pipeline/script/search_eval/procedure-dsl/spec/taxonomy/type_suggestions.md

@@ -169,3 +169,29 @@
 - `JSON提示词`: 以JSON结构描述的图像提示词,涵盖subject/color_palette/lighting/composition/aesthetic等多维层级,由豆包深度思考模式反推生成  (来自 case-A_gzh_4d6f09a4, extends `提示词`)
 
 - `JSON提示词`: 以JSON结构描述的图像提示词,涵盖subject/color_palette/lighting/composition/aesthetic等多维层级,由豆包深度思考模式反推生成  (来自 case-?, extends `提示词`)
+
+- `扩展插件`: 安装到 ComfyUI 运行环境的自定义节点扩展包,提供额外的节点类型供工作流调用,可被反复装载复用(如 ComfyUI-WD14-Tagger、One Button Prompt 等)  (来自 case-A_xhs_66d730d4, extends `模型权重`)
+- `节点配置`: ComfyUI 工作流中已添加并配置完毕的单个节点实例,包含节点类型与所有参数设定,是工作流节点图的组成单元  (来自 case-A_xhs_66d730d4, extends `工作流`)
+
+- `元提示词`: 用于驱动AI(Gemini Canvas)生成代码/网页界面的结构化系统提示词,内含RCCUWI框架槽位,与图像生成正向prompt不同  (来自 case-B_xhs_695b81a3, extends `提示词`)
+- `修改需求`: 用户以自然语言表达的针对当前网页版本的改动指令  (来自 case-B_xhs_695b81a3, extends `描述`)
+- `网页应用`: 由AI生成的可在浏览器中运行的交互式网页工具,含界面布局/交互逻辑/AI接口调用  (来自 case-B_xhs_695b81a3, extends `工作流`)
+- `产品信息`: 用户录入的产品基本信息,含产品类型/品类/核心卖点  (来自 case-B_xhs_695b81a3, extends `描述`)
+- `风格配置`: 用户在工作站中设定的风格参数集合,含风格关键词/时间段/分类标签,约束AI生成MJ提示词方向  (来自 case-B_xhs_695b81a3, extends `生成参数`)
+
+- `Token序列`: Tokenizer将自然语言文本切分后得到的字符串token列表,如['今天','天气','很','好'],是文本在词表粒度上的离散序列表示  (来自 case-C_xhs_69ee4674, extends `描述`)
+- `Token_ID序列`: Token序列中每个token在词表中对应的整数索引列表,形状[n,],值域[0, vocab_size-1],是模型实际消费的数字化输入  (来自 case-C_xhs_69ee4674, extends `描述`)
+- `注意力掩码`: 与padded token_ids同形状的二元矩阵,有效token位置=1,padding位置=0,用于在注意力计算中屏蔽padding位置  (来自 case-C_xhs_69ee4674, extends `蒙版`)
+- `嵌入矩阵`: 词嵌入查表后得到的token向量矩阵,形状[n, d_model],每行是对应token在连续语义空间中的浮点表示  (来自 case-C_xhs_69ee4674, extends `模型权重`)
+- `隐状态矩阵`: Transformer各层输入/输出的中间表征矩阵,形状[n, d_model],承载当前层对序列的语义理解,是后续层持续改造的对象  (来自 case-C_xhs_69ee4674, extends `底图`)
+- `QKV矩阵组`: 注意力机制中Query、Key、Value三个线性投影矩阵的组合,各形状[n, d_model],分别负责查询匹配、键索引和值聚合  (来自 case-C_xhs_69ee4674, extends `底图`)
+- `多头QKV`: 将QKV矩阵reshape为多头形式后的张量,形状[n, n_heads, d_head],支持多头并行注意力计算  (来自 case-C_xhs_69ee4674, extends `底图`)
+- `注意力分数矩阵`: QK点积经缩放和因果掩码处理后的注意力分数,形状[n_heads, n, n],未来位置被置为负无穷  (来自 case-C_xhs_69ee4674, extends `底图`)
+- `注意力输出矩阵`: 经softmax归一化后对V做加权求和得到的注意力输出,形状[n, n_heads, d_head],是多头注意力的直接产出  (来自 case-C_xhs_69ee4674, extends `底图`)
+- `位置向量`: 最终隐状态矩阵最后一行XL[n-1],形状[d_model,],代表模型处理完整prompt后的上下文压缩表征  (来自 case-C_xhs_69ee4674, extends `底图`)
+- `归一化向量`: 经Final LayerNorm处理后的最终特征向量,形状[d_model,],数值尺度对齐到LM Head期望输入范围  (来自 case-C_xhs_69ee4674, extends `底图`)
+- `logits向量`: LM Head对最终表征线性投影得到的未归一化预测分数,形状[vocab_size,],每个位置对应词表中一个token的预测得分  (来自 case-C_xhs_69ee4674, extends `底图`)
+- `KV缓存`: prefill阶段按层和注意力头缓存的K/V矩阵,每层形状[2, n_heads, n, d_head],供后续自回归decode阶段复用以避免重复计算  (来自 case-C_xhs_69ee4674, extends `生成参数`)
+- `解码配置`: 控制解码行为的参数集合,包含temperature缩放系数、logits_bias词级偏置、repetition_penalty重复惩罚系数和bad_words_ids屏蔽列表  (来自 case-C_xhs_69ee4674, extends `生成参数`)
+- `候选Token列表`: 经Top-k/Top-p截断后保留的候选token子集,形状仍[vocab_size,]但非候选位置logits被置为负无穷,等待最终采样决策  (来自 case-C_xhs_69ee4674, extends `样图`)
+- `输出Token`: 经采样或argmax决策后产出的第一个生成token,对应词表中某个整数ID及其解码后的子词或字符,是本次推理的最终交付物  (来自 case-C_xhs_69ee4674, extends `正文`)

Разница между файлами не показана из-за своего большого размера
+ 0 - 3
examples/process_pipeline/script/search_eval/runs_full/q0000/procedures/A_gzh_2887577d/_source.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 3
examples/process_pipeline/script/search_eval/runs_full/q0000/procedures/C_gzh_8f5fbfb0/_source.json


Разница между файлами не показана из-за своего большого размера
+ 3 - 0
examples/process_pipeline/script/search_eval/runs_full/q0000/procedures/C_zhihu_20281424/_source.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 3
examples/process_pipeline/script/search_eval/runs_full/q0000/procedures/C_zhihu_66632290/_source.json


+ 1 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/.session_id

@@ -0,0 +1 @@
+245832fc-b9bd-418e-bed6-d333441d84b0

+ 7 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_meta.json

@@ -0,0 +1,7 @@
+{
+  "case_id": "xhs_66d730d4000000001e01b36f",
+  "from_q": "q0010",
+  "form": "A",
+  "score": 0.0,
+  "started_at": "2026-06-01T14:46:43"
+}

+ 30 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/anchors.json

@@ -0,0 +1,30 @@
+[
+  {"path": "p1.s1.outputs[0].anchor", "value": "→ s2"},
+  {"path": "p1.s2.inputs[0].anchor",  "value": "← s1.WD14 Tagger 扩展"},
+  {"path": "p1.s2.outputs[0].anchor", "value": "→ s5"},
+  {"path": "p1.s3.outputs[0].anchor", "value": "→ s5"},
+  {"path": "p1.s4.inputs[0].anchor",  "value": "← 工序输入"},
+  {"path": "p1.s4.outputs[0].anchor", "value": "→ s5"},
+  {"path": "p1.s5.inputs[0].anchor",  "value": "← s3.Load Image 节点"},
+  {"path": "p1.s5.inputs[1].anchor",  "value": "← s2.WD14 Tagger 节点"},
+  {"path": "p1.s5.inputs[2].anchor",  "value": "← s4.可接收外部输入的正向 CLIP Text Encode 节点"},
+  {"path": "p1.s5.inputs[3].anchor",  "value": "← 工序输入"},
+  {"path": "p1.s5.outputs[0].anchor", "value": "→ s6"},
+  {"path": "p1.s6.inputs[0].anchor",  "value": "← 工序输入"},
+  {"path": "p1.s6.inputs[1].anchor",  "value": "← s5.提示词反推工作流"},
+  {"path": "p1.s6.outputs[0].anchor", "value": "→ 返回 生成图"},
+
+  {"path": "p2.s1.outputs[0].anchor", "value": "→ s2"},
+  {"path": "p2.s2.inputs[0].anchor",  "value": "← s1.One Button Prompt 扩展"},
+  {"path": "p2.s2.outputs[0].anchor", "value": "→ s4"},
+  {"path": "p2.s3.inputs[0].anchor",  "value": "← 工序输入"},
+  {"path": "p2.s3.outputs[0].anchor", "value": "→ s4"},
+  {"path": "p2.s4.inputs[0].anchor",  "value": "← s2.Auto Negative Prompt 节点"},
+  {"path": "p2.s4.inputs[1].anchor",  "value": "← s3.可接收外部输入的负向 CLIP Text Encode 节点"},
+  {"path": "p2.s4.inputs[2].anchor",  "value": "← 工序输入"},
+  {"path": "p2.s4.outputs[0].anchor", "value": "→ s5"},
+  {"path": "p2.s5.inputs[0].anchor",  "value": "← 工序输入"},
+  {"path": "p2.s5.inputs[1].anchor",  "value": "← s4.自动负向提示词工作流"},
+  {"path": "p2.s5.outputs[0].anchor", "value": "→ 返回 生成图"},
+  {"path": "p2.s5.outputs[1].anchor", "value": "→ 副产物"}
+]

+ 71 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/patch_2a.json

@@ -0,0 +1,71 @@
+[
+  {"path": "p1.s1.effect", "value": "工艺规约"},
+  {"path": "p1.s1.action", "value": "获取/搜索/下载"},
+  {"path": "p1.s1.outputs[0].type", "value": "扩展插件"},
+
+  {"path": "p1.s2.effect", "value": "工艺规约"},
+  {"path": "p1.s2.action", "value": "修改/增/添加"},
+  {"path": "p1.s2.inputs[0].type", "value": "扩展插件"},
+  {"path": "p1.s2.outputs[0].type", "value": "节点配置"},
+
+  {"path": "p1.s3.effect", "value": "工艺规约"},
+  {"path": "p1.s3.action", "value": "修改/增/添加"},
+  {"path": "p1.s3.outputs[0].type", "value": "节点配置"},
+
+  {"path": "p1.s4.effect", "value": "工艺规约"},
+  {"path": "p1.s4.action", "value": "修改/变/转换"},
+  {"path": "p1.s4.inputs[0].type", "value": "节点配置"},
+  {"path": "p1.s4.outputs[0].type", "value": "节点配置"},
+
+  {"path": "p1.s5.effect", "value": "工艺规约"},
+  {"path": "p1.s5.action", "value": "修改/增/添加"},
+  {"path": "p1.s5.inputs[0].type", "value": "节点配置"},
+  {"path": "p1.s5.inputs[1].type", "value": "节点配置"},
+  {"path": "p1.s5.inputs[2].type", "value": "节点配置"},
+  {"path": "p1.s5.inputs[3].type", "value": "工作流"},
+  {"path": "p1.s5.outputs[0].type", "value": "工作流"},
+
+  {"path": "p1.s6.effect", "value": "主体生成"},
+  {"path": "p1.s6.action", "value": "生成/元素生成"},
+  {"path": "p1.s6.inputs[0].type", "value": "参考图"},
+  {"path": "p1.s6.inputs[1].type", "value": "工作流"},
+  {"path": "p1.s6.outputs[0].type", "value": "成品图"},
+
+  {"path": "p1.type_registry.扩展插件.extends", "value": "模型权重"},
+  {"path": "p1.type_registry.扩展插件.desc", "value": "安装到 ComfyUI 运行环境的自定义节点扩展包,提供额外的节点类型供工作流调用,可被反复装载复用(如 ComfyUI-WD14-Tagger、One Button Prompt 等)"},
+  {"path": "p1.type_registry.节点配置.extends", "value": "工作流"},
+  {"path": "p1.type_registry.节点配置.desc", "value": "ComfyUI 工作流中已添加并配置完毕的单个节点实例,包含节点类型与所有参数设定,是工作流节点图的组成单元"},
+
+  {"path": "p2.s1.effect", "value": "工艺规约"},
+  {"path": "p2.s1.action", "value": "获取/搜索/下载"},
+  {"path": "p2.s1.outputs[0].type", "value": "扩展插件"},
+
+  {"path": "p2.s2.effect", "value": "工艺规约"},
+  {"path": "p2.s2.action", "value": "修改/增/添加"},
+  {"path": "p2.s2.inputs[0].type", "value": "扩展插件"},
+  {"path": "p2.s2.outputs[0].type", "value": "节点配置"},
+
+  {"path": "p2.s3.effect", "value": "工艺规约"},
+  {"path": "p2.s3.action", "value": "修改/变/转换"},
+  {"path": "p2.s3.inputs[0].type", "value": "节点配置"},
+  {"path": "p2.s3.outputs[0].type", "value": "节点配置"},
+
+  {"path": "p2.s4.effect", "value": "工艺规约"},
+  {"path": "p2.s4.action", "value": "修改/增/添加"},
+  {"path": "p2.s4.inputs[0].type", "value": "节点配置"},
+  {"path": "p2.s4.inputs[1].type", "value": "节点配置"},
+  {"path": "p2.s4.inputs[2].type", "value": "工作流"},
+  {"path": "p2.s4.outputs[0].type", "value": "工作流"},
+
+  {"path": "p2.s5.effect", "value": "主体生成"},
+  {"path": "p2.s5.action", "value": "生成/元素生成"},
+  {"path": "p2.s5.inputs[0].type", "value": "提示词"},
+  {"path": "p2.s5.inputs[1].type", "value": "工作流"},
+  {"path": "p2.s5.outputs[0].type", "value": "成品图"},
+  {"path": "p2.s5.outputs[1].type", "value": "负向提示词"},
+
+  {"path": "p2.type_registry.扩展插件.extends", "value": "模型权重"},
+  {"path": "p2.type_registry.扩展插件.desc", "value": "安装到 ComfyUI 运行环境的自定义节点扩展包,提供额外的节点类型供工作流调用,可被反复装载复用(如 ComfyUI-WD14-Tagger、One Button Prompt 等)"},
+  {"path": "p2.type_registry.节点配置.extends", "value": "工作流"},
+  {"path": "p2.type_registry.节点配置.desc", "value": "ComfyUI 工作流中已添加并配置完毕的单个节点实例,包含节点类型与所有参数设定,是工作流节点图的组成单元"}
+]

+ 82 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/patch_2b.json

@@ -0,0 +1,82 @@
+[
+  {"path": "p1.s1.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s1.outputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p1.s2.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s2.inputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p1.s2.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s2.outputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p1.s3.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s3.outputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p1.s4.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s4.inputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p1.s4.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s4.outputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p1.s5.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s5.inputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p1.s5.inputs[1].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s5.inputs[1].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p1.s5.inputs[2].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s5.inputs[2].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p1.s5.inputs[3].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s5.inputs[3].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"},
+
+  {"path": "p1.s5.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s5.outputs[0].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"},
+
+  {"path": "p1.s6.inputs[0].substance", "value": "/表象/视觉/实体/物品/影像物品/生活影像"},
+  {"path": "p1.s6.inputs[0].form", "value": "/呈现/视觉/视觉制作/实景拍摄"},
+
+  {"path": "p1.s6.inputs[1].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s6.inputs[1].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"},
+
+  {"path": "p1.s6.outputs[0].substance", "value": "/表象/视觉/实体/物品/影像物品/艺术创作"},
+  {"path": "p1.s6.outputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/空间布局/景别角度"},
+
+  {"path": "p2.s1.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p2.s1.outputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p2.s2.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p2.s2.inputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p2.s2.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p2.s2.outputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p2.s3.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p2.s3.inputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p2.s3.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p2.s3.outputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p2.s4.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p2.s4.inputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p2.s4.inputs[1].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p2.s4.inputs[1].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+
+  {"path": "p2.s4.inputs[2].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p2.s4.inputs[2].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"},
+
+  {"path": "p2.s4.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p2.s4.outputs[0].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"},
+
+  {"path": "p2.s5.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p2.s5.inputs[0].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举"},
+
+  {"path": "p2.s5.inputs[1].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p2.s5.inputs[1].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"},
+
+  {"path": "p2.s5.outputs[0].substance", "value": "/表象/视觉/实体/物品/影像物品/艺术创作"},
+  {"path": "p2.s5.outputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/空间布局/景别角度"},
+
+  {"path": "p2.s5.outputs[1].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p2.s5.outputs[1].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举"}
+]

+ 325 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/task_2a.json

@@ -0,0 +1,325 @@
+{
+  "case_id": "A_xhs_66d730d4",
+  "task": "Phase 2A (effect/action/type normalization)",
+  "image_url_list": [],
+  "steps": [
+    {
+      "path": "p1.s1",
+      "name": "",
+      "action": "安装扩展插件",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [],
+      "outputs": [
+        {
+          "path": "p1.s1.outputs[0]",
+          "name": "WD14 Tagger 扩展",
+          "value": "ComfyUI-WD14-Tagger(by pythongosssss),支持从图像提取 booru 标签的 ComfyUI 自定义节点扩展,约 564 Stars",
+          "type": "扩展插件",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s2",
+      "name": "",
+      "action": "添加并配置节点",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s2.inputs[0]",
+          "name": "WD14 Tagger 扩展",
+          "value": "ComfyUI-WD14-Tagger(by pythongosssss),支持从图像提取 booru 标签的 ComfyUI 自定义节点扩展,约 564 Stars",
+          "type": "扩展插件",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s2.outputs[0]",
+          "name": "WD14 Tagger 节点",
+          "value": "配置完毕的 WD14 Tagger 节点:model=wd-v1-4-moat-tagger-v2, threshold=0.50, character_threshold=0.85, replace_underscore=true, trailing_comma=false",
+          "type": "节点配置",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s3",
+      "name": "",
+      "action": "添加节点",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [],
+      "outputs": [
+        {
+          "path": "p1.s3.outputs[0]",
+          "name": "Load Image 节点",
+          "value": "空的 Load Image 节点(Comfy Core),等待用户上传参考图",
+          "type": "节点配置",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s4",
+      "name": "",
+      "action": "转化节点输入端口",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s4.inputs[0]",
+          "name": "正向 CLIP Text Encode 节点",
+          "value": "<基础文生图工作流中正向 CLIP Text Encode (Prompt) 节点,text 输入当前为内联文本控件>",
+          "type": "节点配置",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s4.outputs[0]",
+          "name": "可接收外部输入的正向 CLIP Text Encode 节点",
+          "value": "正向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收来自 WD14 Tagger 的字符串输出",
+          "type": "节点配置",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s5",
+      "name": "",
+      "action": "连接节点并接入工作流",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s5.inputs[0]",
+          "name": "Load Image 节点",
+          "value": "空的 Load Image 节点(Comfy Core),等待用户上传参考图",
+          "type": "节点配置",
+          "related_images": []
+        },
+        {
+          "path": "p1.s5.inputs[1]",
+          "name": "WD14 Tagger 节点",
+          "value": "配置完毕的 WD14 Tagger 节点:model=wd-v1-4-moat-tagger-v2, threshold=0.50, character_threshold=0.85, replace_underscore=true, trailing_comma=false",
+          "type": "节点配置",
+          "related_images": []
+        },
+        {
+          "path": "p1.s5.inputs[2]",
+          "name": "可接收外部输入的正向 CLIP Text Encode 节点",
+          "value": "正向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收来自 WD14 Tagger 的字符串输出",
+          "type": "节点配置",
+          "related_images": []
+        },
+        {
+          "path": "p1.s5.inputs[3]",
+          "name": "基础文生图工作流",
+          "value": "<基础文生图工作流:Load Checkpoint + CLIP Text Encode(正) + CLIP Text Encode(负) + Empty Latent Image + KSampler + VAE Decode + Preview Image>",
+          "type": "ComfyUI工作流",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s5.outputs[0]",
+          "name": "提示词反推工作流",
+          "value": "Load Image → WD14 Tagger → CLIP Text Encode(正) → KSampler → VAE Decode → Preview Image,配合 Load Checkpoint 和 Empty Latent Image 的完整提示词反推图像生成工作流",
+          "type": "ComfyUI工作流",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s6",
+      "name": "",
+      "action": "文生图",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s6.inputs[0]",
+          "name": "参考图",
+          "value": "<图:janko-ferlic 拍摄的骑自行车金发女孩,户外,NYC 字样上衣,中景>",
+          "type": "参考图",
+          "related_images": []
+        },
+        {
+          "path": "p1.s6.inputs[1]",
+          "name": "提示词反推工作流",
+          "value": "Load Image → WD14 Tagger → CLIP Text Encode(正) → KSampler → VAE Decode → Preview Image,配合 Load Checkpoint 和 Empty Latent Image 的完整提示词反推图像生成工作流",
+          "type": "ComfyUI工作流",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s6.outputs[0]",
+          "name": "生成图",
+          "value": "<图:基于 WD14 Tagger 反推提示词生成的新图像,金发女孩骑自行车户外场景,风格相近于参考图>",
+          "type": "生成图",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p2.s1",
+      "name": "",
+      "action": "安装扩展插件",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [],
+      "outputs": [
+        {
+          "path": "p2.s1.outputs[0]",
+          "name": "One Button Prompt 扩展",
+          "value": "One Button Prompt(by Arjen,813 Stars),提供 Auto Negative Prompt 等自动提示词节点的 ComfyUI 扩展包",
+          "type": "扩展插件",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p2.s2",
+      "name": "",
+      "action": "添加并配置节点",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p2.s2.inputs[0]",
+          "name": "One Button Prompt 扩展",
+          "value": "One Button Prompt(by Arjen,813 Stars),提供 Auto Negative Prompt 等自动提示词节点的 ComfyUI 扩展包",
+          "type": "扩展插件",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p2.s2.outputs[0]",
+          "name": "Auto Negative Prompt 节点",
+          "value": "配置完毕的 Auto Negative Prompt 节点:enhancenegative=1, insanitylevel=5, base_model=SDXL, seed=0, control_after_generate=randomize,negative_prompt 输出端口可连接负向 CLIP Text Encode",
+          "type": "节点配置",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p2.s3",
+      "name": "",
+      "action": "转化节点输入端口",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p2.s3.inputs[0]",
+          "name": "负向 CLIP Text Encode 节点",
+          "value": "<基础文生图工作流中负向 CLIP Text Encode (Prompt) 节点,text 输入当前为内联文本控件>",
+          "type": "节点配置",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p2.s3.outputs[0]",
+          "name": "可接收外部输入的负向 CLIP Text Encode 节点",
+          "value": "负向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收 Auto Negative Prompt 节点的输出",
+          "type": "节点配置",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p2.s4",
+      "name": "",
+      "action": "连接节点并接入工作流",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p2.s4.inputs[0]",
+          "name": "Auto Negative Prompt 节点",
+          "value": "配置完毕的 Auto Negative Prompt 节点:enhancenegative=1, insanitylevel=5, base_model=SDXL, seed=0, control_after_generate=randomize,negative_prompt 输出端口可连接负向 CLIP Text Encode",
+          "type": "节点配置",
+          "related_images": []
+        },
+        {
+          "path": "p2.s4.inputs[1]",
+          "name": "可接收外部输入的负向 CLIP Text Encode 节点",
+          "value": "负向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收 Auto Negative Prompt 节点的输出",
+          "type": "节点配置",
+          "related_images": []
+        },
+        {
+          "path": "p2.s4.inputs[2]",
+          "name": "基础文生图工作流",
+          "value": "<基础文生图工作流:Load Checkpoint + CLIP Text Encode(正) + CLIP Text Encode(负) + Empty Latent Image + KSampler + VAE Decode + Preview Image>",
+          "type": "ComfyUI工作流",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p2.s4.outputs[0]",
+          "name": "自动负向提示词工作流",
+          "value": "包含 Auto Negative Prompt → CLIP Text Encode(负) 链路的完整工作流(可配合 WD14 Tagger 同时使用);Show Text 节点可预览生成的负向提示词",
+          "type": "ComfyUI工作流",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p2.s5",
+      "name": "",
+      "action": "文生图",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p2.s5.inputs[0]",
+          "name": "正向提示词",
+          "value": "<由 WD14 Tagger 反推或手动输入的正向提示词文本>",
+          "type": "提示词",
+          "related_images": []
+        },
+        {
+          "path": "p2.s5.inputs[1]",
+          "name": "自动负向提示词工作流",
+          "value": "包含 Auto Negative Prompt → CLIP Text Encode(负) 链路的完整工作流(可配合 WD14 Tagger 同时使用);Show Text 节点可预览生成的负向提示词",
+          "type": "ComfyUI工作流",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p2.s5.outputs[0]",
+          "name": "生成图",
+          "value": "<图:使用反推正向提示词 + Auto Negative Prompt 自动负向提示词生成的图像,示例为金发女孩骑自行车>",
+          "type": "生成图",
+          "related_images": []
+        },
+        {
+          "path": "p2.s5.outputs[1]",
+          "name": "负向提示词文本",
+          "value": "low quality, low details, overexposed, bw, bad photo, bad photography, watermark, text font, username, error, logo, trademark, name, ugly, bad shadow, cropped, out of frame, text, watermark",
+          "type": "提示词",
+          "related_images": []
+        }
+      ]
+    }
+  ]
+}

+ 196 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/task_2b.json

@@ -0,0 +1,196 @@
+{
+  "case_id": "A_xhs_66d730d4",
+  "task": "Phase 2B (substance/form matching)",
+  "image_url_list": [],
+  "items_to_match": [
+    {
+      "path": "p1.s1.outputs[0]",
+      "name": "WD14 Tagger 扩展",
+      "value": "ComfyUI-WD14-Tagger(by pythongosssss),支持从图像提取 booru 标签的 ComfyUI 自定义节点扩展,约 564 Stars",
+      "type": "扩展插件",
+      "related_images": []
+    },
+    {
+      "path": "p1.s2.inputs[0]",
+      "name": "WD14 Tagger 扩展",
+      "value": "ComfyUI-WD14-Tagger(by pythongosssss),支持从图像提取 booru 标签的 ComfyUI 自定义节点扩展,约 564 Stars",
+      "type": "扩展插件",
+      "related_images": []
+    },
+    {
+      "path": "p1.s2.outputs[0]",
+      "name": "WD14 Tagger 节点",
+      "value": "配置完毕的 WD14 Tagger 节点:model=wd-v1-4-moat-tagger-v2, threshold=0.50, character_threshold=0.85, replace_underscore=true, trailing_comma=false",
+      "type": "节点配置",
+      "related_images": []
+    },
+    {
+      "path": "p1.s3.outputs[0]",
+      "name": "Load Image 节点",
+      "value": "空的 Load Image 节点(Comfy Core),等待用户上传参考图",
+      "type": "节点配置",
+      "related_images": []
+    },
+    {
+      "path": "p1.s4.inputs[0]",
+      "name": "正向 CLIP Text Encode 节点",
+      "value": "<基础文生图工作流中正向 CLIP Text Encode (Prompt) 节点,text 输入当前为内联文本控件>",
+      "type": "节点配置",
+      "related_images": []
+    },
+    {
+      "path": "p1.s4.outputs[0]",
+      "name": "可接收外部输入的正向 CLIP Text Encode 节点",
+      "value": "正向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收来自 WD14 Tagger 的字符串输出",
+      "type": "节点配置",
+      "related_images": []
+    },
+    {
+      "path": "p1.s5.inputs[0]",
+      "name": "Load Image 节点",
+      "value": "空的 Load Image 节点(Comfy Core),等待用户上传参考图",
+      "type": "节点配置",
+      "related_images": []
+    },
+    {
+      "path": "p1.s5.inputs[1]",
+      "name": "WD14 Tagger 节点",
+      "value": "配置完毕的 WD14 Tagger 节点:model=wd-v1-4-moat-tagger-v2, threshold=0.50, character_threshold=0.85, replace_underscore=true, trailing_comma=false",
+      "type": "节点配置",
+      "related_images": []
+    },
+    {
+      "path": "p1.s5.inputs[2]",
+      "name": "可接收外部输入的正向 CLIP Text Encode 节点",
+      "value": "正向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收来自 WD14 Tagger 的字符串输出",
+      "type": "节点配置",
+      "related_images": []
+    },
+    {
+      "path": "p1.s5.inputs[3]",
+      "name": "基础文生图工作流",
+      "value": "<基础文生图工作流:Load Checkpoint + CLIP Text Encode(正) + CLIP Text Encode(负) + Empty Latent Image + KSampler + VAE Decode + Preview Image>",
+      "type": "ComfyUI工作流",
+      "related_images": []
+    },
+    {
+      "path": "p1.s5.outputs[0]",
+      "name": "提示词反推工作流",
+      "value": "Load Image → WD14 Tagger → CLIP Text Encode(正) → KSampler → VAE Decode → Preview Image,配合 Load Checkpoint 和 Empty Latent Image 的完整提示词反推图像生成工作流",
+      "type": "ComfyUI工作流",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.inputs[0]",
+      "name": "参考图",
+      "value": "<图:janko-ferlic 拍摄的骑自行车金发女孩,户外,NYC 字样上衣,中景>",
+      "type": "参考图",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.inputs[1]",
+      "name": "提示词反推工作流",
+      "value": "Load Image → WD14 Tagger → CLIP Text Encode(正) → KSampler → VAE Decode → Preview Image,配合 Load Checkpoint 和 Empty Latent Image 的完整提示词反推图像生成工作流",
+      "type": "ComfyUI工作流",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.outputs[0]",
+      "name": "生成图",
+      "value": "<图:基于 WD14 Tagger 反推提示词生成的新图像,金发女孩骑自行车户外场景,风格相近于参考图>",
+      "type": "生成图",
+      "related_images": []
+    },
+    {
+      "path": "p2.s1.outputs[0]",
+      "name": "One Button Prompt 扩展",
+      "value": "One Button Prompt(by Arjen,813 Stars),提供 Auto Negative Prompt 等自动提示词节点的 ComfyUI 扩展包",
+      "type": "扩展插件",
+      "related_images": []
+    },
+    {
+      "path": "p2.s2.inputs[0]",
+      "name": "One Button Prompt 扩展",
+      "value": "One Button Prompt(by Arjen,813 Stars),提供 Auto Negative Prompt 等自动提示词节点的 ComfyUI 扩展包",
+      "type": "扩展插件",
+      "related_images": []
+    },
+    {
+      "path": "p2.s2.outputs[0]",
+      "name": "Auto Negative Prompt 节点",
+      "value": "配置完毕的 Auto Negative Prompt 节点:enhancenegative=1, insanitylevel=5, base_model=SDXL, seed=0, control_after_generate=randomize,negative_prompt 输出端口可连接负向 CLIP Text Encode",
+      "type": "节点配置",
+      "related_images": []
+    },
+    {
+      "path": "p2.s3.inputs[0]",
+      "name": "负向 CLIP Text Encode 节点",
+      "value": "<基础文生图工作流中负向 CLIP Text Encode (Prompt) 节点,text 输入当前为内联文本控件>",
+      "type": "节点配置",
+      "related_images": []
+    },
+    {
+      "path": "p2.s3.outputs[0]",
+      "name": "可接收外部输入的负向 CLIP Text Encode 节点",
+      "value": "负向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收 Auto Negative Prompt 节点的输出",
+      "type": "节点配置",
+      "related_images": []
+    },
+    {
+      "path": "p2.s4.inputs[0]",
+      "name": "Auto Negative Prompt 节点",
+      "value": "配置完毕的 Auto Negative Prompt 节点:enhancenegative=1, insanitylevel=5, base_model=SDXL, seed=0, control_after_generate=randomize,negative_prompt 输出端口可连接负向 CLIP Text Encode",
+      "type": "节点配置",
+      "related_images": []
+    },
+    {
+      "path": "p2.s4.inputs[1]",
+      "name": "可接收外部输入的负向 CLIP Text Encode 节点",
+      "value": "负向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收 Auto Negative Prompt 节点的输出",
+      "type": "节点配置",
+      "related_images": []
+    },
+    {
+      "path": "p2.s4.inputs[2]",
+      "name": "基础文生图工作流",
+      "value": "<基础文生图工作流:Load Checkpoint + CLIP Text Encode(正) + CLIP Text Encode(负) + Empty Latent Image + KSampler + VAE Decode + Preview Image>",
+      "type": "ComfyUI工作流",
+      "related_images": []
+    },
+    {
+      "path": "p2.s4.outputs[0]",
+      "name": "自动负向提示词工作流",
+      "value": "包含 Auto Negative Prompt → CLIP Text Encode(负) 链路的完整工作流(可配合 WD14 Tagger 同时使用);Show Text 节点可预览生成的负向提示词",
+      "type": "ComfyUI工作流",
+      "related_images": []
+    },
+    {
+      "path": "p2.s5.inputs[0]",
+      "name": "正向提示词",
+      "value": "<由 WD14 Tagger 反推或手动输入的正向提示词文本>",
+      "type": "提示词",
+      "related_images": []
+    },
+    {
+      "path": "p2.s5.inputs[1]",
+      "name": "自动负向提示词工作流",
+      "value": "包含 Auto Negative Prompt → CLIP Text Encode(负) 链路的完整工作流(可配合 WD14 Tagger 同时使用);Show Text 节点可预览生成的负向提示词",
+      "type": "ComfyUI工作流",
+      "related_images": []
+    },
+    {
+      "path": "p2.s5.outputs[0]",
+      "name": "生成图",
+      "value": "<图:使用反推正向提示词 + Auto Negative Prompt 自动负向提示词生成的图像,示例为金发女孩骑自行车>",
+      "type": "生成图",
+      "related_images": []
+    },
+    {
+      "path": "p2.s5.outputs[1]",
+      "name": "负向提示词文本",
+      "value": "low quality, low details, overexposed, bw, bad photo, bad photography, watermark, text font, username, error, logo, trademark, name, ugly, bad shadow, cropped, out of frame, text, watermark",
+      "type": "提示词",
+      "related_images": []
+    }
+  ]
+}

+ 17 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_source.json

@@ -0,0 +1,17 @@
+{
+  "title": "ComfyUI|提示词自动化书写 / 反推",
+  "link": "https://www.xiaohongshu.com/explore/66d730d4000000001e01b36f",
+  "body_text": "这是一篇关于 ComfyUI 提示词自动化书写及反推的用法指南✨\n-\n你是否还在为写不出准确的提示词而头疼?是否还在为每次都要填写反向提示词而困扰?快来使用自动化提示词工作流吧!\n-\n希望对你有帮助 ❤️\n-\n#comfyui[话题]#  comfyui教程  #comfyui工作流[话题]#  #comfyui技巧[话题]#  #sd绘画[话题]#  #sd教程[话题]#",
+  "images": [
+    "https://ci.xiaohongshu.com/spectrum/1040g0k03179qo4o3jk005os8a1mnqva73t5e9kg?imageView2/2/w/1080/format/webp",
+    "https://ci.xiaohongshu.com/spectrum/1040g34o3179qo4p0go0g5os8a1mnqva70djrdeg?imageView2/2/w/1080/format/webp",
+    "https://ci.xiaohongshu.com/spectrum/1040g34o3179qo4pvgm0g5os8a1mnqva7lnu1n18?imageView2/2/w/1080/format/webp",
+    "https://ci.xiaohongshu.com/spectrum/1040g0k03179qo4qtjk005os8a1mnqva7tbhpk10?imageView2/2/w/1080/format/webp",
+    "https://ci.xiaohongshu.com/spectrum/1040g0k03179qo4rp0s005os8a1mnqva7dmtqvjo?imageView2/2/w/1080/format/webp",
+    "https://ci.xiaohongshu.com/spectrum/1040g34o3179qo4skgo0g5os8a1mnqva79jf011o?imageView2/2/w/1080/format/webp",
+    "https://ci.xiaohongshu.com/spectrum/1040g0k03179qo4uhgq005os8a1mnqva7arjfu90?imageView2/2/w/1080/format/webp",
+    "https://ci.xiaohongshu.com/spectrum/1040g0k03179qo4ti3k005os8a1mnqva79mpq1t8?imageView2/2/w/1080/format/webp"
+  ],
+  "publish_timestamp": "2024-09-03 23:52:52",
+  "channel_account_name": "xhs"
+}

+ 500 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_trace.md

@@ -0,0 +1,500 @@
+
+
+---
+
+## ▶ Fresh @ 2026-06-01 14:46:50
+
+- case: `A_xhs_66d730d4`
+- source: `C:\Users\11304\gitlab\cybertogether\Agent\examples\process_pipeline\script\search_eval\runs_full\q0010\procedures\A_xhs_66d730d4\_source.json`
+- spec: `spec`
+- images: `8`
+- model: `claude-sonnet-4-6`
+- max_turns: `300`
+
+_session=245832fc · model='claude-sonnet-4-6' · apiKeySource='none'_
+
+
+### Turn 1 · 14:47:01
+
+
+### Turn 2 · 14:47:02
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/README.md`
+
+
+### Turn 3 · 14:47:03
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools.md`
+
+
+### Turn 4 · 14:47:04
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_source.json`
+
+
+### Turn 5 · 14:47:10
+
+
+### Turn 6 · 14:47:10
+> Now let me load the Phase 1 spec files in parallel:
+
+
+
+### Turn 7 · 14:47:12
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/syntax.md`
+
+
+### Turn 8 · 14:47:13
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/extraction/fields.md`
+
+
+### Turn 9 · 14:47:13
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/extraction/control-flow.md`
+
+
+### Turn 10 · 14:47:14
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/extraction/phase1-skeleton.md`
+
+
+### Turn 11 · 14:47:14
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/format/md-structure.md`
+
+
+### Turn 12 · 14:47:18
+
+
+### Turn 13 · 14:47:19
+> Now let me read the workflow template and Phase 2 spec in parallel:
+
+
+
+### Turn 14 · 14:47:20
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/templates/workflow.template.json`
+
+
+### Turn 15 · 14:47:21
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/extraction/phase2-normalize.md`
+
+
+### Turn 16 · 14:50:02
+
+
+### Turn 17 · 14:50:02
+> Now I have all Phase 1 spec files. Let me write the understanding.md and then the workflow.json skeleton:
+
+
+
+### Turn 18 · 14:50:23
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/understanding.md` (2,620 chars)
+
+
+### Turn 19 · 14:53:24
+
+
+### Turn 20 · 14:53:24
+> Now let me write the Phase 1.2 workflow.json skeleton:
+
+
+
+### Turn 21 · 14:54:46
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/workflow.json` (16,470 chars)
+
+
+### Turn 22 · 14:55:04
+
+
+### Turn 23 · 14:55:04
+> Phase 1.3: Now let me create the anchor patch file and apply it:
+
+
+
+### Turn 24 · 14:55:14
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/anchors.json` (1,708 chars)
+
+
+### Turn 25 · 14:55:20
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "C:/Users/11304/gitlab/cybertogether/Agent/example...`
+
+
+### Turn 26 · 14:55:34
+
+
+### Turn 27 · 14:55:34
+> All 27 anchors applied. Now Phase 2 — let me check if prepare-subtask.py exists and run it:
+
+
+
+### Turn 28 · 14:55:35
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/prepare-subtask.py --workflow "C:/Users/11304/gitlab/cybertogether/Agent/...`
+
+
+### Turn 29 · 14:55:44
+
+
+### Turn 30 · 14:55:44
+> Now launching Phase 2A and 2B sub-agents in parallel:
+
+
+
+### Turn 31 · 14:56:01
+- `Agent` — `Phase 2A: effect/action/type normalization` [subagent=phase-2a-normalizer]
+
+
+### Turn 32 · 14:56:04
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/task_2a.json`
+
+
+### Turn 33 · 14:56:05
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/taxonomy/effect.json`
+
+
+### Turn 34 · 14:56:05
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/taxonomy/action.json`
+
+
+### Turn 35 · 14:56:06
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/taxonomy/type.json`
+
+
+### Turn 36 · 14:56:15
+- `Agent` — `Phase 2B: substance/form taxonomy matching` [subagent=phase-2b-matcher]
+
+
+### Turn 37 · 14:56:18
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/task_2b.json`
+
+
+### Turn 38 · 14:56:23
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "ComfyUI 自定义节点 扩展 插件 软件"`
+
+
+### Turn 39 · 14:56:24
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "ComfyUI 自定义节点 扩展 插件 软件"`
+
+
+### Turn 40 · 14:56:28
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "AI 图像生成 工具 软件 应用"`
+
+
+### Turn 41 · 14:56:29
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "节点 配置 参数 设置"`
+
+
+### Turn 42 · 14:56:32
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "ComfyUI 工作流 节点网络 图像生成"`
+
+
+### Turn 43 · 14:56:33
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "节点 配置 参数 设置 软件界面"`
+
+
+### Turn 44 · 14:56:36
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --narrow "ComfyUI 工作流 图像生成 AI"`
+
+
+### Turn 45 · 14:56:37
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "工作流 流程图 节点网络 配置文件"`
+
+
+### Turn 46 · 14:56:41
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --subtree "/理念/知识/商业/前沿技术/AI智能"`
+
+
+### Turn 47 · 14:56:42
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "参考图 照片 人物 女孩 骑自行车 户外"`
+
+
+### Turn 48 · 14:56:45
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --validate "/理念/知识/商业/前沿技术/AI智能/AI应用"`
+
+
+### Turn 49 · 14:56:46
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "照片 摄影 图像 参考 人物"`
+
+
+### Turn 50 · 14:56:50
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --validate "/理念/知识/商业/前沿技术/AI智能/AI应用" 2>&1 | ...`
+
+
+### Turn 51 · 14:56:54
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --validate "/理念/知识/商业/前沿技术/AI智能/AI应用"`
+
+
+### Turn 52 · 14:56:54
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "照片 摄影 图像 参考 人物"`
+
+
+### Turn 53 · 14:56:58
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "AI 智能 应用 工具" 2>&1`
+
+
+### Turn 54 · 14:57:02
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/patch_2a.json` (3,234 chars)
+
+
+### Turn 55 · 14:57:02
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --help 2>&1 | head -30`
+
+
+### Turn 56 · 14:57:05
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --list-l2 2>&1`
+
+
+### Turn 57 · 14:57:09
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --list-l2 2>&1`
+
+
+### Turn 58 · 14:57:13
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "AI 图像生成 软件 工具 应用" 2>&1 | head -15`
+
+
+### Turn 59 · 14:57:14
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "软件界面 截图 操作界面 界面" 2>&1 | head -20`
+
+
+### Turn 60 · 14:57:17
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "提示词 文本 标签 booru 正向提示词" 2>&1 | head -...`
+
+
+### Turn 61 · 14:57:18
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "提示词 文本 标签 文字" 2>&1 | head -15`
+
+
+### Turn 62 · 14:57:22
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "提示词 指令 AI生成 文本描述" 2>&1 | head -15`
+
+
+### Turn 63 · 14:57:23
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "AI生成图像 人工智能 生成 图片 图像" 2>&1 | head -1...`
+
+
+### Turn 64 · 14:57:26
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "AI生成 图像 艺术 生成式" 2>&1 | head -15`
+
+
+### Turn 65 · 14:57:27
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "AI生成图像 照片 摄影 人物" 2>&1 | head -15`
+
+
+### Turn 66 · 14:57:32
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "扩展 插件 程序 软件包 工具包" 2>&1 | head -15`
+
+
+### Turn 67 · 14:57:33
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "工作流 配置文件 程序 数据结构" 2>&1 | head -15`
+
+
+### Turn 68 · 14:57:36
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "软件 程序 工具 应用程序 插件" 2>&1 | head -15`
+
+
+### Turn 69 · 14:57:38
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "文字 纯文本 段落 列表" 2>&1 | head -15`
+
+
+### Turn 70 · 14:57:41
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "负向提示词 关键词 描述 画质控制" 2>&1 | head -15`
+
+
+### Turn 71 · 14:57:42
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "逗号分隔 关键词列表 标签序列" 2>&1 | head -15`
+
+
+### Turn 72 · 14:57:46
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "关键词 标签 纯文本 枚举" 2>&1 | head -15`
+
+
+### Turn 73 · 14:57:47
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "照片 女性 户外 骑车 城市" 2>&1 | head -15`
+
+
+### Turn 74 · 14:57:50
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "实景摄影 照片 摄影作品 人物户外" 2>&1 | head -15`
+
+
+### Turn 75 · 14:57:52
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "节点 工作流 AI 图像处理 流程" 2>&1 | head -15`
+
+
+### Turn 76 · 14:57:56
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "操作方法 步骤 教程 技术 操作流程" 2>&1 | head -15`
+
+
+### Turn 77 · 14:57:57
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "流程图 节点连线 操作步骤" 2>&1 | head -15`
+
+
+### Turn 78 · 14:58:01
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "AI 技术教程 软件 操作方法 学习" 2>&1 | head -15`
+
+
+### Turn 79 · 14:58:02
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "软件截图 界面操作 节点图 可视化" 2>&1 | head -15`
+
+
+### Turn 80 · 14:58:06
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "技术方法 操作技能 AI绘图 方法论" 2>&1 | head -15`
+
+
+### Turn 81 · 14:58:07
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "方法 技巧 知识 教学 操作" 2>&1 | head -15`
+
+
+### Turn 82 · 14:58:10
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "AI绘图 Stable Diffusion 图像生成 技术 工具使用" ...`
+
+
+### Turn 83 · 14:58:12
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "文字说明 纯文本 参数列表" 2>&1 | head -15`
+
+
+### Turn 84 · 14:58:16
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "标签 booru 正向 提示词 反推" 2>&1 | head -15`
+
+
+### Turn 85 · 14:58:17
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "功能属性 产品 软件特性 AI" 2>&1 | head -15`
+
+
+### Turn 86 · 14:58:21
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "图像识别 提取 标签 图片分析" 2>&1 | head -15`
+
+
+### Turn 87 · 14:58:22
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "截图 屏幕 软件界面 显示" 2>&1 | head -15`
+
+
+### Turn 88 · 14:58:34
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "AI 生成 机器学习 深度学习 模型" 2>&1 | head -10`
+
+
+### Turn 89 · 14:58:35
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "逐条列举 列表 排列 枚举" 2>&1 | head -10`
+
+
+### Turn 90 · 14:59:08
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/patch_2b.json` (4,184 chars)
+
+
+### Turn 91 · 14:59:28
+
+
+### Turn 92 · 14:59:29
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/patch_2a.json`
+
+
+### Turn 93 · 14:59:30
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/_scratch/patch_2b.json`
+
+
+### Turn 94 · 15:00:00
+
+
+### Turn 95 · 15:00:00
+> Now let me apply both patches sequentially:
+
+
+
+### Turn 96 · 15:00:02
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "C:/Users/11304/gitlab/cybertogether/Agent/example...`
+
+
+### Turn 97 · 15:00:07
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "C:/Users/11304/gitlab/cybertogether/Agent/example...`
+
+
+### Turn 98 · 15:00:13
+
+
+### Turn 99 · 15:00:13
+> Both patches applied cleanly. Now Phase 3 — load the Phase 3 spec files:
+
+
+
+### Turn 100 · 15:00:15
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/extraction/phase3-finalize.md`
+
+
+### Turn 101 · 15:00:15
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/format/procedure-table.md`
+
+
+### Turn 102 · 15:00:16
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/format/case-data.schema.json`
+
+
+### Turn 103 · 15:00:20
+
+
+### Turn 104 · 15:00:21
+> Now let me run lint and render in parallel. First lint:
+
+
+
+### Turn 105 · 15:00:24
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/lint-case.py --workflow "C:/Users/11304/gitlab/cybertogether/Agent/exampl...`
+
+
+### Turn 106 · 15:00:28
+
+
+### Turn 107 · 15:00:28
+> Lint clean. Now render the HTML:
+
+
+
+### Turn 108 · 15:00:32
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/render-case.py --workflow "C:/Users/11304/gitlab/cybertogether/Agent/exam...`
+
+
+### Turn 109 · 15:00:52
+
+
+### Turn 110 · 15:00:52
+> HTML rendered. Now writing the .md output file:
+
+
+
+### Turn 111 · 15:02:15
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/case-A_xhs_66d730d4-comfyui-prompt-reverse.md` (7,515 chars)
+
+
+### Turn 112 · 15:02:23
+
+
+### Turn 113 · 15:02:36
+> 全部流程完成!以下是总结:
+>
+> ---
+>
+> ## 工序梗概
+>
+> 本 case(小红书 @TIANRUIAN,ComfyUI 教程 #13)包含 **2 个独立工序**、**11 步骤**:
+>
+> - **P1 · 提示词反推工序**(6步):安装 WD14 Tagger 扩展 → 添加并配置节点(threshold=0.50, model=wd-v1-4-moat-tagger-v2)→ 添加 Load Image 节点 → 将正向 CLIP Text Encode 文本输入改为外部端口 → 连接节点接入基础文生图工作流 → 运行生成。从参考图反推 booru 标签作为正向提示词,省去手写提示词。
+> - **P2 · 自动负向提示词工序**(5步):安装 One Button Prompt 扩展 → 添加并配置 Auto Negative Prompt 节点(enhancenegative=1, SDXL)→ 改造负向 CLIP Text Encode → 连接接入工作流 → 运行验证(Show Text 可预览负向词)。自动生成 `low quality, watermark...` 等负向提示词,彻底省去手写。
+>
+> ---
+>
+> ## 输出文件路径
+>
+> | 产物 | 路径 |
+> |-----|------|
+> | 心智模型 | `…/A_xhs_66d730d4/understanding.md` |
+> | 工序数据 | `…/A_xhs_66d730d4/workflow.json`(11步,57 effect/action/type 归一,54 substance/form 标注) |
+> | 可视化 HTML | `…/A_xhs_66d730d4/case-A_xhs_66d730d4-comfyui-prompt-reverse.html`(99,708 chars)|
+> | DSL 文本版 | `…/A_xhs_66d730d4/case-A_xhs_66d730d4-comfyui-prompt-reverse.md` |
+>
+> ---
+>
+> ## DSL 关键发现
+>
+> 1. **"工艺规约"捕获节点配置前置工作**:ComfyUI 工序的前 4~5 步都是"安装→添加→配置→改造→连接"这类工作流建立活动,effect=`工艺规约` 与最后的 effect=`主体生成` 形成清晰区分。
+> 2. **type_registry 的边界暴露**:`扩展插件` extends `模型权重` 是一种妥协——ComfyUI 插件本质是代码包而非权重文件,暴露了 stdlib 缺少"软件扩展"这类叶子的空白。
+> 3. **推断补全的引用闭合价值**:"基础文生图工作流"作为前置隐含输入,只有补全为 `inferred` 输入后工序的 anchor 链才能完全闭合,清晰展示了前置依赖,印证了"工艺补全优于静默省略"原则。
+
+
+
+### ◀ Result · 15:02:36
+
+- subtype: `success` · is_error: `False`
+- num_turns: `28` · duration: `942830ms` · wall: `946.4s`
+- tokens: in=21 out=48,151 cache_w=158,198 cache_r=1,710,204
+- cost: sdk=$2.7544, est_if_api=$1.8286

Разница между файлами не показана из-за своего большого размера
+ 466 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/case-A_xhs_66d730d4-comfyui-prompt-reverse.html


+ 221 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/case-A_xhs_66d730d4-comfyui-prompt-reverse.md

@@ -0,0 +1,221 @@
+# Case A_xhs_66d730d4: ComfyUI 提示词反推与自动负向提示词
+
+**Source**: [@TIANRUIAN](https://www.xiaohongshu.com/explore/66d730d4000000001e01b36f) · 小红书 · 2024-09-03  
+**URL**: https://www.xiaohongshu.com/explore/66d730d4000000001e01b36f  
+**主题**: ComfyUI 系列教程 #13 — 提示词自动化书写 / 反推。介绍两个互补的提示词自动化技巧:① WD14 Tagger 从参考图反推 booru 标签作为正向提示词;② Auto Negative Prompt 节点自动生成负向提示词。
+
+---
+
+## 工序梗概 (人话)
+
+### P1 · 提示词反推工序
+
+从一张参考图出发,通过 WD14 Tagger 节点自动提取图像的 booru 标签,以标签作为正向提示词,接入基础文生图工作流,生成风格相近的新图像。整个过程分为:安装 WD14 Tagger 插件(Manager 或 Git 手动)→ 添加并配置节点(model=wd-v1-4-moat-tagger-v2, threshold=0.50)→ 添加 Load Image 节点 → 改造 CLIP Text Encode 的文本输入为外部端口 → 连接节点并接入基础工作流 → 运行生成。
+
+核心价值:不需要手写提示词,直接从参考图"反推"出可用的提示词,适合"看图想风格"的工作流。
+
+### P2 · 自动负向提示词工序
+
+利用 One Button Prompt 扩展中的 Auto Negative Prompt 节点,自动生成并填充负向提示词,省去手写负向词的重复劳动。过程为:安装 One Button Prompt 插件 → 添加并配置 Auto Negative Prompt 节点(enhancenegative=1, insanitylevel=5, base_model=SDXL)→ 改造负向 CLIP Text Encode 为外部输入端口 → 连接节点接入工作流 → 运行验证。
+
+核心价值:Auto Negative Prompt 输出的负向提示词(如 low quality, watermark, text 等通用词汇)直接注入工作流,彻底省去负向提示词的手动维护。
+
+两个工序可独立使用,也可叠加(图7 展示了同时开启 WD14 Tagger + Auto Negative Prompt 的完整工作流,仅需两者各自接入正/负向 CLIP Text Encode)。
+
+---
+
+## 引用的类型 (stdlib + 自定义)
+
+### stdlib 类型 (直接引用)
+
+| 类型 | 含义 | 本 case 用途 |
+|-----|-----|------------|
+| 参考图 | 用作参照输入的图像 | P1 的工序入参;被 WD14 Tagger 读取用于反推 |
+| 工作流 | 节点图/pipeline 编排 | ComfyUI 基础文生图工作流;最终反推工作流;自动负向提示词工作流 |
+| 提示词 | 用于图像生成的文本指令 | P2 正向提示词输入;反推得到的标签序列 |
+| 负向提示词 | 用于抑制不期望内容的文本 | Auto Negative Prompt 自动生成的负向约束词汇 |
+| 成品图 | 工序终点产出的可交付图像 | P1/P2 最终生成图 |
+| 模型文件 | 神经网络权重文件 | declarations.resources: WD14 Tagger 模型权重 |
+
+### case-specific 类型 (type_registry)
+
+| 类型名 | extends | desc |
+|-------|---------|------|
+| 扩展插件 | 模型权重 | 安装到 ComfyUI 运行环境的自定义节点扩展包,提供额外的节点类型供工作流调用,可被反复装载复用(如 ComfyUI-WD14-Tagger、One Button Prompt 等) |
+| 节点配置 | 工作流 | ComfyUI 工作流中已添加并配置完毕的单个节点实例,包含节点类型与所有参数设定,是工作流节点图的组成单元 |
+
+---
+
+## L1 外部函数库
+
+| L1 工具名 | 说明 | 本 case 绑定步骤 |
+|-----------|------|--------------|
+| `human` | 人工操作(手动安装、点击、上传文件等) | P1.s1 (安装 WD14 Tagger), P2.s1 (安装 One Button Prompt) |
+| `ComfyUI` | ComfyUI 节点式图像生成框架,负责节点添加/配置/连接/运行 | P1.s2~s6, P2.s2~s5 |
+
+---
+
+## L2 抽象动作 + impl 关系
+
+| 抽象动作 | 树路径 | impl via | 说明 |
+|---------|--------|---------|-----|
+| 下载获取 | 获取/搜索/下载 | `human` | 从 Manager 搜索安装或从 Git 手动下载扩展包 |
+| 添加节点 | 修改/增/添加 | `ComfyUI` | 双击画布添加节点到工作流 |
+| 转化端口 | 修改/变/转换 | `ComfyUI` | 将节点内联文本控件转化为可外部连接的 STRING 端口 |
+| 连接接入 | 修改/增/添加 | `ComfyUI` | 节点间连线并接入已有工作流 |
+| 图像生成 | 生成/元素生成 | `ComfyUI` | 运行文生图工作流,产出成品图 |
+
+---
+
+## L3 工序模板
+
+### 模板 A:提示词反推工序 (对应 P1)
+
+```
+工序 提示词反推工序(参考图: 参考图) → 成品图:
+  资源: WD14 Tagger 模型 (模型文件)
+
+  s1: human.下载获取
+    输出 → WD14 Tagger 扩展 (扩展插件)
+    指令: Manager 搜索 WD / Git 手动下载放入 custom_nodes
+
+  s2: ComfyUI.添加节点
+    输入 ← s1.WD14 Tagger 扩展
+    配置: model=wd-v1-4-moat-tagger-v2, threshold=0.50, character_threshold=0.85
+    输出 → WD14 Tagger 节点 (节点配置)
+
+  s3: ComfyUI.添加节点
+    输出 → Load Image 节点 (节点配置)
+
+  s4: ComfyUI.转化端口
+    输入 ← 工序输入:正向 CLIP Text Encode 节点 [推断]
+    输出 → 可接收外部输入的正向 CLIP Text Encode 节点 (节点配置)
+    指令: 右键 → Convert Widget to Input → Convert text to input
+
+  s5: ComfyUI.连接接入
+    输入 ← s3, s2, s4, 工序输入:基础文生图工作流 [推断]
+    输出 → 提示词反推工作流 (工作流)
+    备注: 迷你反推节点 = Load Image + WD14 Tagger + CLIP Text Encode
+
+  s6: ComfyUI.图像生成
+    输入 ← 工序输入:参考图 + s5.提示词反推工作流
+    输出 → 成品图
+  返回 成品图
+```
+
+### 模板 B:自动负向提示词工序 (对应 P2)
+
+```
+工序 自动负向提示词工序(正向提示词: 提示词) → 成品图:
+  资源: One Button Prompt 扩展 (扩展插件)
+
+  s1: human.下载获取
+    输出 → One Button Prompt 扩展 (扩展插件)
+    指令: Manager 搜索 one button 安装 #142
+
+  s2: ComfyUI.添加节点
+    输入 ← s1.One Button Prompt 扩展
+    配置: enhancenegative=1, insanitylevel=5, base_model=SDXL, seed=0, control_after_generate=randomize
+    输出 → Auto Negative Prompt 节点 (节点配置)
+
+  s3: ComfyUI.转化端口
+    输入 ← 工序输入:负向 CLIP Text Encode 节点 [推断]
+    输出 → 可接收外部输入的负向 CLIP Text Encode 节点 (节点配置)
+
+  s4: ComfyUI.连接接入
+    输入 ← s2, s3, 工序输入:基础文生图工作流 [推断]
+    输出 → 自动负向提示词工作流 (工作流)
+    备注: Auto Negative Prompt 的 positive_prompt 可接 WD14 Tagger 输出保持提示词一致
+
+  s5: ComfyUI.图像生成
+    输入 ← 工序输入:正向提示词 + s4.自动负向提示词工作流
+    输出 → 成品图 (成品图) + 负向提示词文本 (负向提示词)
+  返回 成品图
+```
+
+---
+
+## L4 工序实例
+
+### P1 实例 — 提示词反推(janko-ferlic 骑车参考图)
+
+#### inputs (本次实际值)
+
+| 变量名 | 值 |
+|-------|---|
+| 参考图 | `<图:janko-ferlic 拍摄的骑自行车金发女孩,户外,NYC 字样上衣,中景>` |
+
+#### bindings (本次工具选择)
+
+| step | via |
+|------|-----|
+| s1 | `human` |
+| s2 | `ComfyUI` |
+| s3 | `ComfyUI` |
+| s4 | `ComfyUI` |
+| s5 | `ComfyUI` |
+| s6 | `ComfyUI` |
+
+#### extracted_values (本次中间产物)
+
+| step | 变量名 | 值 |
+|------|-------|---|
+| s1.out | WD14 Tagger 扩展 | `ComfyUI-WD14-Tagger(by pythongosssss),支持从图像提取 booru 标签的 ComfyUI 自定义节点扩展,约 564 Stars` |
+| s2.out | WD14 Tagger 节点 | `配置完毕的 WD14 Tagger 节点:model=wd-v1-4-moat-tagger-v2, threshold=0.50, character_threshold=0.85, replace_underscore=true, trailing_comma=false` |
+| s3.out | Load Image 节点 | `空的 Load Image 节点(Comfy Core),等待用户上传参考图` |
+| s4.out | 可接收外部输入的正向 CLIP Text Encode 节点 | `正向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收来自 WD14 Tagger 的字符串输出` |
+| s5.out | 提示词反推工作流 | `Load Image → WD14 Tagger → CLIP Text Encode(正) → KSampler → VAE Decode → Preview Image,配合 Load Checkpoint 和 Empty Latent Image 的完整提示词反推图像生成工作流` |
+| s6.out | 生成图 | `<图:基于 WD14 Tagger 反推提示词生成的新图像,金发女孩骑自行车户外场景,风格相近于参考图>` |
+
+#### trace
+
+_(本 case 为教程演示,无详细 timing/cost 记录)_
+
+---
+
+### P2 实例 — 自动负向提示词(Auto Negative Prompt 配置演示)
+
+#### inputs (本次实际值)
+
+| 变量名 | 值 |
+|-------|---|
+| 正向提示词 | `<由 WD14 Tagger 反推或手动输入的正向提示词文本>` |
+
+#### bindings (本次工具选择)
+
+| step | via |
+|------|-----|
+| s1 | `human` |
+| s2 | `ComfyUI` |
+| s3 | `ComfyUI` |
+| s4 | `ComfyUI` |
+| s5 | `ComfyUI` |
+
+#### extracted_values (本次中间产物)
+
+| step | 变量名 | 值 |
+|------|-------|---|
+| s1.out | One Button Prompt 扩展 | `One Button Prompt(by Arjen,813 Stars),提供 Auto Negative Prompt 等自动提示词节点的 ComfyUI 扩展包` |
+| s2.out | Auto Negative Prompt 节点 | `配置完毕的 Auto Negative Prompt 节点:enhancenegative=1, insanitylevel=5, base_model=SDXL, seed=0, control_after_generate=randomize,negative_prompt 输出端口可连接负向 CLIP Text Encode` |
+| s3.out | 可接收外部输入的负向 CLIP Text Encode 节点 | `负向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收 Auto Negative Prompt 节点的输出` |
+| s4.out | 自动负向提示词工作流 | `包含 Auto Negative Prompt → CLIP Text Encode(负) 链路的完整工作流(可配合 WD14 Tagger 同时使用);Show Text 节点可预览生成的负向提示词` |
+| s5.out[0] | 生成图 | `<图:使用反推正向提示词 + Auto Negative Prompt 自动负向提示词生成的图像,示例为金发女孩骑自行车>` |
+| s5.out[1] | 负向提示词文本 | `low quality, low details, overexposed, bw, bad photo, bad photography, watermark, text font, username, error, logo, trademark, name, ugly, bad shadow, cropped, out of frame, text, watermark` |
+
+#### trace
+
+_(本 case 为教程演示,无详细 timing/cost 记录)_
+
+---
+
+## 这个 case 对 DSL 设计的关键启发
+
+1. **"工作流配置"是一类独特工序**:ComfyUI 这类节点编辑器的操作范式与传统 AIGC 工序(直接生成)不同——前 5 步都是"安装→添加→配置→改造→连接"等工艺规约性质的 pipeline 建立,最后 1 步才是真正的主体生成。DSL 的 effect 分类中"工艺规约"准确捕获了这种前置建设性工作,与"主体生成"形成清晰区分。
+
+2. **节点配置的类型系统边界**:ComfyUI "节点实例"(节点配置)是工作流(节点图)的组成单元,因此 type_registry 中 `节点配置` extends `工作流` 是合理的。但 `扩展插件` extends `模型权重` 值得商榷——插件是代码包(增加节点类型),而模型权重是数据文件(影响推理输出),两者性质有差异;这暴露了 stdlib 在"软件资产"维度的覆盖缺口,可能需要专门的叶子如 `软件扩展` 来桥接。
+
+3. **多 procedure 的叠加关系**:P1 和 P2 虽是独立工序,但在实际使用中可以叠加(P1 的 WD14 Tagger 输出可同时接 P2 的 Auto Negative Prompt positive_prompt 输入)。这种"工序叠加/组合"关系在当前 DSL 中只能通过 memo 字段的文字说明体现,缺乏正式的 compose/pipeline 声明机制。
+
+4. **推断补全的必要性**:"基础文生图工作流"作为 P1.s5 和 P2.s4 的隐含输入,在原文中从未被明确声明为输入(教程假设读者已有基础工作流),但在 DSL 中补全为 inferred 输入后,工序的引用闭合才能成立,也让读者更清楚地看到前置依赖。这印证了"工艺补全优于静默省略"的设计原则。
+
+5. **"Convert text to input" 操作的 DSL 建模**:将 ComfyUI 节点内联控件转化为外部输入端口这一步(s4/s3)本质上是改变节点接口的元操作。DSL 用 `action: 修改/变/转换 + effect: 工艺规约` 准确捕获了这种"接口形态切换",但 value 字段描述的是改造后节点的形态,有一定的"状态描述"而非"数据内容"性质——提示 DSL 在描述工具/环境状态变化时可能需要专用字段。

+ 94 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/understanding.md

@@ -0,0 +1,94 @@
+# Phase 1.1 心智模型 — Case A_xhs_66d730d4
+
+## 原文概述
+
+- **平台**: 小红书 (xiaohongshu)
+- **标题**: ComfyUI|提示词自动化书写 / 反推
+- **作者**: @TIANRUIAN
+- **发布时间**: 2024-09-03
+- **URL**: https://www.xiaohongshu.com/explore/66d730d4000000001e01b36f
+
+ComfyUI 系列教程 #13,介绍两个提示词自动化技巧:
+1. **提示词反推 (Prompt Reverse Engineering)**:用 WD14 Tagger 节点从参考图提取 booru 标签作为正向提示词
+2. **自动填写反向提示词 (Auto Negative Prompt)**:用 One Button Prompt 扩展中的 Auto Negative Prompt 节点自动生成负向提示词
+
+---
+
+## 工序数量判断:2 个独立工序
+
+依据"判断标准":每个功能拥有独立的输入→终态产出链条,且方法论/工具均不同,因此拆为两个工序。
+
+### P1 · 提示词反推工序
+
+| 项 | 内容 |
+|---|---|
+| 终态产物 | 基于参考图反推提示词后生成的新图像 |
+| 输入 | 参考图(任意需要反推提示词的原始图像) |
+| 核心工具 | WD14 Tagger 节点(ComfyUI-WD14-Tagger,by pythongosssss) |
+| 方法特征 | 参考图 → WD14 Tagger 提取 booru 标签 → 正向 CLIP Text Encode → KSampler → 生成图 |
+| 大致步骤数 | 6 步 |
+
+### P2 · 自动负向提示词工序
+
+| 项 | 内容 |
+|---|---|
+| 终态产物 | 带自动生成负向提示词的生成图像(兼副产物:可查看的负向提示词文本) |
+| 输入 | 正向提示词(来自用户输入或 P1 的反推结果) |
+| 核心工具 | Auto Negative Prompt 节点(One Button Prompt 扩展,by Arjen) |
+| 方法特征 | Auto Negative Prompt 节点自动填充负向提示词,无需手写 |
+| 大致步骤数 | 5 步 |
+
+---
+
+## 关键工艺特征与隐含约束
+
+- **软件环境**: ComfyUI(节点式 AI 图像生成框架)
+- **工艺类型**: ComfyUI 工作流节点配置 + 图像生成
+- **外部插件依赖**:
+  - P1: ComfyUI-WD14-Tagger(pythongosssss)
+  - P2: One Button Prompt(Arjen)
+- **底模隐含要求**: P2 Auto Negative Prompt 参数 base_model=SDXL,需有 SDXL 底模
+- **前置条件(inferred)**:
+  - P1: 已有基础文生图工作流(Load Checkpoint + CLIP Text Encode + Empty Latent Image + KSampler + VAE Decode + Preview Image)
+  - P2: 工作流中已有负向 CLIP Text Encode 节点可接入
+  - 两工序可叠加(图7 演示同时使用 WD14 Tagger + Auto Negative Prompt)
+
+### WD14 Tagger 参数(P1)
+
+| 参数 | 值 | 说明 |
+|---|---|---|
+| model | wd-v1-4-moat-tagger-v2 | 最新推荐模型;本地无则去 Git 下载放入 custom_nodes/WD14Tagger-models |
+| threshold | 0.50 | 越高反推标签越少 |
+| character_threshold | 0.85 | 角色特征识别阈值 |
+| replace_underscore | true | 下划线替换为空格 |
+| trailing_comma | false | 末尾不加逗号 |
+| exclude_tags | (空) | 不排除任何标签 |
+
+### Auto Negative Prompt 参数(P2)
+
+| 参数 | 值 | 说明 |
+|---|---|---|
+| enhancenegative | 1 | 0=不开启,1=开启增强负向 |
+| insanitylevel | 5 | 越低关键词越多 |
+| base_model | SDXL | 底模类型决定负向提示词风格 |
+| seed | 0 | 初始种子 |
+| control_after_generate | randomize | 每次生成后随机化种子 |
+
+---
+
+## 步骤结构预览
+
+### P1(6 步)
+1. s1: 安装 WD14 Tagger 扩展(Manager 搜索或 Git 手动下载)
+2. s2: 在 ComfyUI 画布添加并配置 WD14 Tagger 节点
+3. s3: 添加 Load Image 节点并上传参考图
+4. s4: 将正向 CLIP Text Encode 文本输入转化为可外部输入(Convert text to input)
+5. s5: 连接节点 Load Image → WD14 Tagger → CLIP Text Encode 并接入基础文生图工作流
+6. s6: 运行工作流,从参考图反推提示词生成图像
+
+### P2(5 步)
+1. s1: 安装 One Button Prompt 扩展(Manager 搜索)
+2. s2: 添加并配置 Auto Negative Prompt 节点
+3. s3: 将负向 CLIP Text Encode 文本输入转化为外部输入
+4. s4: 连接 Auto Negative Prompt → 负向 CLIP Text Encode → 工作流
+5. s5: 运行工作流,通过 Show Text 节点查看负向提示词并查看生成结果

+ 638 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/A_xhs_66d730d4/workflow.json

@@ -0,0 +1,638 @@
+{
+  "source": {
+    "platform": "xiaohongshu",
+    "author": "@TIANRUIAN",
+    "date": "2024-09-03",
+    "url": "https://www.xiaohongshu.com/explore/66d730d4000000001e01b36f",
+    "title": "ComfyUI|提示词自动化书写 / 反推",
+    "excerpt": "ComfyUI 系列教程 #13,介绍提示词反推(WD14 Tagger)和自动负向提示词(Auto Negative Prompt)两种提示词自动化技巧。"
+  },
+  "procedures": [
+    {
+      "id": "p1",
+      "name": "提示词反推工序",
+      "purpose": "从参考图反推 booru 标签提示词,并生成类似风格的新图像",
+      "category": "产物创造",
+      "platform": "xiaohongshu",
+      "author": "@TIANRUIAN",
+      "declarations": {
+        "inputs": [
+          {
+            "type": "参考图",
+            "name": "参考图",
+            "desc": "用于反推提示词的原始图像"
+          }
+        ],
+        "resources": [
+          {
+            "type": "模型文件",
+            "name": "WD14 Tagger 模型",
+            "desc": "wd-v1-4-moat-tagger-v2 等反推模型,存放于 custom_nodes/ComfyUI-WD14-Tagger/models"
+          }
+        ],
+        "returns": {
+          "type": "生成图"
+        }
+      },
+      "type_registry": {
+        "扩展插件": {
+          "extends": "模型权重",
+          "desc": "安装到 ComfyUI 运行环境的自定义节点扩展包,提供额外的节点类型供工作流调用,可被反复装载复用(如 ComfyUI-WD14-Tagger、One Button Prompt 等)"
+        },
+        "节点配置": {
+          "extends": "工作流",
+          "desc": "ComfyUI 工作流中已添加并配置完毕的单个节点实例,包含节点类型与所有参数设定,是工作流节点图的组成单元"
+        }
+      },
+      "steps": [
+        {
+          "id": "s1",
+          "kind": "step",
+          "via": "human",
+          "action": "获取/搜索/下载",
+          "feature": "人工",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "方法一:在 ComfyUI Manager 中搜索 WD,找到 ComfyUI WD 1.4 Tagger(#63,by pythongosssss)点击安装。方法二:前往 Github 仓库 https://github.com/pythongosssss/ComfyUI-WD14-Tagger 手动下载 ZIP,放入 ComfyUI/custom_nodes 文件夹后重启 ComfyUI"
+            ],
+            [
+              "memo",
+              "常用插件整合包通常已自带;若无则手动安装;扩展允许从图像查询 booru 标签"
+            ]
+          ],
+          "inputs": [],
+          "outputs": [
+            {
+              "type": "扩展插件",
+              "name": "WD14 Tagger 扩展",
+              "value": "ComfyUI-WD14-Tagger(by pythongosssss),支持从图像提取 booru 标签的 ComfyUI 自定义节点扩展,约 564 Stars",
+              "anchor": "→ s2",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            }
+          ],
+          "intent": "安装 {via:human} WD14 Tagger 扩展,为画布添加提示词反推能力",
+          "focus": [
+            "via",
+            "action",
+            "out-type-0"
+          ],
+          "effect": "工艺规约"
+        },
+        {
+          "id": "s2",
+          "kind": "step",
+          "via": "ComfyUI",
+          "action": "修改/增/添加",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "双击画布空白处,搜索 'wd',选择 WD 14 Tagger 节点"
+            ],
+            [
+              "config",
+              "model=wd-v1-4-moat-tagger-v2, threshold=0.50, character_threshold=0.85, replace_underscore=true, trailing_comma=false"
+            ],
+            [
+              "memo",
+              "model 选最新的 MOAT 模型;threshold 越高反推标签越少;本地无模型时去 Git 下载放入 custom nodes - WD14Tagger-models 文件夹"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "扩展插件",
+              "name": "WD14 Tagger 扩展",
+              "value": "ComfyUI-WD14-Tagger(by pythongosssss),支持从图像提取 booru 标签的 ComfyUI 自定义节点扩展,约 564 Stars",
+              "anchor": "← s1.WD14 Tagger 扩展",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            }
+          ],
+          "outputs": [
+            {
+              "type": "节点配置",
+              "name": "WD14 Tagger 节点",
+              "value": "配置完毕的 WD14 Tagger 节点:model=wd-v1-4-moat-tagger-v2, threshold=0.50, character_threshold=0.85, replace_underscore=true, trailing_comma=false",
+              "anchor": "→ s5",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            }
+          ],
+          "intent": "在 {via:ComfyUI} 画布上添加 WD14 Tagger 节点并设置反推参数",
+          "focus": [
+            "via",
+            "action",
+            "out-type-0"
+          ],
+          "effect": "工艺规约"
+        },
+        {
+          "id": "s3",
+          "kind": "step",
+          "via": "ComfyUI",
+          "action": "修改/增/添加",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "双击画布空白处,搜索 'load image',选择 Load Image 节点(Comfy Core)"
+            ]
+          ],
+          "inputs": [],
+          "outputs": [
+            {
+              "type": "节点配置",
+              "name": "Load Image 节点",
+              "value": "空的 Load Image 节点(Comfy Core),等待用户上传参考图",
+              "anchor": "→ s5",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            }
+          ],
+          "intent": "在 {via:ComfyUI} 画布添加 Load Image 节点以接收参考图输入",
+          "focus": [
+            "via",
+            "action",
+            "out-type-0"
+          ],
+          "effect": "工艺规约"
+        },
+        {
+          "id": "s4",
+          "kind": "step",
+          "via": "ComfyUI",
+          "action": "修改/变/转换",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "右键点击已有的正向 CLIP Text Encode (Prompt) 节点,选择 Convert Widget to Input → Convert text to input,将 text 参数从内联控件改为可外部连接的输入端口"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "节点配置",
+              "name": "正向 CLIP Text Encode 节点",
+              "value": "<基础文生图工作流中正向 CLIP Text Encode (Prompt) 节点,text 输入当前为内联文本控件>",
+              "anchor": "← 工序输入",
+              "inferred": true,
+              "inferred_reason": "基础文生图工作流前提包含此节点,是本步操作目标;原文图4 明确展示了对该节点执行 Convert text to input 操作",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            }
+          ],
+          "outputs": [
+            {
+              "type": "节点配置",
+              "name": "可接收外部输入的正向 CLIP Text Encode 节点",
+              "value": "正向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收来自 WD14 Tagger 的字符串输出",
+              "anchor": "→ s5",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            }
+          ],
+          "intent": "将正向 {in-type:节点配置} 的 text 改为外部端口以接收 WD14 Tagger 的 STRING 输出",
+          "focus": [
+            "via",
+            "action",
+            "in-type-0",
+            "out-type-0"
+          ],
+          "effect": "工艺规约"
+        },
+        {
+          "id": "s5",
+          "kind": "step",
+          "via": "ComfyUI",
+          "action": "修改/增/添加",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "将 Load Image 的 IMAGE 输出连接到 WD14 Tagger 的 image 输入;将 WD14 Tagger 的 STRING 输出连接到正向 CLIP Text Encode 的 text 输入;将这段迷你反推节点链接入现有基础文生图工作流(Load Checkpoint → KSampler → VAE Decode → Preview Image)的正向 conditioning 链路"
+            ],
+            [
+              "memo",
+              "迷你反推节点 = Load Image + WD14 Tagger + CLIP Text Encode,3 个节点相连即构成完整反推提示词模块"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "节点配置",
+              "name": "Load Image 节点",
+              "value": "空的 Load Image 节点(Comfy Core),等待用户上传参考图",
+              "anchor": "← s3.Load Image 节点",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            },
+            {
+              "type": "节点配置",
+              "name": "WD14 Tagger 节点",
+              "value": "配置完毕的 WD14 Tagger 节点:model=wd-v1-4-moat-tagger-v2, threshold=0.50, character_threshold=0.85, replace_underscore=true, trailing_comma=false",
+              "anchor": "← s2.WD14 Tagger 节点",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            },
+            {
+              "type": "节点配置",
+              "name": "可接收外部输入的正向 CLIP Text Encode 节点",
+              "value": "正向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收来自 WD14 Tagger 的字符串输出",
+              "anchor": "← s4.可接收外部输入的正向 CLIP Text Encode 节点",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            },
+            {
+              "type": "工作流",
+              "name": "基础文生图工作流",
+              "value": "<基础文生图工作流:Load Checkpoint + CLIP Text Encode(正) + CLIP Text Encode(负) + Empty Latent Image + KSampler + VAE Decode + Preview Image>",
+              "anchor": "← 工序输入",
+              "inferred": true,
+              "inferred_reason": "接入工作流是本步前提,原文图5 展示了将反推节点接入 Load Checkpoint、KSampler 等基础节点的完整工作流",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"
+            }
+          ],
+          "outputs": [
+            {
+              "type": "工作流",
+              "name": "提示词反推工作流",
+              "value": "Load Image → WD14 Tagger → CLIP Text Encode(正) → KSampler → VAE Decode → Preview Image,配合 Load Checkpoint 和 Empty Latent Image 的完整提示词反推图像生成工作流",
+              "anchor": "→ s6",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"
+            }
+          ],
+          "intent": "连接 Load Image → WD14 Tagger → CLIP Text Encode,将反推链路接入基础文生图 {out-type:ComfyUI工作流}",
+          "focus": [
+            "via",
+            "action",
+            "out-type-0"
+          ],
+          "effect": "工艺规约"
+        },
+        {
+          "id": "s6",
+          "kind": "step",
+          "via": "ComfyUI",
+          "action": "生成/元素生成",
+          "feature": "随机",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "在 Load Image 节点上传参考图,点击 Queue Prompt 运行工作流"
+            ],
+            [
+              "memo",
+              "WD14 Tagger 反推出的提示词将自动填入正向 CLIP Text Encode,生成与参考图风格相近的新图像"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "参考图",
+              "name": "参考图",
+              "value": "<图:janko-ferlic 拍摄的骑自行车金发女孩,户外,NYC 字样上衣,中景>",
+              "anchor": "← 工序输入",
+              "substance": "/表象/视觉/实体/物品/影像物品/生活影像",
+              "form": "/呈现/视觉/视觉制作/实景拍摄"
+            },
+            {
+              "type": "工作流",
+              "name": "提示词反推工作流",
+              "value": "Load Image → WD14 Tagger → CLIP Text Encode(正) → KSampler → VAE Decode → Preview Image,配合 Load Checkpoint 和 Empty Latent Image 的完整提示词反推图像生成工作流",
+              "anchor": "← s5.提示词反推工作流",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"
+            }
+          ],
+          "outputs": [
+            {
+              "type": "成品图",
+              "name": "生成图",
+              "value": "<图:基于 WD14 Tagger 反推提示词生成的新图像,金发女孩骑自行车户外场景,风格相近于参考图>",
+              "anchor": "→ 返回 生成图",
+              "substance": "/表象/视觉/实体/物品/影像物品/艺术创作",
+              "form": "/呈现/视觉/视觉制作/构图编排/空间布局/景别角度"
+            }
+          ],
+          "intent": "运行 {via:ComfyUI} {action:文生图},从 {in-type:参考图} 反推提示词生成 {out-type:生成图}",
+          "focus": [
+            "via",
+            "action",
+            "in-type-0",
+            "out-type-0"
+          ],
+          "effect": "主体生成"
+        }
+      ],
+      "return_row": {
+        "arrow": "↩",
+        "text": "<span class=\"kw\">返回</span> <span class=\"chip\" data-type=\"生成图\">生成图</span>"
+      }
+    },
+    {
+      "id": "p2",
+      "name": "自动负向提示词工序",
+      "purpose": "通过 Auto Negative Prompt 节点自动生成并填充负向提示词,省去手写负向提示词的工作",
+      "category": "自动化",
+      "platform": "xiaohongshu",
+      "author": "@TIANRUIAN",
+      "declarations": {
+        "inputs": [
+          {
+            "type": "提示词",
+            "name": "正向提示词",
+            "desc": "用于图像生成的正向描述提示词(可来自 P1 反推结果或手动输入)"
+          }
+        ],
+        "resources": [
+          {
+            "type": "扩展插件",
+            "name": "One Button Prompt 扩展",
+            "desc": "提供 Auto Negative Prompt 等节点的 ComfyUI 扩展包,by Arjen"
+          }
+        ],
+        "returns": {
+          "type": "生成图"
+        }
+      },
+      "type_registry": {
+        "扩展插件": {
+          "extends": "模型权重",
+          "desc": "安装到 ComfyUI 运行环境的自定义节点扩展包,提供额外的节点类型供工作流调用,可被反复装载复用(如 ComfyUI-WD14-Tagger、One Button Prompt 等)"
+        },
+        "节点配置": {
+          "extends": "工作流",
+          "desc": "ComfyUI 工作流中已添加并配置完毕的单个节点实例,包含节点类型与所有参数设定,是工作流节点图的组成单元"
+        }
+      },
+      "steps": [
+        {
+          "id": "s1",
+          "kind": "step",
+          "via": "human",
+          "action": "获取/搜索/下载",
+          "feature": "人工",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "使用 ComfyUI Manager,搜索 'one button',找到 One Button Prompt(#142,by Arjen,813⭐),点击 Install 安装"
+            ],
+            [
+              "memo",
+              "One Button Prompt 是初学者友好的提示词生成节点包,除 Auto Negative Prompt 外还包含其他实用节点"
+            ]
+          ],
+          "inputs": [],
+          "outputs": [
+            {
+              "type": "扩展插件",
+              "name": "One Button Prompt 扩展",
+              "value": "One Button Prompt(by Arjen,813 Stars),提供 Auto Negative Prompt 等自动提示词节点的 ComfyUI 扩展包",
+              "anchor": "→ s2",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            }
+          ],
+          "intent": "安装 One Button Prompt 扩展插件,获取 {out-type:扩展插件} Auto Negative Prompt 节点能力",
+          "focus": [
+            "via",
+            "action",
+            "out-type-0"
+          ],
+          "effect": "工艺规约"
+        },
+        {
+          "id": "s2",
+          "kind": "step",
+          "via": "ComfyUI",
+          "action": "修改/增/添加",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "双击画布空白处,搜索 'auto',选择 Auto Negative Prompt(来自 OneButtonPrompt)"
+            ],
+            [
+              "config",
+              "enhancenegative=1, insanitylevel=5, base_model=SDXL, seed=0, control_after_generate=randomize"
+            ],
+            [
+              "memo",
+              "enhancenegative: 0=不开启,1=开启增强负向;insanitylevel 越低关键词越多;base_model 根据所用底模选择"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "扩展插件",
+              "name": "One Button Prompt 扩展",
+              "value": "One Button Prompt(by Arjen,813 Stars),提供 Auto Negative Prompt 等自动提示词节点的 ComfyUI 扩展包",
+              "anchor": "← s1.One Button Prompt 扩展",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            }
+          ],
+          "outputs": [
+            {
+              "type": "节点配置",
+              "name": "Auto Negative Prompt 节点",
+              "value": "配置完毕的 Auto Negative Prompt 节点:enhancenegative=1, insanitylevel=5, base_model=SDXL, seed=0, control_after_generate=randomize,negative_prompt 输出端口可连接负向 CLIP Text Encode",
+              "anchor": "→ s4",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            }
+          ],
+          "intent": "在 {via:ComfyUI} 添加 Auto Negative Prompt 节点并配置负向提示词生成参数",
+          "focus": [
+            "via",
+            "action",
+            "out-type-0"
+          ],
+          "effect": "工艺规约"
+        },
+        {
+          "id": "s3",
+          "kind": "step",
+          "via": "ComfyUI",
+          "action": "修改/变/转换",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "右键点击负向 CLIP Text Encode (Prompt) 节点,选择 Convert Widget to Input → Convert text to input,将 text 参数改为可外部连接的输入端口"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "节点配置",
+              "name": "负向 CLIP Text Encode 节点",
+              "value": "<基础文生图工作流中负向 CLIP Text Encode (Prompt) 节点,text 输入当前为内联文本控件>",
+              "anchor": "← 工序输入",
+              "inferred": true,
+              "inferred_reason": "基础文生图工作流必然包含此节点,是本步改造目标;原文图7 演示了对该节点的 Convert text to input 操作",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            }
+          ],
+          "outputs": [
+            {
+              "type": "节点配置",
+              "name": "可接收外部输入的负向 CLIP Text Encode 节点",
+              "value": "负向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收 Auto Negative Prompt 节点的输出",
+              "anchor": "→ s4",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            }
+          ],
+          "intent": "将负向 {in-type:节点配置} 的 text 改为外部端口以接收 Auto Negative Prompt 的输出",
+          "focus": [
+            "via",
+            "action",
+            "in-type-0",
+            "out-type-0"
+          ],
+          "effect": "工艺规约"
+        },
+        {
+          "id": "s4",
+          "kind": "step",
+          "via": "ComfyUI",
+          "action": "修改/增/添加",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "将 Auto Negative Prompt 的 negative_prompt 输出连接到负向 CLIP Text Encode 的 text 输入;可添加 Show Text 节点连接 Auto Negative Prompt 输出以查看生成的负向提示词文本"
+            ],
+            [
+              "memo",
+              "若同时使用 WD14 Tagger(P1),WD14 Tagger 的 STRING 输出连接正向 CLIP Text Encode,Auto Negative Prompt 的 positive_prompt 输入也可接入 WD14 Tagger 输出保持提示词一致"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "节点配置",
+              "name": "Auto Negative Prompt 节点",
+              "value": "配置完毕的 Auto Negative Prompt 节点:enhancenegative=1, insanitylevel=5, base_model=SDXL, seed=0, control_after_generate=randomize,negative_prompt 输出端口可连接负向 CLIP Text Encode",
+              "anchor": "← s2.Auto Negative Prompt 节点",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            },
+            {
+              "type": "节点配置",
+              "name": "可接收外部输入的负向 CLIP Text Encode 节点",
+              "value": "负向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收 Auto Negative Prompt 节点的输出",
+              "anchor": "← s3.可接收外部输入的负向 CLIP Text Encode 节点",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+            },
+            {
+              "type": "工作流",
+              "name": "基础文生图工作流",
+              "value": "<基础文生图工作流:Load Checkpoint + CLIP Text Encode(正) + CLIP Text Encode(负) + Empty Latent Image + KSampler + VAE Decode + Preview Image>",
+              "anchor": "← 工序输入",
+              "inferred": true,
+              "inferred_reason": "接入工作流是本步前提,原文图7 展示了完整工作流接入状态",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"
+            }
+          ],
+          "outputs": [
+            {
+              "type": "工作流",
+              "name": "自动负向提示词工作流",
+              "value": "包含 Auto Negative Prompt → CLIP Text Encode(负) 链路的完整工作流(可配合 WD14 Tagger 同时使用);Show Text 节点可预览生成的负向提示词",
+              "anchor": "→ s5",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"
+            }
+          ],
+          "intent": "将 Auto Negative Prompt 接入负向提示词链路,完成 {out-type:ComfyUI工作流} 搭建",
+          "focus": [
+            "via",
+            "action",
+            "out-type-0"
+          ],
+          "effect": "工艺规约"
+        },
+        {
+          "id": "s5",
+          "kind": "step",
+          "via": "ComfyUI",
+          "action": "生成/元素生成",
+          "feature": "随机",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "点击 Queue Prompt 运行工作流;查看 Show Text 节点显示的自动生成负向提示词,以及 Preview Image 节点的最终生成图像"
+            ],
+            [
+              "memo",
+              "自动生成的负向提示词示例(来自图1 Show Text 节点):low quality, low details, overexposed, bw, bad photo, bad photography, watermark, text font, username, error, logo, trademark, name, ugly, bad shadow, cropped, out of frame, text, watermark"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "提示词",
+              "name": "正向提示词",
+              "value": "<由 WD14 Tagger 反推或手动输入的正向提示词文本>",
+              "anchor": "← 工序输入",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举"
+            },
+            {
+              "type": "工作流",
+              "name": "自动负向提示词工作流",
+              "value": "包含 Auto Negative Prompt → CLIP Text Encode(负) 链路的完整工作流(可配合 WD14 Tagger 同时使用);Show Text 节点可预览生成的负向提示词",
+              "anchor": "← s4.自动负向提示词工作流",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"
+            }
+          ],
+          "outputs": [
+            {
+              "type": "成品图",
+              "name": "生成图",
+              "value": "<图:使用反推正向提示词 + Auto Negative Prompt 自动负向提示词生成的图像,示例为金发女孩骑自行车>",
+              "anchor": "→ 返回 生成图",
+              "substance": "/表象/视觉/实体/物品/影像物品/艺术创作",
+              "form": "/呈现/视觉/视觉制作/构图编排/空间布局/景别角度"
+            },
+            {
+              "type": "负向提示词",
+              "name": "负向提示词文本",
+              "value": "low quality, low details, overexposed, bw, bad photo, bad photography, watermark, text font, username, error, logo, trademark, name, ugly, bad shadow, cropped, out of frame, text, watermark",
+              "anchor": "→ 副产物",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举"
+            }
+          ],
+          "intent": "运行 {via:ComfyUI} {action:文生图},验证自动负向提示词对 {out-type:生成图} 的效果",
+          "focus": [
+            "via",
+            "action",
+            "out-type-0",
+            "out-type-1"
+          ],
+          "effect": "主体生成"
+        }
+      ],
+      "return_row": {
+        "arrow": "↩",
+        "text": "<span class=\"kw\">返回</span> <span class=\"chip\" data-type=\"生成图\">生成图</span>"
+      }
+    }
+  ]
+}

+ 1 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/.session_id

@@ -0,0 +1 @@
+69553f6e-4d0a-4455-af7b-798ee8db2617

+ 7 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_meta.json

@@ -0,0 +1,7 @@
+{
+  "case_id": "xhs_695b81a3000000002103f561",
+  "from_q": "q0010",
+  "form": "B",
+  "score": 0.0,
+  "started_at": "2026-06-01T15:02:37"
+}

+ 20 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/anchors.json

@@ -0,0 +1,20 @@
+[
+  {"path": "p1.s1.inputs[0].anchor",  "value": "← 工序输入"},
+  {"path": "p1.s1.outputs[0].anchor", "value": "→ s2"},
+  {"path": "p1.s2.inputs[0].anchor",  "value": "← s1.元提示词"},
+  {"path": "p1.s2.outputs[0].anchor", "value": "→ s3"},
+  {"path": "p1.s3.inputs[0].anchor",  "value": "← 用户交互(修改需求序列)"},
+  {"path": "p1.s3.inputs[1].anchor",  "value": "← s2.视觉提示词反推工作站"},
+  {"path": "p1.s3.outputs[0].anchor", "value": "→ 返回 网页应用"},
+  {"path": "p1.s3.1.inputs[0].anchor", "value": "← 修改需求序列[i]"},
+  {"path": "p1.s3.1.inputs[1].anchor", "value": "← s3.视觉提示词反推工作站"},
+  {"path": "p1.s3.1.outputs[0].anchor","value": "→ s3.视觉提示词反推工作站"},
+  {"path": "p2.s1.inputs[0].anchor",  "value": "← 工序输入"},
+  {"path": "p2.s1.outputs[0].anchor", "value": "→ s2"},
+  {"path": "p2.s2.inputs[0].anchor",  "value": "← s1.产品信息"},
+  {"path": "p2.s2.outputs[0].anchor", "value": "→ s3"},
+  {"path": "p2.s3.inputs[0].anchor",  "value": "← 工序输入"},
+  {"path": "p2.s3.inputs[1].anchor",  "value": "← s1.产品信息"},
+  {"path": "p2.s3.inputs[2].anchor",  "value": "← s2.风格参数"},
+  {"path": "p2.s3.outputs[0].anchor", "value": "→ 返回 提示词"}
+]

+ 66 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/patch_2a.json

@@ -0,0 +1,66 @@
+{
+  "patches": [
+    {"path": "p1.s1.effect", "value": "预处理"},
+    {"path": "p1.s1.action", "value": "生成/元素生成"},
+    {"path": "p1.s1.inputs[0].type", "value": "描述"},
+    {"path": "p1.s1.outputs[0].type", "value": "元提示词"},
+
+    {"path": "p1.s2.effect", "value": "主体生成"},
+    {"path": "p1.s2.action", "value": "生成/元素生成"},
+    {"path": "p1.s2.inputs[0].type", "value": "元提示词"},
+    {"path": "p1.s2.outputs[0].type", "value": "网页应用"},
+
+    {"path": "p1.s3.inputs[0].type", "value": "修改需求"},
+    {"path": "p1.s3.inputs[1].type", "value": "网页应用"},
+    {"path": "p1.s3.outputs[0].type", "value": "网页应用"},
+
+    {"path": "p1.s3.1.effect", "value": "主体生成"},
+    {"path": "p1.s3.1.action", "value": "修改/变/替换"},
+    {"path": "p1.s3.1.inputs[0].type", "value": "修改需求"},
+    {"path": "p1.s3.1.inputs[1].type", "value": "网页应用"},
+    {"path": "p1.s3.1.outputs[0].type", "value": "网页应用"},
+
+    {"path": "p2.s1.effect", "value": "预准备"},
+    {"path": "p2.s1.action", "value": "获取/录入/上传"},
+    {"path": "p2.s1.inputs[0].type", "value": "参考图"},
+    {"path": "p2.s1.outputs[0].type", "value": "产品信息"},
+
+    {"path": "p2.s2.effect", "value": "预处理"},
+    {"path": "p2.s2.action", "value": "获取/录入/键入"},
+    {"path": "p2.s2.inputs[0].type", "value": "产品信息"},
+    {"path": "p2.s2.outputs[0].type", "value": "风格配置"},
+
+    {"path": "p2.s3.effect", "value": "主体生成"},
+    {"path": "p2.s3.action", "value": "提取/化学提取/反推"},
+    {"path": "p2.s3.inputs[0].type", "value": "参考图"},
+    {"path": "p2.s3.inputs[1].type", "value": "产品信息"},
+    {"path": "p2.s3.inputs[2].type", "value": "风格配置"},
+    {"path": "p2.s3.outputs[0].type", "value": "提示词"}
+  ],
+  "type_registry": {
+    "p1": {
+      "元提示词": {
+        "extends": "提示词",
+        "desc": "用于驱动AI(Gemini Canvas等)生成代码/网页界面的结构化系统提示词,内含角色/背景/约束/工作流等RCCUWI框架槽位,供用户填写后喂给模型执行,而非直接用于图像生成的正向prompt。"
+      },
+      "网页应用": {
+        "extends": "工作流",
+        "desc": "由AI生成的可在浏览器中运行的交互式网页工具,包含界面布局、交互逻辑和AI接口调用,作为本次工序的主干件产出并在后续迭代步骤中被持续修改完善。"
+      },
+      "修改需求": {
+        "extends": "描述",
+        "desc": "用户以自然语言表达的、针对当前网页应用版本的改动指令,描述期望的功能变更或界面调整目标,用于驱动AI在已有网页代码基础上执行修改。"
+      }
+    },
+    "p2": {
+      "产品信息": {
+        "extends": "描述",
+        "desc": "用户录入的产品基本信息,包含产品类型(单产品单角度)、品类(如手机)和核心卖点等字段,作为AI分析和生成提示词的产品描述依据。"
+      },
+      "风格配置": {
+        "extends": "生成参数",
+        "desc": "用户在视觉提示词反推工作站中设定的画面风格参数集合,包含风格关键词(如高品质KV)、时间段(如深夜暗调)和分类标签(如KV主视觉海报),用于约束AI生成MJ提示词时的风格方向。"
+      }
+    }
+  }
+}

+ 38 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/patch_2b.json

@@ -0,0 +1,38 @@
+[
+  {"path": "p1.s1.inputs[0].substance", "value": "/理念/知识/商业/产品服务/产品特征/功能属性"},
+  {"path": "p1.s1.inputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+  {"path": "p1.s1.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s1.outputs[0].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/规范框架"},
+  {"path": "p1.s2.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s2.inputs[0].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/规范框架"},
+  {"path": "p1.s2.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s2.outputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构 + /呈现/视觉/视觉风格/视觉艺术风格/虚构风格/科幻未来"},
+  {"path": "p1.s3.inputs[0].substance", "value": "/理念/知识/商业/产品服务/产品特征/功能属性"},
+  {"path": "p1.s3.inputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+  {"path": "p1.s3.inputs[1].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s3.inputs[1].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构 + /呈现/视觉/视觉风格/视觉艺术风格/虚构风格/科幻未来"},
+  {"path": "p1.s3.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s3.outputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构 + /呈现/视觉/视觉风格/视觉艺术风格/虚构风格/科幻未来"},
+  {"path": "p1.s3.1.inputs[0].substance", "value": "/理念/知识/商业/产品服务/产品特征/功能属性"},
+  {"path": "p1.s3.1.inputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+  {"path": "p1.s3.1.inputs[1].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s3.1.inputs[1].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构 + /呈现/视觉/视觉风格/视觉艺术风格/虚构风格/科幻未来"},
+  {"path": "p1.s3.1.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s3.1.outputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构 + /呈现/视觉/视觉风格/视觉艺术风格/虚构风格/科幻未来"},
+  {"path": "p2.s1.inputs[0].substance", "value": "/表象/视觉/实体/物品/器材物品/设备"},
+  {"path": "p2.s1.inputs[0].form", "value": "/呈现/视觉/视觉制作/实景拍摄/拍摄主体/实物呈现 + /呈现/视觉/视觉制作/后期处理/画质优化处理/光影质感"},
+  {"path": "p2.s1.outputs[0].substance", "value": "/理念/知识/商业/产品服务/产品特征"},
+  {"path": "p2.s1.outputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+  {"path": "p2.s2.inputs[0].substance", "value": "/理念/知识/商业/产品服务/产品特征"},
+  {"path": "p2.s2.inputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+  {"path": "p2.s2.outputs[0].substance", "value": "/理念/知识/思想/概念范畴/性质属性/风格属性"},
+  {"path": "p2.s2.outputs[0].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/字体标题"},
+  {"path": "p2.s3.inputs[0].substance", "value": "/表象/视觉/实体/物品/器材物品/设备"},
+  {"path": "p2.s3.inputs[0].form", "value": "/呈现/视觉/视觉制作/实景拍摄/拍摄主体/实物呈现 + /呈现/视觉/视觉制作/后期处理/画质优化处理/光影质感"},
+  {"path": "p2.s3.inputs[1].substance", "value": "/理念/知识/商业/产品服务/产品特征"},
+  {"path": "p2.s3.inputs[1].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"},
+  {"path": "p2.s3.inputs[2].substance", "value": "/理念/知识/思想/概念范畴/性质属性/风格属性"},
+  {"path": "p2.s3.inputs[2].form", "value": "/呈现/视觉/视觉制作/构图编排/版面设计/字体标题"},
+  {"path": "p2.s3.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习 + /理念/知识/思想/概念范畴/认知思辨/策略方法"},
+  {"path": "p2.s3.outputs[0].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/板块并列"}
+]

+ 122 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/patches_2a_only.json

@@ -0,0 +1,122 @@
+[
+  {
+    "path": "p1.s1.effect",
+    "value": "预处理"
+  },
+  {
+    "path": "p1.s1.action",
+    "value": "生成/元素生成"
+  },
+  {
+    "path": "p1.s1.inputs[0].type",
+    "value": "描述"
+  },
+  {
+    "path": "p1.s1.outputs[0].type",
+    "value": "元提示词"
+  },
+  {
+    "path": "p1.s2.effect",
+    "value": "主体生成"
+  },
+  {
+    "path": "p1.s2.action",
+    "value": "生成/元素生成"
+  },
+  {
+    "path": "p1.s2.inputs[0].type",
+    "value": "元提示词"
+  },
+  {
+    "path": "p1.s2.outputs[0].type",
+    "value": "网页应用"
+  },
+  {
+    "path": "p1.s3.inputs[0].type",
+    "value": "修改需求"
+  },
+  {
+    "path": "p1.s3.inputs[1].type",
+    "value": "网页应用"
+  },
+  {
+    "path": "p1.s3.outputs[0].type",
+    "value": "网页应用"
+  },
+  {
+    "path": "p1.s3.1.effect",
+    "value": "主体生成"
+  },
+  {
+    "path": "p1.s3.1.action",
+    "value": "修改/变/替换"
+  },
+  {
+    "path": "p1.s3.1.inputs[0].type",
+    "value": "修改需求"
+  },
+  {
+    "path": "p1.s3.1.inputs[1].type",
+    "value": "网页应用"
+  },
+  {
+    "path": "p1.s3.1.outputs[0].type",
+    "value": "网页应用"
+  },
+  {
+    "path": "p2.s1.effect",
+    "value": "预准备"
+  },
+  {
+    "path": "p2.s1.action",
+    "value": "获取/录入/上传"
+  },
+  {
+    "path": "p2.s1.inputs[0].type",
+    "value": "参考图"
+  },
+  {
+    "path": "p2.s1.outputs[0].type",
+    "value": "产品信息"
+  },
+  {
+    "path": "p2.s2.effect",
+    "value": "预处理"
+  },
+  {
+    "path": "p2.s2.action",
+    "value": "获取/录入/键入"
+  },
+  {
+    "path": "p2.s2.inputs[0].type",
+    "value": "产品信息"
+  },
+  {
+    "path": "p2.s2.outputs[0].type",
+    "value": "风格配置"
+  },
+  {
+    "path": "p2.s3.effect",
+    "value": "主体生成"
+  },
+  {
+    "path": "p2.s3.action",
+    "value": "提取/化学提取/反推"
+  },
+  {
+    "path": "p2.s3.inputs[0].type",
+    "value": "参考图"
+  },
+  {
+    "path": "p2.s3.inputs[1].type",
+    "value": "产品信息"
+  },
+  {
+    "path": "p2.s3.inputs[2].type",
+    "value": "风格配置"
+  },
+  {
+    "path": "p2.s3.outputs[0].type",
+    "value": "提示词"
+  }
+]

Разница между файлами не показана из-за своего большого размера
+ 25 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/task_2a.json


Разница между файлами не показана из-за своего большого размера
+ 15 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/task_2b.json


+ 17 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_source.json

@@ -0,0 +1,17 @@
+{
+  "title": "零代码!我用 Gemini 写提示次反推神器!",
+  "link": "https://www.xiaohongshu.com/explore/695b81a3000000002103f561",
+  "body_text": "家人们!Gemini 最近更新的 Canvas 功能真的太强了!😱 以前想做一个专属的网页工具,还要学 HTML、CSS、JS... 现在?只要会说话就行!\n今天教大家用 Gemini Canvas “捏” 一个【视觉提示词反推工作站】。 ✅ 无需任何代码基础(我一行代码都没写!) ✅ 赛博朋克风 UI(颜值超高,看着就专业) ✅ 功能实测:上传一张参考图,它自动识别光影、构图、材质,并生成 MJ 专用的 Prompt!\n制作步骤(保姆级):\n1️⃣ 打开 Google Gemini。\n2️⃣ 切换到 Canvas 模式。\n3️⃣ 复制将你整理好的元提示词发给gemini让他跟拘泥的元提示词的推理逻辑生成一个可以上传产品图片和参考图的然后反推提示词的网页界面(这一步最关键!👇)。\n4️⃣ 发送后,Gemini 会直接在右侧生成一个可交互的网页,还能实时预览!,然后你需要改森么内容直接在左边给他讲就好啦\n5️⃣ 不喜欢颜色?直接跟它说“换成紫色渐变”,它立马改!\n做出来的工具不仅能自己用,还能通过右上角分享,分享给你的好朋友一起用。【魔法咒语】在图三![坏笑R]\n标签:#Gemini[话题]# #GeminiCanvas[话题]# #智能体[话题]#  #提示词[话题]# #零代码开发[话题]# #黑科技[话题]##空空C4D[话题]# #inZOI[话题]#",
+  "images": [
+    "https://ci.xiaohongshu.com/notes_pre_post/1040g3k031qv1g9rb00205nhh5fu08k01ng9f6so?imageView2/2/w/1080/format/webp",
+    "https://ci.xiaohongshu.com/1040g2sg31qv1g9r77ue05nhh5fu08k016i2unso?imageView2/2/w/1080/format/webp",
+    "https://ci.xiaohongshu.com/notes_pre_post/1040g3k031qv1g9rb00005nhh5fu08k01klprc50?imageView2/2/w/1080/format/webp",
+    "https://ci.xiaohongshu.com/notes_pre_post/1040g3k031qv1g9rb000g5nhh5fu08k01c05dta8?imageView2/2/w/1080/format/webp",
+    "https://ci.xiaohongshu.com/notes_pre_post/1040g3k031qv1g9rb00105nhh5fu08k01vpj4bi8?imageView2/2/w/1080/format/webp",
+    "https://ci.xiaohongshu.com/notes_pre_post/1040g3k031qv1g9rb001g5nhh5fu08k01n6m0p0g?imageView2/2/w/1080/format/webp",
+    "https://ci.xiaohongshu.com/notes_pre_post/1040g3k031qv1g9rb002g5nhh5fu08k01jo3uf20?imageView2/2/w/1080/format/webp",
+    "https://ci.xiaohongshu.com/notes_pre_post/1040g3k031qv1g9rb00305nhh5fu08k0179ju9jg?imageView2/2/w/1080/format/webp"
+  ],
+  "publish_timestamp": "2026-01-05 17:17:23",
+  "channel_account_name": "xhs"
+}

+ 919 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_trace.md

@@ -0,0 +1,919 @@
+
+
+---
+
+## ▶ Fresh @ 2026-06-01 15:02:42
+
+- case: `B_xhs_695b81a3`
+- source: `C:\Users\11304\gitlab\cybertogether\Agent\examples\process_pipeline\script\search_eval\runs_full\q0010\procedures\B_xhs_695b81a3\_source.json`
+- spec: `spec`
+- images: `8`
+- model: `claude-sonnet-4-6`
+- max_turns: `300`
+
+_session=69553f6e · model='claude-sonnet-4-6' · apiKeySource='none'_
+
+
+### Turn 1 · 15:02:51
+
+
+### Turn 2 · 15:02:53
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/README.md`
+
+
+### Turn 3 · 15:02:54
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools.md`
+
+
+### Turn 4 · 15:02:55
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_source.json`
+
+
+### Turn 5 · 15:03:02
+
+
+### Turn 6 · 15:03:06
+> 现在加载 Phase 1 所需的 spec 文件:
+
+
+
+### Turn 7 · 15:03:06
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/syntax.md`
+
+
+### Turn 8 · 15:03:06
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/extraction/fields.md`
+
+
+### Turn 9 · 15:03:07
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/extraction/control-flow.md`
+
+
+### Turn 10 · 15:03:07
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/extraction/phase1-skeleton.md`
+
+
+### Turn 11 · 15:03:07
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/format/md-structure.md`
+
+
+### Turn 12 · 15:03:07
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/templates/workflow.template.json`
+
+
+### Turn 13 · 15:09:09
+
+
+### Turn 14 · 15:09:09
+> 已完成 Phase 1 的 spec 加载。现在分析 source,写 understanding.md 和 workflow.json 骨架。
+
+
+
+### Turn 15 · 15:09:50
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/understanding.md` (2,500 chars)
+
+
+### Turn 16 · 15:10:12
+
+
+### Turn 17 · 15:10:12
+> Now write the workflow.json skeleton (Phase 1.2):
+
+
+
+### Turn 18 · 15:11:34
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/workflow.json` (10,189 chars)
+
+
+### Turn 19 · 15:13:35
+
+
+### Turn 20 · 15:13:35
+> Phase 1.2 骨架完成。现在做 Phase 1.3 锚引用闭合——先写 anchors.json 到 _scratch,再批量 wf-patch:
+
+
+
+### Turn 21 · 15:13:40
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/anchors.json` (1,099 chars)
+
+
+### Turn 22 · 15:13:47
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "../runs_full/q0010/procedures/B_xhs_695b81a3/work...`
+
+
+### Turn 23 · 15:14:19
+
+
+### Turn 24 · 15:14:19
+> JSON 解析出错,先读文件诊断:
+
+
+
+### Turn 25 · 15:14:19
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/workflow.json` (offset=0, limit=10)
+
+
+### Turn 26 · 15:14:39
+
+
+### Turn 27 · 15:14:39
+> 问题在 excerpt 里的 ASCII 引号破坏了 JSON。用 Edit 修复:
+
+
+
+### Turn 28 · 15:14:41
+- `Edit` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/workflow.json`
+
+
+### Turn 29 · 15:14:48
+
+
+### Turn 30 · 15:14:49
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python -c "import json; json.load(open('../runs_full/q0010/procedures/B_xhs_695b81a3/workfl...`
+
+
+### Turn 31 · 15:14:53
+
+
+### Turn 32 · 15:14:54
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/workflow.json` (offset=33, limit=8)
+
+
+### Turn 33 · 15:15:02
+
+
+### Turn 34 · 15:15:02
+> 需要找到所有在 JSON string 内部的裸引号:
+
+
+
+### Turn 35 · 15:15:05
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3" && python -c "
+content = open('workflow.json', encoding='utf-8').r...`
+
+
+### Turn 36 · 15:15:11
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3" && python -c "
+import sys, io
+sys.stdout = io.TextIOWrapper(sys.st...`
+
+
+### Turn 37 · 15:15:25
+
+
+### Turn 38 · 15:15:25
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/workflow.json` (offset=45, limit=15)
+
+
+### Turn 39 · 15:15:32
+
+
+### Turn 40 · 15:15:32
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/workflow.json` (offset=177, limit=8)
+
+
+### Turn 41 · 15:15:48
+
+
+### Turn 42 · 15:15:48
+> 三处 ASCII 引号问题,逐一用 Edit 修复:
+
+
+
+### Turn 43 · 15:15:49
+- `Edit` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/workflow.json`
+
+
+### Turn 44 · 15:15:54
+- `Edit` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/workflow.json`
+
+
+### Turn 45 · 15:15:58
+- `Edit` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/workflow.json`
+
+
+### Turn 46 · 15:16:01
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python -c "import json; json.load(open('../runs_full/q0010/procedures/B_xhs_695b81a3/workfl...`
+
+
+### Turn 47 · 15:16:04
+
+
+### Turn 48 · 15:16:05
+> JSON 有效。现在批量应用 anchors:
+
+
+
+### Turn 49 · 15:16:06
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "../runs_full/q0010/procedures/B_xhs_695b81a3/work...`
+
+
+### Turn 50 · 15:17:02
+
+
+### Turn 51 · 15:17:02
+> 18/18 通过。运行 --resolve-passthrough 填充透传值:
+
+
+
+### Turn 52 · 15:17:03
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "../runs_full/q0010/procedures/B_xhs_695b81a3/work...`
+
+
+### Turn 53 · 15:17:07
+
+
+### Turn 54 · 15:17:08
+> Phase 1 完成。现在读 Phase 2 规格文件,进入归一化:
+
+
+
+### Turn 55 · 15:17:08
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/extraction/phase2-normalize.md`
+
+
+### Turn 56 · 15:17:13
+
+
+### Turn 57 · 15:17:14
+- `Glob` — pattern=`prepare-subtask*`
+
+
+### Turn 58 · 15:17:20
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/prepare-subtask.py --workflow "../runs_full/q0010/procedures/B_xhs_695b81...`
+
+
+### Turn 59 · 15:17:31
+
+
+### Turn 60 · 15:17:31
+> 切片完成!并行启动 Phase 2A 和 2B 子 Agent:
+
+
+
+### Turn 61 · 15:17:55
+- `Agent` — `Phase 2A: effect/action/type normalization` [subagent=phase-2a-normalizer]
+
+
+### Turn 62 · 15:18:00
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/task_2a.json`
+
+
+### Turn 63 · 15:18:01
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/taxonomy/effect.json`
+
+
+### Turn 64 · 15:18:02
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/taxonomy/action.json`
+
+
+### Turn 65 · 15:18:02
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/taxonomy/type.json`
+
+
+### Turn 66 · 15:18:14
+- `Agent` — `Phase 2B: substance/form taxonomy matching` [subagent=phase-2b-matcher]
+
+
+### Turn 67 · 15:18:17
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/task_2b.json`
+
+
+### Turn 68 · 15:18:21
+- `Bash` — `python C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py --help`
+
+
+### Turn 69 · 15:18:25
+- `Bash` — `python C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py --dim 实质 --match "工具需求 网页界面 上传产品图"`
+
+
+### Turn 70 · 15:18:27
+- `Bash` — `python C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py --dim 实质 --match "元提示词 提示词工程 结构化指令"`
+
+
+### Turn 71 · 15:18:28
+- `Bash` — `python C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py --dim 实质 --match "网页应用 赛博朋克 界面工具"`
+
+
+### Turn 72 · 15:18:32
+- `Bash` — `python C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py --dim 实质 --narrow "工具需求 网页功能 上传图片"`
+
+
+### Turn 73 · 15:18:33
+- `Bash` — `python C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py --dim 实质 --narrow "元提示词 提示词结构 AI指令"`
+
+
+### Turn 74 · 15:18:34
+- `Bash` — `python C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py --dim 实质 --narrow "网页应用 功能工具 提示词反推"`
+
+
+### Turn 75 · 15:18:37
+- `Bash` — `python C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py --dim 实质 --list-l2`
+
+
+### Turn 76 · 15:18:38
+- `Bash` — `python C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py --dim 形式 --list-l2`
+
+
+### Turn 77 · 15:18:42
+- `Bash` — `python C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py --dim 实质 --subtree /理念/方法`
+
+
+### Turn 78 · 15:18:43
+- `Bash` — `python C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py --dim 实质 --subtree /理念/知识`
+
+
+### Turn 79 · 15:18:46
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --subtree /理念/方法`
+
+
+### Turn 80 · 15:18:47
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --list-l2`
+
+
+### Turn 81 · 15:18:51
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "方法 流程 模板"`
+
+
+### Turn 82 · 15:18:52
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "提示词 指令 模板"`
+
+
+### Turn 83 · 15:18:56
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "AI提示词 角色设定 结构化"`
+
+
+### Turn 84 · 15:18:57
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "知识 技能 方法论"`
+
+
+### Turn 85 · 15:19:02
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "AI智能 提示词 应用"`
+
+
+### Turn 86 · 15:19:03
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "需求描述 功能说明"`
+
+
+### Turn 87 · 15:19:06
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "需求 产品 规格"`
+
+
+### Turn 88 · 15:19:07
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "代码修改 软件 功能迭代"`
+
+
+### Turn 89 · 15:19:12
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "手机产品图 OLED屏幕 暗调摄影"`
+
+
+### Turn 90 · 15:19:14
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "产品信息 手机 规格参数"`
+
+
+### Turn 91 · 15:19:18
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "手机 产品 电子设备"`
+
+
+### Turn 92 · 15:19:19
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "风格配置 视觉风格 KV主视觉"`
+
+
+### Turn 93 · 15:19:22
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/patch_2a.json` (2,411 chars)
+
+
+### Turn 94 · 15:19:24
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "MJ提示词 Midjourney 图像生成"`
+
+
+### Turn 95 · 15:19:25
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "广告海报 KV主视觉 商业摄影"`
+
+
+### Turn 96 · 15:19:29
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "AI生成 图像描述 创作方案"`
+
+
+### Turn 97 · 15:19:29
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "海报 广告 视觉创意"`
+
+
+### Turn 98 · 15:19:34
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "提示词方案 创意方案 文案策划"`
+
+
+### Turn 99 · 15:19:34
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "风格标签 设计参数 配置选项"`
+
+
+### Turn 100 · 15:19:38
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "风格 暗调 深夜"`
+
+
+### Turn 101 · 15:19:39
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "创意方案 营销策划 视觉方案"`
+
+
+### Turn 102 · 15:19:44
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "策划 方案 创意"`
+
+
+### Turn 103 · 15:19:45
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "RCCUWI 角色 工作流程"`
+
+
+### Turn 104 · 15:19:51
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "文字描述 需求说明 自然语言"`
+
+
+### Turn 105 · 15:19:52
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "提示词 结构化文本 模板格式"`
+
+
+### Turn 106 · 15:19:53
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "网页界面 功能布局 交互设计"`
+
+
+### Turn 107 · 15:19:57
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "结构化模板 层级格式 分节说明"`
+
+
+### Turn 108 · 15:19:58
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "版面布局 分区 界面结构"`
+
+
+### Turn 109 · 15:20:03
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "分节 标题 层级结构"`
+
+
+### Turn 110 · 15:20:04
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "修改需求 自然语言 指令"`
+
+
+### Turn 111 · 15:20:09
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "图片 照片 产品摄影"`
+
+
+### Turn 112 · 15:20:11
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "文字列表 信息摘要 文本说明"`
+
+
+### Turn 113 · 15:20:16
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "文字信息 键值对 产品说明"`
+
+
+### Turn 114 · 15:20:17
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "风格标签 关键词列表 参数组合"`
+
+
+### Turn 115 · 15:20:21
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "关键词 标签 文字"`
+
+
+### Turn 116 · 15:20:22
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "英文文本 方案描述 分析报告"`
+
+
+### Turn 117 · 15:20:28
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "方案 分析 结构化文本"`
+
+
+### Turn 118 · 15:20:29
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "暗调 低光 深色背景"`
+
+
+### Turn 119 · 15:20:33
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "网页 UI 界面设计"`
+
+
+### Turn 120 · 15:20:35
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "赛博朋克 科技感 霓虹"`
+
+
+### Turn 121 · 15:20:40
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 形式 --match "分段结构 方案列表 条目"`
+
+
+### Turn 122 · 15:20:42
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "思想 概念 认知"`
+
+
+### Turn 123 · 15:20:47
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "AI 智能 前沿技术"`
+
+
+### Turn 124 · 15:20:49
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --match "工具 软件 功能"`
+
+
+### Turn 125 · 15:20:54
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --validate /理念/知识/商业/前沿技术/AI智能/AI应用`
+
+
+### Turn 126 · 15:20:55
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --validate /理念/知识/商业/前沿技术/AI智能/机器学习`
+
+
+### Turn 127 · 15:20:56
+- `Bash` — `cd C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl && python spec/tools/taxonomy-lookup.py --dim 实质 --validate /理念/知识/思想/概念范畴/关系结构/构成要素`
+
+
+### Turn 128 · 15:21:01
+- `Bash` — `cd /d "C:\Users\11304\gitlab\cybertogether\Agent\examples\process_pipeline\script\search_eval\procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --validate "/理念/知识/商业/前沿技术/AI智能/AI应用"`
+
+
+### Turn 129 · 15:21:05
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --validate "/理念/知识/商业/前沿技术/AI智能/AI应用"`
+
+
+### Turn 130 · 15:21:08
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --validate "/理念/知识/商业/前沿技术/AI智能/AI应用"`
+
+
+### Turn 131 · 15:21:11
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py` (offset=0, limit=50)
+
+
+### Turn 132 · 15:21:13
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py` (offset=50, limit=80)
+
+
+### Turn 133 · 15:21:17
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py` (offset=200, limit=40)
+
+
+### Turn 134 · 15:21:20
+- `Grep` — pattern=`cmd_validate` path=``
+
+
+### Turn 135 · 15:21:24
+- `Grep` — pattern=`cmd_validate` path=`C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py`
+
+
+### Turn 136 · 15:21:26
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py` (offset=314, limit=30)
+
+
+### Turn 137 · 15:21:33
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "提示词工程 RCCUWI 格式模板"`
+
+
+### Turn 138 · 15:21:35
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "LangGPT 结构化 提示词"`
+
+
+### Turn 139 · 15:21:39
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "图像生成 提示词 方案"`
+
+
+### Turn 140 · 15:21:40
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "视觉风格 暗调 深夜 氛围"`
+
+
+### Turn 141 · 15:21:46
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "分析报告 两段 方案结构"`
+
+
+### Turn 142 · 15:21:47
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "分条列举 序号 编号"`
+
+
+### Turn 143 · 15:21:52
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "Markdown 分节标题 文档结构"`
+
+
+### Turn 144 · 15:21:53
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "规范框架 模板 标准结构"`
+
+
+### Turn 145 · 15:21:58
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "规范框架 步骤流程 分节结构"`
+
+
+### Turn 146 · 15:21:59
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "功能需求 界面描述 用户体验"`
+
+
+### Turn 147 · 15:22:03
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "工具 应用 产品功能需求"`
+
+
+### Turn 148 · 15:22:04
+- `Bash` — `python "C:/Users/11304/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "产品摄影 商业摄影 手机拍摄"`
+
+
+### Turn 149 · 15:22:07
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "产品摄影 商业摄影 手机拍摄"`
+
+
+### Turn 150 · 15:22:08
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "摄影 拍摄 实景"`
+
+
+### Turn 151 · 15:22:17
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "智能手机 电子设备 科技产品"`
+
+
+### Turn 152 · 15:22:18
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "产品图 实物摄影 低光"`
+
+
+### Turn 153 · 15:22:23
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "AI工具 智能体 应用开发"`
+
+
+### Turn 154 · 15:22:24
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "界面截图 UI 布局"`
+
+
+### Turn 155 · 15:22:30
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "三栏 左中右 分区布局"`
+
+
+### Turn 156 · 15:22:31
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "自然语言 口语 文字表达"`
+
+
+### Turn 157 · 15:22:35
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "说明文字 描述性文本 纯文字"`
+
+
+### Turn 158 · 15:22:36
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "版面结构 分区 模块化"`
+
+
+### Turn 159 · 15:22:40
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "中英双语 BRIEF 分析结构"`
+
+
+### Turn 160 · 15:22:41
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "双语 中英 说明"`
+
+
+### Turn 161 · 15:23:28
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/patch_2b.json` (3,010 chars)
+
+
+### Turn 162 · 15:23:58
+
+
+### Turn 163 · 15:23:58
+> 两个子 Agent 完成,读取 patch 文件验证后应用:
+
+
+
+### Turn 164 · 15:23:59
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/patch_2a.json`
+
+
+### Turn 165 · 15:23:59
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/_scratch/patch_2b.json`
+
+
+### Turn 166 · 15:24:33
+
+
+### Turn 167 · 15:24:33
+> Patches 看起来很好。先提取 2A patches 数组,再批量应用:
+
+
+
+### Turn 168 · 15:24:36
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python -c "
+import json, sys, io
+sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding=...`
+
+
+### Turn 169 · 15:24:40
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "../runs_full/q0010/procedures/B_xhs_695b81a3/work...`
+
+
+### Turn 170 · 15:24:49
+
+
+### Turn 171 · 15:24:49
+> 先注册 type_registry,再重跑 type 字段设置:
+
+
+
+### Turn 172 · 15:24:54
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "../runs_full/q0010/procedures/B_xhs_695b81a3/work...`
+
+
+### Turn 173 · 15:24:58
+
+
+### Turn 174 · 15:25:00
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "../runs_full/q0010/procedures/B_xhs_695b81a3/work...`
+
+
+### Turn 175 · 15:25:08
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "../runs_full/q0010/procedures/B_xhs_695b81a3/work...`
+
+
+### Turn 176 · 15:25:11
+
+
+### Turn 177 · 15:25:12
+> type_registry 全部注册成功。现在重跑 patches_2a_only.json:
+
+
+
+### Turn 178 · 15:25:13
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "../runs_full/q0010/procedures/B_xhs_695b81a3/work...`
+
+
+### Turn 179 · 15:25:16
+
+
+### Turn 180 · 15:25:17
+> 30/30 全通过!现在应用 Phase 2B substance/form patches:
+
+
+
+### Turn 181 · 15:25:18
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "../runs_full/q0010/procedures/B_xhs_695b81a3/work...`
+
+
+### Turn 182 · 15:25:25
+
+
+### Turn 183 · 15:25:26
+> Phase 2 全部通过!进入 Phase 3,读取规格文件:
+
+
+
+### Turn 184 · 15:25:27
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/extraction/phase3-finalize.md`
+
+
+### Turn 185 · 15:25:28
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/format/procedure-table.md`
+
+
+### Turn 186 · 15:25:29
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/format/case-data.schema.json`
+
+
+### Turn 187 · 15:26:41
+
+
+### Turn 188 · 15:26:41
+> Phase 3 规格加载完毕。先更新 intent 字段(Phase 3.2),再 lint:
+
+
+
+### Turn 189 · 15:26:46
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "../runs_full/q0010/procedures/B_xhs_695b81a3/work...`
+
+
+### Turn 190 · 15:28:36
+
+
+### Turn 191 · 15:28:37
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval" && python procedure-dsl/spec/tools/lint-case.py --workflow runs_full/q0010/procedures/B_xhs_695b81a3/workflo...`
+
+
+### Turn 192 · 15:28:41
+
+
+### Turn 193 · 15:28:41
+> Lint passed clean. Now render the HTML:
+
+
+
+### Turn 194 · 15:28:43
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval" && python procedure-dsl/spec/tools/render-case.py --workflow runs_full/q0010/procedures/B_xhs_695b81a3/workf...`
+
+
+### Turn 195 · 15:28:47
+
+
+### Turn 196 · 15:28:49
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval" && python -c "
+import json
+with open('runs_full/q0010/procedures/B_xhs_695b81a3/workflow.json') as f:
+    wf...`
+
+
+### Turn 197 · 15:28:53
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval" && python -c "
+import json
+with open('runs_full/q0010/procedures/B_xhs_695b81a3/workflow.json', encoding='ut...`
+
+
+### Turn 198 · 15:28:57
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval" && python -c "
+import json, sys
+sys.stdout.reconfigure(encoding='utf-8')
+with open('runs_full/q0010/procedur...`
+
+
+### Turn 199 · 15:29:04
+
+
+### Turn 200 · 15:29:06
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval" && python -c "
+import json, sys
+sys.stdout.reconfigure(encoding='utf-8')
+with open('procedure-dsl/spec/forma...`
+
+
+### Turn 201 · 15:29:09
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval" && python -c "
+import json, sys
+sys.stdout.reconfigure(encoding='utf-8')
+with open('procedure-dsl/spec/forma...`
+
+
+### Turn 202 · 15:29:13
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval" && python -c "
+import json, sys
+sys.stdout.reconfigure(encoding='utf-8')
+with open('procedure-dsl/spec/forma...`
+
+
+### Turn 203 · 15:29:23
+
+
+### Turn 204 · 15:29:23
+> The schema requires `value` on every IO item. I need to add values to `p1.s3.inputs[0]` (修改需求序列) and `p1.s3.outputs[0]` (block output). Let me patch them:
+
+
+
+### Turn 205 · 15:29:26
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval" && python procedure-dsl/spec/tools/wf-patch.py --workflow runs_full/q0010/procedures/B_xhs_695b81a3/workflow...`
+
+
+### Turn 206 · 15:29:29
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval" && python procedure-dsl/spec/tools/wf-patch.py --workflow runs_full/q0010/procedures/B_xhs_695b81a3/workflow...`
+
+
+### Turn 207 · 15:29:35
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval" && python procedure-dsl/spec/tools/render-case.py --workflow runs_full/q0010/procedures/B_xhs_695b81a3/workf...`
+
+
+### Turn 208 · 15:29:39
+
+
+### Turn 209 · 15:29:40
+> HTML rendered. Now Phase 3.3 — write the .md file. Let me check the md-structure spec first:
+
+
+
+### Turn 210 · 15:29:40
+- `Read` — `C:\Users\11304\gitlab\cybertogether\Agent\examples\process_pipeline\script\search_eval\procedure-dsl\spec\format\md-structure.md`
+
+
+### Turn 211 · 15:29:50
+
+
+### Turn 212 · 15:29:50
+> Let me read the current workflow.json to gather L4 instance details:
+
+
+
+### Turn 213 · 15:29:54
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval" && python -c "
+import json, sys
+sys.stdout.reconfigure(encoding='utf-8')
+with open('runs_full/q0010/procedur...`
+
+
+### Turn 214 · 15:30:47
+
+
+### Turn 215 · 15:30:47
+> Now write the .md file following §11 structure:
+
+
+
+### Turn 216 · 15:32:18
+- `Write` — `C:\Users\11304\gitlab\cybertogether\Agent\examples\process_pipeline\script\search_eval\runs_full\q0010\procedures\B_xhs_695b81a3\case-B_xhs_695b81a3-gemini-canvas-prompt-tool.md` (6,843 chars)
+
+
+### Turn 217 · 15:32:29
+> All three Phase 3 steps are complete. Here's a summary of what was done:
+>
+> **Phase 3.1a — lint**: ✅ Passed clean (type completeness OK, value self-contained OK). 5 new types auto-recorded to `type_suggestions.md`: 元提示词、修改需求、网页应用、产品信息、风格配置.
+>
+> **Phase 3.1b — render HTML**: Encountered 2 schema failures (`p1.s3.inputs[0].value` and `p1.s3.outputs[0].value` missing). Fixed both via wf-patch, then re-ran → ✅ `case-B_xhs_695b81a3-gemini-canvas-prompt-tool.html` written (89,198 chars, 2 procedures, 7 steps).
+>
+> **Phase 3.3 — .md file**: ✅ `case-B_xhs_695b81a3-gemini-canvas-prompt-tool.md` written following §11 structure with all 9 sections:
+> - 工序梗概 (P1/P2 人话描述)
+> - 引用的类型 (6 stdlib types + 5 case-specific)
+> - L1 外部函数库 (Gemini Canvas, 视觉提示词反推工作站)
+> - L2 抽象动作 (5 action paths with impl mapping)
+> - L3 工序模板 A + B (伪码结构)
+> - L4 工序实例 P1 + P2 (inputs/bindings/extracted_values/trace)
+> - 5条关键启发 (元层/对象层分离、block+nested遍历模式、元提示词独立类型、工具即产物链式复用、RCCUWI框架工艺)
+
+
+
+### ◀ Result · 15:32:29
+
+- subtype: `success` · is_error: `False`
+- num_turns: `61` · duration: `1785355ms` · wall: `1787.4s`
+- tokens: in=53 out=76,364 cache_w=189,944 cache_r=4,251,468
+- cost: sdk=$4.7384, est_if_api=$3.1333

Разница между файлами не показана из-за своего большого размера
+ 466 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/case-B_xhs_695b81a3-gemini-canvas-prompt-tool.html


+ 259 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/case-B_xhs_695b81a3-gemini-canvas-prompt-tool.md

@@ -0,0 +1,259 @@
+# Case B_xhs_695b81a3: 零代码!我用 Gemini 写提示词反推神器!
+
+**Source**: 小红书 · [https://www.xiaohongshu.com/explore/695b81a3000000002103f561](https://www.xiaohongshu.com/explore/695b81a3000000002103f561)
+**Author**: xhs博主 · **Date**: 2026-01-05
+**主题**: 用 Google Gemini Canvas 零代码构建"视觉提示词反推工作站"网页工具,再用该工具上传产品图生成 Midjourney 提示词方案
+
+---
+
+## 工序梗概 (人话)
+
+### P1 · Gemini Canvas 零代码构建视觉提示词反推工作站
+
+核心创新:完全不写代码,只靠自然语言"元提示词"(RCCUWI 结构化系统提示词)驱动 Gemini Canvas,让模型在右侧实时生成完整的赛博朋克风可交互前端网页。
+
+步骤链:
+1. **s1(人工)** 整理元提示词 —— 按 RCCUWI(Role/Context/User Profile/Constraints/Workflow/Initialization)框架,将工具需求描述扩写成结构化系统提示词,所有角色/约束字段预留占位符供后续定制
+2. **s2(Gemini Canvas)** 生成初始网页 —— 将元提示词发给 Gemini Canvas,模型在右侧面板直接输出完整可交互网页(含产品图上传、风格控制栏、AI助手三栏布局,赛博朋克配色)
+3. **s3(遍历块,Gemini Canvas)** 迭代修改网页 —— 以自然语言提出修改需求,Canvas 自动更新代码;本 case 主要改动是将 AI 助手的语言模型接口从默认值统一替换为 geminipro
+
+终态产物:可分享的视觉提示词反推工作站网页(Gemini Prompt Planner)
+
+### P2 · 使用视觉提示词反推工作站生成 MJ 提示词
+
+在 P1 生成的工具中执行实际业务:上传手机产品图 + 配置风格参数,让工具内置的 Gemini Pro 自动识别图像光影/构图/材质,生成结构化 Midjourney 提示词方案(CORE BRIEF + PROMPT ANALYSIS 双层格式)。
+
+步骤链:
+1. **s1(人工)** 上传产品图并填写基本信息 —— 在左侧面板上传手机产品图,录入「单产品单角度 / 产品品类: 手机 / 核心卖点」等字段
+2. **s2(人工)** 配置风格参数 —— 在中间控制栏键入风格关键词(高品质精准用户kv)、分类标签(KV主视觉海报)、时间段(深夜暗调)
+3. **s3(视觉提示词反推工作站)** AI 反推生成 MJ 提示词 —— 专业策划模式绑定产品信息+风格配置,输出多个结构化 Prompt 方案并自动归档至方案库
+
+终态产物:MJ 提示词方案(含 CORE BRIEF 定向描述 + PROMPT ANALYSIS 执行词)
+
+---
+
+## 引用的类型 (stdlib + 自定义)
+
+### stdlib 类型 (直接引用)
+
+| 类型 | 出现位置 |
+|---|---|
+| 描述 | p1.s1 input(工具需求描述)|
+| 提示词 | p2.s3 output(MJ提示词方案);也是 元提示词 / 修改需求 的 extends 基类 |
+| 参考图 | p2.s1 input(产品图)、p2.s3 input |
+| 文本 | p1 declarations input(工具需求描述声明)|
+| 生成参数 | 风格配置 的 extends 基类 |
+| 工作流 | 网页应用 的 extends 基类 |
+
+### case-specific 类型 (type_registry)
+
+**P1 type_registry**
+
+| 类型名 | extends | 描述 |
+|---|---|---|
+| 元提示词 | 提示词 | 用于驱动 AI(Gemini Canvas 等)生成代码/网页界面的结构化系统提示词,内含 RCCUWI 框架槽位(Role/Context/User Profile/Constraints/Workflow/Initialization),供用户填写后喂给模型执行,与图像生成正向 prompt 不同 |
+| 网页应用 | 工作流 | 由 AI 生成的可在浏览器中运行的交互式网页工具,包含界面布局、交互逻辑和 AI 接口调用,作为本次工序的主干件产出并在后续迭代步骤中被持续修改完善 |
+| 修改需求 | 描述 | 用户以自然语言表达的、针对当前网页应用版本的改动指令,描述期望的功能变更或界面调整目标,用于驱动 AI 在已有网页代码基础上执行修改 |
+
+**P2 type_registry**
+
+| 类型名 | extends | 描述 |
+|---|---|---|
+| 产品信息 | 描述 | 用户录入的产品基本信息,包含产品类型(单产品单角度)、品类(如手机)和核心卖点等字段,作为 AI 分析和生成提示词的产品描述依据 |
+| 风格配置 | 生成参数 | 用户在视觉提示词反推工作站中设定的画面风格参数集合,包含风格关键词(如高品质KV)、时间段(如深夜暗调)和分类标签(如KV主视觉海报),用于约束 AI 生成 MJ 提示词时的风格方向 |
+
+---
+
+## L1 外部函数库
+
+| 函数 / 工具 | 类型 | 用途 | 出现步骤 |
+|---|---|---|---|
+| Google Gemini Canvas | AI 代码生成平台 | 接收元提示词,实时在右侧生成并预览可交互网页;支持对话式代码修改 | p1.s2, p1.s3.1 |
+| 视觉提示词反推工作站 | AI 网页应用(P1 的产出) | 内置 Gemini Pro 模型,专业策划模式绑定产品信息+参考图,输出结构化 MJ 提示词方案 | p2.s3 |
+
+---
+
+## L2 抽象动作 + impl 关系
+
+| 抽象动作路径 | 语义 | 本 case impl |
+|---|---|---|
+| 生成/元素生成 | 从输入材料生成新的内容对象 | p1.s1: 人工从需求描述生成元提示词;p1.s2: Gemini Canvas 从元提示词生成网页应用 |
+| 修改/变/替换 | 在已有对象上按需求替换特定字段/模块 | p1.s3.1: Gemini Canvas 按修改需求更新网页代码(模型接口替换) |
+| 获取/录入/上传 | 将外部文件/图片导入当前工具环境 | p2.s1: 人工上传手机产品图并填写产品信息 |
+| 获取/录入/键入 | 通过键盘/表单输入结构化参数 | p2.s2: 人工在控制栏键入风格关键词、时间段、分类标签 |
+| 提取/化学提取/反推 | 从图像/素材中逆向提取生成参数/描述词 | p2.s3: 工作站从产品图+风格配置反推 MJ 提示词 |
+
+---
+
+## L3 工序模板
+
+### 模板 A:元提示词驱动零代码网页构建 (对应 P1)
+
+**输入**: `工具需求描述 :: 描述`
+**返回**: `网页应用`
+
+```
+declare inputs:
+  工具需求描述 :: 描述          # 对想构建的工具功能的自然语言说明
+
+s1 [human · 预处理]
+  in:  工具需求描述 :: 描述
+  out: 元提示词 :: 元提示词      # RCCUWI 结构化系统提示词
+
+s2 [AI代码生成平台 · 主体生成]
+  in:  元提示词 :: 元提示词
+  out: 网页应用 :: 网页应用      # 初始可交互网页
+
+s3 [block · 遍历 修改需求序列]
+  in:  修改需求序列 :: 修改需求  # ← 用户交互
+  in:  网页应用 :: 网页应用      # ← s2
+  out: 网页应用 :: 网页应用      # 最终迭代完成版
+
+  s3.1 [AI代码生成平台 · 主体生成 · 替换]
+    in:  修改需求 :: 修改需求    # ← 序列[i]
+    in:  网页应用 :: 网页应用    # ← s3 当前版本
+    out: 网页应用 :: 网页应用    # → 更新版本,进入下一轮
+
+return 网页应用
+```
+
+### 模板 B:产品图反推 MJ 提示词 (对应 P2)
+
+**输入**: `产品图 :: 参考图`
+**返回**: `提示词`
+
+```
+declare inputs:
+  产品图 :: 参考图              # 需要反推提示词的产品照片
+
+s1 [human · 预准备 · 上传]
+  in:  产品图 :: 参考图
+  out: 产品信息 :: 产品信息     # 产品类型/品类/核心卖点
+
+s2 [human · 预处理 · 键入]
+  in:  产品信息 :: 产品信息
+  out: 风格配置 :: 风格配置     # 风格关键词/时间段/分类标签
+
+s3 [AI网页工具 · 主体生成 · 反推]
+  in:  产品图 :: 参考图         # ← 工序输入
+  in:  产品信息 :: 产品信息     # ← s1
+  in:  风格配置 :: 风格配置     # ← s2
+  out: MJ提示词方案 :: 提示词   # CORE BRIEF + PROMPT ANALYSIS
+
+return 提示词
+```
+
+---
+
+## L4 工序实例
+
+### P1 实例 — Gemini Canvas 零代码构建视觉提示词反推工作站
+
+**inputs (本次实际值)**
+
+| 变量名 | 类型 | 值 |
+|---|---|---|
+| 工具需求描述 | 描述 | 需要一个可以上传产品图片和参考图,然后反推提示词的网页界面 |
+
+**bindings (本次工具选择)**
+
+| 步骤 | via |
+|---|---|
+| s1 | human |
+| s2 | Gemini Canvas |
+| s3.1 | Gemini Canvas |
+
+**extracted_values (本次中间产物)**
+
+`s1.out · 元提示词` (图5,RCCUWI 结构模板,注:图中所有角色字段均为占位符):
+```
+# Role (角色设定)
+你是一位拥有**【请输入经验年限,如:15年】**经验的
+**【请输入专家头衔,如:资深Python后端工程师/小红书爆款文案专家】**
+(注:图中 Role/Context/User Profile/Constraints/Workflow/Initialization
+各节均为占位符,正文提到完整框架名为 RCCUWI)
+```
+
+`s2.out · 视觉提示词反推工作站(初始版)` (图2-3描述):
+```
+<赛博朋克风可交互网页 UI:
+  左侧主体产品区:上传产品图、单产品单角度、核心卖点输入
+  中间控制栏:锁定首图风格/时间段选择/风格关键词/10个分类标签下拉/参考图上传
+  右侧 AI 助手:专业策划 + 普通问答两模式切换
+  底部方案库:NO/IMAGE/TYPE/CORE BRIEF/PROMPT ANALYSIS/OPT 列表>
+```
+
+`s3.1.in[0] · 修改需求` (图4,用户原文):
+```
+我的AI助手的专业策划的语言模型接口改为和是上传参考图推理的模型一样
+然后将所有模型改为geminipro的模型
+```
+
+`s3.1.out · Gemini Canvas 执行回应` (图4,AI回应列出3项修改):
+```
+1. 统一模型接口:将专业策划模式的语言模型接口改为与图像推理模型相同
+2. 升级模型标识:所有内部模型标识升级为 Gemini Pro
+3. 修复 PRO_SYSTEM_INSTRUCTION(相关配置修复)
+```
+
+**trace**: 暂无计时/成本/重试记录
+
+---
+
+### P2 实例 — 使用视觉提示词反推工作站生成 MJ 提示词
+
+**inputs (本次实际值)**
+
+| 变量名 | 类型 | 值 |
+|---|---|---|
+| 产品图 | 参考图 | `<手机产品图:深色背景下正面视角手机,OLED 屏幕发光,金属机身,暗调低光摄影风格(图6-7)>` |
+
+**bindings (本次工具选择)**
+
+| 步骤 | via |
+|---|---|
+| s1 | human |
+| s2 | human |
+| s3 | 视觉提示词反推工作站(内置 Gemini Pro) |
+
+**extracted_values (本次中间产物)**
+
+`s1.out · 产品信息` (图6-7 工具界面可见):
+```
+产品类型: 单产品单角度
+产品品类: 手机
+核心卖点: (图中该字段为空,原文未提供具体卖点文字)
+```
+
+`s2.out · 风格配置` (图7 风格控制栏):
+```
+风格关键词: 高品质精准用户kv(已添加标签,显示为 "高品质精准用户kv×")
+分类标签: KV主视觉海报
+时间段 / 环境光: 深夜(暗调)
+note: "图7中可见两个风格标签已激活:'高品质精准用户kv×' + 'KV主视觉海报×'"
+```
+
+`s3.out · MJ提示词方案` (图6-7 方案库可见,原文部分截断):
+```
+方案01
+CORE BRIEF: 融合高级商务与时尚的KV主视觉,通过戏剧性高光展示智高色手机的精致
+设计和相机组,背景采用商务感和香槟色调融合
+PROMPT ANALYSIS: (图中文本截断,完整 prompt 词未完整显示)
+note: "图中 PROMPT ANALYSIS 字段文字因截图边界截断,无法回填完整 prompt 词"
+```
+
+**trace**: 暂无计时/成本/重试记录
+
+---
+
+## 这个 case 对 DSL 设计的关键启发
+
+1. **元层工序 vs 对象层工序的分离建模**:本 case 有两层:P1="构建工具"(元层),P2="使用工具"(对象层)。虽然共享同一篇帖子,但终态产物类型、输入类型、执行主体全部不同,必须建模为两个独立 procedure —— 如果拍扁为一个工序,会混淆"生成工具"和"运行工具"两类完全不同的动作语义。
+
+2. **block + nested 描述"多轮对话修改"迭代模式**:`s3 (kind:block, control:遍历)` + `s3.1 (kind:nested, group:s3)` 能精确捕获"每轮提一个修改需求 → AI 更新网页 → 下一轮"的循环结构。block 层面持有修改需求序列容器 + 网页初始状态;nested 层面持有单次修改的具体动作。这是 AI 辅助开发中高频出现的"对话式迭代修改"模式的标准建模方案。
+
+3. **元提示词 (RCCUWI) 作为独立类型**:元提示词在语义上明显不同于"图像生成正向 prompt",但两者都是文本型提示词。用 `type_registry` 中 `extends: 提示词` + `desc` 区分,比直接混用 `提示词` 类型更精确,也避免与 P2 中输出的 MJ 提示词产生类型混淆。
+
+4. **工具即工序产物的链式复用**:P1 的终态产出(网页应用 :: 网页应用)直接成为 P2 步骤的执行主体(`via: 视觉提示词反推工作站`)。这种"上一工序造工具,下一工序用工具"的链式结构在 AIGC 实践中普遍存在,DSL 中 `via` 字段的值对应工具名,而该工具名就是前一工序 type_registry 中定义的产物类型名 —— 形成了工具与产物之间的命名一致性约定。
+
+5. **RCCUWI 框架作为元提示词工艺**:图5 展示的 RCCUWI 结构(6个槽位全部为占位符模板)说明元提示词本身是一种可复用的"空壳模板",质量高低取决于各槽位的定制程度。DSL 层面,s1 的 action 为 `生成/元素生成` 而非 `获取/录入/键入`,暗示人工整理元提示词是创造性生成而非机械录入。

+ 73 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/understanding.md

@@ -0,0 +1,73 @@
+# Understanding: B_xhs_695b81a3
+
+## 来源信息
+- **标题**: 零代码!我用 Gemini 写提示次反推神器!
+- **平台**: 小红书 (xhs)
+- **发布时间**: 2026-01-05 17:17:23
+- **链接**: https://www.xiaohongshu.com/explore/695b81a3000000002103f561
+
+---
+
+## 多工序判断:本 case 包含 2 个独立工序
+
+扫描所有图片和正文后,识别到两条完整的输入→终态产出链:
+
+| | P1 | P2 |
+|---|---|---|
+| 工序名 | Gemini Canvas 零代码构建视觉提示词反推工作站 | 使用视觉提示词反推工作站生成 MJ 提示词 |
+| 终态产物 | 可交互网页工具(Gemini Prompt Planner) | MJ 提示词方案列表 |
+| 主要输入 | 元提示词(RCCUWI 结构定制指令) | 产品图 |
+| 步骤数 | ~4 步 | ~3 步 |
+| 工艺类型 | AI 辅助零代码网页开发 | AI 辅助视觉提示词策划 |
+| 主要工具 | Google Gemini Canvas | 视觉提示词反推工作站(内置 geminipro 模型) |
+| 图片证据 | 图1(平台使用指南)、图2-3(工具界面)、图4(Canvas 代码编辑)、图5(元提示词模板) | 图1(核心流程说明)、图6-7(产品图上传+方案生成)、图8(AI助手对话) |
+
+**判断依据**:
+- P1 产出 = 可运行的网页工具;P2 产出 = MJ 提示词文本。终态产物类型不同,方法不同,满足独立工序判断标准。
+- P1 的"构建工具"和 P2 的"使用工具"各有完整的输入→做法→输出链,不是同一工序内的中间步骤关系。
+
+---
+
+## P1 工序梗概:Gemini Canvas 零代码构建视觉提示词反推工作站
+
+**核心创新**:不写任何代码,仅靠自然语言指令(元提示词)让 Gemini Canvas 在右侧直接生成完整可交互前端网页,实时预览。
+
+**步骤链**:
+1. **s1(人工)** 整理元提示词 —— 按 RCCUWI 结构(Role/Context/User Profile/Constraints/Workflow/Initialization)定制系统提示词,明确"帮我生成一个可上传产品图+参考图并反推提示词的网页界面"的需求
+2. **s2(Gemini Canvas)** 发送元提示词 → 生成初始网页 —— Gemini 直接在右侧生成赛博朋克风可交互网页,支持实时预览
+3. **s3(遍历块,Gemini Canvas)** 迭代调整网页 —— 用自然语言提出修改需求(如改颜色、改 AI 模型接口),Gemini Canvas 自动更新代码;图4 展示的修改是将 AI 助手的语言模型接口改为 geminipro
+
+**关键隐含工艺**:
+- 元提示词质量决定生成质量:RCCUWI 结构是提示工程的框架,需要根据具体工具需求定制 Role/Context/Constraints
+- 迭代调整是必要步骤:首次生成后通常需要多轮对话修改(模型选择、功能逻辑、UI 样式等)
+- 生成的工具可直接分享给他人使用(右上角分享按钮)
+
+---
+
+## P2 工序梗概:使用视觉提示词反推工作站生成 MJ 提示词
+
+**工具内核**:工具内置 Gemini Pro 模型,"专业策划模式"强制绑定产品信息,从产品图自动识别光影/构图/材质,结合风格参数输出结构化 Prompt(CORE BRIEF + PROMPT ANALYSIS)。
+
+**步骤链**:
+1. **s1(人工)** 上传产品图并填写基本信息 —— 在左侧面板上传产品图(本 case:手机),填写"单产品单角度"/"产品名称"/"核心卖点"
+2. **s2(人工)** 设定画面风格参数 —— 在中间控制栏选择时间段(环境光),输入自定义风格关键词(如"高品质精准用户kv"),添加分类标签(如"KV主视觉海报"),可选上传参考图
+3. **s3(AI 助手/视觉提示词反推工作站)** AI 分析图像生成 MJ 提示词方案 —— 专业策划模式绑定产品信息+参考图风格,生成多个结构化 Prompt 方案,自动归档至方案库
+
+**工具特性(从图1导览观察)**:
+- 批量上传:多张参考图可同时拖入中间上传区
+- 一键复制:结果自动添加"国一..."前缀,方便直接在 MJ 中使用
+- 模式切换:随时切换专业策划 / 普通问答模式
+- 洞察报告:底部一键生成所有方案的风格趋势分析
+
+---
+
+## 关键图片内容摘要
+
+| 图 | 内容 |
+|---|---|
+| 图1 | 平台使用指南弹框:核心流程(上传产品→设定风格→AI策划→方案库)+ 右侧AI助手说明(专业策划/普通问答两模式)+ 快捷操作(批量上传/一键复制/模式切换/洞察报告) |
+| 图2-3 | Gemini Prompt Planner 空状态界面:左侧产品区、中间风格控制栏(多维度标签)、右侧AI助手 |
+| 图4 | Gemini Canvas 代码编辑视图:用户请求将AI助手的语言模型统一改为geminipro;Gemini回应列出3项修改(统一模型接口/升级模型标识/修复PRO_SYSTEM_INSTRUCTION)|
+| 图5 | 元提示词模板(魔法咒语):RCCUWI 结构,全部字段为占位符,用于定制化生成各类 AI 工具指令 |
+| 图6-7 | 工具使用状态:已上传手机产品图,设置"高品质精准用户kv×"+"KV主视觉海报"风格标签,生成1-2条 Prompt 方案(包含 CORE BRIEF + PROMPT ANALYSIS) |
+| 图8 | AI助手普通问答模式:用户说"你好",AI回复并询问绘画需求 |

Разница между файлами не показана из-за своего большого размера
+ 62 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/B_xhs_695b81a3/workflow.json


+ 1 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/.session_id

@@ -0,0 +1 @@
+33bf2d99-e4ce-4a3c-9b88-58b38189ad75

+ 7 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_meta.json

@@ -0,0 +1,7 @@
+{
+  "case_id": "xhs_69ee467400000000220289e2",
+  "from_q": "q0010",
+  "form": "C",
+  "score": 0.0,
+  "started_at": "2026-06-01T15:32:30"
+}

+ 34 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix.py

@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+"""Fix 2B patch: find valid substance/form paths for LLM inference case."""
+import subprocess, sys, os, json
+
+SPEC = "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl"
+TOOL = os.path.join(SPEC, "spec/tools/taxonomy-lookup.py")
+OUT  = "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix_out.txt"
+
+def q(dim, flag, arg):
+    r = subprocess.run([sys.executable, TOOL, "--dim", dim, flag, arg],
+                       capture_output=True, cwd=SPEC)
+    return r.stdout.decode("utf-8","replace") + r.stderr.decode("utf-8","replace")
+
+lines = []
+lines.append("=== 实质 L2 ===")
+lines.append(q("实质","--list-l2",""))
+lines.append("\n=== 形式 L2 ===")
+lines.append(q("形式","--list-l2",""))
+lines.append("\n=== substance match: AI 机器学习 大模型 ===")
+lines.append(q("实质","--match","AI 机器学习 大模型"))
+lines.append("\n=== substance match: 自然语言 文本 指令 ===")
+lines.append(q("实质","--match","自然语言 文本 指令"))
+lines.append("\n=== form match: 流程图 步骤 图解 ===")
+lines.append(q("形式","--match","流程图 步骤 图解"))
+lines.append("\n=== form match: 序列 列表 数组 ===")
+lines.append(q("形式","--match","序列 列表 数组"))
+lines.append("\n=== substance validate /理念/知识/商业/前沿技术/AI智能/机器学习 ===")
+lines.append(q("实质","--validate","/理念/知识/商业/前沿技术/AI智能/机器学习"))
+lines.append("\n=== substance narrow: AI 深度学习 神经网络 ===")
+lines.append(q("实质","--narrow","AI 深度学习 神经网络"))
+
+with open(OUT, "w", encoding="utf-8") as f:
+    f.write("\n".join(lines))
+print("Done, written to", OUT)

+ 46 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix2.py

@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+"""Validate candidate paths and build corrected patch_2b."""
+import subprocess, sys, os, json
+
+SPEC = "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl"
+TOOL = os.path.join(SPEC, "spec/tools/taxonomy-lookup.py")
+OUT  = "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix2_out.txt"
+
+def q(dim, flag, arg):
+    r = subprocess.run([sys.executable, TOOL, "--dim", dim, flag, arg],
+                       capture_output=True, cwd=SPEC)
+    return r.stdout.decode("utf-8","replace").strip() + r.stderr.decode("utf-8","replace").strip()
+
+lines = []
+
+# Validate candidate form paths
+forms_to_validate = [
+    "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进",
+    "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举",
+    "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举",
+    "/架构/叙事/叙事体裁/演说交流/科普教学/课堂讲座",
+    "/架构/叙事/叙事体裁/演说交流/科普教学",
+]
+lines.append("=== FORM VALIDATE ===")
+for p in forms_to_validate:
+    lines.append(q("形式","--validate", p))
+
+# Validate substance paths
+subs_to_validate = [
+    "/理念/知识/商业/前沿技术/AI智能/机器学习",
+    "/理念/知识/商业/前沿技术/AI智能/AI应用",
+    "/表象/视觉/符号/文字符号/正文",
+]
+lines.append("\n=== SUBSTANCE VALIDATE ===")
+for p in subs_to_validate:
+    lines.append(q("实质","--validate", p))
+
+# More form searches
+lines.append("\n=== FORM match: 科普 知识讲解 教学 ===")
+lines.append(q("形式","--match","科普 知识讲解 教学"))
+lines.append("\n=== FORM match: 步骤 流程 逻辑 ===")
+lines.append(q("形式","--match","步骤 流程 逻辑"))
+
+with open(OUT, "w", encoding="utf-8") as f:
+    f.write("\n".join(lines))
+print("Done")

+ 59 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix2_out.txt

@@ -0,0 +1,59 @@
+=== FORM VALIDATE ===
+OK       /架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进  (348 aliases)
+OK       /架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举  (119 aliases)
+OK       /架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举  (110 aliases)
+OK       /架构/叙事/叙事体裁/演说交流/科普教学/课堂讲座  (22 aliases)
+OK       /架构/叙事/叙事体裁/演说交流/科普教学  (38 aliases)
+
+=== SUBSTANCE VALIDATE ===
+OK       /理念/知识/商业/前沿技术/AI智能/机器学习  (51 aliases)
+OK       /理念/知识/商业/前沿技术/AI智能/AI应用  (76 aliases)
+OK       /表象/视觉/符号/文字符号/正文  (332 aliases)
+
+=== FORM match: 科普 知识讲解 教学 ===
+查询: '科普 知识讲解 教学' (拆 3 token: ['科普', '知识讲解', '教学']) — 共 26 候选, top 10:

+

+  [score 1024] /架构/叙事/叙事体裁/演说交流/科普教学   [命中 token: 教学,知识讲解,科普]

+                └─ 科普叙述 / 科普式口播 / 科普式 / 科普化 / 科普式陈述

+  [score 247] /架构/叙事/叙事体裁/演说交流/科普教学/课堂讲座   [命中 token: 教学,科普]

+                └─ 图解教学 / 教学图示 / 教学感 / 教学结构 / 课堂教学

+  [score 195] /架构/叙事/叙事体裁/演说交流/科普教学/学科科普   [命中 token: 教学,科普]

+                └─ 真相科普 / 历史科普 / 国情科普 / 航天科普 / 地质科普

+  [score 156] /架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进   [命中 token: 教学,科普]

+                └─ 分步科普 / 分步骤图解教学 / 图文分步教学 / 图文结合教学 / 分步教学式

+  [score  80] /架构/策略/互动方式/实用指引/操作教程

+                └─ 分步骤教学 / 教学式互动 / 分步教学 / 实操教学

+  [score  78] /呈现/听觉/语音/表达形式/口播讲述/解说讲解   [命中 token: 教学,科普]

+                └─ 口播式科普 / 口播教学 / 口播教学形式

+  [score  78] /呈现/视觉/视觉制作/构图编排/版面设计/标注图示   [命中 token: 教学,科普]

+                └─ 科普式标注 / 标注式教学 / 图文标注式教学

+  [score  60] /呈现/视觉/视觉制作/实景拍摄/拍摄取景/场景取景

+                └─ 真人实景教学 / 教学场景 / 课堂教学场景

+  [score  60] /架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举

+                └─ 分点科普 / 清单化科普 / 分点式科普

+  [score  40] /架构/逻辑/信息编排逻辑/归纳论证/数据实证/数据呈现

+                └─ 数据化科普 / 数据科普
+
+=== FORM match: 步骤 流程 逻辑 ===
+查询: '步骤 流程 逻辑' (拆 3 token: ['步骤', '流程', '逻辑']) — 共 86 候选, top 10:

+

+  [score 2800] /架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进   [命中 token: 步骤,流程,逻辑]

+                └─ 分步骤引导 / 步骤 / 步骤引导 / 步骤说明 / 步骤式叙述

+  [score 430] /架构/逻辑/信息编排逻辑/归纳论证/逻辑推论/论证策略

+                └─ 阐述逻辑 / 建立崇拜逻辑 / 解释逻辑 / 逻辑链条 / 逻辑论证

+  [score 290] /架构/逻辑/信息编排逻辑/归纳论证/分析解读/因果推理

+                └─ 逻辑分析 / 逻辑推导模式 / 因果逻辑链条 / 必然性逻辑 / 逻辑链条

+  [score 224] /呈现/视觉/视觉制作/构图编排/版面设计/标注图示   [命中 token: 步骤,流程,逻辑]

+                └─ 分步骤图文拆解 / 分步骤图解 / 步骤文字叠加 / 流程图中的箭头指示方向 / 流程图解

+  [score 182] /架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举   [命中 token: 步骤,逻辑]

+                └─ 数字步骤编号 / 步骤编号标识 / 步骤编号 / 步骤序号引导 / 步骤编号引导

+  [score 170] /架构/逻辑/信息编排逻辑/归纳论证/逻辑推论/推理机制

+                └─ 因果逻辑 / 因果逻辑叙述 / 因果逻辑推导 / 因果逻辑连接词 / 因果逻辑表达

+  [score 140] /架构/逻辑/信息编排逻辑/条目列举/分段结构

+                └─ 逻辑框架 / 文案逻辑 / 逻辑结构 / 逻辑架构 / 内容组织逻辑

+  [score 140] /架构/逻辑/信息编排逻辑/归纳论证/分析解读/拆解剖析

+                └─ 逻辑解析 / 逻辑分析语气 / 逻辑解构 / 逻辑拆解式 / 逻辑剖析

+  [score 120] /架构/修辞/修辞意象/比拟转化/具象转化/隐喻类比

+                └─ 逻辑转换 / 通俗化逻辑 / 逻辑平移 / 逻辑类比 / 物化交易逻辑

+  [score 100] /架构/逻辑/信息编排逻辑/归纳论证

+                └─ 逻辑关联 / 逻辑重组 / 逻辑支撑

+ 138 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix_out.txt

@@ -0,0 +1,138 @@
+=== 实质 L2 ===
+usage: taxonomy-lookup.py [-h] --dim {实质,形式}

+                          (--list-l2 | --subtree PATH | --match QUERY | --narrow QUERY | --validate PATH)

+                          [--top TOP] [--max-alias MAX_ALIAS] [--depth DEPTH]

+                          [--top-per-level TOP_PER_LEVEL]

+taxonomy-lookup.py: error: unrecognized arguments: 

+
+
+=== 形式 L2 ===
+usage: taxonomy-lookup.py [-h] --dim {实质,形式}

+                          (--list-l2 | --subtree PATH | --match QUERY | --narrow QUERY | --validate PATH)

+                          [--top TOP] [--max-alias MAX_ALIAS] [--depth DEPTH]

+                          [--top-per-level TOP_PER_LEVEL]

+taxonomy-lookup.py: error: unrecognized arguments: 

+
+
+=== substance match: AI 机器学习 大模型 ===
+查询: 'AI 机器学习 大模型' (拆 3 token: ['AI', '机器学习', '大模型']) — 共 39 候选, top 10:

+

+  [score 960] /理念/知识/商业/前沿技术/AI智能/机器学习   [命中 token: AI,大模型,机器学习]

+                └─ 轻量级AI算法 / AI基础底座 / Chai-2 / 物流垂直AI大模型 / AI模型

+  [score 860] /表象/视觉/实体/人物/人物特征/形象呈现

+                └─ AI肖像 / AI老者 / AI亚洲美人 / AI女性 / AI红衣少女

+  [score 580] /理念/知识/商业/前沿技术/AI智能/AI应用

+                └─ AI语音 / AI原生产品 / AI医疗赛道 / 物理AI / AI使用者

+  [score 520] /表象/视觉/实体/物品/影像物品/艺术创作

+                └─ AI生成式 / AI蘑菇云 / AI艺术画面 / AI生成内容 / AI花卉

+  [score 180] /表象/视觉/实体/物品/器材物品/设备

+                └─ AI驱动硬件 / 新的AI驱动的硬件终端 / AI芯片 / AI画质芯片 / 国产AI芯片

+  [score 160] /理念/知识/公共管理/公共安全/防诈反骗/诈骗手法

+                └─ AI视频通话诈骗 / AI视频读数诈骗 / AI数字人骗贷套路 / AI人脸识别诈骗 / AI骗贷

+  [score 140] /表象/视觉/实体/机构/商业机构

+                └─ AI公司 / AI制药独角兽行列 / Grains of Wrath / AI Factory / 悦荟Mosaic

+  [score  78] /理念/知识/商业/产品服务/使用场景   [命中 token: AI,大模型]

+                └─ 隐私场景使用AI大模型 / AI播客

+  [score  60] /表象/视觉/画面/后期

+                └─ AI特效 / AI特效生成 / AI超现实特效

+  [score  60] /理念/知识/商业/行业分析/行业领域

+                └─ AI行业 / AI领域 / AI眼镜行业

+
+
+=== substance match: 自然语言 文本 指令 ===
+查询: '自然语言 文本 指令' (拆 3 token: ['自然语言', '文本', '指令']) — 共 36 候选, top 10:

+

+  [score 250] /表象/视觉/符号/文字符号/正文

+                └─ 纯文本 / 描述文本 / 特定文本 / 对联文本 / 总结性文本

+  [score 247] /理念/方法/生活技巧/办事指南   [命中 token: 指令,文本]

+                └─ 文本建议 / 引导指令 / 指令 / 行动指令 / 教学指令

+  [score 160] /表象/视觉/符号/文字符号/正文/文案短句

+                └─ 短文本 / 反讽式文本 / 正能量文本 / 押韵文本 / 情感文本

+  [score 156] /表象/视觉/符号/文字符号/字幕/引导字幕   [命中 token: 指令,文本]

+                └─ 互动文本 / 分条指令字幕 / 互动指令 / 转发指令 / 分享指令

+  [score  52] /表象/视觉/实体/物品/器物物品/道具   [命中 token: 指令,文本]

+                └─ 经典文本 / 行动指令卡片

+  [score  40] /表象/视觉/符号/文字符号/字幕

+                └─ 文本内容 / 文本框

+  [score  40] /表象/视觉/符号/文字符号/字幕/说明字幕

+                └─ 历史事件文本 / 解说文本

+  [score  40] /表象/视觉/符号/文字符号/正文/诗词文学

+                └─ 诗词文本 / 毛泽东诗词文本

+  [score  40] /表象/视觉/符号/文字符号/标注/提示引导

+                └─ 指令文字 / 社交指令

+  [score  40] /表象/视觉/行为/人际互动/表达沟通/情感表达

+                └─ 祝福语文本 / 祝愿文本

+
+
+=== form match: 流程图 步骤 图解 ===
+查询: '流程图 步骤 图解' (拆 3 token: ['流程图', '步骤', '图解']) — 共 7 候选, top 7:

+

+  [score 2656] /架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进   [命中 token: 图解,步骤,流程图]

+                └─ 流程图的模块化布局 / 箭头式流程图 / 流程图 / 流程图解结构 / 手绘风格流程图

+  [score 784] /呈现/视觉/视觉制作/构图编排/版面设计/标注图示   [命中 token: 图解,步骤,流程图]

+                └─ 流程图中的箭头指示方向 / 流程图解 / 分步骤图文拆解 / 分步骤图解 / 步骤文字叠加

+  [score 100] /架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举

+                └─ 数字步骤编号 / 步骤编号标识 / 步骤编号 / 步骤序号引导 / 步骤编号引导

+  [score  40] /呈现/视觉/视觉制作/构图编排/版面设计/图文关系

+                └─ 图解式 / 财经图解

+  [score  20] /架构/策略/互动方式/实用指引/操作教程

+                └─ 分步骤教学

+  [score  20] /架构/策略/互动方式/受众互动/指令引导/定向指令

+                └─ 步骤化指令语气

+  [score  20] /架构/叙事/叙事体裁/演说交流/科普教学/课堂讲座

+                └─ 图解教学

+
+
+=== form match: 序列 列表 数组 ===
+查询: '序列 列表 数组' (拆 3 token: ['序列', '列表', '数组']) — 共 16 候选, top 10:

+

+  [score 730] /架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举

+                └─ 列表化展示 / 列表式 / 列表式排布 / 列表形式 / 列表式建议

+  [score 416] /架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举   [命中 token: 列表,序列]

+                └─ 序列标识 / 编号序列化 / 数字序列化 / 序列化结构 / 数字序列式

+  [score 208] /呈现/视觉/视觉制作/构图编排/版面设计/图文关系   [命中 token: 列表,序列]

+                └─ 图文序列叙事 / 图文结合的列表式呈现 / 图文结合列表式呈现 / 图文结合列表式 / 多图文列表

+  [score 190] /架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进

+                └─ 细节补充式图片序列 / 序列化展示 / 成语序列 / 动作序列 / 序列

+  [score 156] /呈现/视觉/视觉制作/构图编排/版面设计/版面结构   [命中 token: 列表,序列]

+                └─ 图片序列 / 多配方列表呈现 / 列表式排版 / 双列列表 / 卡片式列表结构

+  [score  40] /架构/逻辑/信息编排逻辑/条目列举/盘点汇编/多样性表现

+                └─ 多配方列表式呈现 / 多图列表式呈现

+  [score  20] /架构/逻辑/信息编排逻辑/条目列举/逐条罗列

+                └─ 列表式拆解

+  [score  20] /呈现/视觉/视觉制作/剪辑组接/剪辑手法/轮播展示

+                └─ 多模态展示序列

+  [score  20] /呈现/视觉/视觉制作/实景拍摄/拍摄方式/即时捕捉

+                └─ 动态序列

+  [score  20] /呈现/视觉/视觉制作/构图编排/空间布局/元素编排

+                └─ 序列化

+
+
+=== substance validate /理念/知识/商业/前沿技术/AI智能/机器学习 ===
+OK       /理念/知识/商业/前沿技术/AI智能/机器学习  (51 aliases)

+
+
+=== substance narrow: AI 深度学习 神经网络 ===
+层级下钻: query='AI 深度学习 神经网络'  tokens=['AI', '深度学习', '神经网络']  depth=3  top_per_level=3

+

+[L2] 候选 6 个, 取 top 3:

+  [hits   87 / cov 2/3]  /理念/知识   (306 子节点)

+  [hits  103 / cov 1/3]  /表象/视觉   (322 子节点)

+  [hits    2 / cov 1/3]  /理念/事件   (65 子节点)

+

+[L3] 候选 11 个, 取 top 3:

+  [hits   72 / cov 2/3]  /理念/知识/商业 ★叶子   (41 子节点)

+  [hits   93 / cov 1/3]  /表象/视觉/实体   (65 子节点)

+  [hits    9 / cov 1/3]  /理念/知识/公共管理 ★叶子   (42 子节点)

+

+[L4] 候选 8 个, 取 top 3:

+  [hits   60 / cov 2/3]  /理念/知识/商业/前沿技术 ★叶子   (12 子节点)

+  [hits   46 / cov 1/3]  /表象/视觉/实体/人物   (10 子节点)

+  [hits   37 / cov 1/3]  /表象/视觉/实体/物品   (20 子节点)

+

+[L5] 候选 7 个, 取 top 3:

+  [hits   59 / cov 2/3]  /理念/知识/商业/前沿技术/AI智能 ★叶子   (4 子节点)

+  [hits   45 / cov 1/3]  /表象/视觉/实体/人物/人物特征 ★叶子   (5 子节点)

+  [hits   27 / cov 1/3]  /表象/视觉/实体/物品/影像物品 ★叶子   (5 子节点)

+

+提示: 末层 top 候选若仍非叶子, 用 --subtree <path> 列叶子, 再 --validate <leaf> 确认.


+ 153 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/patch_2a.json

@@ -0,0 +1,153 @@
+[
+  {"path": "p1.s1.effect", "value": "预处理"},
+  {"path": "p1.s1.action", "value": "提取/化学提取/识别"},
+  {"path": "p1.s1.inputs[0].type", "value": "提示词"},
+  {"path": "p1.s1.outputs[0].type", "value": "Token序列"},
+
+  {"path": "p1.s2.effect", "value": "预处理"},
+  {"path": "p1.s2.action", "value": "修改/变/转换"},
+  {"path": "p1.s2.inputs[0].type", "value": "Token序列"},
+  {"path": "p1.s2.outputs[0].type", "value": "Token_ID序列"},
+
+  {"path": "p1.s3.effect", "value": "预处理"},
+  {"path": "p1.s3.action", "value": "生成/元素生成"},
+  {"path": "p1.s3.inputs[0].type", "value": "Token_ID序列"},
+  {"path": "p1.s3.outputs[0].type", "value": "Token_ID序列"},
+  {"path": "p1.s3.outputs[1].type", "value": "注意力掩码"},
+
+  {"path": "p1.s4.effect", "value": "预处理"},
+  {"path": "p1.s4.action", "value": "提取/化学提取/反推"},
+  {"path": "p1.s4.inputs[0].type", "value": "Token_ID序列"},
+  {"path": "p1.s4.outputs[0].type", "value": "嵌入矩阵"},
+
+  {"path": "p1.s5.effect", "value": "预处理"},
+  {"path": "p1.s5.action", "value": "修改/增/添加"},
+  {"path": "p1.s5.inputs[0].type", "value": "嵌入矩阵"},
+  {"path": "p1.s5.outputs[0].type", "value": "隐状态矩阵"},
+
+  {"path": "p1.s6.effect", "value": "主体生成"},
+  {"path": "p1.s6.action", "value": "生成/元素生成"},
+  {"path": "p1.s6.inputs[0].type", "value": "隐状态矩阵"},
+  {"path": "p1.s6.outputs[0].type", "value": "隐状态矩阵"},
+
+  {"path": "p1.s6.1.effect", "value": "预处理"},
+  {"path": "p1.s6.1.action", "value": "提取/化学提取/反推"},
+  {"path": "p1.s6.1.inputs[0].type", "value": "隐状态矩阵"},
+  {"path": "p1.s6.1.outputs[0].type", "value": "QKV矩阵组"},
+
+  {"path": "p1.s6.2.effect", "value": "预处理"},
+  {"path": "p1.s6.2.action", "value": "修改/变/转换"},
+  {"path": "p1.s6.2.inputs[0].type", "value": "QKV矩阵组"},
+  {"path": "p1.s6.2.outputs[0].type", "value": "多头QKV"},
+
+  {"path": "p1.s6.3.effect", "value": "预处理"},
+  {"path": "p1.s6.3.action", "value": "修改/变/调整"},
+  {"path": "p1.s6.3.inputs[0].type", "value": "多头QKV"},
+  {"path": "p1.s6.3.outputs[0].type", "value": "多头QKV"},
+
+  {"path": "p1.s6.4.effect", "value": "预处理"},
+  {"path": "p1.s6.4.action", "value": "生成/元素生成"},
+  {"path": "p1.s6.4.inputs[0].type", "value": "多头QKV"},
+  {"path": "p1.s6.4.inputs[1].type", "value": "注意力掩码"},
+  {"path": "p1.s6.4.outputs[0].type", "value": "注意力分数矩阵"},
+
+  {"path": "p1.s6.5.effect", "value": "主体生成"},
+  {"path": "p1.s6.5.action", "value": "生成/元素生成"},
+  {"path": "p1.s6.5.inputs[0].type", "value": "注意力分数矩阵"},
+  {"path": "p1.s6.5.outputs[0].type", "value": "注意力输出矩阵"},
+
+  {"path": "p1.s6.6.effect", "value": "主体生成"},
+  {"path": "p1.s6.6.action", "value": "修改/增/添加"},
+  {"path": "p1.s6.6.inputs[0].type", "value": "注意力输出矩阵"},
+  {"path": "p1.s6.6.inputs[1].type", "value": "隐状态矩阵"},
+  {"path": "p1.s6.6.outputs[0].type", "value": "隐状态矩阵"},
+
+  {"path": "p1.s6.7.effect", "value": "主体生成"},
+  {"path": "p1.s6.7.action", "value": "修改/增/添加"},
+  {"path": "p1.s6.7.inputs[0].type", "value": "隐状态矩阵"},
+  {"path": "p1.s6.7.outputs[0].type", "value": "隐状态矩阵"},
+
+  {"path": "p1.s6.8.effect", "value": "预处理"},
+  {"path": "p1.s6.8.action", "value": "存储/暂存/缓存"},
+  {"path": "p1.s6.8.inputs[0].type", "value": "QKV矩阵组"},
+  {"path": "p1.s6.8.outputs[0].type", "value": "KV缓存"},
+
+  {"path": "p1.s7.effect", "value": "预处理"},
+  {"path": "p1.s7.action", "value": "提取/物理提取/裁切"},
+  {"path": "p1.s7.inputs[0].type", "value": "隐状态矩阵"},
+  {"path": "p1.s7.outputs[0].type", "value": "位置向量"},
+
+  {"path": "p1.s8.effect", "value": "预处理"},
+  {"path": "p1.s8.action", "value": "修改/变/增强"},
+  {"path": "p1.s8.inputs[0].type", "value": "位置向量"},
+  {"path": "p1.s8.outputs[0].type", "value": "归一化向量"},
+
+  {"path": "p1.s9.effect", "value": "主体生成"},
+  {"path": "p1.s9.action", "value": "生成/元素生成"},
+  {"path": "p1.s9.inputs[0].type", "value": "归一化向量"},
+  {"path": "p1.s9.outputs[0].type", "value": "logits向量"},
+
+  {"path": "p1.s10.effect", "value": "预处理"},
+  {"path": "p1.s10.action", "value": "修改/变/调整"},
+  {"path": "p1.s10.inputs[0].type", "value": "logits向量"},
+  {"path": "p1.s10.inputs[1].type", "value": "解码配置"},
+  {"path": "p1.s10.outputs[0].type", "value": "logits向量"},
+
+  {"path": "p1.s11.effect", "value": "预处理"},
+  {"path": "p1.s11.action", "value": "提取/物理提取/裁切"},
+  {"path": "p1.s11.inputs[0].type", "value": "logits向量"},
+  {"path": "p1.s11.outputs[0].type", "value": "候选Token列表"},
+
+  {"path": "p1.s12.effect", "value": "交付"},
+  {"path": "p1.s12.action", "value": "生成/元素生成"},
+  {"path": "p1.s12.inputs[0].type", "value": "候选Token列表"},
+  {"path": "p1.s12.outputs[0].type", "value": "输出Token"},
+
+  {"path": "p1.type_registry.Token序列.extends", "value": "描述"},
+  {"path": "p1.type_registry.Token序列.desc", "value": "Tokenizer将自然语言文本切分后得到的字符串token列表,如['今天','天气','很','好'],是文本在词表粒度上的离散序列表示"},
+
+  {"path": "p1.type_registry.Token_ID序列.extends", "value": "描述"},
+  {"path": "p1.type_registry.Token_ID序列.desc", "value": "Token序列中每个token在词表中对应的整数索引列表,形状[n,],值域[0, vocab_size-1],是模型实际消费的数字化输入"},
+
+  {"path": "p1.type_registry.注意力掩码.extends", "value": "蒙版"},
+  {"path": "p1.type_registry.注意力掩码.desc", "value": "与padded token_ids同形状的二元矩阵,有效token位置=1,padding位置=0,用于在注意力计算中屏蔽padding位置"},
+
+  {"path": "p1.type_registry.嵌入矩阵.extends", "value": "模型权重"},
+  {"path": "p1.type_registry.嵌入矩阵.desc", "value": "词嵌入查表后得到的token向量矩阵,形状[n, d_model],每行是对应token在连续语义空间中的浮点表示"},
+
+  {"path": "p1.type_registry.隐状态矩阵.extends", "value": "底图"},
+  {"path": "p1.type_registry.隐状态矩阵.desc", "value": "Transformer各层输入/输出的中间表征矩阵,形状[n, d_model],承载当前层对序列的语义理解,是后续层持续改造的对象"},
+
+  {"path": "p1.type_registry.QKV矩阵组.extends", "value": "底图"},
+  {"path": "p1.type_registry.QKV矩阵组.desc", "value": "注意力机制中Query、Key、Value三个线性投影矩阵的组合,各形状[n, d_model],分别负责查询匹配、键索引和值聚合"},
+
+  {"path": "p1.type_registry.多头QKV.extends", "value": "底图"},
+  {"path": "p1.type_registry.多头QKV.desc", "value": "将QKV矩阵reshape为多头形式后的张量,形状[n, n_heads, d_head],支持多头并行注意力计算"},
+
+  {"path": "p1.type_registry.注意力分数矩阵.extends", "value": "底图"},
+  {"path": "p1.type_registry.注意力分数矩阵.desc", "value": "QK点积经缩放和因果掩码处理后的注意力分数,形状[n_heads, n, n],未来位置被置为负无穷"},
+
+  {"path": "p1.type_registry.注意力输出矩阵.extends", "value": "底图"},
+  {"path": "p1.type_registry.注意力输出矩阵.desc", "value": "经softmax归一化后对V做加权求和得到的注意力输出,形状[n, n_heads, d_head],是多头注意力的直接产出"},
+
+  {"path": "p1.type_registry.位置向量.extends", "value": "底图"},
+  {"path": "p1.type_registry.位置向量.desc", "value": "最终隐状态矩阵最后一行XL[n-1],形状[d_model,],代表模型处理完整prompt后的上下文压缩表征"},
+
+  {"path": "p1.type_registry.归一化向量.extends", "value": "底图"},
+  {"path": "p1.type_registry.归一化向量.desc", "value": "经Final LayerNorm处理后的最终特征向量,形状[d_model,],数值尺度对齐到LM Head期望输入范围"},
+
+  {"path": "p1.type_registry.logits向量.extends", "value": "底图"},
+  {"path": "p1.type_registry.logits向量.desc", "value": "LM Head对最终表征线性投影得到的未归一化预测分数,形状[vocab_size,],每个位置对应词表中一个token的预测得分"},
+
+  {"path": "p1.type_registry.KV缓存.extends", "value": "生成参数"},
+  {"path": "p1.type_registry.KV缓存.desc", "value": "prefill阶段按层和注意力头缓存的K/V矩阵,每层形状[2, n_heads, n, d_head],供后续自回归decode阶段复用以避免重复计算"},
+
+  {"path": "p1.type_registry.解码配置.extends", "value": "生成参数"},
+  {"path": "p1.type_registry.解码配置.desc", "value": "控制解码行为的参数集合,包含temperature缩放系数、logits_bias词级偏置、repetition_penalty重复惩罚系数和bad_words_ids屏蔽列表"},
+
+  {"path": "p1.type_registry.候选Token列表.extends", "value": "样图"},
+  {"path": "p1.type_registry.候选Token列表.desc", "value": "经Top-k/Top-p截断后保留的候选token子集,形状仍[vocab_size,]但非候选位置logits被置为负无穷,等待最终采样决策"},
+
+  {"path": "p1.type_registry.输出Token.extends", "value": "正文"},
+  {"path": "p1.type_registry.输出Token.desc", "value": "经采样或argmax决策后产出的第一个生成token,对应词表中某个整数ID及其解码后的子词或字符,是本次推理的最终交付物"}
+]

+ 133 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/patch_2b.json

@@ -0,0 +1,133 @@
+[
+  {"path": "p1.s1.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s1.inputs[0].form", "value": "/表象/视觉/符号/文字符号/正文"},
+
+  {"path": "p1.s1.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s1.outputs[0].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举"},
+
+  {"path": "p1.s2.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s2.inputs[0].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举"},
+
+  {"path": "p1.s2.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s2.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s3.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s3.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s3.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s3.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s3.outputs[1].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s3.outputs[1].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s4.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s4.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s4.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s4.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s5.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s5.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s5.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s5.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.1.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.1.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.1.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.1.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.2.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.2.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.2.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.2.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.3.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.3.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.3.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.3.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.4.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.4.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.4.inputs[1].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.4.inputs[1].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.4.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.4.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.5.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.5.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.5.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.5.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.6.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.6.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.6.inputs[1].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.6.inputs[1].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.6.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.6.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.7.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.7.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.7.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.7.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.8.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.8.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s6.8.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.8.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s7.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s7.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s7.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s7.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s8.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s8.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s8.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s8.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s9.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s9.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s9.outputs[0].substance", "value": ["/理念/知识/商业/前沿技术/AI智能/机器学习", "/理念/知识/自然科学/数学"]},
+  {"path": "p1.s9.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s10.inputs[0].substance", "value": ["/理念/知识/商业/前沿技术/AI智能/机器学习", "/理念/知识/自然科学/数学"]},
+  {"path": "p1.s10.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s10.inputs[1].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s10.inputs[1].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/规范框架"},
+
+  {"path": "p1.s10.outputs[0].substance", "value": ["/理念/知识/商业/前沿技术/AI智能/机器学习", "/理念/知识/自然科学/数学"]},
+  {"path": "p1.s10.outputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s11.inputs[0].substance", "value": ["/理念/知识/商业/前沿技术/AI智能/机器学习", "/理念/知识/自然科学/数学"]},
+  {"path": "p1.s11.inputs[0].form", "value": "/表象/视觉/符号/文字符号/标注/数值数据"},
+
+  {"path": "p1.s11.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s11.outputs[0].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举"},
+
+  {"path": "p1.s12.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s12.inputs[0].form", "value": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举"},
+
+  {"path": "p1.s12.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s12.outputs[0].form", "value": "/表象/视觉/符号/文字符号/正文"}
+]

+ 109 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/patch_2b_fixed.json

@@ -0,0 +1,109 @@
+[
+  {"path": "p1.s1.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s1.inputs[0].form",      "value": "/架构/叙事/叙事体裁/演说交流/科普教学"},
+  {"path": "p1.s1.outputs[0].substance","value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s1.outputs[0].form",     "value": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举"},
+
+  {"path": "p1.s2.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s2.inputs[0].form",      "value": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举"},
+  {"path": "p1.s2.outputs[0].substance","value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s2.outputs[0].form",     "value": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举"},
+
+  {"path": "p1.s3.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s3.inputs[0].form",      "value": "__null__"},
+  {"path": "p1.s3.outputs[0].substance","value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s3.outputs[0].form",     "value": "__null__"},
+  {"path": "p1.s3.outputs[1].substance","value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s3.outputs[1].form",     "value": "__null__"},
+
+  {"path": "p1.s4.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s4.inputs[0].form",      "value": "__null__"},
+  {"path": "p1.s4.outputs[0].substance","value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s4.outputs[0].form",     "value": "__null__"},
+
+  {"path": "p1.s5.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s5.inputs[0].form",      "value": "__null__"},
+  {"path": "p1.s5.outputs[0].substance","value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s5.outputs[0].form",     "value": "__null__"},
+
+  {"path": "p1.s6.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.inputs[0].form",      "value": "__null__"},
+  {"path": "p1.s6.outputs[0].substance","value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.outputs[0].form",     "value": "__null__"},
+
+  {"path": "p1.s6.1.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.1.inputs[0].form",      "value": "__null__"},
+  {"path": "p1.s6.1.outputs[0].substance","value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.1.outputs[0].form",     "value": "__null__"},
+
+  {"path": "p1.s6.2.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.2.inputs[0].form",      "value": "__null__"},
+  {"path": "p1.s6.2.outputs[0].substance","value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.2.outputs[0].form",     "value": "__null__"},
+
+  {"path": "p1.s6.3.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.3.inputs[0].form",      "value": "__null__"},
+  {"path": "p1.s6.3.outputs[0].substance","value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.3.outputs[0].form",     "value": "__null__"},
+
+  {"path": "p1.s6.4.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.4.inputs[0].form",      "value": "__null__"},
+  {"path": "p1.s6.4.inputs[1].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.4.inputs[1].form",      "value": "__null__"},
+  {"path": "p1.s6.4.outputs[0].substance","value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.4.outputs[0].form",     "value": "__null__"},
+
+  {"path": "p1.s6.5.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.5.inputs[0].form",      "value": "__null__"},
+  {"path": "p1.s6.5.outputs[0].substance","value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.5.outputs[0].form",     "value": "__null__"},
+
+  {"path": "p1.s6.6.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.6.inputs[0].form",      "value": "__null__"},
+  {"path": "p1.s6.6.inputs[1].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.6.inputs[1].form",      "value": "__null__"},
+  {"path": "p1.s6.6.outputs[0].substance","value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.6.outputs[0].form",     "value": "__null__"},
+
+  {"path": "p1.s6.7.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.7.inputs[0].form",      "value": "__null__"},
+  {"path": "p1.s6.7.outputs[0].substance","value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.7.outputs[0].form",     "value": "__null__"},
+
+  {"path": "p1.s6.8.inputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.8.inputs[0].form",      "value": "__null__"},
+  {"path": "p1.s6.8.outputs[0].substance","value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s6.8.outputs[0].form",     "value": "__null__"},
+
+  {"path": "p1.s7.inputs[0].substance",  "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s7.inputs[0].form",       "value": "__null__"},
+  {"path": "p1.s7.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s7.outputs[0].form",      "value": "__null__"},
+
+  {"path": "p1.s8.inputs[0].substance",  "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s8.inputs[0].form",       "value": "__null__"},
+  {"path": "p1.s8.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s8.outputs[0].form",      "value": "__null__"},
+
+  {"path": "p1.s9.inputs[0].substance",  "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s9.inputs[0].form",       "value": "__null__"},
+  {"path": "p1.s9.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s9.outputs[0].form",      "value": "__null__"},
+
+  {"path": "p1.s10.inputs[0].substance",  "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s10.inputs[0].form",       "value": "__null__"},
+  {"path": "p1.s10.inputs[1].substance",  "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s10.inputs[1].form",       "value": "__null__"},
+  {"path": "p1.s10.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s10.outputs[0].form",      "value": "__null__"},
+
+  {"path": "p1.s11.inputs[0].substance",  "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s11.inputs[0].form",       "value": "__null__"},
+  {"path": "p1.s11.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s11.outputs[0].form",      "value": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举"},
+
+  {"path": "p1.s12.inputs[0].substance",  "value": "/理念/知识/商业/前沿技术/AI智能/机器学习"},
+  {"path": "p1.s12.inputs[0].form",       "value": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举"},
+  {"path": "p1.s12.outputs[0].substance", "value": "/理念/知识/商业/前沿技术/AI智能/AI应用"},
+  {"path": "p1.s12.outputs[0].form",      "value": "__null__"}
+]

+ 555 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/task_2a.json

@@ -0,0 +1,555 @@
+{
+  "case_id": "C_xhs_69ee4674",
+  "task": "Phase 2A (effect/action/type normalization)",
+  "image_url_list": [],
+  "steps": [
+    {
+      "path": "p1.s1",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s1.inputs[0]",
+          "name": "用户Prompt",
+          "value": "详细图解LLM推理流程,从Prompt到第一个Token(用户输入的完整自然语言文本,如问题、指令等)",
+          "type": "提示词",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s1.outputs[0]",
+          "name": "tokens",
+          "value": "<Prompt文本切分后的字符串token列表,如['今天','天气','很','好'],长度n取决于Prompt和词表粒度>",
+          "type": "Token序列",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s2",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s2.inputs[0]",
+          "name": "tokens",
+          "value": "<Prompt文本切分后的字符串token列表,如['今天','天气','很','好'],长度n取决于Prompt和词表粒度>",
+          "type": "Token序列",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s2.outputs[0]",
+          "name": "token_ids",
+          "value": "<tokens对应的整数ID列表,如[1234,5678,90,123],形状[n,],值域[0,vocab_size-1]>",
+          "type": "Token_ID序列",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s3",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s3.inputs[0]",
+          "name": "token_ids",
+          "value": "<tokens对应的整数ID列表,如[1234,5678,90,123],形状[n,],值域[0,vocab_size-1]>",
+          "type": "Token_ID序列",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s3.outputs[0]",
+          "name": "padded_token_ids",
+          "value": "<padding后的token_ids,形状[batch_size,max_seq_len],PAD位置填充特殊PAD_ID>",
+          "type": "Token_ID序列",
+          "related_images": []
+        },
+        {
+          "path": "p1.s3.outputs[1]",
+          "name": "attention_mask",
+          "value": "<与padded_token_ids同形状的二元mask,有效token=1,padding=0;用于标记哪些位置参与注意力计算>",
+          "type": "注意力掩码",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s4",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s4.inputs[0]",
+          "name": "token_ids",
+          "value": "<tokens对应的整数ID列表,如[1234,5678,90,123],形状[n,],值域[0,vocab_size-1]>",
+          "type": "Token_ID序列",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s4.outputs[0]",
+          "name": "X",
+          "value": "<每个token_id对应的embedding向量堆叠,形状[n,d_model](如d_model=4096);每行是该token在语义空间的连续浮点表示>",
+          "type": "嵌入矩阵",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s5",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s5.inputs[0]",
+          "name": "X",
+          "value": "<每个token_id对应的embedding向量堆叠,形状[n,d_model](如d_model=4096);每行是该token在语义空间的连续浮点表示>",
+          "type": "嵌入矩阵",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s5.outputs[0]",
+          "name": "X",
+          "value": "<加入位置信息后的输入矩阵,形状[n,d_model];若方式A则X+=PosEmbed;若方式B(RoPE)则X不变,位置编码在s6.3对Q/K旋转注入>",
+          "type": "隐状态矩阵",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s6",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "block",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s6.inputs[0]",
+          "name": "X",
+          "value": "<加入位置信息后的输入矩阵,形状[n,d_model];若方式A则X+=PosEmbed;若方式B(RoPE)则X不变,位置编码在s6.3对Q/K旋转注入>",
+          "type": "隐状态矩阵",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s6.outputs[0]",
+          "name": "XL",
+          "value": "<经L层Transformer前向计算后的最终隐状态,形状[n,d_model];XL[n-1]代表读完整段prompt后的当前上下文状态>",
+          "type": "隐状态矩阵",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s6.1",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "nested",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s6.1.inputs[0]",
+          "name": "X",
+          "value": "<当前层l的输入隐状态,形状[n,d_model]>",
+          "type": "隐状态矩阵",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s6.1.outputs[0]",
+          "name": "Q_K_V",
+          "value": "<Q/K/V各形状[n,d_model];H分别右乘Wq/Wk/Wv线性变换得到;Q负责查询匹配,K负责键索引,V负责值聚合>",
+          "type": "QKV矩阵组",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s6.2",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "nested",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s6.2.inputs[0]",
+          "name": "Q_K_V",
+          "value": "<Q/K/V各形状[n,d_model];H分别右乘Wq/Wk/Wv线性变换得到;Q负责查询匹配,K负责键索引,V负责值聚合>",
+          "type": "QKV矩阵组",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s6.2.outputs[0]",
+          "name": "Q_K_V_heads",
+          "value": "<Q/K/V各reshape为[n,n_heads,d_head];Head 1关注语法关系,Head 2关注指代,Head h关注主题等,并行计算>",
+          "type": "多头QKV",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s6.3",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "nested",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s6.3.inputs[0]",
+          "name": "Q_K_V_heads",
+          "value": "<Q/K/V各reshape为[n,n_heads,d_head];Head 1关注语法关系,Head 2关注指代,Head h关注主题等,并行计算>",
+          "type": "多头QKV",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s6.3.outputs[0]",
+          "name": "Q_K_V_pos",
+          "value": "<Q'/K'已施加RoPE旋转携带相对位置信息,V不变;可进行位置感知的注意力计算>",
+          "type": "多头QKV",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s6.4",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "nested",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s6.4.inputs[0]",
+          "name": "Q_K_V_pos",
+          "value": "<Q'/K'已施加RoPE旋转携带相对位置信息,V不变;可进行位置感知的注意力计算>",
+          "type": "多头QKV",
+          "related_images": []
+        },
+        {
+          "path": "p1.s6.4.inputs[1]",
+          "name": "attention_mask",
+          "value": "<与padded_token_ids同形状的二元mask,有效token=1,padding=0;用于标记哪些位置参与注意力计算>",
+          "type": "注意力掩码",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s6.4.outputs[0]",
+          "name": "S_masked",
+          "value": "<形状[n_heads,n,n];未来位置=-∞(mask后),历史/当前位置=有效QK点积分数/sqrt(d_head)>",
+          "type": "注意力分数矩阵",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s6.5",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "nested",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s6.5.inputs[0]",
+          "name": "S_masked",
+          "value": "<形状[n_heads,n,n];未来位置=-∞(mask后),历史/当前位置=有效QK点积分数/sqrt(d_head)>",
+          "type": "注意力分数矩阵",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s6.5.outputs[0]",
+          "name": "O_heads",
+          "value": "<形状[n,n_heads,d_head];每个位置的O是历史V向量的注意力加权平均;A=softmax(S),O=AV>",
+          "type": "注意力输出矩阵",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s6.6",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "nested",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s6.6.inputs[0]",
+          "name": "O_heads",
+          "value": "<形状[n,n_heads,d_head];每个位置的O是历史V向量的注意力加权平均;A=softmax(S),O=AV>",
+          "type": "注意力输出矩阵",
+          "related_images": []
+        },
+        {
+          "path": "p1.s6.6.inputs[1]",
+          "name": "X",
+          "value": "<当前层l的输入隐状态,形状[n,d_model]>",
+          "type": "隐状态矩阵",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s6.6.outputs[0]",
+          "name": "X_prime",
+          "value": "<Attention子层完成后的中间隐状态,形状[n,d_model];X'=X+O*Wo,已融合多头注意力信息>",
+          "type": "隐状态矩阵",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s6.7",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "nested",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s6.7.inputs[0]",
+          "name": "X_prime",
+          "value": "<Attention子层完成后的中间隐状态,形状[n,d_model];X'=X+O*Wo,已融合多头注意力信息>",
+          "type": "隐状态矩阵",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s6.7.outputs[0]",
+          "name": "X_updated",
+          "value": "<当前Transformer层最终输出,形状[n,d_model];X=X'+M,经Attention+MLP两个子层处理,传入下一层>",
+          "type": "隐状态矩阵",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s6.8",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "nested",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s6.8.inputs[0]",
+          "name": "K_V_current",
+          "value": "<当前层l的K和V矩阵,各形状[n,n_heads,d_head],将被缓存供后续decode阶段复用>",
+          "type": "QKV矩阵组",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s6.8.outputs[0]",
+          "name": "kv_cache",
+          "value": "<按层和head组织的K/V缓存;prefill阶段写满所有n个位置;每层形状[2,n_heads,n,d_head](2=K+V);供后续续token生成的decode阶段读取>",
+          "type": "KV缓存",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s7",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s7.inputs[0]",
+          "name": "XL",
+          "value": "<经L层Transformer前向计算后的最终隐状态,形状[n,d_model];XL[n-1]代表读完整段prompt后的当前上下文状态>",
+          "type": "隐状态矩阵",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s7.outputs[0]",
+          "name": "x_last",
+          "value": "<XL最后一行XL[n-1],形状[d_model,];代表模型读完整段prompt后的当前上下文压缩状态>",
+          "type": "位置向量",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s8",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s8.inputs[0]",
+          "name": "x_last",
+          "value": "<XL最后一行XL[n-1],形状[d_model,];代表模型读完整段prompt后的当前上下文压缩状态>",
+          "type": "位置向量",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s8.outputs[0]",
+          "name": "h",
+          "value": "<经FinalNorm处理后的最终表征,形状[d_model,];数值尺度对齐到LM Head期望范围>",
+          "type": "归一化向量",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s9",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s9.inputs[0]",
+          "name": "h",
+          "value": "<经FinalNorm处理后的最终表征,形状[d_model,];数值尺度对齐到LM Head期望范围>",
+          "type": "归一化向量",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s9.outputs[0]",
+          "name": "logits",
+          "value": "<形状[vocab_size,]的未归一化原始分数,如[3.2,2.8,1.5,...,-0.3];每个位置对应词表一个token的预测得分;还未经softmax不是概率>",
+          "type": "logits向量",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s10",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s10.inputs[0]",
+          "name": "logits",
+          "value": "<形状[vocab_size,]的未归一化原始分数,如[3.2,2.8,1.5,...,-0.3];每个位置对应词表一个token的预测得分;还未经softmax不是概率>",
+          "type": "logits向量",
+          "related_images": []
+        },
+        {
+          "path": "p1.s10.inputs[1]",
+          "name": "decoding_params",
+          "value": "<解码参数配置:temperature(如1.0),logits_bias(token级加减分词典),repetition_penalty(重复惩罚系数),bad_words_ids(屏蔽token列表)>",
+          "type": "解码配置",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s10.outputs[0]",
+          "name": "adjusted_logits",
+          "value": "<经Temperature缩放+偏置+惩罚+屏蔽处理后的logits,形状仍[vocab_size,];不期望token得分被调整或置为-∞>",
+          "type": "logits向量",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s11",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s11.inputs[0]",
+          "name": "adjusted_logits",
+          "value": "<经Temperature缩放+偏置+惩罚+屏蔽处理后的logits,形状仍[vocab_size,];不期望token得分被调整或置为-∞>",
+          "type": "logits向量",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s11.outputs[0]",
+          "name": "candidate_logits",
+          "value": "<经Top-k/Top-p截断后的候选token子集,其余位置logits置为-∞;形状仍[vocab_size,]但有效候选数远小于vocab_size>",
+          "type": "候选Token列表",
+          "related_images": []
+        }
+      ]
+    },
+    {
+      "path": "p1.s12",
+      "name": "",
+      "action": "",
+      "effect": "",
+      "kind": "step",
+      "type_registry": {},
+      "inputs": [
+        {
+          "path": "p1.s12.inputs[0]",
+          "name": "candidate_logits",
+          "value": "<经Top-k/Top-p截断后的候选token子集,其余位置logits置为-∞;形状仍[vocab_size,]但有效候选数远小于vocab_size>",
+          "type": "候选Token列表",
+          "related_images": []
+        }
+      ],
+      "outputs": [
+        {
+          "path": "p1.s12.outputs[0]",
+          "name": "first_token",
+          "value": "<第一个生成Token,如next_token_id=1234对应'的';Detokenize后为字符或子词(如'##子'前缀);后续进入自回归循环续token生成>",
+          "type": "输出Token",
+          "related_images": []
+        }
+      ]
+    }
+  ]
+}

+ 315 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/task_2b.json

@@ -0,0 +1,315 @@
+{
+  "case_id": "C_xhs_69ee4674",
+  "task": "Phase 2B (substance/form matching)",
+  "image_url_list": [],
+  "items_to_match": [
+    {
+      "path": "p1.s1.inputs[0]",
+      "name": "用户Prompt",
+      "value": "详细图解LLM推理流程,从Prompt到第一个Token(用户输入的完整自然语言文本,如问题、指令等)",
+      "type": "提示词",
+      "related_images": []
+    },
+    {
+      "path": "p1.s1.outputs[0]",
+      "name": "tokens",
+      "value": "<Prompt文本切分后的字符串token列表,如['今天','天气','很','好'],长度n取决于Prompt和词表粒度>",
+      "type": "Token序列",
+      "related_images": []
+    },
+    {
+      "path": "p1.s2.inputs[0]",
+      "name": "tokens",
+      "value": "<Prompt文本切分后的字符串token列表,如['今天','天气','很','好'],长度n取决于Prompt和词表粒度>",
+      "type": "Token序列",
+      "related_images": []
+    },
+    {
+      "path": "p1.s2.outputs[0]",
+      "name": "token_ids",
+      "value": "<tokens对应的整数ID列表,如[1234,5678,90,123],形状[n,],值域[0,vocab_size-1]>",
+      "type": "Token_ID序列",
+      "related_images": []
+    },
+    {
+      "path": "p1.s3.inputs[0]",
+      "name": "token_ids",
+      "value": "<tokens对应的整数ID列表,如[1234,5678,90,123],形状[n,],值域[0,vocab_size-1]>",
+      "type": "Token_ID序列",
+      "related_images": []
+    },
+    {
+      "path": "p1.s3.outputs[0]",
+      "name": "padded_token_ids",
+      "value": "<padding后的token_ids,形状[batch_size,max_seq_len],PAD位置填充特殊PAD_ID>",
+      "type": "Token_ID序列",
+      "related_images": []
+    },
+    {
+      "path": "p1.s3.outputs[1]",
+      "name": "attention_mask",
+      "value": "<与padded_token_ids同形状的二元mask,有效token=1,padding=0;用于标记哪些位置参与注意力计算>",
+      "type": "注意力掩码",
+      "related_images": []
+    },
+    {
+      "path": "p1.s4.inputs[0]",
+      "name": "token_ids",
+      "value": "<tokens对应的整数ID列表,如[1234,5678,90,123],形状[n,],值域[0,vocab_size-1]>",
+      "type": "Token_ID序列",
+      "related_images": []
+    },
+    {
+      "path": "p1.s4.outputs[0]",
+      "name": "X",
+      "value": "<每个token_id对应的embedding向量堆叠,形状[n,d_model](如d_model=4096);每行是该token在语义空间的连续浮点表示>",
+      "type": "嵌入矩阵",
+      "related_images": []
+    },
+    {
+      "path": "p1.s5.inputs[0]",
+      "name": "X",
+      "value": "<每个token_id对应的embedding向量堆叠,形状[n,d_model](如d_model=4096);每行是该token在语义空间的连续浮点表示>",
+      "type": "嵌入矩阵",
+      "related_images": []
+    },
+    {
+      "path": "p1.s5.outputs[0]",
+      "name": "X",
+      "value": "<加入位置信息后的输入矩阵,形状[n,d_model];若方式A则X+=PosEmbed;若方式B(RoPE)则X不变,位置编码在s6.3对Q/K旋转注入>",
+      "type": "隐状态矩阵",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.inputs[0]",
+      "name": "X",
+      "value": "<加入位置信息后的输入矩阵,形状[n,d_model];若方式A则X+=PosEmbed;若方式B(RoPE)则X不变,位置编码在s6.3对Q/K旋转注入>",
+      "type": "隐状态矩阵",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.outputs[0]",
+      "name": "XL",
+      "value": "<经L层Transformer前向计算后的最终隐状态,形状[n,d_model];XL[n-1]代表读完整段prompt后的当前上下文状态>",
+      "type": "隐状态矩阵",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.1.inputs[0]",
+      "name": "X",
+      "value": "<当前层l的输入隐状态,形状[n,d_model]>",
+      "type": "隐状态矩阵",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.1.outputs[0]",
+      "name": "Q_K_V",
+      "value": "<Q/K/V各形状[n,d_model];H分别右乘Wq/Wk/Wv线性变换得到;Q负责查询匹配,K负责键索引,V负责值聚合>",
+      "type": "QKV矩阵组",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.2.inputs[0]",
+      "name": "Q_K_V",
+      "value": "<Q/K/V各形状[n,d_model];H分别右乘Wq/Wk/Wv线性变换得到;Q负责查询匹配,K负责键索引,V负责值聚合>",
+      "type": "QKV矩阵组",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.2.outputs[0]",
+      "name": "Q_K_V_heads",
+      "value": "<Q/K/V各reshape为[n,n_heads,d_head];Head 1关注语法关系,Head 2关注指代,Head h关注主题等,并行计算>",
+      "type": "多头QKV",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.3.inputs[0]",
+      "name": "Q_K_V_heads",
+      "value": "<Q/K/V各reshape为[n,n_heads,d_head];Head 1关注语法关系,Head 2关注指代,Head h关注主题等,并行计算>",
+      "type": "多头QKV",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.3.outputs[0]",
+      "name": "Q_K_V_pos",
+      "value": "<Q'/K'已施加RoPE旋转携带相对位置信息,V不变;可进行位置感知的注意力计算>",
+      "type": "多头QKV",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.4.inputs[0]",
+      "name": "Q_K_V_pos",
+      "value": "<Q'/K'已施加RoPE旋转携带相对位置信息,V不变;可进行位置感知的注意力计算>",
+      "type": "多头QKV",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.4.inputs[1]",
+      "name": "attention_mask",
+      "value": "<与padded_token_ids同形状的二元mask,有效token=1,padding=0;用于标记哪些位置参与注意力计算>",
+      "type": "注意力掩码",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.4.outputs[0]",
+      "name": "S_masked",
+      "value": "<形状[n_heads,n,n];未来位置=-∞(mask后),历史/当前位置=有效QK点积分数/sqrt(d_head)>",
+      "type": "注意力分数矩阵",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.5.inputs[0]",
+      "name": "S_masked",
+      "value": "<形状[n_heads,n,n];未来位置=-∞(mask后),历史/当前位置=有效QK点积分数/sqrt(d_head)>",
+      "type": "注意力分数矩阵",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.5.outputs[0]",
+      "name": "O_heads",
+      "value": "<形状[n,n_heads,d_head];每个位置的O是历史V向量的注意力加权平均;A=softmax(S),O=AV>",
+      "type": "注意力输出矩阵",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.6.inputs[0]",
+      "name": "O_heads",
+      "value": "<形状[n,n_heads,d_head];每个位置的O是历史V向量的注意力加权平均;A=softmax(S),O=AV>",
+      "type": "注意力输出矩阵",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.6.inputs[1]",
+      "name": "X",
+      "value": "<当前层l的输入隐状态,形状[n,d_model]>",
+      "type": "隐状态矩阵",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.6.outputs[0]",
+      "name": "X_prime",
+      "value": "<Attention子层完成后的中间隐状态,形状[n,d_model];X'=X+O*Wo,已融合多头注意力信息>",
+      "type": "隐状态矩阵",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.7.inputs[0]",
+      "name": "X_prime",
+      "value": "<Attention子层完成后的中间隐状态,形状[n,d_model];X'=X+O*Wo,已融合多头注意力信息>",
+      "type": "隐状态矩阵",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.7.outputs[0]",
+      "name": "X_updated",
+      "value": "<当前Transformer层最终输出,形状[n,d_model];X=X'+M,经Attention+MLP两个子层处理,传入下一层>",
+      "type": "隐状态矩阵",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.8.inputs[0]",
+      "name": "K_V_current",
+      "value": "<当前层l的K和V矩阵,各形状[n,n_heads,d_head],将被缓存供后续decode阶段复用>",
+      "type": "QKV矩阵组",
+      "related_images": []
+    },
+    {
+      "path": "p1.s6.8.outputs[0]",
+      "name": "kv_cache",
+      "value": "<按层和head组织的K/V缓存;prefill阶段写满所有n个位置;每层形状[2,n_heads,n,d_head](2=K+V);供后续续token生成的decode阶段读取>",
+      "type": "KV缓存",
+      "related_images": []
+    },
+    {
+      "path": "p1.s7.inputs[0]",
+      "name": "XL",
+      "value": "<经L层Transformer前向计算后的最终隐状态,形状[n,d_model];XL[n-1]代表读完整段prompt后的当前上下文状态>",
+      "type": "隐状态矩阵",
+      "related_images": []
+    },
+    {
+      "path": "p1.s7.outputs[0]",
+      "name": "x_last",
+      "value": "<XL最后一行XL[n-1],形状[d_model,];代表模型读完整段prompt后的当前上下文压缩状态>",
+      "type": "位置向量",
+      "related_images": []
+    },
+    {
+      "path": "p1.s8.inputs[0]",
+      "name": "x_last",
+      "value": "<XL最后一行XL[n-1],形状[d_model,];代表模型读完整段prompt后的当前上下文压缩状态>",
+      "type": "位置向量",
+      "related_images": []
+    },
+    {
+      "path": "p1.s8.outputs[0]",
+      "name": "h",
+      "value": "<经FinalNorm处理后的最终表征,形状[d_model,];数值尺度对齐到LM Head期望范围>",
+      "type": "归一化向量",
+      "related_images": []
+    },
+    {
+      "path": "p1.s9.inputs[0]",
+      "name": "h",
+      "value": "<经FinalNorm处理后的最终表征,形状[d_model,];数值尺度对齐到LM Head期望范围>",
+      "type": "归一化向量",
+      "related_images": []
+    },
+    {
+      "path": "p1.s9.outputs[0]",
+      "name": "logits",
+      "value": "<形状[vocab_size,]的未归一化原始分数,如[3.2,2.8,1.5,...,-0.3];每个位置对应词表一个token的预测得分;还未经softmax不是概率>",
+      "type": "logits向量",
+      "related_images": []
+    },
+    {
+      "path": "p1.s10.inputs[0]",
+      "name": "logits",
+      "value": "<形状[vocab_size,]的未归一化原始分数,如[3.2,2.8,1.5,...,-0.3];每个位置对应词表一个token的预测得分;还未经softmax不是概率>",
+      "type": "logits向量",
+      "related_images": []
+    },
+    {
+      "path": "p1.s10.inputs[1]",
+      "name": "decoding_params",
+      "value": "<解码参数配置:temperature(如1.0),logits_bias(token级加减分词典),repetition_penalty(重复惩罚系数),bad_words_ids(屏蔽token列表)>",
+      "type": "解码配置",
+      "related_images": []
+    },
+    {
+      "path": "p1.s10.outputs[0]",
+      "name": "adjusted_logits",
+      "value": "<经Temperature缩放+偏置+惩罚+屏蔽处理后的logits,形状仍[vocab_size,];不期望token得分被调整或置为-∞>",
+      "type": "logits向量",
+      "related_images": []
+    },
+    {
+      "path": "p1.s11.inputs[0]",
+      "name": "adjusted_logits",
+      "value": "<经Temperature缩放+偏置+惩罚+屏蔽处理后的logits,形状仍[vocab_size,];不期望token得分被调整或置为-∞>",
+      "type": "logits向量",
+      "related_images": []
+    },
+    {
+      "path": "p1.s11.outputs[0]",
+      "name": "candidate_logits",
+      "value": "<经Top-k/Top-p截断后的候选token子集,其余位置logits置为-∞;形状仍[vocab_size,]但有效候选数远小于vocab_size>",
+      "type": "候选Token列表",
+      "related_images": []
+    },
+    {
+      "path": "p1.s12.inputs[0]",
+      "name": "candidate_logits",
+      "value": "<经Top-k/Top-p截断后的候选token子集,其余位置logits置为-∞;形状仍[vocab_size,]但有效候选数远小于vocab_size>",
+      "type": "候选Token列表",
+      "related_images": []
+    },
+    {
+      "path": "p1.s12.outputs[0]",
+      "name": "first_token",
+      "value": "<第一个生成Token,如next_token_id=1234对应'的';Detokenize后为字符或子词(如'##子'前缀);后续进入自回归循环续token生成>",
+      "type": "输出Token",
+      "related_images": []
+    }
+  ]
+}

Разница между файлами не показана из-за своего большого размера
+ 3 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_source.json


+ 644 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_trace.md

@@ -0,0 +1,644 @@
+
+
+---
+
+## ▶ Fresh @ 2026-06-01 15:32:37
+
+- case: `C_xhs_69ee4674`
+- source: `C:\Users\11304\gitlab\cybertogether\Agent\examples\process_pipeline\script\search_eval\runs_full\q0010\procedures\C_xhs_69ee4674\_source.json`
+- spec: `spec`
+- images: `9`
+- model: `claude-sonnet-4-6`
+- max_turns: `300`
+
+_session=33bf2d99 · model='claude-sonnet-4-6' · apiKeySource='none'_
+
+
+### Turn 1 · 15:32:49
+
+
+### Turn 2 · 15:32:50
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/README.md`
+
+
+### Turn 3 · 15:32:50
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools.md`
+
+
+### Turn 4 · 15:32:56
+
+
+### Turn 5 · 15:32:56
+> Now let me read the Phase 1 spec files and the source JSON concurrently:
+
+
+
+### Turn 6 · 15:32:57
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/syntax.md`
+
+
+### Turn 7 · 15:32:58
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/extraction/fields.md`
+
+
+### Turn 8 · 15:32:59
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/extraction/control-flow.md`
+
+
+### Turn 9 · 15:32:59
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/extraction/phase1-skeleton.md`
+
+
+### Turn 10 · 15:33:00
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/format/md-structure.md`
+
+
+### Turn 11 · 15:33:01
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_source.json`
+
+
+### Turn 12 · 15:33:09
+
+
+### Turn 13 · 15:33:09
+> Now let me read the template, schema, and Phase 2/3 spec files in parallel:
+
+
+
+### Turn 14 · 15:33:10
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/templates/workflow.template.json`
+
+
+### Turn 15 · 15:33:11
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/extraction/phase2-normalize.md`
+
+
+### Turn 16 · 15:33:11
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/extraction/phase3-finalize.md`
+
+
+### Turn 17 · 15:33:12
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/format/case-data.schema.json`
+
+
+### Turn 18 · 15:33:13
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/format/procedure-table.md`
+
+
+### Turn 19 · 15:41:57
+
+
+### Turn 20 · 15:44:52
+
+
+### Turn 21 · 15:44:52
+> Now I have everything needed. Let me write Phase 1.1 understanding.md:
+
+
+
+### Turn 22 · 15:45:03
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/understanding.md` (1,304 chars)
+
+
+### Turn 23 · 15:48:08
+
+
+### Turn 24 · 15:48:08
+> Now Phase 1.2 — Write the workflow.json skeleton:
+
+
+
+### Turn 25 · 15:50:42
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/workflow.json` (22,999 chars)
+
+
+### Turn 26 · 15:51:11
+
+
+### Turn 27 · 15:51:11
+> Phase 1.2 complete with anchors already embedded. Now let me check Phase 2 tools and run the subtask prep:
+
+
+
+### Turn 28 · 15:51:12
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "C:/Users/11304/gitlab/cybertogether/Agent/example...`
+
+
+### Turn 29 · 15:51:13
+- `Bash` — `ls "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/" 2>&1`
+
+
+### Turn 30 · 15:51:18
+
+
+### Turn 31 · 15:51:18
+> Good. Now run the prepare-subtask.py to generate 2A/2B task files:
+
+
+
+### Turn 32 · 15:51:21
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/prepare-subtask.py --workflow "C:/Users/11304/gitlab/cybertogether/Agent/...`
+
+
+### Turn 33 · 15:51:35
+
+
+### Turn 34 · 15:51:35
+> Task files generated. Now spawn Phase 2A and 2B sub-agents in parallel:
+
+
+
+### Turn 35 · 15:51:50
+- `Agent` — `Phase 2A: effect/action/type normalization for C_xhs_69ee4674` [subagent=phase-2a-normalizer]
+
+
+### Turn 36 · 15:51:53
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/task_2a.json`
+
+
+### Turn 37 · 15:51:54
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/taxonomy/effect.json`
+
+
+### Turn 38 · 15:51:58
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/taxonomy/action.json`
+
+
+### Turn 39 · 15:51:58
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/taxonomy/type.json`
+
+
+### Turn 40 · 15:52:01
+- `Agent` — `Phase 2B: substance/form taxonomy matching for C_xhs_69ee4674` [subagent=phase-2b-matcher]
+
+
+### Turn 41 · 15:52:04
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/task_2b.json`
+
+
+### Turn 42 · 15:52:05
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/workflow.json`
+
+
+### Turn 43 · 15:52:10
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --help 2>&1 | head -50`
+
+
+### Turn 44 · 15:52:15
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "用户Prompt 自然语言文本 指令" --top 5 2>&1`
+
+
+### Turn 45 · 15:52:16
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "用户Prompt 自然语言文本 指令" --top 5 2>&1`
+
+
+### Turn 46 · 15:52:17
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "Token序列 分词 字符串列表" --top 5 2>&1`
+
+
+### Turn 47 · 15:52:18
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "Token序列 字符串列表 文本序列" --top 5 2>&1`
+
+
+### Turn 48 · 15:52:22
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --narrow "Token序列 分词 字符串列表" --top 5 2>&1`
+
+
+### Turn 49 · 15:52:23
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --narrow "Token序列 分词 字符串列表" --top 5 2>&1`
+
+
+### Turn 50 · 15:52:24
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "AI模型 LLM 大模型 推理" --top 5 2>&1`
+
+
+### Turn 51 · 15:52:25
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "矩阵 向量 数学" --top 5 2>&1`
+
+
+### Turn 52 · 15:52:28
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "AI智能 深度学习 神经网络" --top 5 2>&1`
+
+
+### Turn 53 · 15:52:30
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "算法 计算 数据结构" --top 5 2>&1`
+
+
+### Turn 54 · 15:52:31
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "模型参数 配置 权重" --top 5 2>&1`
+
+
+### Turn 55 · 15:52:32
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "词表 词典 字典映射" --top 5 2>&1`
+
+
+### Turn 56 · 15:52:35
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --subtree "/理念/知识/商业/前沿技术/AI智能" 2>&1 | head -...`
+
+
+### Turn 57 · 15:52:36
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --subtree "/理念/知识/自然科学" 2>&1 | head -40`
+
+
+### Turn 58 · 15:52:38
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "列表 序列 数据集合" --top 5 2>&1`
+
+
+### Turn 59 · 15:52:39
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "数值 数据 整数列表" --top 5 2>&1`
+
+
+### Turn 60 · 15:52:42
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --list-l2 2>&1`
+
+
+### Turn 61 · 15:52:43
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --list-l2 2>&1`
+
+
+### Turn 62 · 15:52:48
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "AI应用 人工智能 技术原理" --top 5 2>&1`
+
+
+### Turn 63 · 15:52:49
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "语言 文本 NLP" --top 5 2>&1`
+
+
+### Turn 64 · 15:52:50
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "编码 映射 转换" --top 5 2>&1`
+
+
+### Turn 65 · 15:52:51
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "缓存 存储 内存" --top 5 2>&1`
+
+
+### Turn 66 · 15:52:54
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "机器学习 深度神经网络 Transformer" --top 5 2>&...`
+
+
+### Turn 67 · 15:52:55
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "大模型原理 推理流程 预测概率" --top 5 2>&1`
+
+
+### Turn 68 · 15:52:57
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "科普知识 技术知识 教学" --top 5 2>&1`
+
+
+### Turn 69 · 15:52:58
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "图解 流程图 示意图" --top 5 2>&1`
+
+
+### Turn 70 · 15:53:01
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "前沿技术 AI" --top 8 2>&1`
+
+
+### Turn 71 · 15:53:03
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "注意力 权重 概率分布" --top 5 2>&1`
+
+
+### Turn 72 · 15:53:04
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "采样 解码 生成文本" --top 5 2>&1`
+
+
+### Turn 73 · 15:53:05
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "代码 技术文档 参数配置" --top 5 2>&1`
+
+
+### Turn 74 · 15:53:08
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "自然语言处理 文本输入 提示词" --top 5 2>&1`
+
+
+### Turn 75 · 15:53:10
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "文本 纯文字 字符串" --top 5 2>&1`
+
+
+### Turn 76 · 15:53:11
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "技术原理 科学 知识" --top 5 2>&1`
+
+
+### Turn 77 · 15:53:12
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "参数 权重 神经网络 模型训练" --top 5 2>&1`
+
+
+### Turn 78 · 15:53:16
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "语义 嵌入 表示学习 向量空间" --top 5 2>&1`
+
+
+### Turn 79 · 15:53:17
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "数据格式 结构 数字编码" --top 5 2>&1`
+
+
+### Turn 80 · 15:53:18
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "科普 教程 教学" --top 5 2>&1`
+
+
+### Turn 81 · 15:53:19
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "步骤流程 分步骤 教程" --top 5 2>&1`
+
+
+### Turn 82 · 15:53:24
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "LLM推理 大模型 token生成" --top 5 2>&1`
+
+
+### Turn 83 · 15:53:24
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/patch_2a.json` (7,379 chars)
+
+
+### Turn 84 · 15:53:25
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "mask 屏蔽 二元标记" --top 5 2>&1`
+
+
+### Turn 85 · 15:53:26
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "矩阵 数值数据 技术数据" --top 5 2>&1`
+
+
+### Turn 86 · 15:53:27
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --match "数学 计算机科学 算法原理" --top 5 2>&1`
+
+
+### Turn 87 · 15:53:31
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --validate "/理念/知识/商业/前沿技术/AI智能/机器学习" 2>&1`
+
+
+### Turn 88 · 15:53:33
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --validate "/理念/知识/商业/前沿技术/AI智能/AI应用" 2>&1`
+
+
+### Turn 89 · 15:53:34
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --validate "/理念/知识/思想/逻辑原理/科学原理" 2>&1`
+
+
+### Turn 90 · 15:53:34
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --validate "/理念/知识/自然科学/数学" 2>&1`
+
+
+### Turn 91 · 15:53:38
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --validate "/理念/知识/商业/前沿技术/AI智能/机器学习" 2>&1`
+
+
+### Turn 92 · 15:53:43
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "机器学习 大模型" --top 3 2>&1`
+
+
+### Turn 93 · 15:53:44
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "技术讲解 原理讲解" --top 5 2>&1`
+
+
+### Turn 94 · 15:53:47
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "科普教学 讲解" --top 5 2>&1`
+
+
+### Turn 95 · 15:53:49
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "知识 原理 概念" --top 8 2>&1`
+
+
+### Turn 96 · 15:53:57
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "文本输入 自然语言 指令文本" --top 5 2>&1`
+
+
+### Turn 97 · 15:53:58
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "原始数据 中间数据" --top 5 2>&1`
+
+
+### Turn 98 · 15:53:59
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "logits 概率 预测分数" --top 5 2>&1`
+
+
+### Turn 99 · 15:54:00
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "token ID 整数 词汇" --top 5 2>&1`
+
+
+### Turn 100 · 15:54:13
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 形式 --match "规范框架 文本格式 条目" --top 5 2>&1`
+
+
+### Turn 101 · 15:54:15
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/tools/taxonomy-lookup.py" --dim 实质 --match "输入文本 prompt 问答" --top 5 2>&1`
+
+
+### Turn 102 · 15:54:53
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/patch_2b.json` (6,830 chars)
+
+
+### Turn 103 · 15:55:23
+
+
+### Turn 104 · 15:55:23
+> Let me verify the patch files exist and apply them:
+
+
+
+### Turn 105 · 15:55:23
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "C:/Users/11304/gitlab/cybertogether/Agent/example...`
+
+
+### Turn 106 · 15:55:26
+
+
+### Turn 107 · 15:55:26
+> All 116 patches valid. Apply both patches:
+
+
+
+### Turn 108 · 15:55:31
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "C:/Users/11304/gitlab/cybertogether/Agent/example...`
+
+
+### Turn 109 · 15:55:35
+
+
+### Turn 110 · 15:55:35
+> Now apply patch_2b.json:
+
+
+
+### Turn 111 · 15:55:39
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "C:/Users/11304/gitlab/cybertogether/Agent/example...`
+
+
+### Turn 112 · 15:55:43
+
+
+### Turn 113 · 15:55:45
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "C:/Users/11304/gitlab/cybertogether/Agent/example...`
+
+
+### Turn 114 · 15:55:47
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "数值 矩阵 数字" 2>&1 | head -20`
+
+
+### Turn 115 · 15:55:48
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --match "文字 文本 正文" 2>&1 | head -20`
+
+
+### Turn 116 · 15:56:11
+
+
+### Turn 117 · 15:56:12
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --validate "/理念/知识/商业/前沿技术/AI智能/机器学习" 2>&1 &&...`
+
+
+### Turn 118 · 15:56:14
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 形式 --list-l2 2>&1 | head -30`
+
+
+### Turn 119 · 15:56:19
+
+
+### Turn 120 · 15:56:20
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/taxonomy-lookup.py --dim 实质 --validate "//理念/知识/商业/前沿技术/AI智能/机器学习" 2>&1`
+
+
+### Turn 121 · 15:56:22
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python -c "
+import subprocess, sys
+result = subprocess.run([sys.executable, 'spec/tools/tax...`
+
+
+### Turn 122 · 15:56:28
+
+
+### Turn 123 · 15:56:30
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python -c "
+import subprocess, sys, json
+
+def lookup(dim, cmd, arg):
+    result = subproces...`
+
+
+### Turn 124 · 15:56:43
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix.py` (1,575 chars)
+
+
+### Turn 125 · 15:56:46
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix.py" 2>&1`
+
+
+### Turn 126 · 15:56:50
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix_out.txt`
+
+
+### Turn 127 · 15:57:29
+
+
+### Turn 128 · 15:57:39
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix2.py` (1,601 chars)
+
+
+### Turn 129 · 15:57:44
+- `Bash` — `python "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix2.py" && type "C:/Users/11304/gitlab/cyberto...`
+
+
+### Turn 130 · 15:57:48
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/lookup_fix2_out.txt`
+
+
+### Turn 131 · 15:58:36
+
+
+### Turn 132 · 15:58:36
+> Now I have valid paths. Let me build the corrected patch_2b.json:
+
+
+
+### Turn 133 · 15:59:06
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/_scratch/patch_2b_fixed.json` (6,407 chars)
+
+
+### Turn 134 · 16:01:14
+
+
+### Turn 135 · 16:01:16
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/wf-patch.py --workflow "C:/Users/11304/gitlab/cybertogether/Agent/example...`
+
+
+### Turn 136 · 16:01:19
+
+
+### Turn 137 · 16:01:20
+> 88/88 clean. Now lint:
+
+
+
+### Turn 138 · 16:01:23
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/lint-case.py --workflow "C:/Users/11304/gitlab/cybertogether/Agent/exampl...`
+
+
+### Turn 139 · 16:01:26
+
+
+### Turn 140 · 16:01:26
+> Lint clean. Now render the HTML:
+
+
+
+### Turn 141 · 16:01:29
+- `Bash` — `cd "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl" && python spec/tools/render-case.py --workflow "C:/Users/11304/gitlab/cybertogether/Agent/exam...`
+
+
+### Turn 142 · 16:01:33
+
+
+### Turn 143 · 16:01:33
+> HTML rendered. Now read the md-structure spec before writing the .md:
+
+
+
+### Turn 144 · 16:01:34
+- `Bash` — `ls "C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/format/" 2>&1`
+
+
+### Turn 145 · 16:01:36
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/procedure-dsl/spec/format/md-structure.md`
+
+
+### Turn 146 · 16:01:39
+
+
+### Turn 147 · 16:01:39
+> Now read the workflow.json to gather all content for the .md:
+
+
+
+### Turn 148 · 16:01:40
+- `Read` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/workflow.json`
+
+
+### Turn 149 · 16:02:12
+
+
+### Turn 150 · 16:02:12
+> Now I have everything needed. Write the .md:
+
+
+
+### Turn 151 · 16:04:17
+- `Write` — `C:/Users/11304/gitlab/cybertogether/Agent/examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/case-C_xhs_69ee4674-llm-inference.md` (9,829 chars)
+
+
+### Turn 152 · 16:04:29
+> All done. Here's a summary of what was completed:
+>
+> **Phase 2B patch applied** — 88/88 substance/form fields written to `workflow.json` (all valid taxonomy paths, no failures).
+>
+> **Phase 3 lint** — clean. 16 case-specific types auto-recorded to `type_suggestions.md`.
+>
+> **Phase 3 render** — `case-C_xhs_69ee4674-llm-inference.html` written (112,977 chars, 1 procedure, 20 steps).
+>
+> **Phase 3 .md** — `case-C_xhs_69ee4674-llm-inference.md` written following §11 structure:
+> - 工序梗概: 5-stage narrative (预处理→Embedding→Transformer前向→LM Head→解码决策)
+> - 类型表: 9 stdlib 基类 + 16 case-specific 张量类型
+> - L1 外部函数库: `<tokenizer>` (s1–s3), `<llm>` (s4–s12)
+> - L2 动作关系: 3 effect 大类 × 14 种 action 组合
+> - L3 模板: 完整伪代码结构,含 block+nested 遍历说明
+> - L4 实例: inputs/bindings/extracted_values(9张图逐字回填)/trace(空,科普帖)
+> - DSL 启发: 5条(block建模验证、inferred跨步骤依赖、type_registry扩展路径、双路位置编码建模、form对计算中间体的局限性)
+
+
+
+### ◀ Result · 16:04:29
+
+- subtype: `success` · is_error: `False`
+- num_turns: `47` · duration: `1909740ms` · wall: `1911.9s`
+- tokens: in=37 out=97,933 cache_w=205,876 cache_r=3,155,887
+- cost: sdk=$4.4526, est_if_api=$3.1879

Разница между файлами не показана из-за своего большого размера
+ 483 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/case-C_xhs_69ee4674-llm-inference.html


+ 244 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/case-C_xhs_69ee4674-llm-inference.md

@@ -0,0 +1,244 @@
+# Case C_xhs_69ee4674: 大模型原理图解,从Prompt到第一个Token
+
+**Source / URL / 主题**
+
+- 平台:小红书 (XHS)
+- 作者:xhs博主
+- 日期:2026-04-27
+- URL:https://www.xiaohongshu.com/explore/69ee467400000000220289e2
+- 主题:用大白话图解 LLM 推理全流程,从用户 Prompt 文本到生成第一个 Token,拆解为预处理→Embedding→Transformer前向→LM Head→解码决策五阶段,配 9 张详细图解。
+
+---
+
+## 工序梗概 (人话)
+
+本 case 记录的是「LLM 推理_从Prompt到第一个Token」这条单工序流水线。
+
+用户输入一段自然语言 Prompt,模型依次完成:
+
+1. **预处理**(s1–s3):Tokenizer 把文本切分为 token 列表,再查词表换成整数 ID,最后 padding 对齐并生成 attention_mask(批处理时有效,单序列可跳过)。
+2. **Embedding**(s4–s5):查 embedding table 把 ID 升维为 [n, d_model] 的浮点矩阵,再叠加位置信息(绝对位置嵌入方式 A;RoPE 方式 B 延到 s6.3 处理)。
+3. **Transformer 前向**(s6 block,遍历 L 层):每层依次执行 Pre-Norm+QKV 投影(s6.1)→ 多头 reshape(s6.2)→ RoPE 旋转编码(s6.3)→ 点积+因果Mask(s6.4)→ Softmax+AV(s6.5)→ 输出投影+残差连接1(s6.6)→ FFN/MLP+残差连接2(s6.7)→ KV Cache 写入(s6.8)。
+4. **LM Head**(s7–s9):从最终隐状态取最后位置 x_last,经 FinalNorm,再经 W_vocab 线性投影得 logits 向量(形状 [vocab_size,])。
+5. **解码决策**(s10–s12):Temperature/Logits bias/重复惩罚/Bad words 调整(可选)→ Top-k/Top-p 截断得候选短名单 → Sampling 或 Greedy 选出 next_token_id → Detokenize 得第一个输出 Token。
+
+最终产出:第一个生成 Token(字符或子词),可继续自回归循环续写。
+
+---
+
+## 引用的类型 (stdlib + 自定义)
+
+### stdlib 类型 (直接引用)
+
+以下类型直接出现在工序声明的 inputs / resources / returns 中,或被 type_registry 条目的 `extends` 字段引用:
+
+| 类型名 | 在本 case 中的用途 |
+|--------|------------------|
+| `提示词` | p1.declarations.inputs:用户输入的自然语言 Prompt |
+| `模型权重` | p1.declarations.resources:Transformer 各层权重矩阵 + W_vocab + 可学习位置嵌入参数 |
+| `词表` | p1.declarations.resources:Token↔ID 双向映射,共 vocab_size 条 |
+| `描述` | type_registry.Token序列 / Token_ID序列 的 extends 基类 |
+| `蒙版` | type_registry.注意力掩码 的 extends 基类 |
+| `底图` | type_registry.隐状态矩阵 / QKV矩阵组 / 多头QKV / 注意力分数矩阵 / 注意力输出矩阵 / 位置向量 / 归一化向量 / logits向量 的 extends 基类 |
+| `生成参数` | type_registry.KV缓存 / 解码配置 的 extends 基类 |
+| `样图` | type_registry.候选Token列表 的 extends 基类 |
+| `正文` | type_registry.输出Token 的 extends 基类 |
+
+### case-specific 类型 (type_registry)
+
+本 case 定义了 16 条专属类型,均为神经网络张量 / 推理中间产物,stdlib 无对应叶子:
+
+| 类型名 | extends | desc |
+|--------|---------|------|
+| `Token序列` | 描述 | Tokenizer 将自然语言文本切分后得到的字符串 token 列表,如 ['今天','天气','很','好'],是文本在词表粒度上的离散序列表示 |
+| `Token_ID序列` | 描述 | Token 序列中每个 token 在词表中对应的整数索引列表,形状 [n,],值域 [0, vocab_size-1],是模型实际消费的数字化输入 |
+| `注意力掩码` | 蒙版 | 与 padded token_ids 同形状的二元矩阵,有效 token 位置=1,padding 位置=0,用于在注意力计算中屏蔽 padding 位置 |
+| `嵌入矩阵` | 模型权重 | 词嵌入查表后得到的 token 向量矩阵,形状 [n, d_model],每行是对应 token 在连续语义空间中的浮点表示 |
+| `隐状态矩阵` | 底图 | Transformer 各层输入/输出的中间表征矩阵,形状 [n, d_model],承载当前层对序列的语义理解,是后续层持续改造的对象 |
+| `QKV矩阵组` | 底图 | 注意力机制中 Query、Key、Value 三个线性投影矩阵的组合,各形状 [n, d_model],分别负责查询匹配、键索引和值聚合 |
+| `多头QKV` | 底图 | 将 QKV 矩阵 reshape 为多头形式后的张量,形状 [n, n_heads, d_head],支持多头并行注意力计算 |
+| `注意力分数矩阵` | 底图 | QK 点积经缩放和因果掩码处理后的注意力分数,形状 [n_heads, n, n],未来位置被置为负无穷 |
+| `注意力输出矩阵` | 底图 | 经 softmax 归一化后对 V 做加权求和得到的注意力输出,形状 [n, n_heads, d_head],是多头注意力的直接产出 |
+| `位置向量` | 底图 | 最终隐状态矩阵最后一行 XL[n-1],形状 [d_model,],代表模型处理完整 prompt 后的上下文压缩表征 |
+| `归一化向量` | 底图 | 经 Final LayerNorm 处理后的最终特征向量,形状 [d_model,],数值尺度对齐到 LM Head 期望输入范围 |
+| `logits向量` | 底图 | LM Head 对最终表征线性投影得到的未归一化预测分数,形状 [vocab_size,],每个位置对应词表中一个 token 的预测得分 |
+| `KV缓存` | 生成参数 | prefill 阶段按层和注意力头缓存的 K/V 矩阵,每层形状 [2, n_heads, n, d_head],供后续自回归 decode 阶段复用以避免重复计算 |
+| `解码配置` | 生成参数 | 控制解码行为的参数集合,包含 temperature 缩放系数、logits_bias 词级偏置、repetition_penalty 重复惩罚系数和 bad_words_ids 屏蔽列表 |
+| `候选Token列表` | 样图 | 经 Top-k/Top-p 截断后保留的候选 token 子集,形状仍 [vocab_size,] 但非候选位置 logits 被置为负无穷,等待最终采样决策 |
+| `输出Token` | 正文 | 经采样或 argmax 决策后产出的第一个生成 token,对应词表中某个整数 ID 及其解码后的子词或字符,是本次推理的最终交付物 |
+
+---
+
+## L1 外部函数库
+
+| 函数标识 | 功能描述 | 在工序中的使用步骤 |
+|----------|----------|------------------|
+| `<tokenizer>` | 分词器:文本切分 + 词表 ID 查询 + padding/mask 生成 | s1, s2, s3 |
+| `<llm>` | 大语言模型推理引擎:Embedding 查表 + 位置编码 + Transformer 前向(含 KV Cache 写入)+ LM Head + 解码采样 | s4, s5, s6 block 及全部 nested,s7–s12 |
+
+---
+
+## L2 抽象动作 + impl 关系
+
+本工序涉及 3 个 effect 大类,下辖多种具体动作:
+
+**预处理 (effect=预处理)**
+
+| 步骤 | action (impl) | 语义 |
+|------|--------------|------|
+| s1 | 提取/化学提取/识别 | Tokenizer 识别文本边界,切分 token |
+| s2 | 修改/变/转换 | token 字符串 → 整数 ID 查表转换 |
+| s3 | 生成/元素生成 | 生成 attention_mask(padding 位置标记) |
+| s4 | 提取/化学提取/反推 | 从 ID 反推连续向量(embedding 查表) |
+| s5 | 修改/增/添加 | 向 embedding 矩阵叠加位置信息 |
+| s6.1 | 提取/化学提取/反推 | 从隐状态反推 Q/K/V 投影 |
+| s6.2 | 修改/变/转换 | [n,d_model] reshape 为 [n,n_heads,d_head] |
+| s6.3 | 修改/变/调整 | 对 Q/K 施加 RoPE 旋转位置调整 |
+| s6.4 | 生成/元素生成 | 生成注意力分数矩阵(点积+Causal Mask) |
+| s6.8 | 存储/暂存/缓存 | K/V 写入 KV Cache(跨循环持久化) |
+| s7 | 提取/物理提取/裁切 | 从 [n,d_model] 裁切最后行 XL[n-1] |
+| s8 | 修改/变/增强 | FinalNorm 增强数值稳定性 |
+| s10 | 修改/变/调整 | Temperature/偏置/惩罚调整 logits |
+| s11 | 提取/物理提取/裁切 | Top-k/Top-p 裁切候选短名单 |
+
+**主体生成 (effect=主体生成)**
+
+| 步骤 | action (impl) | 语义 |
+|------|--------------|------|
+| s6 (block) | 生成/元素生成 | 遍历 L 层,逐层生成/更新隐状态 |
+| s6.5 | 生成/元素生成 | softmax+AV 聚合生成注意力输出 |
+| s6.6 | 修改/增/添加 | 输出投影+残差连接1,更新隐状态 |
+| s6.7 | 修改/增/添加 | FFN/MLP+残差连接2,进一步更新隐状态 |
+| s9 | 生成/元素生成 | LM Head 矩阵乘法生成全词表 logits |
+
+**交付 (effect=交付)**
+
+| 步骤 | action (impl) | 语义 |
+|------|--------------|------|
+| s12 | 生成/元素生成 | 采样/贪心 + Detokenize 产出输出 Token |
+
+---
+
+## L3 工序模板
+
+**模板:LLM Prefill 推理模板**(对应本 case 唯一工序 p1)
+
+```
+输入:提示词(自然语言文本)
+资源:模型权重,Tokenizer词表
+
+阶段一:文本预处理
+  Step 1 [<tokenizer>]  文本 → Token序列(BPE/WordPiece 切分)
+  Step 2 [<tokenizer>]  Token序列 → Token_ID序列(词表查表)
+  Step 3 [<tokenizer>]  Token_ID序列 → padded_token_ids + 注意力掩码(可选,批处理时激活)
+
+阶段二:Embedding
+  Step 4 [<llm>]  Token_ID序列 → 嵌入矩阵 X(形状 [n, d_model])
+  Step 5 [<llm>]  嵌入矩阵 → 隐状态矩阵 X(叠加位置信息;方式A:绝对PosEmbed;方式B:RoPE在s6.3)
+
+阶段三:Transformer 前向(block,遍历 L 层)
+  s6.1 [<llm>]  隐状态矩阵 → QKV矩阵组(Pre-Norm + 线性投影 Wq/Wk/Wv)
+  s6.2 [<llm>]  QKV矩阵组 → 多头QKV(reshape [n,d_model]→[n,n_heads,d_head])
+  s6.3 [<llm>]  多头QKV → 多头QKV(RoPE 旋转编码 Q/K,V 不变;方式A时可跳过)
+  s6.4 [<llm>]  多头QKV + 注意力掩码 → 注意力分数矩阵(QK^T/sqrt(d_head) + Causal Mask)
+  s6.5 [<llm>]  注意力分数矩阵 → 注意力输出矩阵(softmax + O=AV)
+  s6.6 [<llm>]  注意力输出矩阵 + 隐状态矩阵 → 隐状态矩阵(输出投影 Wo + 残差连接1)
+  s6.7 [<llm>]  隐状态矩阵 → 隐状态矩阵(FFN/MLP + 残差连接2;SwiGLU/GEGLU/GELU 激活)
+  s6.8 [<llm>]  QKV矩阵组(K/V) → KV缓存(写入每层 KV Cache,供 decode 复用)
+
+阶段四:LM Head
+  Step 7 [<llm>]  隐状态矩阵 XL → 位置向量 x_last(取最后序列位置 XL[n-1])
+  Step 8 [<llm>]  位置向量 → 归一化向量 h(FinalNorm;可选取决于模型)
+  Step 9 [<llm>]  归一化向量 → logits向量(h × W_vocab,形状 [vocab_size,])
+
+阶段五:解码决策
+  Step 10 [<llm>]  logits向量 + 解码配置 → logits向量(Temperature/bias/重复惩罚/坏词屏蔽;可选)
+  Step 11 [<llm>]  logits向量 → 候选Token列表(Top-k/Top-p/Min-p 截断;可选)
+  Step 12 [<llm>]  候选Token列表 → 输出Token(Sampling 或 Greedy + Detokenize)
+
+返回:输出Token(第一个生成 token,可继续自回归循环)
+```
+
+控制结构:s6 为 `kind:block` + `control:遍历`,内含 s6.1–s6.8 共 8 个 `kind:nested` 步骤,代表单层 Transformer 的完整计算流程,整体遍历 L 次。
+
+---
+
+## L4 工序实例
+
+### inputs (本次实际值)
+
+| 参数 | 值 |
+|------|----|
+| 用户Prompt(type: 提示词) | 详细图解LLM推理流程,从Prompt到第一个Token(用户输入的完整自然语言文本,如问题、指令等) |
+| LLM模型参数(type: 模型权重) | Transformer各层权重矩阵(Wq/Wk/Wv/Wo/MLP权重)+ W_vocab + 可学习位置嵌入参数 |
+| Tokenizer词表(type: 词表) | Token字符串到整数ID的双向映射,共vocab_size条 |
+
+推断输入(inferred=true):
+
+| 出现在步骤 | 参数 | inferred_reason |
+|-----------|------|----------------|
+| s6.4 input[1] | attention_mask(来自 s3) | Causal Mask+Padding Mask 组合施加;padding_mask 来自 s3 的 attention_mask;原文图5明确展示两者结合 |
+| s6.6 input[1] | 隐状态矩阵 X(来自 s6.1) | 残差连接 X'=X+O 需要当前层输入 X,是 Transformer 标准架构必经步骤 |
+| s6.8 input[0] | K_V_current(来自 s6.1 QKV投影) | KV Cache 写入需要当前层 K/V;原文图7明确展示此步骤 |
+| s10 input[1] | 解码配置 decoding_params | logits 处理需要解码参数;原文体文 Step3 明确提到加载生成参数(温度、Top-P 采样等) |
+
+### bindings (本次工具选择)
+
+| 步骤 | via |
+|------|-----|
+| s1 | `<tokenizer>` |
+| s2 | `<tokenizer>` |
+| s3 | `<tokenizer>` |
+| s4 | `<llm>` |
+| s5 | `<llm>` |
+| s6.1–s6.8 | `<llm>` |
+| s7 | `<llm>` |
+| s8 | `<llm>` |
+| s9 | `<llm>` |
+| s10 | `<llm>` |
+| s11 | `<llm>` |
+| s12 | `<llm>` |
+
+### extracted_values (prompt 原文回填)
+
+以下数值/文本来自原帖 9 张图解及正文,逐字回填:
+
+**正文体文(4步高层概述):**
+- Step 1:Prompt 输入 — 接收原始自然语言文本作为模型输入
+- Step 2:预处理 — Tokenize(词元化)+ Embedding(嵌入化)
+- Step 3:初始化 — 初始化 KV Cache 与解码状态,加载生成参数(温度、Top-P 采样等)
+- Step 4:计算+采样 — Transformer 前向计算 + logits 生成 + Top-k/p 采样
+
+**图解具体参数(各图截取):**
+
+| 来源图 | 提取内容 |
+|--------|----------|
+| 图1(Tokenization)| 示例切分:tokens = ['今天','天气','很','好'];对应 IDs = [1234, 5678, 90, 123] |
+| 图2(Embedding)| 嵌入矩阵形状 [n, d_model];示例 d_model = 4096 |
+| 图3(位置编码)| 方式A:X = X + PosEmbed(positions);方式B(RoPE):不在此处处理,在每层 Attention 子层对 Q/K 旋转 |
+| 图4(QKV投影)| Q=H·Wq, K=H·Wk, V=H·Wv;Pre-Norm: H=Norm(X)(RMSNorm/LayerNorm) |
+| 图5(Attention + Mask)| S = QK^T / sqrt(d_head);Causal Mask:未来位置→ -∞;Padding Mask:填充位置→ -∞;A = softmax(S);O = AV |
+| 图6(多头 reshape)| d_head = d_model / n_heads;reshape [n,d_model]→[n,n_heads,d_head] |
+| 图7(KV Cache)| 每层缓存形状:[2, n_heads, seq_len, d_head](2 = K + V);prefill 写满,decode 读取 |
+| 图8(LM Head)| x_last = XL[n-1],形状 [d_model,];h = FinalNorm(x_last);logits = h · W_vocab,形状 [vocab_size,];示例 logits = [3.2, 2.8, 1.5, ..., -0.3] |
+| 图9(解码决策)| Top-k:保留前 k 个最高分 token;Top-p:累积概率达 p 截断;Sampling:softmax(logits) → 按概率随机采样;Greedy:argmax(logits) → 直接取最高分;Detokenize:next_token_id → 字符/子词(如 '的',或带前缀 '##子' 的子词) |
+
+note: 图解中部分超参数(如具体的 n_heads、L 层数、vocab_size 数值)未在图中标注,描述以通用变量名呈现。
+
+### trace
+
+无(本 case 为知识科普型帖子,未记录实际推理耗时 / token cost / retry 信息)。
+
+---
+
+## 这个 case 对 DSL 设计的关键启发
+
+1. **block+nested 对遍历结构的建模能力得到验证**:Transformer 的 L 层循环用 `kind:block` + `control:遍历` + 8 个 `kind:nested` 子步骤干净地表达了"单层内部固定结构 × 重复 L 次"的语义,不需要展开成 L 个并列 step 组,避免了结构膨胀。
+
+2. **inferred 字段识别的关键 IO 跨步骤依赖**:s6.4 的 attention_mask(来自 s3)、s6.6 的残差 X(来自 s6.1)、s6.8 的 K/V 矩阵(来自 s6.1)、s10 的解码配置(来自工序输入)均通过 `inferred:true` + `inferred_reason` 记录了"原文不显式绑定但逻辑必需"的跨步骤数据流,是 DSL 补全隐式数据流的好例证。
+
+3. **type_registry 扩展路径**:神经网络张量(QKV 矩阵、隐状态、logits 等)在 stdlib 中无精确对应叶子,全部通过 `extends` 继承到 `底图 / 模型权重 / 生成参数 / 样图 / 正文` 等语义最接近的祖先节点,并用 `desc` 补充具体张量形状、数值含义。这一批 16 条 type 可作为「AI/ML 推理」领域扩展 stdlib 的候选清单。
+
+4. **位置编码双路(RoPE vs 绝对位置嵌入)的建模方式**:两种编码方案分别归属 s5(方式A)和 s6.3(方式B),通过同一 step s5 的 `memo` 交叉引用 s6.3 说明两者的时机差异,而 s6.3 本身按"RoPE 路径"建模(方式A时可视为透传)。这种"一 step 承接多方案,memo 说明分支条件"的写法值得固化为模板习惯。
+
+5. **form 分类对计算中间体的局限性**:形式(form)分类树面向社交媒体内容呈现设计,对张量、矩阵等计算对象无对应叶节点,全部标为 null。这表明 DSL 的「实质/形式」分类轴面向「内容传播形式」设计,对纯计算型流水线中的中间数据,form 字段表达力天然受限,是正常现象而非分类缺陷。

+ 39 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/understanding.md

@@ -0,0 +1,39 @@
+# 心智模型 — C_xhs_69ee4674
+
+## 工序数量判断
+
+**单工序**: 1 个 procedure
+
+**判断依据**:
+- 全文描述一条完整的输入→输出链:用户Prompt文本 → 第一个生成Token
+- 4个高层步骤(预处理→Embedding→Transformer前向→解码决策)加9张详细图解,均属于同一条推理链
+- 没有多条不同方法产出不同终态产物的情况;位置编码的两种方案(绝对位置 vs RoPE)是同一链路内的条件分支,不构成独立工序
+
+## P1: LLM推理流程(从Prompt到第一个Token)
+
+**终态产物**: 第一个输出Token(next_token_id,可Detokenize为字符/子词)
+
+**工艺类型**: 计算流程(神经网络前向推理)
+
+**外部工具依赖**:
+- Tokenizer/分词器:文本→token序列→token_ids;Padding/Batching
+- LLM推理引擎:Embedding + Transformer多层前向(Attention + FFN/MLP + KV Cache)+ LM Head + 解码采样
+
+**大致步骤数**: 12个顶层步骤 + Transformer层内8个嵌套步骤(block:遍历 L层)
+
+**流程五阶段结构**:
+
+| 阶段 | 步骤 | 内容 |
+|------|------|------|
+| 1 输入预处理 | s1–s3 | Tokenization + Vocabulary Lookup + Padding/Batching[可选] |
+| 2 Embedding | s4–s5 | Token Embedding + 位置编码(绝对/RoPE两方案分支) |
+| 3 Transformer前向 | s6 (block:遍历L层) | Pre-Norm+QKV → 多头拆分 → RoPE → Attention分数+Mask → Softmax+聚合 → 输出投影+残差1 → MLP/FFN+残差2 → KV Cache写入 |
+| 4 LM Head | s7–s9 | 取x_last + Final Norm + LM Head→logits |
+| 5 解码决策 | s10–s12 | Logits处理[可选] + 候选截断[可选] + 采样/贪心 + Detokenize |
+
+**关键隐含工艺约束**:
+- RoPE位置编码延迟到每层Attention子层内对Q/K旋转处理,而非在Embedding阶段统一处理
+- KV Cache写入发生在每层Transformer完成后,供后续decode步骤(续token生成)复用,将复杂度从O(T²)降至O(T)
+- Prefill阶段仅取最后一个位置x_last的输出用于生成第一个token
+- Padding/Batching(s3)和Logits处理(s10)、候选截断(s11)均为可选步骤
+- Causal Mask + Padding Mask组合施加,确保自回顾语义正确性

+ 1027 - 0
examples/process_pipeline/script/search_eval/runs_full/q0010/procedures/C_xhs_69ee4674/workflow.json

@@ -0,0 +1,1027 @@
+{
+  "source": {
+    "platform": "xhs",
+    "author": "xhs博主",
+    "date": "2026-04-27",
+    "url": "https://www.xiaohongshu.com/explore/69ee467400000000220289e2",
+    "title": "大模型原理图解,从Prompt到第一个Token",
+    "excerpt": "用大白话图解LLM推理全流程,从用户Prompt文本到生成第一个Token,拆解为预处理→Embedding→Transformer前向→LM Head→解码决策五阶段,配9张详细图解。"
+  },
+  "procedures": [
+    {
+      "id": "p1",
+      "name": "LLM推理_从Prompt到第一个Token",
+      "purpose": "给定用户Prompt,经分词→Embedding→Transformer多层前向→LM Head→解码采样,生成第一个输出Token",
+      "category": "学习",
+      "platform": "xhs",
+      "author": "xhs博主",
+      "declarations": {
+        "inputs": [
+          {
+            "type": "提示词",
+            "name": "用户Prompt",
+            "desc": "用户输入的自然语言指令文本"
+          }
+        ],
+        "resources": [
+          {
+            "type": "模型权重",
+            "name": "LLM模型参数",
+            "desc": "Transformer各层权重矩阵(Wq/Wk/Wv/Wo/MLP权重)+W_vocab+可学习位置嵌入参数"
+          },
+          {
+            "type": "词表",
+            "name": "Tokenizer词表",
+            "desc": "Token字符串到整数ID的双向映射,共vocab_size条"
+          }
+        ],
+        "returns": {
+          "type": "输出Token",
+          "note": "第一个生成Token的字符/子词形式,可继续自回归循环"
+        }
+      },
+      "type_registry": {
+        "Token序列": {
+          "extends": "描述",
+          "desc": "Tokenizer将自然语言文本切分后得到的字符串token列表,如['今天','天气','很','好'],是文本在词表粒度上的离散序列表示"
+        },
+        "Token_ID序列": {
+          "extends": "描述",
+          "desc": "Token序列中每个token在词表中对应的整数索引列表,形状[n,],值域[0, vocab_size-1],是模型实际消费的数字化输入"
+        },
+        "注意力掩码": {
+          "extends": "蒙版",
+          "desc": "与padded token_ids同形状的二元矩阵,有效token位置=1,padding位置=0,用于在注意力计算中屏蔽padding位置"
+        },
+        "嵌入矩阵": {
+          "extends": "模型权重",
+          "desc": "词嵌入查表后得到的token向量矩阵,形状[n, d_model],每行是对应token在连续语义空间中的浮点表示"
+        },
+        "隐状态矩阵": {
+          "extends": "底图",
+          "desc": "Transformer各层输入/输出的中间表征矩阵,形状[n, d_model],承载当前层对序列的语义理解,是后续层持续改造的对象"
+        },
+        "QKV矩阵组": {
+          "extends": "底图",
+          "desc": "注意力机制中Query、Key、Value三个线性投影矩阵的组合,各形状[n, d_model],分别负责查询匹配、键索引和值聚合"
+        },
+        "多头QKV": {
+          "extends": "底图",
+          "desc": "将QKV矩阵reshape为多头形式后的张量,形状[n, n_heads, d_head],支持多头并行注意力计算"
+        },
+        "注意力分数矩阵": {
+          "extends": "底图",
+          "desc": "QK点积经缩放和因果掩码处理后的注意力分数,形状[n_heads, n, n],未来位置被置为负无穷"
+        },
+        "注意力输出矩阵": {
+          "extends": "底图",
+          "desc": "经softmax归一化后对V做加权求和得到的注意力输出,形状[n, n_heads, d_head],是多头注意力的直接产出"
+        },
+        "位置向量": {
+          "extends": "底图",
+          "desc": "最终隐状态矩阵最后一行XL[n-1],形状[d_model,],代表模型处理完整prompt后的上下文压缩表征"
+        },
+        "归一化向量": {
+          "extends": "底图",
+          "desc": "经Final LayerNorm处理后的最终特征向量,形状[d_model,],数值尺度对齐到LM Head期望输入范围"
+        },
+        "logits向量": {
+          "extends": "底图",
+          "desc": "LM Head对最终表征线性投影得到的未归一化预测分数,形状[vocab_size,],每个位置对应词表中一个token的预测得分"
+        },
+        "KV缓存": {
+          "extends": "生成参数",
+          "desc": "prefill阶段按层和注意力头缓存的K/V矩阵,每层形状[2, n_heads, n, d_head],供后续自回归decode阶段复用以避免重复计算"
+        },
+        "解码配置": {
+          "extends": "生成参数",
+          "desc": "控制解码行为的参数集合,包含temperature缩放系数、logits_bias词级偏置、repetition_penalty重复惩罚系数和bad_words_ids屏蔽列表"
+        },
+        "候选Token列表": {
+          "extends": "样图",
+          "desc": "经Top-k/Top-p截断后保留的候选token子集,形状仍[vocab_size,]但非候选位置logits被置为负无穷,等待最终采样决策"
+        },
+        "输出Token": {
+          "extends": "正文",
+          "desc": "经采样或argmax决策后产出的第一个生成token,对应词表中某个整数ID及其解码后的子词或字符,是本次推理的最终交付物"
+        }
+      },
+      "steps": [
+        {
+          "id": "s1",
+          "kind": "step",
+          "via": "<tokenizer>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "将Prompt文本按Tokenizer规则切分为token字符串序列"
+            ],
+            [
+              "memo",
+              "tokens=[t0,t1,...,tn-1];切分规则由模型/词表决定(BPE/WordPiece等);类比把一段话拆成一块块可拼装的乐高零件"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "提示词",
+              "name": "用户Prompt",
+              "value": "详细图解LLM推理流程,从Prompt到第一个Token(用户输入的完整自然语言文本,如问题、指令等)",
+              "anchor": "← 工序输入",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": "/架构/叙事/叙事体裁/演说交流/科普教学"
+            }
+          ],
+          "outputs": [
+            {
+              "type": "Token序列",
+              "name": "tokens",
+              "value": "<Prompt文本切分后的字符串token列表,如['今天','天气','很','好'],长度n取决于Prompt和词表粒度>",
+              "anchor": "→ s2",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举"
+            }
+          ],
+          "intent": "用 {via:<tokenizer>} 把 {in-type:提示词} 切分为 {out-type:Token序列}",
+          "focus": [
+            "via",
+            "in-type-0",
+            "out-type-0"
+          ],
+          "effect": "预处理",
+          "action": "提取/化学提取/识别"
+        },
+        {
+          "id": "s2",
+          "kind": "step",
+          "via": "<tokenizer>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "在Tokenizer词表中查找每个token对应的整数ID"
+            ],
+            [
+              "memo",
+              "token_ids=[id0,id1,...,idn-1];目的:把符号映射成整数索引,便于embedding table以O(1)查表;类比把单词换成字典里的页码/编号"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "Token序列",
+              "name": "tokens",
+              "value": "<Prompt文本切分后的字符串token列表,如['今天','天气','很','好'],长度n取决于Prompt和词表粒度>",
+              "anchor": "← s1.tokens",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举"
+            }
+          ],
+          "outputs": [
+            {
+              "type": "Token_ID序列",
+              "name": "token_ids",
+              "value": "<tokens对应的整数ID列表,如[1234,5678,90,123],形状[n,],值域[0,vocab_size-1]>",
+              "anchor": "→ s3 / s4",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/序号列举"
+            }
+          ],
+          "intent": "词表查询把 {in-type:Token序列} 映射为 {out-type:Token_ID序列}",
+          "focus": [
+            "in-type-0",
+            "out-type-0"
+          ],
+          "effect": "预处理",
+          "action": "修改/变/转换"
+        },
+        {
+          "id": "s3",
+          "kind": "step",
+          "via": "<tokenizer>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "对batch内多条序列进行padding对齐,生成attention_mask标记有效位置"
+            ],
+            [
+              "memo",
+              "可选步骤:单序列推理时可省略;用途:并行计算多个样本+防止padding位置参与注意力计算;padding位置填特殊PAD_ID;类比把不同长度积木墙用同样盒子装,周围堆起空位占位但不影响"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "Token_ID序列",
+              "name": "token_ids",
+              "value": "<tokens对应的整数ID列表,如[1234,5678,90,123],形状[n,],值域[0,vocab_size-1]>",
+              "anchor": "← s2.token_ids",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "Token_ID序列",
+              "name": "padded_token_ids",
+              "value": "<padding后的token_ids,形状[batch_size,max_seq_len],PAD位置填充特殊PAD_ID>",
+              "anchor": "→ s4",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            },
+            {
+              "type": "注意力掩码",
+              "name": "attention_mask",
+              "value": "<与padded_token_ids同形状的二元mask,有效token=1,padding=0;用于标记哪些位置参与注意力计算>",
+              "anchor": "→ s6.4",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "intent": "批处理填充对齐 {in-type:Token_ID序列} 生成 {out-type:注意力掩码}",
+          "focus": [
+            "out-type-1"
+          ],
+          "effect": "预处理",
+          "action": "生成/元素生成"
+        },
+        {
+          "id": "s4",
+          "kind": "step",
+          "via": "<llm>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "查embedding table,将token_ids映射到连续向量空间X矩阵"
+            ],
+            [
+              "memo",
+              "X=Embedding(token_ids);形状[n,d_model];目的:把离散ID映射到连续向量空间;embedding权重是模型可学习参数;类比把编号变成坐标,在地图上更易处理"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "Token_ID序列",
+              "name": "token_ids",
+              "value": "<tokens对应的整数ID列表,如[1234,5678,90,123],形状[n,],值域[0,vocab_size-1]>",
+              "anchor": "← s2.token_ids",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "嵌入矩阵",
+              "name": "X",
+              "value": "<每个token_id对应的embedding向量堆叠,形状[n,d_model](如d_model=4096);每行是该token在语义空间的连续浮点表示>",
+              "anchor": "→ s5",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "intent": "查表把 {in-type:Token_ID序列} 映射为连续 {out-type:嵌入矩阵}",
+          "focus": [
+            "in-type-0",
+            "out-type-0"
+          ],
+          "effect": "预处理",
+          "action": "提取/化学提取/反推"
+        },
+        {
+          "id": "s5",
+          "kind": "step",
+          "via": "<llm>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "方式A(绝对/可学习位置嵌入):X = X + PosEmbed(positions),将位置向量叠加到token embedding上"
+            ],
+            [
+              "memo",
+              "方式A:X=X+PosEmbed(positions),位置嵌入是可学习参数或正弦编码;方式B(RoPE/ALiBi):不在此处处理,在每层Attention子层内部对Q/K施加位置相关旋转变换(见s6.3);两方案区别:绝对位置告诉模型你在第几位,相对位置告诉模型你们相距多远"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "嵌入矩阵",
+              "name": "X",
+              "value": "<每个token_id对应的embedding向量堆叠,形状[n,d_model](如d_model=4096);每行是该token在语义空间的连续浮点表示>",
+              "anchor": "← s4.X",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "隐状态矩阵",
+              "name": "X",
+              "value": "<加入位置信息后的输入矩阵,形状[n,d_model];若方式A则X+=PosEmbed;若方式B(RoPE)则X不变,位置编码在s6.3对Q/K旋转注入>",
+              "anchor": "→ s6",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "intent": "注入位置信息到 {in-type:嵌入矩阵} 得带位置的 {out-type:隐状态矩阵}",
+          "focus": [
+            "in-type-0",
+            "out-type-0"
+          ],
+          "effect": "预处理",
+          "action": "修改/增/添加"
+        },
+        {
+          "id": "s6",
+          "kind": "block",
+          "control": "遍历",
+          "via": "-",
+          "feature": "-",
+          "intent": "{control:遍历} L个Transformer层做前向计算,逐层更新隐状态建立跨位置依赖",
+          "inputs": [
+            {
+              "type": "隐状态矩阵",
+              "name": "X",
+              "value": "<加入位置信息后的输入矩阵,形状[n,d_model];若方式A则X+=PosEmbed;若方式B(RoPE)则X不变,位置编码在s6.3对Q/K旋转注入>",
+              "anchor": "← s5.X",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "隐状态矩阵",
+              "name": "XL",
+              "value": "<经L层Transformer前向计算后的最终隐状态,形状[n,d_model];XL[n-1]代表读完整段prompt后的当前上下文状态>",
+              "anchor": "→ s7",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "effect": "主体生成",
+          "action": "生成/元素生成"
+        },
+        {
+          "id": "s6.1",
+          "kind": "nested",
+          "group": "s6",
+          "via": "<llm>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "Pre-Norm:H=Norm(X)(RMSNorm/LayerNorm);线性投影:Q=H*Wq, K=H*Wk, V=H*Wv"
+            ],
+            [
+              "memo",
+              "Pre-Norm稳定数值尺度,降低激活异常风险;Q/K/V把同一隐状态映射到查询/键/值三个子空间;类比名片(Q)/目录索引(K)/具体内容(V)三件事分开做"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "隐状态矩阵",
+              "name": "X",
+              "value": "<当前层l的输入隐状态,形状[n,d_model]>",
+              "anchor": "← s6.X[l]",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "QKV矩阵组",
+              "name": "Q_K_V",
+              "value": "<Q/K/V各形状[n,d_model];H分别右乘Wq/Wk/Wv线性变换得到;Q负责查询匹配,K负责键索引,V负责值聚合>",
+              "anchor": "→ s6.2",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "intent": "Pre-Norm后线性投影 {in-type:隐状态矩阵} 得 {out-type:QKV矩阵组}",
+          "focus": [
+            "in-type-0",
+            "out-type-0"
+          ],
+          "effect": "预处理",
+          "action": "提取/化学提取/反推"
+        },
+        {
+          "id": "s6.2",
+          "kind": "nested",
+          "group": "s6",
+          "via": "<llm>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "将Q/K/V从[n,d_model]reshape为[n,n_heads,d_head],拆分为多个注意力头"
+            ],
+            [
+              "memo",
+              "d_head=d_model/n_heads;目的:让不同head学到不同关系子空间,并行建模多种依赖;类比同一段话同时从语法、指代、主题等多个角度去读"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "QKV矩阵组",
+              "name": "Q_K_V",
+              "value": "<Q/K/V各形状[n,d_model];H分别右乘Wq/Wk/Wv线性变换得到;Q负责查询匹配,K负责键索引,V负责值聚合>",
+              "anchor": "← s6.1.Q_K_V",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "多头QKV",
+              "name": "Q_K_V_heads",
+              "value": "<Q/K/V各reshape为[n,n_heads,d_head];Head 1关注语法关系,Head 2关注指代,Head h关注主题等,并行计算>",
+              "anchor": "→ s6.3",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "intent": "reshape {in-type:QKV矩阵组} 为 {out-type:多头QKV} 准备并行注意力",
+          "focus": [
+            "in-type-0",
+            "out-type-0"
+          ],
+          "effect": "预处理",
+          "action": "修改/变/转换"
+        },
+        {
+          "id": "s6.3",
+          "kind": "nested",
+          "group": "s6",
+          "via": "<llm>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "若使用RoPE:对每个head的Q/K应用旋转位置编码(旋转矩阵依赖token相对位置),V不做位置编码"
+            ],
+            [
+              "memo",
+              "RoPE目的:以相对关系形式将位置信息注入注意力匹配,保持相对距离语义;类比把相对距离编码进匹配规则里;若已在s5使用绝对位置嵌入,此步可跳过;ALiBi是另一种方案:在attention score上直接加偏置"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "多头QKV",
+              "name": "Q_K_V_heads",
+              "value": "<Q/K/V各reshape为[n,n_heads,d_head];Head 1关注语法关系,Head 2关注指代,Head h关注主题等,并行计算>",
+              "anchor": "← s6.2.Q_K_V_heads",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "多头QKV",
+              "name": "Q_K_V_pos",
+              "value": "<Q'/K'已施加RoPE旋转携带相对位置信息,V不变;可进行位置感知的注意力计算>",
+              "anchor": "→ s6.4",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "intent": "对 {in-type:多头QKV} 的Q/K施加RoPE旋转注入相对位置信息",
+          "focus": [
+            "in-type-0",
+            "out-type-0"
+          ],
+          "effect": "预处理",
+          "action": "修改/变/调整"
+        },
+        {
+          "id": "s6.4",
+          "kind": "nested",
+          "group": "s6",
+          "via": "<llm>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "计算注意力分数S=QK^T/sqrt(d_head);施加因果mask(Causal Mask)将未来位置设为-∞,并结合padding mask"
+            ],
+            [
+              "memo",
+              "Causal Mask确保当前位置不能看未来信息(自回归语义正确性);-∞经softmax后→0;padding mask防止填充位置参与计算;类比读书时把后面的内容遮住"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "多头QKV",
+              "name": "Q_K_V_pos",
+              "value": "<Q'/K'已施加RoPE旋转携带相对位置信息,V不变;可进行位置感知的注意力计算>",
+              "anchor": "← s6.3.Q_K_V_pos",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            },
+            {
+              "type": "注意力掩码",
+              "name": "attention_mask",
+              "value": "<与padded_token_ids同形状的二元mask,有效token=1,padding=0;用于标记哪些位置参与注意力计算>",
+              "anchor": "← s3.attention_mask",
+              "inferred": true,
+              "inferred_reason": "Causal Mask+Padding Mask组合施加,padding_mask来自s3的attention_mask;原文图5明确展示两者结合",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "注意力分数矩阵",
+              "name": "S_masked",
+              "value": "<形状[n_heads,n,n];未来位置=-∞(mask后),历史/当前位置=有效QK点积分数/sqrt(d_head)>",
+              "anchor": "→ s6.5",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "intent": "点积计算并施加Causal Mask得 {out-type:注意力分数矩阵}",
+          "focus": [
+            "out-type-0"
+          ],
+          "effect": "预处理",
+          "action": "生成/元素生成"
+        },
+        {
+          "id": "s6.5",
+          "kind": "nested",
+          "group": "s6",
+          "via": "<llm>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "对S_masked最后一维做softmax归一化得注意力权重A=softmax(S);加权求和O=AV"
+            ],
+            [
+              "memo",
+              "Softmax把分数归一化为概率分布(和=1),便于加权求和;O=AV,每个位置的输出是所有历史V的注意力加权平均;类比把多个小组意见按权重相加得一份摘要"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "注意力分数矩阵",
+              "name": "S_masked",
+              "value": "<形状[n_heads,n,n];未来位置=-∞(mask后),历史/当前位置=有效QK点积分数/sqrt(d_head)>",
+              "anchor": "← s6.4.S_masked",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "注意力输出矩阵",
+              "name": "O_heads",
+              "value": "<形状[n,n_heads,d_head];每个位置的O是历史V向量的注意力加权平均;A=softmax(S),O=AV>",
+              "anchor": "→ s6.6",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "intent": "Softmax归一化后加权聚合V得 {out-type:注意力输出矩阵}",
+          "focus": [
+            "in-type-0",
+            "out-type-0"
+          ],
+          "effect": "主体生成",
+          "action": "生成/元素生成"
+        },
+        {
+          "id": "s6.6",
+          "kind": "nested",
+          "group": "s6",
+          "via": "<llm>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "输出投影:O=concat(all_heads)*Wo,将多头结果投影回d_model;残差连接1:X'=X+O"
+            ],
+            [
+              "memo",
+              "输出投影concat各head后经Wo线性变换回d_model;残差连接让深层网络更易梯度传播;类比在改稿时保留原稿主线再叠加补充内容"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "注意力输出矩阵",
+              "name": "O_heads",
+              "value": "<形状[n,n_heads,d_head];每个位置的O是历史V向量的注意力加权平均;A=softmax(S),O=AV>",
+              "anchor": "← s6.5.O_heads",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            },
+            {
+              "type": "隐状态矩阵",
+              "name": "X",
+              "value": "<当前层l的输入隐状态,形状[n,d_model]>",
+              "anchor": "← s6.1.X",
+              "inferred": true,
+              "inferred_reason": "残差连接X'=X+O需要当前层输入X,是Transformer标准架构必经步骤",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "隐状态矩阵",
+              "name": "X_prime",
+              "value": "<Attention子层完成后的中间隐状态,形状[n,d_model];X'=X+O*Wo,已融合多头注意力信息>",
+              "anchor": "→ s6.7",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "intent": "输出投影+残差连接完成Attention子层输出 {out-type:隐状态矩阵}",
+          "focus": [
+            "out-type-0"
+          ],
+          "effect": "主体生成",
+          "action": "修改/增/添加"
+        },
+        {
+          "id": "s6.7",
+          "kind": "nested",
+          "group": "s6",
+          "via": "<llm>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "FFN/MLP子层:M=MLP(Norm(X')),两层线性+激活(SwiGLU/GEGLU/GELU);残差连接2:X=X'+M"
+            ],
+            [
+              "memo",
+              "MLP:Norm(X')→Linear(d_model→4d_model)→激活→Linear(4d_model→d_model);提供每个token位置的非线性变换与通道混合能力,补足注意力的表达能力;类比对每个位置做一次本地加工/润色"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "隐状态矩阵",
+              "name": "X_prime",
+              "value": "<Attention子层完成后的中间隐状态,形状[n,d_model];X'=X+O*Wo,已融合多头注意力信息>",
+              "anchor": "← s6.6.X_prime",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "隐状态矩阵",
+              "name": "X_updated",
+              "value": "<当前Transformer层最终输出,形状[n,d_model];X=X'+M,经Attention+MLP两个子层处理,传入下一层>",
+              "anchor": "→ s6[i+1] / → s6.8",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "intent": "MLP/FFN非线性变换+残差连接得更新后的 {out-type:隐状态矩阵}",
+          "focus": [
+            "out-type-0"
+          ],
+          "effect": "主体生成",
+          "action": "修改/增/添加"
+        },
+        {
+          "id": "s6.8",
+          "kind": "nested",
+          "group": "s6",
+          "via": "<llm>",
+          "feature": "写外部",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "将当前层l的K和V矩阵(按head)写入KV Cache存储"
+            ],
+            [
+              "memo",
+              "KV Cache作用:后续每生成新token时不必重新计算整段prompt的K/V,解码复杂度从O(T²)降至近似O(T);存储结构:每层[2,n_heads,seq_len,d_head];类比做题时把已读材料做成笔记后面不必从头翻"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "QKV矩阵组",
+              "name": "K_V_current",
+              "value": "<当前层l的K和V矩阵,各形状[n,n_heads,d_head],将被缓存供后续decode阶段复用>",
+              "anchor": "← s6.1.Q_K_V",
+              "inferred": true,
+              "inferred_reason": "KV Cache写入需要当前层K/V,来自s6.1的QKV投影;原文图7明确展示此步骤",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "KV缓存",
+              "name": "kv_cache",
+              "value": "<按层和head组织的K/V缓存;prefill阶段写满所有n个位置;每层形状[2,n_heads,n,d_head](2=K+V);供后续续token生成的decode阶段读取>",
+              "anchor": "→ 返回 KV缓存",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "intent": "将当前层K/V写入 {out-type:KV缓存} 供decode阶段复用",
+          "focus": [
+            "out-type-0"
+          ],
+          "effect": "预处理",
+          "action": "存储/暂存/缓存"
+        },
+        {
+          "id": "s7",
+          "kind": "step",
+          "via": "<llm>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "从最终隐状态XL中取最后一个序列位置:x_last=XL[n-1]"
+            ],
+            [
+              "memo",
+              "Prefill阶段对prompt每个位置都有隐状态输出,但只需最后位置x_last生成第一个token;x_last代表读完整段prompt后的当前上下文压缩表示"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "隐状态矩阵",
+              "name": "XL",
+              "value": "<经L层Transformer前向计算后的最终隐状态,形状[n,d_model];XL[n-1]代表读完整段prompt后的当前上下文状态>",
+              "anchor": "← s6.XL",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "位置向量",
+              "name": "x_last",
+              "value": "<XL最后一行XL[n-1],形状[d_model,];代表模型读完整段prompt后的当前上下文压缩状态>",
+              "anchor": "→ s8",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "intent": "取 {in-type:隐状态矩阵} 最后位置得 {out-type:位置向量} x_last",
+          "focus": [
+            "in-type-0",
+            "out-type-0"
+          ],
+          "effect": "预处理",
+          "action": "提取/物理提取/裁切"
+        },
+        {
+          "id": "s8",
+          "kind": "step",
+          "via": "<llm>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "Final Norm:h=FinalNorm(x_last),常见为RMSNorm/LayerNorm"
+            ],
+            [
+              "memo",
+              "目的:把最终表征对齐到LM Head期望的数值尺度;类比出门前把指南针校准;取决于具体模型结构是否有FinalNorm(部分模型有,部分没有)"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "位置向量",
+              "name": "x_last",
+              "value": "<XL最后一行XL[n-1],形状[d_model,];代表模型读完整段prompt后的当前上下文压缩状态>",
+              "anchor": "← s7.x_last",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "归一化向量",
+              "name": "h",
+              "value": "<经FinalNorm处理后的最终表征,形状[d_model,];数值尺度对齐到LM Head期望范围>",
+              "anchor": "→ s9",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "intent": "FinalNorm归一化 {in-type:位置向量} 得对齐尺度的 {out-type:归一化向量} h",
+          "focus": [
+            "in-type-0",
+            "out-type-0"
+          ],
+          "effect": "预处理",
+          "action": "修改/变/增强"
+        },
+        {
+          "id": "s9",
+          "kind": "step",
+          "via": "<llm>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "LM Head矩阵乘法:logits=h*W_vocab,W_vocab形状[d_model,vocab_size]"
+            ],
+            [
+              "memo",
+              "logits是未归一化原始分数,形状[vocab_size,];代表第一个输出token的候选得分,覆盖整个词表;还未经softmax不是概率;类比把当前想法翻译成一张候选词得分榜"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "归一化向量",
+              "name": "h",
+              "value": "<经FinalNorm处理后的最终表征,形状[d_model,];数值尺度对齐到LM Head期望范围>",
+              "anchor": "← s8.h",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "logits向量",
+              "name": "logits",
+              "value": "<形状[vocab_size,]的未归一化原始分数,如[3.2,2.8,1.5,...,-0.3];每个位置对应词表一个token的预测得分;还未经softmax不是概率>",
+              "anchor": "→ s10",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "intent": "LM Head矩阵乘法得覆盖全词表的 {out-type:logits向量}",
+          "focus": [
+            "out-type-0"
+          ],
+          "effect": "主体生成",
+          "action": "生成/元素生成"
+        },
+        {
+          "id": "s10",
+          "kind": "step",
+          "via": "<llm>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "可选:Temperature缩放(logits/T)+Logits bias(特定token加减分)+重复惩罚(降低已出现token分数)+Bad words mask(直接屏蔽某些token)"
+            ],
+            [
+              "memo",
+              "可选步骤:目的是把基础模型偏好对齐到产品目标与可控性要求;T越低越确定,T越高越发散;Logits bias用于安全/风格控制;类比在出答案前调一调说话风格/谨慎程度旋钮"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "logits向量",
+              "name": "logits",
+              "value": "<形状[vocab_size,]的未归一化原始分数,如[3.2,2.8,1.5,...,-0.3];每个位置对应词表一个token的预测得分;还未经softmax不是概率>",
+              "anchor": "← s9.logits",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            },
+            {
+              "type": "解码配置",
+              "name": "decoding_params",
+              "value": "<解码参数配置:temperature(如1.0),logits_bias(token级加减分词典),repetition_penalty(重复惩罚系数),bad_words_ids(屏蔽token列表)>",
+              "anchor": "← 工序输入",
+              "inferred": true,
+              "inferred_reason": "logits处理需要解码参数,原文体文Step3明确提到加载生成参数(温度、Top-P采样等)",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "logits向量",
+              "name": "adjusted_logits",
+              "value": "<经Temperature缩放+偏置+惩罚+屏蔽处理后的logits,形状仍[vocab_size,];不期望token得分被调整或置为-∞>",
+              "anchor": "→ s11",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "intent": "用 {in-type:解码配置} 对 {in-type:logits向量} 做Temperature等调整",
+          "focus": [
+            "in-type-0",
+            "in-type-1",
+            "out-type-0"
+          ],
+          "effect": "预处理",
+          "action": "修改/变/调整"
+        },
+        {
+          "id": "s11",
+          "kind": "step",
+          "via": "<llm>",
+          "feature": "幂等",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "可选截断:Top-k(只保留前k个分数最高的token)/ Top-p(累积概率达p截断)/ Min-p(低于阈值全过滤)/ Typical(保留类型性制的)"
+            ],
+            [
+              "memo",
+              "可选步骤:降低长尾噪声,提升可读性/一致性;先列候选短名单再做决定;Top-k和Top-p常组合使用"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "logits向量",
+              "name": "adjusted_logits",
+              "value": "<经Temperature缩放+偏置+惩罚+屏蔽处理后的logits,形状仍[vocab_size,];不期望token得分被调整或置为-∞>",
+              "anchor": "← s10.adjusted_logits",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": null
+            }
+          ],
+          "outputs": [
+            {
+              "type": "候选Token列表",
+              "name": "candidate_logits",
+              "value": "<经Top-k/Top-p截断后的候选token子集,其余位置logits置为-∞;形状仍[vocab_size,]但有效候选数远小于vocab_size>",
+              "anchor": "→ s12",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举"
+            }
+          ],
+          "intent": "Top-k/Top-p截断 {in-type:logits向量} 得精简 {out-type:候选Token列表}",
+          "focus": [
+            "in-type-0",
+            "out-type-0"
+          ],
+          "effect": "预处理",
+          "action": "提取/物理提取/裁切"
+        },
+        {
+          "id": "s12",
+          "kind": "step",
+          "via": "<llm>",
+          "feature": "随机",
+          "control": "-",
+          "instruction": [
+            [
+              "directive",
+              "Sampling:softmax(candidate_logits)得概率分布→随机按概率采样;Greedy:argmax(candidate_logits)直接选最高分;得到next_token_id后Detokenize为字符/子词"
+            ],
+            [
+              "memo",
+              "Sampling目的:多样性;Greedy目的:确定性可复现;两者选择取决于应用场景;Detokenize把整数ID还原为用户可见文本;第一个token产出后进入自回归循环"
+            ]
+          ],
+          "inputs": [
+            {
+              "type": "候选Token列表",
+              "name": "candidate_logits",
+              "value": "<经Top-k/Top-p截断后的候选token子集,其余位置logits置为-∞;形状仍[vocab_size,]但有效候选数远小于vocab_size>",
+              "anchor": "← s11.candidate_logits",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+              "form": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举"
+            }
+          ],
+          "outputs": [
+            {
+              "type": "输出Token",
+              "name": "first_token",
+              "value": "<第一个生成Token,如next_token_id=1234对应'的';Detokenize后为字符或子词(如'##子'前缀);后续进入自回归循环续token生成>",
+              "anchor": "→ 返回 first_token",
+              "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+              "form": null
+            }
+          ],
+          "intent": "采样/贪心从 {in-type:候选Token列表} 选出并Detokenize为 {out-type:输出Token}",
+          "focus": [
+            "in-type-0",
+            "out-type-0"
+          ],
+          "effect": "交付",
+          "action": "生成/元素生成"
+        }
+      ],
+      "return_row": {
+        "arrow": "↩",
+        "text": "<span class=\"kw\">返回</span> <span class=\"chip\" data-type=\"输出Token\">输出Token</span> 第一个生成Token(字符/子词,可继续自回归循环)"
+      }
+    }
+  ]
+}

+ 357 - 0
examples/process_pipeline/script/search_eval/scrape_selection_to_eval.py

@@ -0,0 +1,357 @@
+# -*- coding: utf-8 -*-
+"""
+把几个公开帖子(小红书 / 微信公众号 / CSDN)的内容爬下来,归一化成
+procedure-dsl/input/eval_case-*.json 那套 schema,并跑 SourceQualityEvaluator
+打质量分。
+
+每条 source 只要给 URL 即可(平台从域名自动识别),无需登录 / 无需后端:
+
+  - 小红书 explore 页:解析页面里的 window.__INITIAL_STATE__(含 xsec_token 的
+    分享链最稳),拿 title / desc / 点赞 / 图片 / 时间。
+  - 微信公众号 mp.weixin.qq.com/s/<token>:解析 og:title + #js_content 正文 +
+    var ct 发布时间 + 正文图片。公众号的阅读/点赞需要登录态 cookie,拿不到,
+    like_count 置 None。
+  - CSDN 文章页:解析 #content_views 正文 + 发布时间 + 正文图片。
+
+输出 schema(与 eval_case-1.json 完全一致、字段同序):
+  channel_content_id / title / content_type / body_text / like_count /
+  publish_timestamp(字符串 "YYYY-MM-DD HH:MM:SS") / images / videos /
+  channel / link / _quality_score / _quality_grade
+
+用法:
+    python scrape_selection_to_eval.py            # 跑下面 SOURCES 里的全部链接
+输出:
+    ./scraped_selection/<channel>_<id>.json       # 每条一个文件
+    ./scraped_selection/_all.json                 # 合并成一个 list
+"""
+
+from __future__ import annotations
+
+import json
+import re
+import sys
+from datetime import datetime
+from pathlib import Path
+from typing import Any, Dict, List, Optional
+
+import httpx
+from bs4 import BeautifulSoup
+
+# ── 让本脚本能 import 同仓的质量评估器(在上一级 script/ 目录)──
+SCRIPT_DIR = Path(__file__).resolve().parent           # .../search_eval
+sys.path.insert(0, str(SCRIPT_DIR.parent))             # .../script
+from evaluate_source_quality import SourceQualityEvaluator  # noqa: E402
+
+OUT_DIR = SCRIPT_DIR / "scraped_selection"
+
+UA = (
+    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
+    "(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
+)
+
+# ── 要爬的链接(按用户给的 4 条)──
+SOURCES: List[str] = [
+    "https://blog.csdn.net/2402_86571652/article/details/153465368",
+    "https://mp.weixin.qq.com/s/3pZ3BAET1wPGwPV92zEu9A",
+    "https://mp.weixin.qq.com/s/LWBNsgbwFl1NfDNOYEom-Q",
+    "https://www.xiaohongshu.com/explore/6981939f000000000e03da6d?xsec_token=ABKp_PMFXV9IuxRL9a_48ovmBpnetn8v2aUefL9JW_E_U=&xsec_source=pc_search&source=web_explore_feed",
+]
+
+# eval_case schema 的字段顺序
+FIELD_ORDER = [
+    "channel_content_id", "title", "content_type", "body_text", "like_count",
+    "publish_timestamp", "images", "videos", "channel", "link",
+    "_quality_score", "_quality_grade",
+]
+
+
+# ── 通用工具 ──
+
+def _get(url: str) -> str:
+    """GET 一个页面,返回 HTML 文本。"""
+    with httpx.Client(timeout=40, follow_redirects=True, headers={"User-Agent": UA}) as c:
+        r = c.get(url)
+        r.raise_for_status()
+        return r.text
+
+
+def _fmt_ts(ms: Optional[int]) -> Optional[str]:
+    """epoch 毫秒 -> 本地时间 'YYYY-MM-DD HH:MM:SS' 字符串。拿不到返回 None。"""
+    if not ms:
+        return None
+    try:
+        return datetime.fromtimestamp(int(ms) / 1000).strftime("%Y-%m-%d %H:%M:%S")
+    except Exception:
+        return None
+
+
+def detect_platform(url: str) -> str:
+    if "xiaohongshu.com" in url:
+        return "xhs"
+    if "mp.weixin.qq.com" in url:
+        return "gzh"
+    if "csdn.net" in url:
+        return "csdn"
+    raise ValueError(f"不支持的链接(无法识别平台):{url}")
+
+
+# ── 小红书:解析 window.__INITIAL_STATE__ ──
+
+def _xhs_note_id(url: str) -> str:
+    m = re.search(r"/(?:explore|discovery/item)/([0-9a-fA-F]+)", url)
+    if not m:
+        raise ValueError(f"无法从小红书链接解析 note id:{url}")
+    return m.group(1)
+
+
+def _xhs_img_url(item: Dict[str, Any]) -> Optional[str]:
+    """从 imageList 的一项里取一个可用图片 URL。"""
+    if item.get("urlDefault"):
+        return item["urlDefault"]
+    for info in item.get("infoList") or []:
+        if info.get("url"):
+            return info["url"]
+    return None
+
+
+def scrape_xhs(url: str) -> Dict[str, Any]:
+    note_id = _xhs_note_id(url)
+    html = _get(url)
+    m = re.search(r"window\.__INITIAL_STATE__\s*=\s*(\{.*?\})</script>", html, re.S)
+    if not m:
+        raise RuntimeError("小红书页面里没找到 __INITIAL_STATE__(可能被风控/需要登录)")
+    # 页面 JSON 里会有裸 undefined,json 解析不了,替换成 null
+    data = json.loads(m.group(1).replace("undefined", "null"))
+    nd = (((data.get("note") or {}).get("noteDetailMap") or {}).get(note_id) or {}).get("note") or {}
+    if not nd:
+        raise RuntimeError(f"__INITIAL_STATE__ 里没有 note {note_id} 的详情")
+
+    is_video = (nd.get("type") == "video") or bool(nd.get("video"))
+    images = []
+    if not is_video:
+        for it in nd.get("imageList") or []:
+            u = _xhs_img_url(it)
+            if u:
+                images.append(u)
+    videos = []
+    if is_video:
+        # 视频地址藏得较深,能拿到就放,拿不到留空(不影响主流程)
+        try:
+            streams = nd["video"]["media"]["stream"]
+            for codec in streams.values():
+                for s in codec:
+                    if s.get("masterUrl"):
+                        videos.append(s["masterUrl"])
+                        break
+                if videos:
+                    break
+        except Exception:
+            pass
+
+    interact = nd.get("interactInfo") or {}
+    like = interact.get("likedCount")
+    try:
+        like = int(like)
+    except (TypeError, ValueError):
+        like = None
+
+    return {
+        "channel_content_id": note_id,
+        "title": (nd.get("title") or "").strip(),
+        "content_type": "video" if is_video else "note",
+        "body_text": (nd.get("desc") or "").strip(),
+        "like_count": like,
+        "_ts_ms": nd.get("time"),
+        "images": images,
+        "videos": videos,
+        "channel": "xhs",
+        "link": f"https://www.xiaohongshu.com/explore/{note_id}",
+    }
+
+
+# ── 微信公众号:解析正文 HTML ──
+
+def scrape_gzh(url: str) -> Dict[str, Any]:
+    html = _get(url)
+    if "环境异常" in html and "js_content" not in html:
+        raise RuntimeError("公众号返回风控页(环境异常)——换个网络/加 cookie 再试")
+    soup = BeautifulSoup(html, "lxml")
+
+    def og(prop: str) -> Optional[str]:
+        tag = soup.find("meta", attrs={"property": prop})
+        return tag["content"].strip() if tag and tag.get("content") else None
+
+    title = og("og:title") or ""
+    if not title:
+        h = soup.select_one("#activity-name")
+        title = h.get_text(strip=True) if h else ""
+
+    # 公众号名:页面里的 var nickname / #js_name
+    acct = None
+    mnick = re.search(r'var nickname\s*=\s*["\']([^"\']+)["\']', html)
+    if mnick:
+        acct = mnick.group(1).strip()
+    if not acct:
+        jn = soup.select_one("#js_name")
+        acct = jn.get_text(strip=True) if jn else None
+
+    body_el = soup.select_one("#js_content")
+    body = body_el.get_text("\n", strip=True) if body_el else ""
+
+    images: List[str] = []
+    if body_el:
+        for img in body_el.find_all("img"):
+            src = img.get("data-src") or img.get("src")
+            if src and src.startswith("http"):
+                images.append(src)
+
+    # 发布时间:var ct = "<秒级 epoch>"
+    ts_ms = None
+    mct = re.search(r'var ct\s*=\s*["\'](\d+)["\']', html)
+    if mct:
+        ts_ms = int(mct.group(1)) * 1000
+
+    # 用链接里的短 token 作为稳定 id
+    mtok = re.search(r"/s/([A-Za-z0-9_-]+)", url)
+    cid = mtok.group(1) if mtok else url
+
+    return {
+        "channel_content_id": cid,
+        "title": title,
+        "content_type": "article",
+        "body_text": body,
+        "like_count": None,           # 公众号阅读/点赞需登录态,拿不到
+        "_ts_ms": ts_ms,
+        "images": images,
+        "videos": [],
+        "channel": "gzh",
+        "channel_account_name": acct,  # 额外信息,写到输出里方便溯源
+        "link": url.split("#")[0],
+    }
+
+
+# ── CSDN:解析文章 HTML ──
+
+def scrape_csdn(url: str) -> Dict[str, Any]:
+    html = _get(url)
+    soup = BeautifulSoup(html, "lxml")
+
+    def og(prop: str) -> Optional[str]:
+        tag = soup.find("meta", attrs={"property": prop})
+        return tag["content"].strip() if tag and tag.get("content") else None
+
+    title = og("og:title") or ""
+    h = soup.select_one("h1.title-article, #articleContentId")
+    if h:
+        title = h.get_text(strip=True) or title
+    title = re.sub(r"[-_]\s*CSDN.*$", "", title).strip()
+
+    body_el = soup.select_one("#content_views")
+    body = body_el.get_text("\n", strip=True) if body_el else ""
+
+    images: List[str] = []
+    if body_el:
+        for img in body_el.find_all("img"):
+            src = img.get("src") or img.get("data-src")
+            if src and src.startswith("http"):
+                images.append(src)
+
+    # 发布时间:meta article:published_time(ISO)或 span.time
+    ts_ms = None
+    pub = og("article:published_time")
+    if pub:
+        try:
+            ts_ms = int(datetime.fromisoformat(pub.replace("Z", "+00:00")).timestamp() * 1000)
+        except Exception:
+            ts_ms = None
+    if ts_ms is None:
+        t = soup.select_one(".time, .article-bar-top .time")
+        if t:
+            mdt = re.search(r"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}", t.get_text())
+            if mdt:
+                try:
+                    ts_ms = int(datetime.strptime(mdt.group(0), "%Y-%m-%d %H:%M:%S").timestamp() * 1000)
+                except Exception:
+                    ts_ms = None
+
+    # 点赞数:CSDN 静态页常见 span#spanCount / .get-collection 之类,能抓到就抓
+    like = None
+    for sel in ["#spanCount", "#is-like-imgactive + span", ".count"]:
+        el = soup.select_one(sel)
+        if el and el.get_text(strip=True).isdigit():
+            like = int(el.get_text(strip=True))
+            break
+
+    mid = re.search(r"/article/details/(\d+)", url)
+    cid = mid.group(1) if mid else url
+
+    return {
+        "channel_content_id": cid,
+        "title": title,
+        "content_type": "article",
+        "body_text": body,
+        "like_count": like,
+        "_ts_ms": ts_ms,
+        "images": images,
+        "videos": [],
+        "channel": "csdn",
+        "link": url.split("#")[0].split("?")[0],
+    }
+
+
+SCRAPERS = {"xhs": scrape_xhs, "gzh": scrape_gzh, "csdn": scrape_csdn}
+
+
+def normalize_and_score(raw: Dict[str, Any], evaluator: SourceQualityEvaluator) -> Dict[str, Any]:
+    """跑质量分(用数值时间戳),再把时间戳转成字符串、按 schema 排好字段。"""
+    ts_ms = raw.pop("_ts_ms", None)
+    acct = raw.pop("channel_account_name", None)
+
+    # 评估器读数值 publish_timestamp(与现有 pipeline 一致:传 epoch 毫秒)
+    scoring_post = dict(raw)
+    scoring_post["publish_timestamp"] = ts_ms or 0
+    res = evaluator.evaluate_post(scoring_post)
+    raw["_quality_score"] = res["total_score"]
+    raw["_quality_grade"] = res["grade"]
+
+    # 输出用字符串时间戳
+    raw["publish_timestamp"] = _fmt_ts(ts_ms)
+
+    ordered = {k: raw.get(k) for k in FIELD_ORDER}
+    if acct:  # 公众号名放在 schema 字段之后,作为溯源附注
+        ordered["channel_account_name"] = acct
+    return ordered
+
+
+def main() -> None:
+    OUT_DIR.mkdir(exist_ok=True)
+    evaluator = SourceQualityEvaluator()
+    results: List[Dict[str, Any]] = []
+
+    for url in SOURCES:
+        plat = detect_platform(url)
+        print(f"[{plat}] {url}")
+        try:
+            raw = SCRAPERS[plat](url)
+            item = normalize_and_score(raw, evaluator)
+        except Exception as e:
+            print(f"  !! 失败: {type(e).__name__}: {e}")
+            continue
+
+        fname = f"{item['channel']}_{item['channel_content_id']}.json"
+        (OUT_DIR / fname).write_text(
+            json.dumps(item, ensure_ascii=False, indent=2), encoding="utf-8"
+        )
+        results.append(item)
+        print(f"  -> {fname} | {item['_quality_grade']} {item['_quality_score']} "
+              f"| 正文 {len(item.get('body_text') or '')} 字 | 图 {len(item.get('images') or [])} "
+              f"| 赞 {item.get('like_count')}")
+
+    (OUT_DIR / "_all.json").write_text(
+        json.dumps(results, ensure_ascii=False, indent=2), encoding="utf-8"
+    )
+    print(f"\n完成:{len(results)}/{len(SOURCES)} 条 -> {OUT_DIR}")
+
+
+if __name__ == "__main__":
+    main()

Разница между файлами не показана из-за своего большого размера
+ 4 - 0
examples/process_pipeline/script/search_eval/scraped_selection/creative_1.json


Разница между файлами не показана из-за своего большого размера
+ 4 - 0
examples/process_pipeline/script/search_eval/scraped_selection/creative_2.json


Разница между файлами не показана из-за своего большого размера
+ 4 - 0
examples/process_pipeline/script/search_eval/scraped_selection/creative_3.json


+ 17 - 0
examples/process_pipeline/script/search_eval/scraped_selection/creative_4.json

@@ -0,0 +1,17 @@
+{
+  "channel_content_id": "6981939f000000000e03da6d",
+  "title": "选题不对,努力白费;三步学会,流量自来",
+  "content_type": "note",
+  "body_text": "三步挖出爆款选题,告别内容焦虑。\n选题时找到素材与用户需求之间的隐性关联,并将其具体化。\n<爆款选题三步法口诀>\n挖需求,看四项,搜同评大痛点藏。\n转选题,套八样,细分场景跨界强。\n优化时,四法上,细分组合出奇招。\n三步走,流量涨,选题从此不慌张。\n#短视频脚本[话题]# #创作者运营[话题]# #干货[话题]# #短视频运营[话题]# #不确定性中寻找确定性[话题]# #选题[话题]# #选题方向[话题]#",
+  "like_count": 107,
+  "publish_timestamp": "2026-02-03 14:20:15",
+  "images": [
+    "http://sns-webpic-qc.xhscdn.com/202606011541/b6bfa01eeeaaa34c5ece6f4ff859b3a9/notes_pre_post/1040g3k831s479s4262005pjc26tiucj2netaivg!nd_dft_wlteh_jpg_3",
+    "http://sns-webpic-qc.xhscdn.com/202606011541/3276025dc74058725399277f0f464789/notes_pre_post/1040g3k831s479s42620g5pjc26tiucj293tgr70!nd_dft_wlteh_jpg_3"
+  ],
+  "videos": [],
+  "channel": "xhs",
+  "link": "https://www.xiaohongshu.com/explore/6981939f000000000e03da6d",
+  "_quality_score": 87.0,
+  "_quality_grade": "A"
+}

Разница между файлами не показана из-за своего большого размера
+ 8 - 0
examples/process_pipeline/script/search_eval/workflows/q0000_A_gzh_8f5fbfb0.json


+ 251 - 0
examples/process_pipeline/script/search_eval/workflows/q0000_B_xhs_69832685.json

@@ -0,0 +1,251 @@
+{
+  "query_id": "q0000",
+  "query": "反推 提示词 教程",
+  "platform": "xhs",
+  "post": {
+    "channel_content_id": "698326850000000009038add",
+    "title": "1:1快速用豆包反推提示词,太香了!",
+    "content_type": "note",
+    "body_text": "提示词放评论区了 需要自取吧!\n#AI工具[话题]# #ai关键词[话题]# #AI人工智能[话题]# #人工智能[话题]# #ai[话题]# #作图神器[话题]# #AI画图[话题]# #搜索关键词[话题]#",
+    "like_count": 1071,
+    "publish_timestamp": "2026-02-04 18:59:17",
+    "images": [
+      "https://ci.xiaohongshu.com/spectrum/1040g0k031s5oko2fla705q1dfpujif7he3hn8d8?imageView2/2/w/1080/format/webp",
+      "https://ci.xiaohongshu.com/spectrum/1040g34o31s5oktlk5c105q1dfpujif7h043vg58?imageView2/2/w/1080/format/webp",
+      "https://ci.xiaohongshu.com/spectrum/1040g34o31s5oktlk5c1g5q1dfpujif7hka5offg?imageView2/2/w/1080/format/webp",
+      "https://ci.xiaohongshu.com/spectrum/1040g34o31s5ol5ta58105q1dfpujif7h8r1ek10?imageView2/2/w/1080/format/webp"
+    ],
+    "videos": [],
+    "channel": "xhs",
+    "link": "https://www.xiaohongshu.com/explore/698326850000000009038add",
+    "_quality_score": 89.0,
+    "_quality_grade": "A"
+  },
+  "llm_evaluation": {
+    "知识类型": [
+      "工序"
+    ],
+    "相关性": {
+      "和内容制作知识相关": {
+        "得分": 10,
+        "理由": "内容完整展示了利用大模型反推提示词并用于AI绘图的完整工作流,属于典型的制作知识。"
+      },
+      "和 query 相关": {
+        "得分": 10,
+        "理由": "直接回答了如何通过AI工具(豆包)反向推导图片提示词,并给出了后续应用步骤。"
+      }
+    },
+    "质量": {
+      "固定维度": {
+        "热度性": {
+          "得分": 9,
+          "理由": "点赞过千,在AI教程类内容中属于高热度,受众反馈积极。"
+        },
+        "评论反馈": {
+          "得分": 8,
+          "理由": "虽然评论区未展示,但从点赞量推测用户对该实用技巧认可度高。"
+        },
+        "用例": {
+          "真实感": {
+            "得分": 8,
+            "理由": "展示的商业海报成品光影和质感较好,AI痕迹较少,符合商业设计需求。"
+          },
+          "表现力": {
+            "得分": 9,
+            "理由": "成品具备极高的商业表现力,可以直接用于社媒营销场景。"
+          }
+        },
+        "时效性": {
+          "得分": 6
+        }
+      },
+      "动态维度": {
+        "工序": {
+          "流程完整性": {
+            "得分": 10,
+            "理由": "从上传图片、获取提示词到输入绘图工具生成成品,流程闭环且清晰。"
+          },
+          "字段完整性": {
+            "输入完整性": {
+              "得分": 9,
+              "理由": "明确了需要上传参考图以及使用的指令模板。"
+            },
+            "实现完整性": {
+              "得分": 9,
+              "理由": "详细说明了如何利用大模型分析图片并转化为提示词,步骤具体。"
+            },
+            "输出完整性": {
+              "得分": 9,
+              "理由": "展示了最终生成的AI海报成品,效果直观。"
+            }
+          },
+          "泛化性": {
+            "得分": 9,
+            "理由": "该方法论适用于任何风格的图片反推,具有很强的通用性。"
+          }
+        }
+      }
+    }
+  },
+  "workflow": {
+    "source": {
+      "platform": "xhs",
+      "author": "xhs 小红书用户",
+      "date": "2026-02-04",
+      "url": "https://www.xiaohongshu.com/explore/698326850000000009038add",
+      "title": "1:1快速用豆包反推提示词,太香了!",
+      "excerpt": "用豆包AI的万能分析指令对参考图进行六维逆向分析,生成结构化文生图提示词,再输入即梦等AI作图工具1:1复刻相似风格图片。"
+    },
+    "procedures": [
+      {
+        "id": "p1",
+        "name": "豆包图片反推提示词+AI作图",
+        "purpose": "从参考图逆向生成六维结构化文生图提示词,再输入AI作图工具复刻相似风格图片",
+        "category": "产物创造",
+        "platform": "xhs",
+        "author": "xhs 小红书用户",
+        "declarations": {
+          "inputs": [
+            {
+              "type": "参考图",
+              "name": "参考图",
+              "desc": "想要复刻风格的商业图片(如食品海报、产品图等)"
+            }
+          ],
+          "resources": [
+            {
+              "type": "提示词",
+              "name": "万能反推指令",
+              "desc": "固定分析指令模板:要求AI从主体内容、场景设定、风格参考、色调色彩、构图视角、细节补充六个维度描述图片并生成文生图提示词;可复用于任意参考图"
+            }
+          ],
+          "returns": {
+            "type": "成品图"
+          }
+        },
+        "steps": [
+          {
+            "id": "s1",
+            "kind": "step",
+            "via": "豆包",
+            "action": "提取/化学提取/反推",
+            "feature": "随机",
+            "control": "-",
+            "instruction": [
+              [
+                "directive",
+                "分析这张图片,并生成一个能够指导AI作图工具重新创作类似作品的文生图提示词。提示词中需从主体内容、场景设定、风格参考、色调色彩、构图视角、细节补充这些角度用文字描述图片。"
+              ],
+              [
+                "memo",
+                "此为「万能反推指令」模板(与 declarations.resources 同),适用于任意参考图;豆包输出六维结构化描述,提示词结构清晰直接可用"
+              ]
+            ],
+            "inputs": [
+              {
+                "type": "参考图",
+                "name": "参考图",
+                "value": "<商业食品海报参考图:EGG TART品牌蛋挞产品图,金黄酥脆的叠摞葡式蛋挞,含中英文品牌字样,商业简约风格>",
+                "anchor": "← 工序输入",
+                "inferred": true,
+                "inferred_reason": "原文未直接展示蛋挞案例的参考图内容,仅通过s1输出的文生图提示词内容逆推参考图为蛋挞商业海报",
+                "substance": [
+                  "/表象/视觉/实体/物品/起居物品/食物",
+                  "/理念/事件/商业事件/推广活动"
+                ],
+                "form": [
+                  "/呈现/视觉/视觉制作/实景拍摄/拍摄主体/实物呈现",
+                  "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+                ]
+              }
+            ],
+            "outputs": [
+              {
+                "type": "提示词",
+                "name": "文生图提示词",
+                "value": "商业美食海报,主体为2个层次分明、金黄焦香的葡式蛋挞,挞皮酥脆起酥纹路清晰,挞液嫩滑饱满带自然焦糖斑点,呈现刚出炉的诱人光泽。极简浅暖米色纯色背景,无多余杂物。现代简约风格,融合日系清新与西式烘焙质感。色调为暖焦糖色蛋挞+浅暖米白背景+黑色文字。近距离特写视角,蛋挞堆叠在画面中下部,文字分布在画面左上、左下、右上区域,排版平衡。文字包含英文「EGG TART」「CRISPY CRUST, SMOOTH CUSTARD」「FRESHLY BAKED」,中文「嫩滑浓郁 现烤好味」「新鲜现做」「重磅来袭」「鲜>>>」,字体为无衬线黑体,部分文字带圆形边框,整体视觉干净高级,突出现烤美食的食欲感。",
+                "anchor": "→ s2",
+                "substance": [
+                  "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                  "/表象/视觉/实体/物品/起居物品/食物"
+                ],
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              }
+            ],
+            "intent": "用 {via:豆包} 对 {in-type:参考图} 运行万能反推指令,生成六维结构化 {out-type:文生图提示词}",
+            "focus": [
+              "via",
+              "action",
+              "in-type-0",
+              "out-type-0"
+            ],
+            "effect": "预处理"
+          },
+          {
+            "id": "s2",
+            "kind": "step",
+            "via": "即梦",
+            "action": "生成/元素生成",
+            "feature": "随机",
+            "control": "-",
+            "instruction": [
+              [
+                "config",
+                "图片 4.1 · 智能比例 · 高清 2K · 图片生成模式"
+              ],
+              [
+                "decorator",
+                "@采样(n=4, pick=人工)"
+              ],
+              [
+                "memo",
+                "作者使用即梦演示;可替换为 Midjourney、Stable Diffusion 等任意文生图工具;提示词可在输入前适当修改以匹配目标品牌"
+              ]
+            ],
+            "inputs": [
+              {
+                "type": "提示词",
+                "name": "文生图提示词",
+                "value": "商业美食海报,主体为2个层次分明、金黄焦香的葡式蛋挞,挞皮酥脆起酥纹路清晰,挞液嫩滑饱满带自然焦糖斑点,呈现刚出炉的诱人光泽。极简浅暖米色纯色背景,无多余杂物。现代简约风格,融合日系清新与西式烘焙质感。色调为暖焦糖色蛋挞+浅暖米白背景+黑色文字。近距离特写视角,蛋挞堆叠在画面中下部,文字分布在画面左上、左下、右上区域,排版平衡。文字包含英文「EGG TART」「CRISPY CRUST, SMOOTH CUSTARD」「FRESHLY BAKED」,中文「嫩滑浓郁 现烤好味」「新鲜现做」「重磅来袭」「鲜>>>」,字体为无衬线黑体,部分文字带圆形边框,整体视觉干净高级,突出现烤美食的食欲感。",
+                "anchor": "← s1.文生图提示词",
+                "substance": [
+                  "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                  "/表象/视觉/实体/物品/起居物品/食物"
+                ],
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              }
+            ],
+            "outputs": [
+              {
+                "type": "成品图",
+                "name": "生成图集",
+                "value": "<AI生成的4张EGG TART商业海报变体:叠摞金黄葡式蛋挞主图,含中英文品牌字样(EGG TART / 嫩滑浓郁现烤好味 / CRISPY CRUST等),现代简约美食海报风格,高清2K,各变体构图略有差异>",
+                "anchor": "→ 返回 成品图",
+                "substance": [
+                  "/表象/视觉/实体/物品/影像物品/艺术创作",
+                  "/表象/视觉/实体/物品/起居物品/食物"
+                ],
+                "form": [
+                  "/呈现/视觉/视觉制作/后期处理/图像合成处理/AI生成合成",
+                  "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+                ]
+              }
+            ],
+            "intent": "用 {via:即梦} 将 {in-type:提示词} 文生图,采样生成 {out-type:成品图}",
+            "focus": [
+              "via",
+              "action",
+              "in-type-0",
+              "out-type-0"
+            ],
+            "effect": "主体生成"
+          }
+        ],
+        "return_row": {
+          "arrow": "↩",
+          "text": "<span class=\"kw\">返回</span> <span class=\"chip\" data-type=\"成品图\">成品图</span>"
+        }
+      }
+    ]
+  }
+}

Разница между файлами не показана из-за своего большого размера
+ 8 - 0
examples/process_pipeline/script/search_eval/workflows/q0000_C_gzh_650ee5d6.json


+ 733 - 0
examples/process_pipeline/script/search_eval/workflows/q0010_A_xhs_66d730d4.json

@@ -0,0 +1,733 @@
+{
+  "query_id": "q0010",
+  "query": "代码 反推 提示词 工具",
+  "platform": "xhs",
+  "post": {
+    "channel_content_id": "66d730d4000000001e01b36f",
+    "title": "ComfyUI|提示词自动化书写 / 反推",
+    "content_type": "note",
+    "body_text": "这是一篇关于 ComfyUI 提示词自动化书写及反推的用法指南✨\n-\n你是否还在为写不出准确的提示词而头疼?是否还在为每次都要填写反向提示词而困扰?快来使用自动化提示词工作流吧!\n-\n希望对你有帮助 ❤️\n-\n#comfyui[话题]#  comfyui教程  #comfyui工作流[话题]#  #comfyui技巧[话题]#  #sd绘画[话题]#  #sd教程[话题]#",
+    "like_count": 135,
+    "publish_timestamp": "2024-09-03 23:52:52",
+    "images": [
+      "https://ci.xiaohongshu.com/spectrum/1040g0k03179qo4o3jk005os8a1mnqva73t5e9kg?imageView2/2/w/1080/format/webp",
+      "https://ci.xiaohongshu.com/spectrum/1040g34o3179qo4p0go0g5os8a1mnqva70djrdeg?imageView2/2/w/1080/format/webp",
+      "https://ci.xiaohongshu.com/spectrum/1040g34o3179qo4pvgm0g5os8a1mnqva7lnu1n18?imageView2/2/w/1080/format/webp",
+      "https://ci.xiaohongshu.com/spectrum/1040g0k03179qo4qtjk005os8a1mnqva7tbhpk10?imageView2/2/w/1080/format/webp",
+      "https://ci.xiaohongshu.com/spectrum/1040g0k03179qo4rp0s005os8a1mnqva7dmtqvjo?imageView2/2/w/1080/format/webp",
+      "https://ci.xiaohongshu.com/spectrum/1040g34o3179qo4skgo0g5os8a1mnqva79jf011o?imageView2/2/w/1080/format/webp",
+      "https://ci.xiaohongshu.com/spectrum/1040g0k03179qo4uhgq005os8a1mnqva7arjfu90?imageView2/2/w/1080/format/webp",
+      "https://ci.xiaohongshu.com/spectrum/1040g0k03179qo4ti3k005os8a1mnqva79mpq1t8?imageView2/2/w/1080/format/webp"
+    ],
+    "videos": [],
+    "channel": "xhs",
+    "link": "https://www.xiaohongshu.com/explore/66d730d4000000001e01b36f",
+    "_quality_score": 91.0,
+    "_quality_grade": "A"
+  },
+  "llm_evaluation": {
+    "知识类型": [
+      "工序",
+      "工具"
+    ],
+    "制作相关性": {
+      "得分": 3,
+      "理由": "帖子直接针对 ComfyUI 提示词反推这一核心制作环节,提供了详细的工具安装与节点配置教学,完全符合 AI 内容制作的知识需求。"
+    },
+    "评分": {
+      "通用": {
+        "相关性": {
+          "得分": 5,
+          "理由": "精准回答了如何通过工具实现提示词反推,内容完全落在制作范畴。"
+        },
+        "成品质量": {
+          "得分": 3,
+          "理由": "主要展示的是工作流配置界面,未展示反推后的具体生成效果,表现力一般。"
+        },
+        "可信度": {
+          "得分": 5,
+          "理由": "图文逻辑清晰,步骤截图详尽,且涉及具体插件名称与参数设置,具有很高的实操参考价值。"
+        },
+        "具体用例": {
+          "得分": 5,
+          "理由": "给出了明确的 WD14 Tagger 节点配置及参数设置示例。"
+        }
+      },
+      "工序": {
+        "完整性": {
+          "得分": 5,
+          "理由": "从插件安装、节点加载到参数设置,流程闭环且逻辑连贯。"
+        },
+        "步骤结构": {
+          "得分": 5,
+          "理由": "步骤拆解清晰,每一步的输入输出(如加载图像、反推标签、连接文本节点)界限明确。"
+        },
+        "步骤可复现": {
+          "得分": 5,
+          "理由": "明确指出了插件名称、节点名称及关键参数(如 threshold),用户可直接照做。"
+        }
+      },
+      "工具": {
+        "能力覆盖": {
+          "得分": 4,
+          "理由": "清晰说明了 WD14 Tagger 的反推功能及其在 ComfyUI 中的作用。"
+        },
+        "有效对比": {
+          "得分": 1,
+          "理由": "未涉及与其他反推工具的对比。"
+        },
+        "参数具体": {
+          "得分": 5,
+          "理由": "给出了 model 选择、threshold 数值设置等具体参数。"
+        },
+        "实操示例": {
+          "得分": 4,
+          "理由": "有详细的节点连接与参数设置截图,但缺少反推前后的对比效果图。"
+        },
+        "版本限制": {
+          "得分": 3,
+          "理由": "提到了模型版本(MOAT),但未详细说明对 ComfyUI 核心版本的兼容性要求。"
+        }
+      }
+    },
+    "判定理由": "这是一篇高质量的 ComfyUI 技术教程,非常适合作为知识采集对象。它清晰地解决了提示词反推的痛点,步骤详尽且可复现。若能补充反推后的实际生成效果对比,质量会更完美。"
+  },
+  "workflow": {
+    "source": {
+      "platform": "xiaohongshu",
+      "author": "@TIANRUIAN",
+      "date": "2024-09-03",
+      "url": "https://www.xiaohongshu.com/explore/66d730d4000000001e01b36f",
+      "title": "ComfyUI|提示词自动化书写 / 反推",
+      "excerpt": "ComfyUI 系列教程 #13,介绍提示词反推(WD14 Tagger)和自动负向提示词(Auto Negative Prompt)两种提示词自动化技巧。"
+    },
+    "procedures": [
+      {
+        "id": "p1",
+        "name": "提示词反推工序",
+        "purpose": "从参考图反推 booru 标签提示词,并生成类似风格的新图像",
+        "category": "产物创造",
+        "platform": "xiaohongshu",
+        "author": "@TIANRUIAN",
+        "declarations": {
+          "inputs": [
+            {
+              "type": "参考图",
+              "name": "参考图",
+              "desc": "用于反推提示词的原始图像"
+            }
+          ],
+          "resources": [
+            {
+              "type": "模型文件",
+              "name": "WD14 Tagger 模型",
+              "desc": "wd-v1-4-moat-tagger-v2 等反推模型,存放于 custom_nodes/ComfyUI-WD14-Tagger/models"
+            }
+          ],
+          "returns": {
+            "type": "生成图"
+          }
+        },
+        "type_registry": {
+          "扩展插件": {
+            "extends": "模型权重",
+            "desc": "安装到 ComfyUI 运行环境的自定义节点扩展包,提供额外的节点类型供工作流调用,可被反复装载复用(如 ComfyUI-WD14-Tagger、One Button Prompt 等)"
+          },
+          "节点配置": {
+            "extends": "工作流",
+            "desc": "ComfyUI 工作流中已添加并配置完毕的单个节点实例,包含节点类型与所有参数设定,是工作流节点图的组成单元"
+          }
+        },
+        "steps": [
+          {
+            "id": "s1",
+            "kind": "step",
+            "via": "human",
+            "action": "获取/搜索/下载",
+            "feature": "人工",
+            "control": "-",
+            "instruction": [
+              [
+                "directive",
+                "方法一:在 ComfyUI Manager 中搜索 WD,找到 ComfyUI WD 1.4 Tagger(#63,by pythongosssss)点击安装。方法二:前往 Github 仓库 https://github.com/pythongosssss/ComfyUI-WD14-Tagger 手动下载 ZIP,放入 ComfyUI/custom_nodes 文件夹后重启 ComfyUI"
+              ],
+              [
+                "memo",
+                "常用插件整合包通常已自带;若无则手动安装;扩展允许从图像查询 booru 标签"
+              ]
+            ],
+            "inputs": [],
+            "outputs": [
+              {
+                "type": "扩展插件",
+                "name": "WD14 Tagger 扩展",
+                "value": "ComfyUI-WD14-Tagger(by pythongosssss),支持从图像提取 booru 标签的 ComfyUI 自定义节点扩展,约 564 Stars",
+                "anchor": "→ s2",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              }
+            ],
+            "intent": "安装 {via:human} WD14 Tagger 扩展,为画布添加提示词反推能力",
+            "focus": [
+              "via",
+              "action",
+              "out-type-0"
+            ],
+            "effect": "工艺规约"
+          },
+          {
+            "id": "s2",
+            "kind": "step",
+            "via": "ComfyUI",
+            "action": "修改/增/添加",
+            "feature": "幂等",
+            "control": "-",
+            "instruction": [
+              [
+                "directive",
+                "双击画布空白处,搜索 'wd',选择 WD 14 Tagger 节点"
+              ],
+              [
+                "config",
+                "model=wd-v1-4-moat-tagger-v2, threshold=0.50, character_threshold=0.85, replace_underscore=true, trailing_comma=false"
+              ],
+              [
+                "memo",
+                "model 选最新的 MOAT 模型;threshold 越高反推标签越少;本地无模型时去 Git 下载放入 custom nodes - WD14Tagger-models 文件夹"
+              ]
+            ],
+            "inputs": [
+              {
+                "type": "扩展插件",
+                "name": "WD14 Tagger 扩展",
+                "value": "ComfyUI-WD14-Tagger(by pythongosssss),支持从图像提取 booru 标签的 ComfyUI 自定义节点扩展,约 564 Stars",
+                "anchor": "← s1.WD14 Tagger 扩展",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              }
+            ],
+            "outputs": [
+              {
+                "type": "节点配置",
+                "name": "WD14 Tagger 节点",
+                "value": "配置完毕的 WD14 Tagger 节点:model=wd-v1-4-moat-tagger-v2, threshold=0.50, character_threshold=0.85, replace_underscore=true, trailing_comma=false",
+                "anchor": "→ s5",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              }
+            ],
+            "intent": "在 {via:ComfyUI} 画布上添加 WD14 Tagger 节点并设置反推参数",
+            "focus": [
+              "via",
+              "action",
+              "out-type-0"
+            ],
+            "effect": "工艺规约"
+          },
+          {
+            "id": "s3",
+            "kind": "step",
+            "via": "ComfyUI",
+            "action": "修改/增/添加",
+            "feature": "幂等",
+            "control": "-",
+            "instruction": [
+              [
+                "directive",
+                "双击画布空白处,搜索 'load image',选择 Load Image 节点(Comfy Core)"
+              ]
+            ],
+            "inputs": [],
+            "outputs": [
+              {
+                "type": "节点配置",
+                "name": "Load Image 节点",
+                "value": "空的 Load Image 节点(Comfy Core),等待用户上传参考图",
+                "anchor": "→ s5",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              }
+            ],
+            "intent": "在 {via:ComfyUI} 画布添加 Load Image 节点以接收参考图输入",
+            "focus": [
+              "via",
+              "action",
+              "out-type-0"
+            ],
+            "effect": "工艺规约"
+          },
+          {
+            "id": "s4",
+            "kind": "step",
+            "via": "ComfyUI",
+            "action": "修改/变/转换",
+            "feature": "幂等",
+            "control": "-",
+            "instruction": [
+              [
+                "directive",
+                "右键点击已有的正向 CLIP Text Encode (Prompt) 节点,选择 Convert Widget to Input → Convert text to input,将 text 参数从内联控件改为可外部连接的输入端口"
+              ]
+            ],
+            "inputs": [
+              {
+                "type": "节点配置",
+                "name": "正向 CLIP Text Encode 节点",
+                "value": "<基础文生图工作流中正向 CLIP Text Encode (Prompt) 节点,text 输入当前为内联文本控件>",
+                "anchor": "← 工序输入",
+                "inferred": true,
+                "inferred_reason": "基础文生图工作流前提包含此节点,是本步操作目标;原文图4 明确展示了对该节点执行 Convert text to input 操作",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              }
+            ],
+            "outputs": [
+              {
+                "type": "节点配置",
+                "name": "可接收外部输入的正向 CLIP Text Encode 节点",
+                "value": "正向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收来自 WD14 Tagger 的字符串输出",
+                "anchor": "→ s5",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              }
+            ],
+            "intent": "将正向 {in-type:节点配置} 的 text 改为外部端口以接收 WD14 Tagger 的 STRING 输出",
+            "focus": [
+              "via",
+              "action",
+              "in-type-0",
+              "out-type-0"
+            ],
+            "effect": "工艺规约"
+          },
+          {
+            "id": "s5",
+            "kind": "step",
+            "via": "ComfyUI",
+            "action": "修改/增/添加",
+            "feature": "幂等",
+            "control": "-",
+            "instruction": [
+              [
+                "directive",
+                "将 Load Image 的 IMAGE 输出连接到 WD14 Tagger 的 image 输入;将 WD14 Tagger 的 STRING 输出连接到正向 CLIP Text Encode 的 text 输入;将这段迷你反推节点链接入现有基础文生图工作流(Load Checkpoint → KSampler → VAE Decode → Preview Image)的正向 conditioning 链路"
+              ],
+              [
+                "memo",
+                "迷你反推节点 = Load Image + WD14 Tagger + CLIP Text Encode,3 个节点相连即构成完整反推提示词模块"
+              ]
+            ],
+            "inputs": [
+              {
+                "type": "节点配置",
+                "name": "Load Image 节点",
+                "value": "空的 Load Image 节点(Comfy Core),等待用户上传参考图",
+                "anchor": "← s3.Load Image 节点",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              },
+              {
+                "type": "节点配置",
+                "name": "WD14 Tagger 节点",
+                "value": "配置完毕的 WD14 Tagger 节点:model=wd-v1-4-moat-tagger-v2, threshold=0.50, character_threshold=0.85, replace_underscore=true, trailing_comma=false",
+                "anchor": "← s2.WD14 Tagger 节点",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              },
+              {
+                "type": "节点配置",
+                "name": "可接收外部输入的正向 CLIP Text Encode 节点",
+                "value": "正向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收来自 WD14 Tagger 的字符串输出",
+                "anchor": "← s4.可接收外部输入的正向 CLIP Text Encode 节点",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              },
+              {
+                "type": "工作流",
+                "name": "基础文生图工作流",
+                "value": "<基础文生图工作流:Load Checkpoint + CLIP Text Encode(正) + CLIP Text Encode(负) + Empty Latent Image + KSampler + VAE Decode + Preview Image>",
+                "anchor": "← 工序输入",
+                "inferred": true,
+                "inferred_reason": "接入工作流是本步前提,原文图5 展示了将反推节点接入 Load Checkpoint、KSampler 等基础节点的完整工作流",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"
+              }
+            ],
+            "outputs": [
+              {
+                "type": "工作流",
+                "name": "提示词反推工作流",
+                "value": "Load Image → WD14 Tagger → CLIP Text Encode(正) → KSampler → VAE Decode → Preview Image,配合 Load Checkpoint 和 Empty Latent Image 的完整提示词反推图像生成工作流",
+                "anchor": "→ s6",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"
+              }
+            ],
+            "intent": "连接 Load Image → WD14 Tagger → CLIP Text Encode,将反推链路接入基础文生图 {out-type:ComfyUI工作流}",
+            "focus": [
+              "via",
+              "action",
+              "out-type-0"
+            ],
+            "effect": "工艺规约"
+          },
+          {
+            "id": "s6",
+            "kind": "step",
+            "via": "ComfyUI",
+            "action": "生成/元素生成",
+            "feature": "随机",
+            "control": "-",
+            "instruction": [
+              [
+                "directive",
+                "在 Load Image 节点上传参考图,点击 Queue Prompt 运行工作流"
+              ],
+              [
+                "memo",
+                "WD14 Tagger 反推出的提示词将自动填入正向 CLIP Text Encode,生成与参考图风格相近的新图像"
+              ]
+            ],
+            "inputs": [
+              {
+                "type": "参考图",
+                "name": "参考图",
+                "value": "<图:janko-ferlic 拍摄的骑自行车金发女孩,户外,NYC 字样上衣,中景>",
+                "anchor": "← 工序输入",
+                "substance": "/表象/视觉/实体/物品/影像物品/生活影像",
+                "form": "/呈现/视觉/视觉制作/实景拍摄"
+              },
+              {
+                "type": "工作流",
+                "name": "提示词反推工作流",
+                "value": "Load Image → WD14 Tagger → CLIP Text Encode(正) → KSampler → VAE Decode → Preview Image,配合 Load Checkpoint 和 Empty Latent Image 的完整提示词反推图像生成工作流",
+                "anchor": "← s5.提示词反推工作流",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"
+              }
+            ],
+            "outputs": [
+              {
+                "type": "成品图",
+                "name": "生成图",
+                "value": "<图:基于 WD14 Tagger 反推提示词生成的新图像,金发女孩骑自行车户外场景,风格相近于参考图>",
+                "anchor": "→ 返回 生成图",
+                "substance": "/表象/视觉/实体/物品/影像物品/艺术创作",
+                "form": "/呈现/视觉/视觉制作/构图编排/空间布局/景别角度"
+              }
+            ],
+            "intent": "运行 {via:ComfyUI} {action:文生图},从 {in-type:参考图} 反推提示词生成 {out-type:生成图}",
+            "focus": [
+              "via",
+              "action",
+              "in-type-0",
+              "out-type-0"
+            ],
+            "effect": "主体生成"
+          }
+        ],
+        "return_row": {
+          "arrow": "↩",
+          "text": "<span class=\"kw\">返回</span> <span class=\"chip\" data-type=\"生成图\">生成图</span>"
+        }
+      },
+      {
+        "id": "p2",
+        "name": "自动负向提示词工序",
+        "purpose": "通过 Auto Negative Prompt 节点自动生成并填充负向提示词,省去手写负向提示词的工作",
+        "category": "自动化",
+        "platform": "xiaohongshu",
+        "author": "@TIANRUIAN",
+        "declarations": {
+          "inputs": [
+            {
+              "type": "提示词",
+              "name": "正向提示词",
+              "desc": "用于图像生成的正向描述提示词(可来自 P1 反推结果或手动输入)"
+            }
+          ],
+          "resources": [
+            {
+              "type": "扩展插件",
+              "name": "One Button Prompt 扩展",
+              "desc": "提供 Auto Negative Prompt 等节点的 ComfyUI 扩展包,by Arjen"
+            }
+          ],
+          "returns": {
+            "type": "生成图"
+          }
+        },
+        "type_registry": {
+          "扩展插件": {
+            "extends": "模型权重",
+            "desc": "安装到 ComfyUI 运行环境的自定义节点扩展包,提供额外的节点类型供工作流调用,可被反复装载复用(如 ComfyUI-WD14-Tagger、One Button Prompt 等)"
+          },
+          "节点配置": {
+            "extends": "工作流",
+            "desc": "ComfyUI 工作流中已添加并配置完毕的单个节点实例,包含节点类型与所有参数设定,是工作流节点图的组成单元"
+          }
+        },
+        "steps": [
+          {
+            "id": "s1",
+            "kind": "step",
+            "via": "human",
+            "action": "获取/搜索/下载",
+            "feature": "人工",
+            "control": "-",
+            "instruction": [
+              [
+                "directive",
+                "使用 ComfyUI Manager,搜索 'one button',找到 One Button Prompt(#142,by Arjen,813⭐),点击 Install 安装"
+              ],
+              [
+                "memo",
+                "One Button Prompt 是初学者友好的提示词生成节点包,除 Auto Negative Prompt 外还包含其他实用节点"
+              ]
+            ],
+            "inputs": [],
+            "outputs": [
+              {
+                "type": "扩展插件",
+                "name": "One Button Prompt 扩展",
+                "value": "One Button Prompt(by Arjen,813 Stars),提供 Auto Negative Prompt 等自动提示词节点的 ComfyUI 扩展包",
+                "anchor": "→ s2",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              }
+            ],
+            "intent": "安装 One Button Prompt 扩展插件,获取 {out-type:扩展插件} Auto Negative Prompt 节点能力",
+            "focus": [
+              "via",
+              "action",
+              "out-type-0"
+            ],
+            "effect": "工艺规约"
+          },
+          {
+            "id": "s2",
+            "kind": "step",
+            "via": "ComfyUI",
+            "action": "修改/增/添加",
+            "feature": "幂等",
+            "control": "-",
+            "instruction": [
+              [
+                "directive",
+                "双击画布空白处,搜索 'auto',选择 Auto Negative Prompt(来自 OneButtonPrompt)"
+              ],
+              [
+                "config",
+                "enhancenegative=1, insanitylevel=5, base_model=SDXL, seed=0, control_after_generate=randomize"
+              ],
+              [
+                "memo",
+                "enhancenegative: 0=不开启,1=开启增强负向;insanitylevel 越低关键词越多;base_model 根据所用底模选择"
+              ]
+            ],
+            "inputs": [
+              {
+                "type": "扩展插件",
+                "name": "One Button Prompt 扩展",
+                "value": "One Button Prompt(by Arjen,813 Stars),提供 Auto Negative Prompt 等自动提示词节点的 ComfyUI 扩展包",
+                "anchor": "← s1.One Button Prompt 扩展",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              }
+            ],
+            "outputs": [
+              {
+                "type": "节点配置",
+                "name": "Auto Negative Prompt 节点",
+                "value": "配置完毕的 Auto Negative Prompt 节点:enhancenegative=1, insanitylevel=5, base_model=SDXL, seed=0, control_after_generate=randomize,negative_prompt 输出端口可连接负向 CLIP Text Encode",
+                "anchor": "→ s4",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              }
+            ],
+            "intent": "在 {via:ComfyUI} 添加 Auto Negative Prompt 节点并配置负向提示词生成参数",
+            "focus": [
+              "via",
+              "action",
+              "out-type-0"
+            ],
+            "effect": "工艺规约"
+          },
+          {
+            "id": "s3",
+            "kind": "step",
+            "via": "ComfyUI",
+            "action": "修改/变/转换",
+            "feature": "幂等",
+            "control": "-",
+            "instruction": [
+              [
+                "directive",
+                "右键点击负向 CLIP Text Encode (Prompt) 节点,选择 Convert Widget to Input → Convert text to input,将 text 参数改为可外部连接的输入端口"
+              ]
+            ],
+            "inputs": [
+              {
+                "type": "节点配置",
+                "name": "负向 CLIP Text Encode 节点",
+                "value": "<基础文生图工作流中负向 CLIP Text Encode (Prompt) 节点,text 输入当前为内联文本控件>",
+                "anchor": "← 工序输入",
+                "inferred": true,
+                "inferred_reason": "基础文生图工作流必然包含此节点,是本步改造目标;原文图7 演示了对该节点的 Convert text to input 操作",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              }
+            ],
+            "outputs": [
+              {
+                "type": "节点配置",
+                "name": "可接收外部输入的负向 CLIP Text Encode 节点",
+                "value": "负向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收 Auto Negative Prompt 节点的输出",
+                "anchor": "→ s4",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              }
+            ],
+            "intent": "将负向 {in-type:节点配置} 的 text 改为外部端口以接收 Auto Negative Prompt 的输出",
+            "focus": [
+              "via",
+              "action",
+              "in-type-0",
+              "out-type-0"
+            ],
+            "effect": "工艺规约"
+          },
+          {
+            "id": "s4",
+            "kind": "step",
+            "via": "ComfyUI",
+            "action": "修改/增/添加",
+            "feature": "幂等",
+            "control": "-",
+            "instruction": [
+              [
+                "directive",
+                "将 Auto Negative Prompt 的 negative_prompt 输出连接到负向 CLIP Text Encode 的 text 输入;可添加 Show Text 节点连接 Auto Negative Prompt 输出以查看生成的负向提示词文本"
+              ],
+              [
+                "memo",
+                "若同时使用 WD14 Tagger(P1),WD14 Tagger 的 STRING 输出连接正向 CLIP Text Encode,Auto Negative Prompt 的 positive_prompt 输入也可接入 WD14 Tagger 输出保持提示词一致"
+              ]
+            ],
+            "inputs": [
+              {
+                "type": "节点配置",
+                "name": "Auto Negative Prompt 节点",
+                "value": "配置完毕的 Auto Negative Prompt 节点:enhancenegative=1, insanitylevel=5, base_model=SDXL, seed=0, control_after_generate=randomize,negative_prompt 输出端口可连接负向 CLIP Text Encode",
+                "anchor": "← s2.Auto Negative Prompt 节点",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              },
+              {
+                "type": "节点配置",
+                "name": "可接收外部输入的负向 CLIP Text Encode 节点",
+                "value": "负向 CLIP Text Encode (Prompt) 节点,text 输入端口已转为外部 STRING 类型输入端口,可接收 Auto Negative Prompt 节点的输出",
+                "anchor": "← s3.可接收外部输入的负向 CLIP Text Encode 节点",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/呈现/视觉/视觉制作/构图编排/版面设计/版面结构"
+              },
+              {
+                "type": "工作流",
+                "name": "基础文生图工作流",
+                "value": "<基础文生图工作流:Load Checkpoint + CLIP Text Encode(正) + CLIP Text Encode(负) + Empty Latent Image + KSampler + VAE Decode + Preview Image>",
+                "anchor": "← 工序输入",
+                "inferred": true,
+                "inferred_reason": "接入工作流是本步前提,原文图7 展示了完整工作流接入状态",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"
+              }
+            ],
+            "outputs": [
+              {
+                "type": "工作流",
+                "name": "自动负向提示词工作流",
+                "value": "包含 Auto Negative Prompt → CLIP Text Encode(负) 链路的完整工作流(可配合 WD14 Tagger 同时使用);Show Text 节点可预览生成的负向提示词",
+                "anchor": "→ s5",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"
+              }
+            ],
+            "intent": "将 Auto Negative Prompt 接入负向提示词链路,完成 {out-type:ComfyUI工作流} 搭建",
+            "focus": [
+              "via",
+              "action",
+              "out-type-0"
+            ],
+            "effect": "工艺规约"
+          },
+          {
+            "id": "s5",
+            "kind": "step",
+            "via": "ComfyUI",
+            "action": "生成/元素生成",
+            "feature": "随机",
+            "control": "-",
+            "instruction": [
+              [
+                "directive",
+                "点击 Queue Prompt 运行工作流;查看 Show Text 节点显示的自动生成负向提示词,以及 Preview Image 节点的最终生成图像"
+              ],
+              [
+                "memo",
+                "自动生成的负向提示词示例(来自图1 Show Text 节点):low quality, low details, overexposed, bw, bad photo, bad photography, watermark, text font, username, error, logo, trademark, name, ugly, bad shadow, cropped, out of frame, text, watermark"
+              ]
+            ],
+            "inputs": [
+              {
+                "type": "提示词",
+                "name": "正向提示词",
+                "value": "<由 WD14 Tagger 反推或手动输入的正向提示词文本>",
+                "anchor": "← 工序输入",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+                "form": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举"
+              },
+              {
+                "type": "工作流",
+                "name": "自动负向提示词工作流",
+                "value": "包含 Auto Negative Prompt → CLIP Text Encode(负) 链路的完整工作流(可配合 WD14 Tagger 同时使用);Show Text 节点可预览生成的负向提示词",
+                "anchor": "← s4.自动负向提示词工作流",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/AI应用",
+                "form": "/架构/逻辑/信息编排逻辑/条目列举/分段结构/流程递进"
+              }
+            ],
+            "outputs": [
+              {
+                "type": "成品图",
+                "name": "生成图",
+                "value": "<图:使用反推正向提示词 + Auto Negative Prompt 自动负向提示词生成的图像,示例为金发女孩骑自行车>",
+                "anchor": "→ 返回 生成图",
+                "substance": "/表象/视觉/实体/物品/影像物品/艺术创作",
+                "form": "/呈现/视觉/视觉制作/构图编排/空间布局/景别角度"
+              },
+              {
+                "type": "负向提示词",
+                "name": "负向提示词文本",
+                "value": "low quality, low details, overexposed, bw, bad photo, bad photography, watermark, text font, username, error, logo, trademark, name, ugly, bad shadow, cropped, out of frame, text, watermark",
+                "anchor": "→ 副产物",
+                "substance": "/理念/知识/商业/前沿技术/AI智能/机器学习",
+                "form": "/架构/逻辑/信息编排逻辑/条目列举/逐条罗列/通用列举"
+              }
+            ],
+            "intent": "运行 {via:ComfyUI} {action:文生图},验证自动负向提示词对 {out-type:生成图} 的效果",
+            "focus": [
+              "via",
+              "action",
+              "out-type-0",
+              "out-type-1"
+            ],
+            "effect": "主体生成"
+          }
+        ],
+        "return_row": {
+          "arrow": "↩",
+          "text": "<span class=\"kw\">返回</span> <span class=\"chip\" data-type=\"生成图\">生成图</span>"
+        }
+      }
+    ]
+  }
+}

Разница между файлами не показана из-за своего большого размера
+ 156 - 0
examples/process_pipeline/script/search_eval/workflows/q0010_B_xhs_695b81a3.json


Разница между файлами не показана из-за своего большого размера
+ 8 - 0
examples/process_pipeline/script/search_eval/workflows/q0010_C_xhs_69ee4674.json


Разница между файлами не показана из-за своего большого размера
+ 9 - 0
examples/process_pipeline/script/search_eval/workflows_dump.json


Некоторые файлы не были показаны из-за большого количества измененных файлов