Files
2026-09-18 01:40:58 +08:00

7.3 KiB
Raw Permalink Blame History

命令与对话工作流

CLI 合同

从仓库根目录调用:

py -3.12 skills/system-simulation/scripts/simulation_skill.py [--base-url URL] [--timeout SECONDS] COMMAND

若仓库已有 .venv-win\Scripts\python.exe,Windows 应优先用它替换 py -3.12;Linux 使用 .venv/bin/python 或 python3.12。不要使用本机可能指向旧版本的裸 python。默认服务地址为 http://127.0.0.1:8000,超时参数不得低于 10 秒,以保持在后端 5 秒心跳间隔之上。inspect、repair-format、status 和 cancel 在标准输出返回一个结构化 JSON;simulate 在标准输出给出节流后的 JSONL 进展和精简完成摘要。输出目录的 progress.jsonl 保留完整进展/错误事件,但只保存精简结果摘要;完整数值结果另存为 result.json,避免时间序列重复占用空间和智能体上下文。

退出码:

退出码 含义
0 命令按合同成功完成
2 输入、参数或安全前置条件错误
3 HTTP、连接或后端结构化错误
4 仿真事件流报告失败
5 本地结果文件写入失败

不要只看退出码 0 就声称仿真数值成功;还要检查最终事件和 result.json 中的状态。不要通过匹配本地化消息文本判断状态。

检查与解释

py -3.12 skills/system-simulation/scripts/simulation_skill.py inspect INPUT --format auto

--format 可为 auto、json 或 xml。完成后按 file-contracts.md 解释模型。错误和警告应保留层级、稳定错误码、路径或行号;不要只复述最后一句消息。

默认只返回首批 50 个紧凑组件、25 条连接和 20 个结果变量,避免大型工程输出撑满上下文。翻阅模型摘要、按组件查看完整合同或搜索结果变量时使用:

py -3.12 skills/system-simulation/scripts/simulation_skill.py inspect INPUT `
  --component COMPONENT_ID `
  --component-offset 0 `
  --component-limit 50 `
  --connection-offset 0 `
  --connection-limit 25 `
  --variable-query QUERY `
  --variable-offset 0 `
  --variable-limit 20

分别依据 componentPage、connectionPage 和 resultVariablePage 的 hasMore、nextOffset 继续分页,不要为寻找一个组件或变量请求全部详细合同。componentTypes 始终汇总完整模型,可先用它判断系统构成。--component 返回该 ID 的源文件数据和(若参与求解)编译合同,因此物性介质等配置节点也能查看参数。

文本规范化修复

先检查并取得源文件 SHA-256。第一次不带 --confirmed 调用只返回差异预览、不会写文件:

py -3.12 skills/system-simulation/scripts/simulation_skill.py repair-format INPUT `
  --format auto `
  --output OUTPUT `
  --expected-sha256 SHA256

向用户展示预览中的目标路径、源/输出哈希和 confirmationToken,取得明确确认后,再用原样 token 执行写入:

py -3.12 skills/system-simulation/scripts/simulation_skill.py repair-format INPUT `
  --format auto `
  --output OUTPUT `
  --expected-sha256 SHA256 `
  --confirmation-token PREVIEW_TOKEN `
  --confirmed

token 同时绑定源文件哈希、规范化输出哈希和目标绝对路径;任何一项变化都必须重新预览和确认。脚本拒绝覆盖源文件、哈希/token 不匹配和未确认写入。完整边界见 repair-policy.md。写入后再次运行 inspect OUTPUT。

仿真前对话

运行前必须完成以下判断:

  1. inspect 通过,并取得可用结果变量清单。
  2. 使用用户已选择的 separate、overlay 或 stacked;未指定展示方式时可采用 separate 并告知。仅当选择影响用户意图时询问。
  3. 把自然语言对象解析为稳定结果 key;重名、缺单位或把输入参数误称为曲线时先澄清。
  4. 向用户复述将运行的文件、仿真时段、算法、所选结果变量和曲线方式。

用户要求网页查看或搭建时,按 网页操作 通过实际导入/操作完成。没有浏览器工具则交付文件与曲线并明确网页步骤未执行;不声称仅凭 URL 可自动载入。

启动并监视仿真

py -3.12 skills/system-simulation/scripts/simulation_skill.py simulate INPUT `
  --format auto `
  --output-dir OUTPUT_DIR `
  --variables RESULT_KEY_1 RESULT_KEY_2 `
  --chart-mode overlay `
  --simulation-id SIMULATION_ID

--variables 接受结果变量稳定 key;不能传组件参数名。--simulation-id 可省略并由脚本生成,但应保存最终 ID,供恢复查询或取消使用。

监视规则:

  • 消费 JSONL,记录最新 progress、phase、simulatedTime/totalTime、心跳和内部活动快照;
  • 长任务期间定期向用户给出简短进展,避免逐条转发事件;
  • 仅有仿真时间平台期不能证明卡死。活动序号、RHS、solver step、Jacobian 或闭合计数仍增长时,应报告“正在处理慢步”;
  • 网络读取中断后,用已知 simulation ID 查询一次任务快照,再决定是否继续说明、恢复结果或报告连接问题;
  • 不因运行缓慢自动取消。只有用户明确要求取消,或既有系统已经把任务判定为 stalled 时,才使用对应取消原因;
  • completed 才表示完整完成;stopped、stalled、failed 都必须标明是非完整结果。

当前任务状态保存在后端进程内,终态记录只短期保留,服务重启后也不能恢复。本 Skill 不承诺跨进程或长期断线续传;需要查询时应及时保存 simulation ID、事件日志和已经写出的结果文件。

status 对已完成任务只输出结果摘要,不在终端重复打印整套时间序列;正常 simulate 流程会把完整数据保存为 result.json 和 results.csv。

恢复查询:

py -3.12 skills/system-simulation/scripts/simulation_skill.py status SIMULATION_ID

用户要求取消时:

py -3.12 skills/system-simulation/scripts/simulation_skill.py cancel SIMULATION_ID --reason user

--reason stalled 只用于已有充分停滞证据的内部流程,不用来表达普通的用户取消。

结果文件与交付

正常运行目录应包含:

  • progress.jsonl:原始进度、心跳和结束事件;
  • result.json:最终结构化结果;
  • results.csv:全部可用结果变量的 UTF-8 CSV;
  • 根据 separate、overlay 或 stacked 生成的 SVG 曲线。

交付时:

  1. 说明最终状态和实际计算到的仿真时间;
  2. 返回用户选择的 SVG 曲线;
  3. 无论用户只选了几条曲线,都同时返回完整 results.csv;
  4. 若失败或取消但存在部分序列,明确标注曲线和 CSV 是部分结果;
  5. 若没有产生可用时间序列,明确说明没有 CSV,不能创建空文件冒充结果;
  6. 保留 result.json 和 progress.jsonl 作为诊断依据,但通常无需把完整事件日志逐行展示给用户。

可在用户已授权的建模/配置范围内纠正生成与操作错误,重跑受影响检查。不能为了成功擅改物理拓扑、边界或算法;需要改变需求时说明并询问。短时验收使用独立副本,详见 建模与验收。