日期: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 三张新表为唯一事实源。
.env 的 MYSQL_* 配置,同一个库),新建三张表
search_data / mode_process / mode_tools,与旧表 fqe_posts / fqe_tools 并存。form_A.json → search_data);
工序/工具解构数据不导入,由新系统重新产生。steps 等嵌套结构存 JSON 列。runs/,gitignore)。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 |
唯一键 (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 |
| 列 | 类型 | 说明 |
|---|---|---|
| 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 |
字段风格与旧 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 |
结果数据:
| 指标 | 计算方式 | 图表 |
|---|---|---|
| 内容树覆盖节点 | 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 含对应类型的帖子数"。两个口径已经用户确认,后续如有标准分类体系可改为百分比。
顶部「工序 / 工具」子切换,三栏布局:
数据流:index.html → /api/* → MySQL。点「解构」→ server 起子进程跑 pipeline 脚本 →
写库 → 前端轮询任务状态接口刷新。
GET / — index.htmlGET /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 — 触发搜索评估.env;不做静默文件回退(与旧系统不同)。仓库无 pytest 体系,按现有惯例用独立脚本 + 手工验收:
python db.py --init 建三张表成功。python import_history.py 导入 q0000–q0003 搜索结果,行数与 form_A.json 条数一致。单文件 HTML + 原生 JS + ECharts(CDN)。实现阶段用 frontend-design 技能出定制视觉: 延续现有工序结果页风格(深色表头多色分区表格、标签 pill、卡片),三 tab 顶部导航。