|
|
@@ -0,0 +1,206 @@
|
|
|
+# mode_workflow 设计文档
|
|
|
+
|
|
|
+日期:2026-06-12
|
|
|
+状态:已确认(用户口头批准)
|
|
|
+位置:`examples/mode_workflow/`
|
|
|
+
|
|
|
+## 目标
|
|
|
+
|
|
|
+在 `examples/` 下新建 `mode_workflow` 项目,把 `examples/process_pipeline/script/search_eval/` 中
|
|
|
+`fixed_query_eval`(固定 query 搜索评估 + 工具解构)和 `mode_procedure`(工序解构)两套服务
|
|
|
+合并简化为一套:单服务 + 单页 HTML(Dashboard / Dataset / 聚类库 三 tab),
|
|
|
+数据以 MySQL 三张新表为唯一事实源。
|
|
|
+
|
|
|
+## 已确认的决策
|
|
|
+
|
|
|
+1. **数据库**:复用现有 MySQL(`.env` 的 `MYSQL_*` 配置,同一个库),新建三张表
|
|
|
+ `search_data` / `mode_process` / `mode_tools`,与旧表 `fqe_posts` / `fqe_tools` 并存。
|
|
|
+2. **历史数据**:只导入搜索结果(runs_full 的 `form_A.json` → `search_data`);
|
|
|
+ 工序/工具解构数据不导入,由新系统重新产生。
|
|
|
+3. **mode_process 行粒度**:一行一个工序(procedure),`steps` 等嵌套结构存 JSON 列。
|
|
|
+4. **架构**:DB 为唯一事实源(区别于旧系统"文件为主 + DB 双写");
|
|
|
+ 本地 JSON 仅作运行中间产物(`runs/`,gitignore)。
|
|
|
+5. **范围裁剪**:只保留 form A 单形式;工序/工具解构只要大模型解构
|
|
|
+ (不含 procedure-dsl 执行引擎、mode-dsl 模式提取);去掉 cloudflared 公网分享、
|
|
|
+ 规范文档编辑弹窗、pid/log 等冗余。
|
|
|
+6. **聚类库** tab 仅占位。
|
|
|
+
|
|
|
+## 文件结构
|
|
|
+
|
|
|
+```
|
|
|
+examples/mode_workflow/
|
|
|
+├── README.md # 项目说明 + 启动方式
|
|
|
+├── server.py # 唯一服务(端口 8772):页面 + 全部 API
|
|
|
+├── db.py # MySQL 连接 + 三表建表/读写(读 .env MYSQL_*)
|
|
|
+├── index.html # 单文件前端:Dashboard / Dataset / 聚类库 三 tab
|
|
|
+├── import_history.py # 一次性脚本:runs_full form_A.json → search_data
|
|
|
+├── pipeline/
|
|
|
+│ ├── search_eval.py # 搜索+评估(从 search_and_evaluate.py 精简,写 search_data)
|
|
|
+│ ├── procedure_extract.py # 工序解构(仅大模型),写 mode_process
|
|
|
+│ └── tool_extract.py # 工具解构(仅大模型),写 mode_tools
|
|
|
+├── prompts/
|
|
|
+│ ├── eval_prompt.md # 搜索评估 prompt(同步自 search_eval)
|
|
|
+│ ├── procedure_extract_system.md
|
|
|
+│ └── tool_extract_system.md
|
|
|
+├── reference/
|
|
|
+│ └── judged_matrix.json # 内容树(27 动作 × 50 类型,643 有效节点)
|
|
|
+└── runs/ # 运行中间产物(gitignore)
|
|
|
+```
|
|
|
+
|
|
|
+来源映射:
|
|
|
+
|
|
|
+| 新文件 | 来源 |
|
|
|
+|---|---|
|
|
|
+| `pipeline/search_eval.py` | `search_eval/search_and_evaluate.py`(只保留 form A 路径) |
|
|
|
+| `pipeline/procedure_extract.py` | `mode_procedure/` 的工序解构调用链(仅 LLM 解构部分) |
|
|
|
+| `pipeline/tool_extract.py` | `fixed_query_eval/tool_extract.py` |
|
|
|
+| `prompts/procedure_extract_system.md` | `mode_procedure/mode-dsl/prompts/procedure_extract_system.md` |
|
|
|
+| `prompts/tool_extract_system.md` | `fixed_query_eval/prompts/tool_extract_system.md` |
|
|
|
+| `db.py` | 参考 `fixed_query_eval/db.py`(pymysql + .env),表结构全新 |
|
|
|
+| `reference/judged_matrix.json` | `search_eval/evaluation/judged_matrix.json` |
|
|
|
+
|
|
|
+## 三张表 Schema(MySQL)
|
|
|
+
|
|
|
+### search_data — 一行一帖
|
|
|
+
|
|
|
+唯一键 `(query_id, case_id)`。
|
|
|
+
|
|
|
+| 列 | 类型 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| id | BIGINT PK AUTO_INCREMENT | |
|
|
|
+| query_id | VARCHAR(32) | 如 q0000 |
|
|
|
+| query_text | VARCHAR(512) | query 原文 |
|
|
|
+| case_id | VARCHAR(128) | 平台_内容ID |
|
|
|
+| platform | VARCHAR(32) | xhs / gzh / zhihu |
|
|
|
+| title | TEXT | 帖子标题 |
|
|
|
+| url | TEXT | 帖子链接 |
|
|
|
+| content_type | VARCHAR(32) | note / video 等 |
|
|
|
+| body_text | LONGTEXT | 正文 |
|
|
|
+| images | JSON | 图片 URL 数组 |
|
|
|
+| videos | JSON | 视频 URL 数组 |
|
|
|
+| like_count | INT | |
|
|
|
+| publish_time | DATETIME NULL | |
|
|
|
+| quality_score | FLOAT NULL | post._quality_score |
|
|
|
+| quality_grade | VARCHAR(8) NULL | A/B/C |
|
|
|
+| found_by_queries | JSON | 命中的子 query |
|
|
|
+| knowledge_type | JSON | ["能力","工序","工具"] 子集 |
|
|
|
+| overall_score | FLOAT NULL | 综合分(相关均值+质量均值)/2 |
|
|
|
+| llm_evaluation | JSON | 评估全量原始 JSON |
|
|
|
+| created_at / updated_at | DATETIME | |
|
|
|
+
|
|
|
+### mode_process — 一行一工序
|
|
|
+
|
|
|
+| 列 | 类型 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| id | BIGINT PK | |
|
|
|
+| query_id / case_id / platform / post_title | 同上 | 关联帖子 |
|
|
|
+| source | JSON | 解构返回的 source 块 |
|
|
|
+| procedure_id | VARCHAR(16) | p1, p2… |
|
|
|
+| name / purpose | VARCHAR/TEXT | 工序名 / 目的 |
|
|
|
+| category | VARCHAR(32) | 产物创造/资产建设/自动化/分析/学习 |
|
|
|
+| declarations | JSON | inputs / resources / returns |
|
|
|
+| type_registry | JSON | 自定义类型表 |
|
|
|
+| steps | JSON | 步骤数组全量(id/kind/via/effect/action/substance/form/directive/intent/inputs/outputs) |
|
|
|
+| step_count | INT | |
|
|
|
+| tools_used | JSON | 从 steps[].via 去重提取 |
|
|
|
+| model | VARCHAR(64) | 解构用模型 |
|
|
|
+| version | VARCHAR(16) | v_MMDDHHMM,保留历史版本 |
|
|
|
+| cost_usd | DECIMAL(10,6) NULL | 本次解构 LLM 成本 |
|
|
|
+| duration_s | FLOAT NULL | 本次解构耗时 |
|
|
|
+| created_at | DATETIME | |
|
|
|
+
|
|
|
+### mode_tools — 一行一工具
|
|
|
+
|
|
|
+字段风格与旧 `fqe_tools` 对齐,新增成本/耗时:
|
|
|
+
|
|
|
+| 列 | 类型 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| id | BIGINT PK | |
|
|
|
+| query_id / case_id / platform / post_title | | 关联帖子 |
|
|
|
+| tool_name | VARCHAR(256) | 工具名称 |
|
|
|
+| substance_scope | JSON | 实质作用域 |
|
|
|
+| form_scope | JSON NULL | 形式作用域 |
|
|
|
+| creation_layer | VARCHAR(16) | 制作层 / 创作层 |
|
|
|
+| source_link | TEXT NULL | |
|
|
|
+| input_desc / output_desc | TEXT NULL | 输入 / 输出 |
|
|
|
+| usage_json | JSON NULL | 用法 |
|
|
|
+| cases_json | JSON NULL | 案例(输入/输出/效果) |
|
|
|
+| defects_json | JSON NULL | 缺点 |
|
|
|
+| last_update_time | VARCHAR(32) NULL | 工具最新更新时间 |
|
|
|
+| model / version | VARCHAR | 同 mode_process |
|
|
|
+| cost_usd / duration_s | | 同 mode_process |
|
|
|
+| created_at | DATETIME | |
|
|
|
+
|
|
|
+## Dashboard 指标口径
|
|
|
+
|
|
|
+结果数据:
|
|
|
+
|
|
|
+| 指标 | 计算方式 | 图表 |
|
|
|
+|---|---|---|
|
|
|
+| 内容树覆盖节点 | mode_process.steps 的 (action × 输入/输出 type) 命中 judged_matrix 有效节点数 / 643 | 数字卡 + 27×50 热力图 |
|
|
|
+| 实质覆盖度 | steps.substance ∪ mode_tools.substance_scope 去重数(无固定分母,展示数量 + 分布) | 条形图 |
|
|
|
+| 形式覆盖度 | steps.form ∪ mode_tools.form_scope 同上 | 条形图 |
|
|
|
+| 采集帖子数量 | count(search_data) | 数字卡 |
|
|
|
+| 解构帖子数量 | distinct case_id in (mode_process ∪ mode_tools) | 数字卡 |
|
|
|
+| 工具数量 | distinct tool_name in mode_tools | 数字卡 |
|
|
|
+| 工序提及工具 Top10 | steps[].via 频次 Top10 | 横向条形图 |
|
|
|
+
|
|
|
+过程数据:
|
|
|
+
|
|
|
+| 指标 | 计算方式 | 图表 |
|
|
|
+|---|---|---|
|
|
|
+| 单条/累计解构成本 | avg/sum(cost_usd),mode_process ∪ mode_tools | 数字卡 + 按日趋势线 |
|
|
|
+| 平均/总耗时 | avg/sum(duration_s) | 数字卡 |
|
|
|
+| 工序进度 | distinct case_id in mode_process ÷ search_data 中 knowledge_type 含「工序」的帖子数 | 进度环 |
|
|
|
+| 工具进度 | 同理,knowledge_type 含「工具」 | 进度环 |
|
|
|
+
|
|
|
+注:实质/形式覆盖度按"去重数量 + 分布图"处理(非百分比);进度分母取
|
|
|
+"knowledge_type 含对应类型的帖子数"。两个口径已经用户确认,后续如有标准分类体系可改为百分比。
|
|
|
+
|
|
|
+## Dataset 页面(核心)
|
|
|
+
|
|
|
+顶部「工序 / 工具」子切换,三栏布局:
|
|
|
+
|
|
|
+- **左栏** query 列表:从 search_data 按 query_id 聚合,显示帖子数 / 解构进度。
|
|
|
+- **中栏** 帖子列表:该 query 下帖子卡片(标题/平台/评分/知识类型),带「解构」触发按钮。
|
|
|
+- **右栏** 解构结果:
|
|
|
+ - 工序模式:复刻现有大模型工序结果页——版本下拉(v_xxx)、重新生成按钮、
|
|
|
+ 工序卡片(名称/目的/类别/平台/作者 + 输入/返回声明)、
|
|
|
+ 需求-输入-实现-输出分区明细表格、推断字段高亮(inferred 标记 + hover 理由)。
|
|
|
+ - 工具模式:渲染 mode_tools 工具卡片(作用域/层级/输入输出/用法/案例/缺点)。
|
|
|
+
|
|
|
+数据流:index.html → `/api/*` → MySQL。点「解构」→ server 起子进程跑 pipeline 脚本 →
|
|
|
+写库 → 前端轮询任务状态接口刷新。
|
|
|
+
|
|
|
+## API 概要(server.py,端口 8772)
|
|
|
+
|
|
|
+- `GET /` — index.html
|
|
|
+- `GET /api/dashboard` — 全部 Dashboard 聚合指标
|
|
|
+- `GET /api/queries` — query 列表 + 进度
|
|
|
+- `GET /api/posts?query_id=` — 帖子列表
|
|
|
+- `GET /api/process?case_id=&version=` / `GET /api/process_versions?case_id=`
|
|
|
+- `GET /api/tools?case_id=&version=` / `GET /api/tools_versions?case_id=`
|
|
|
+- `POST /api/extract_process` / `POST /api/extract_tools` — 触发解构(子进程)
|
|
|
+- `GET /api/task_status?task_id=` — 轮询任务状态
|
|
|
+- `POST /api/run_search` — 触发搜索评估
|
|
|
+
|
|
|
+## 错误处理
|
|
|
+
|
|
|
+- MySQL 不可达:server 启动报错并明确提示检查 `.env`;不做静默文件回退(与旧系统不同)。
|
|
|
+- 解构子进程失败:任务状态接口返回 failed + 日志尾部,前端弹出错误。
|
|
|
+- LLM 返回 JSON 解析失败:重试 1 次,仍失败则记任务失败,不写脏数据。
|
|
|
+
|
|
|
+## 测试 / 验收
|
|
|
+
|
|
|
+仓库无 pytest 体系,按现有惯例用独立脚本 + 手工验收:
|
|
|
+
|
|
|
+1. `python db.py --init` 建三张表成功。
|
|
|
+2. `python import_history.py` 导入 q0000–q0003 搜索结果,行数与 form_A.json 条数一致。
|
|
|
+3. 启动 server,Dashboard 各卡片/图表出数(解构类指标为 0 是正常初始态)。
|
|
|
+4. Dataset 选一个帖子触发工具解构、工序解构,落库且右栏渲染正确,版本切换可用。
|
|
|
+5. 聚类库 tab 显示占位页。
|
|
|
+
|
|
|
+## UI
|
|
|
+
|
|
|
+单文件 HTML + 原生 JS + ECharts(CDN)。实现阶段用 frontend-design 技能出定制视觉:
|
|
|
+延续现有工序结果页风格(深色表头多色分区表格、标签 pill、卡片),三 tab 顶部导航。
|