自包含文件夹,跑「new 模式界面 + procedure 直写版工序解构」。 打法同
fixed_query_eval:引擎全复用父目录search_eval/原件,本目录只放改造后的 server + 前端。
把 search_eval/server.py --mode new + run_cyber.py --skill procedure 这一套固化进一个文件夹:
runs_new/、前端用 new_query.html、query 用自由中文名(非 q0000)。run_cyber.py --skill procedure(读 procedure-dsl/procedure/SKILL.md,强模型一次 write 出 workflow.json),而不是默认的 spec 三阶段版。完整原理分析见同目录 mode_procedure_分析.md。
想改提取逻辑/词表:直接改 procedure-dsl/procedure/SKILL.md(提取规范+内嵌词表)、procedure-dsl/procedure/tools/vocab.py(合法词表)、validate.py(校验规则)——都是本地副本,改完即生效,不碰别人那份。
mode_procedure/
├── server.py ← 后端枢纽(new 模式 + 双引擎接线 + 版本/DB + procedure_versions)
├── new_query.html ← 前端操作台(两个工序子 tab + 版本下拉)
├── db.py ← 共享持久层:agent_dsl / mode_dsl 双表(每版本一行)
├── procedure-dsl/ ← ★ 【Agent 工序】引擎(run_cyber 直写版 + 渲染器)
│ ├── run_cyber.py / run_procedure_dsl.py / plan_tool.py
│ ├── procedure/ 直写版 skill(SKILL.md + tools/{validate,wf-patch,render,vocab}.py)
│ └── spec/ 渲染基础设施(renderer.py + taxonomy,两种工序共用)
├── mode-dsl/ ← ★ 【大模型工序】全部(与 procedure-dsl 并列)
│ ├── procedure_model_extract.py 单帖:一次大模型直出 workflow.json + 渲染
│ ├── batch_model_extract.py 批量:一个 query 全部帖 + 写 mode_dsl
│ └── prompts/procedure_extract_system.md 提取 prompt(可单独迭代)
├── runs_new/ ← 产出目录(每个 query 一个中文名子目录;含 _model/ + history/)
├── mode_procedure_分析.md ← 原理分析
└── README.md
procedure-dsl/(Agent 工序)vsmode-dsl/(大模型工序) 是两条并列的提取引擎;db.py/server.py/new_query.html/runs_new/是两者共享。大模型工序的渲染复用procedure-dsl/的 render.py + spec/renderer(不重复造)。
两类依赖,分清楚:
mode_procedure/procedure-dsl/):run_cyber.py + 依赖 + procedure/ 直写 skill。这套是你的,随便改(改 SKILL.md / 词表 / 校验规则都行),不影响 ../procedure-dsl/ 那份共享的。../(不复制):search_and_evaluate.py、batch_3forms.py、build_workflows.py、batch_extract_procedures.py、evaluation/(taxonomy)。
spec/也复制了(不是为了那个「三阶段」skill,而是procedure/tools/render.py渲染 HTML 时复用spec/tools/renderer.py+spec/taxonomy/)。不复制 spec/ 的话,workflow.json 能生成但最后渲染 HTML 会失败 → 界面看不到结果。你不用改 spec/,它只是渲染基础设施。前端「Claude SDK」引擎在本目录可用(spec/ 已在),但本目录定位是
cyber_runner+procedure直写版。cwd 说明:server 起 run_cyber 时把 cwd 设成
procedure-dsl/(run_cyber 假设的工作目录),否则 agent 找procedure/SKILL.md会瞎试浪费回合。
| # | 改动 | 说明 |
|---|---|---|
| 1 | MODE = "new" 写死、端口默认 8771 |
不用再传 --mode new |
| 2 | SE = HERE.parent + sys.path.insert(SE) |
复用兄弟模块 batch_extract_procedures / build_workflows |
| 3 | 所有引擎脚本/procedure-dsl 路径 HERE/… → SE/… |
引擎在父目录 search_eval |
| 4 | 4 个 subprocess 的 cwd=str(HERE) → str(SE) |
与原版运行目录一致 |
| 5 | 两处 run_cyber 命令加 --skill procedure |
用直写版 skill(单帖 + 批量) |
EVALDIR靠原有 fallback 自动落到search_eval/evaluation(taxonomy),无需改。
cd examples/process_pipeline/script/search_eval/mode_procedure
python server.py # 默认 8771,写死 new 模式
# 浏览器开 http://0.0.0.0:8771
界面流程(new_query.html):
runs_new/{query}/form_A.jsonrun_cyber.py --skill procedure → procedures/{folder}/workflow.json + case-*.html模型:工序提取默认 google/gemini-3.1-flash-lite(界面可改)。
注意:procedure 直写版 SKILL 较复杂,gemini-flash-lite 可能一次写不全;要质量更稳可在界面切强模型(如
anthropic/claude-sonnet-4.6)。
帖子详情「对应工序」下分 🛠️ Agent 工序 / ⚡ 大模型工序 两个子 tab,各自独立显示结果、互不覆盖:
procedures/{folder}/;大模型 → procedures/{folder}/_model/(各有自己的 workflow.json / case-*.html / _extract.log)。variant=agent|model 参数路由到对应目录;task_key 用 {q}/{folder} vs {q}/{folder}/_model 区分。两种提取方式:
| 按钮 | 走什么 | 流程 | 特点 |
|---|---|---|---|
| 开始提取工序 | run_cyber.py --skill procedure(agent) |
读 SKILL.md → 写 → validate 校验 → 修 → 渲染 | 多轮、有自我校验修错,质量稳,慢/贵 |
| 🤖 模型提取 | mode-dsl/procedure_model_extract.py(单次大模型) |
一次大模型调用(帖子文本+配图 → workflow.json)→ 渲染 | 无 agent / 无 validate 循环,快/便宜(~$0.004),不保证字段全合规 |
大模型工序相关全部在 mode-dsl/(与 Agent 引擎 procedure-dsl/ 并列):
mode-dsl/prompts/procedure_extract_system.md — 提取 prompt(可单独迭代,不动代码)mode-dsl/procedure_model_extract.py — 单次多模态调用 → workflow.json → 复用 ../procedure-dsl 的 render.py 出 HTMLmode-dsl/batch_model_extract.py — 批量:一个 query 下所有帖逐个跑 + 写 mode_dsl 表/api/extract_procedure_model 端点 + run_model_extraction_task(调 mode-dsl/procedure_model_extract.py)startModelExtraction()模型默认 gemini-3.1-flash-lite,用详情页「AI 模型」下拉选中的模型。两个按钮都复用同一套 procedure_status / 日志 / 版本 / 展示逻辑。
db.py(根目录,共享):agent_dsl / mode_dsl 两张表,每帖每版本一行(version = v_月日时分,保留历史)。python db.py init 建表。_meta.json,旧版本进 history/{版本}/;详情页「重新生成」旁的版本下拉可切换历史版本。同 fixed_query_eval:需 pip install -e '.[browser,server,feishu]' + Pillow/filelock(run_cyber 触发 agent.tools.builtin 全链)。server.py 本身轻量(提取走 subprocess),缺这些也能起、能看已有产出。
环境变量:OPEN_ROUTER_API_KEY(提取/评分/OCR 都走 OpenRouter)。
/api/data 正常、矩阵从 search_eval/evaluation 加载from batch_extract_procedures / import build_workflows 从 SE 解析成功/api/generate_procedure 触发 → run_cyber.py --skill procedure 正确启动(OCR 配图、调 OpenRouter 200、无路径错误)实现:复制 ../server.py + ../new_query.html + ../procedure-dsl 的工序提取引擎(run_cyber/run_procedure_dsl/plan_tool/procedure)。server 改造:写死 new 模式 + 工序引擎指本地 procedure-dsl + 搜索/重评仍指父目录 + run_cyber 加 --skill procedure。引擎是 DSL_ROOT 自相对路径,复制后内部无需改。