工作流封装 · 个人项目 · 2026.09
把一套成熟的 B 端行研咨询工作流(8 大工序模块、约 32 万字 SOP),从「人当调度器」 封装成「编排器调度 + 人工闸门把关」的可断点续跑 agent 工作流。 不推翻原有话术,只替换掉其中「人在记步骤、人在复制粘贴、人在判断该不该继续」的部分。
原模板是一套提示词 SOP 产品:每个模块给你一大段标准话术,粘进模型, 每一步产出后自己判断,再回复「进入 stepN / 继续」推进。
它成熟、经过实战。但 人就是调度器 —— 这既是它的质量控制机制,也是它无法自动化的瓶颈。
每一行都是「原来靠人 → 现在靠系统」,且都有落地的文件。
| 层 | 原模板(靠人) | 封装后(靠系统) | 落地物 |
|---|---|---|---|
| 参数层 | A/B/C/D/E/F1 每个模块的「第零步」都要手工粘贴同一大段公共参数 | 参数集中在 project.json 统一维护,渲染时自动注入四段结构 | shared/公共参数.md |
| 调度层 | 人记住「到哪一步了」,靠回复「进入 stepN / 继续」推进 | 状态机 + 每次运行的 state.json,支持断点续跑 | engine/orchestrator.py |
| 物料层 | 人工复制粘贴上游成果(D 模块甚至专门写了「复制黏贴其他 APP 成果」一节) | 产物契约 + artifacts.json,下游自动注入 | shared/产物契约.md |
| 闸门层 | 人肉把关,全靠自觉 | auto / human / check 三类闸门显式声明,可审计 | shared/闸门协议.md |
| 共享约束 | 制表规范在 F1 里重复两遍;去 AI 味文风在备份区重复 12 遍 | 抽为共享文件,按模块按需注入 | shared/制表规范.md |
| 留痕 | 无 | 每次运行留 prompts/(渲染后提示词原文)+ answers/(原始回答)+ run.log | runs/<ts>/ |
13 个产物的命名契约见 shared/产物契约.md;模块依赖关系定义在 workflow.json。
母本本身的「成熟」是不均匀的 —— A–F1 是经实战的完整话术,F2 之后在母本里是空的。封装没有掩盖这一点。
| 模块 | 母本状态 | 本封装的实现方式 | 可用度 |
|---|---|---|---|
| A 背景及目的生成器 | 完整话术 | 逐字收录 | 高 |
| B 原生数据解析 | 完整话术 | 逐字收录 + 解析脚本 | 高 |
| C 章节切割 & 对应数据 | 完整话术(含禁配规则) | 逐字收录 | 高 |
| D 打标字段 & 标签设计 | 完整话术(2 环节) | 逐字收录 | 高 |
| E 数据打标 | 标注「他方封装」,实含 142 行引导词 | 逐字收录母本引导词;工程细节(分批策略 / 规模上限 / 跨批口径)原文未述 | 中高 |
| F1 定量指标体系 & 章节 DEMO | 完整话术(含制表规范) | 逐字收录 | 高 |
| F2 定量数表骨架 | 母本为空 | 回收备份区内容(逐字)+ 自研 Python 跑数引擎 | 中高 |
| F3 纯定量报告 | 母本为空 | 回收备份区内容 + 两步(已去重) | 中高 |
| G 纯定性报告 | 母本为空 | 回收备份区定性分支;有两处缺口已标注 | 中 |
| H 定性定量合并 | 标注「待出」 | 无历史实现可回收,全部相关原话只有 2 行。未编造话术 | 低 |
| I 报告正文撰写 | 母本无此节点 | 回收备份区四步 | 中高 |
python main.py web # 或双击 run-web.bat 浏览器打开 http://127.0.0.1:8770/
在页面上可完成整条流程:看流水线进度 → 渲染当前步骤提示词(一键复制)→ 粘贴回答提交 → 放行 / 打回 → 看产物与留痕 → 跑确定性脚本。纯标准库,不依赖框架或 CDN,离线可用。
python main.py # 仪表盘 + 数字菜单 python main.py init --project project/my-project.json python main.py next python main.py submit A --step step1 --file ans.md python main.py approve # 该步是 human 闸门时
| 引擎冒烟测试 | 35 项 —— 状态机 / 闸门 / 渲染器 / 全 37 步渲染扫描 / 11 模块 DAG 走通 |
|---|---|
| 脚本回归测试 | 41 项 —— 数据画像 / 打标链路 / 制表规范落实 / 禁配报错 |
| 确定性脚本 | parse_raw_data.py · label_data.py · quant_tables.py |
| 留痕惯例 | 每次运行产出 prompts/(渲染后提示词原文)+ answers/(模型原始回答)+ run.log, 沿用既有工程 generated/ 的证据链做法 |
Python 3纯标准库零第三方依赖 本地 Web 控制台状态机 + 断点续跑 产物契约闸门协议
| 路径 | 说明 |
|---|---|
| main.py | 命令行入口:仪表盘 + 数字菜单 + 全部子命令 |
| web/ | 网页版控制台(纯标准库,127.0.0.1:8770) |
| engine/orchestrator.py | 编排器:状态机、闸门、渲染器 |
| workflow.json | 流水线定义:模块 / 依赖 / 步骤 / 闸门 / 13 个产物契约 |
| modules/ | 各模块规格说明书 + 逐字话术 |
| shared/ | 公共参数 · 闸门协议 · 产物契约 · 制表规范 · 文字风格规范 |
| scripts/ | 确定性数据处理脚本(解析 / 打标 / 跑数) |
| tests/ | 引擎冒烟 + 脚本回归 |
| runs/ | 每次运行的状态、提示词、回答、产物 |
| docs/ | 设计说明 · 物料流转 · 开发计划 · 已知缺口 |
难的从来不是写一个编排器 —— 是判断哪些环节该自动化、哪些必须留给人。
原 SOP 之所以要人一步步回复「继续」,不是因为技术上做不到自动跳转, 而是因为每一步的产出质量需要人确认。所以正确的做法不是把人拿掉, 而是把人从「调度」挪到「把关」:
三类闸门在 workflow.json 里是显式声明、可审计的 —— 而不是散落在提示词里的那句「请确认无误后再继续」。
关于本页:本页仅为项目展示,不含源 SOP 的任何话术内容 —— 底层工作流属于原模板作者的知识产权,本页只描述封装工程的改造方式与结构。
个人项目 · 2026.09