完善系统仿真优化计划交互
This commit is contained in:
1 parent
42ffdfff7d
commit
50c9f59d78
4 files changed
+812
-24
No files matched your search
@@ -49,7 +49,9 @@
|
||||
|
||||
用户描述了响应约束但未指定容差时,默认 `tolerance = 0`;未指定 `scale` 时,取该约束所有非空边界绝对值的最大值,若结果为零则取 `1`。目标或约束接近零、后端存在可观察的不确定性,或用户给出安全裕量时,应提出有物理意义的容差建议,不能用一个跨量纲的非零绝对容差替代判断。
|
||||
|
||||
默认输出目录使用项目文件所在目录下尚不存在的 `optimization-runs/<项目名>-<UTC时间戳>`。源目录不可写时,改用当前可写工作区中的同名新目录,并在计划摘要中说明实际位置。不要让用户命名目录,也不要覆盖既有目录。默认计划可对用户概括为“差分进化、最多 25 次仿真、最长 1 小时,并预留一次独立复验”;除非用户询问或计划产生覆盖不足警告,不主动讲解种群、变异因子、交叉概率、随机种子或代数公式。
|
||||
默认输出目录使用项目文件所在目录下尚不存在的 `optimization-runs/<项目名>-<UTC时间戳>`。源目录不可写时,改用当前可写工作区中的同名新目录,并在计划摘要中说明实际位置。不要让用户命名目录,也不要覆盖既有目录。默认计划可对用户概括为“使用默认搜索设置,最多占用 25 个仿真预算槽位;搜索启动时限为 1 小时,并为找到的最佳可行候选预留一次独立复验”。搜索启动时限到达后不会取消正在运行的健康仿真,预留复验也可能在其后执行,所以不能把它称为总耗时硬上限。除非用户询问或计划产生需要用户决策的覆盖不足警告,不主动讲解算法名称或变体、种群、变异因子、交叉概率、随机种子、搜索/复验预算拆分、边界处理、端点播种、理论完整代数或公式。
|
||||
|
||||
生成新计划不以历史运行作为前置检查;除非用户要求复用、比较或解释旧结果,不主动扫描、校验或汇总旧优化目录。若当前对话已经明确存在源文件与实质规格相同的历史运行,为避免混淆最多用一句话注明它只是历史参考、不属于本次计划;用户未追问时不展开旧候选、停止细节、趋势或复验数据,也不用历史样本预测新搜索会收敛或断言连续区间性质。
|
||||
|
||||
## 优化规格 JSON
|
||||
|
||||
@@ -137,7 +139,7 @@
|
||||
|
||||
若参数像整数、计数、无量纲模式量、条件控制量,元数据彼此矛盾,或无法判断改变它是否影响端口和拓扑,必须先用自然语言询问,例如:“这个参数可以取任意小数,并且调整时不会切换组件模式或端口吗?”不要向用户显示内部声明代码。`editor`、`options` 和未来可能出现的显式否决只用于拒绝明显不适用的参数,不能证明其余参数连续。
|
||||
|
||||
参数值、初值和边界一律使用线性 SI 合同。如果用户用显示单位给出边界,先换算为 SI 并在计划中展示。后端在计划阶段将源 JSON 转换为基准 System XML v3;每个候选都从该 XML 重新生成,只替换选中 `Parameter/@value` 的 SI 数字,不在前一个候选上累积修改,源 JSON 永不被覆盖。
|
||||
参数值、初值和边界一律使用线性 SI 合同。ReactFlow JSON 中普通数值参数已经是 SI 值,`parameterUnits` 只是编辑器显示信息,不能据此把普通数值再次换算;表达式所需的显示单位换算由后端完成。如果用户用显示单位给出边界,才把用户输入换算为 SI。普通 `plan --present` 成功后,`presentation.designVariables[].current` 和 `unit` 是计划摘要中当前值与单位的唯一依据;完整审计计划中的对应字段为 `designVariables[].initial` 和 `unit`。不要从源 JSON 重新计算显示值,若其他信息与它矛盾则先排查而不是向用户展示两套数值。用户给出的边界已经使用该 SI 单位且没有矛盾时,不主动解释 `parameterUnits` 或添加显示单位换算旁注。后端在计划阶段将源 JSON 转换为基准 System XML v3;每个候选都从该 XML 重新生成,只替换选中 `Parameter/@value` 的 SI 数字,不在前一个候选上累积修改,源 JSON 永不被覆盖。
|
||||
|
||||
### 统计量与响应约束
|
||||
|
||||
@@ -153,7 +155,7 @@
|
||||
|
||||
## 计划确认
|
||||
|
||||
信息足以形成规格后直接执行 `plan`,不需要用户先批准计划生成。它校验源 JSON、规格、结果键/单位、设计变量合同和边界,并请求后端生成基准 XML,但不开始优化候选仿真。其结构化输出包含源 JSON 与规格 JSON 的绝对路径/SHA-256、解析后规格、基准 XML SHA-256、目标/约束元数据、解析后设计变量、执行上限、绝对输出目录、`parameterContinuity`、`requiredAssertions`,以及值相同的 `planHash` 与 `confirmationToken`。
|
||||
信息足以形成规格后直接执行 `plan`,不需要用户先批准计划生成。它校验源 JSON、规格、结果键/单位、设计变量合同和边界,并请求后端生成基准 XML,但不开始优化候选仿真。完整审计计划文件包含源 JSON 与规格 JSON 的绝对路径/SHA-256、解析后规格、基准 XML SHA-256、目标/约束元数据、解析后设计变量、执行上限、绝对输出目录、`parameterContinuity`、`requiredAssertions`,以及值相同的 `planHash` 与 `confirmationToken`;普通流程的 stdout 只返回严格白名单的展示视图,不包含这些执行凭据和搜索内部字段。
|
||||
|
||||
计划中的 `OPTIMIZATION_CONTINUITY_USER_ASSERTION` 是给脚本和审计使用的内部标识,不是要求用户照抄的口令。后端不会验证参数的物理/语义连续性,因此面向用户的计划摘要必须用普通语言列出相关假设。若参数语义清楚,用户在看到摘要后明确同意开始运行,即视为同时接受完整计划和这些假设;未得到这次整体确认时不得传入 `--confirmed`。若参数语义不清,则应在执行确认之前先完成自然语言消歧。
|
||||
|
||||
@@ -166,11 +168,28 @@
|
||||
- 要改善哪个结果,用什么统计口径;
|
||||
- 调整哪些参数,各自在什么范围;
|
||||
- 有哪些响应约束;
|
||||
- 采用默认还是用户指定的搜索配置,最多提交多少次仿真、最长多久;
|
||||
- 采用默认还是用户指定的搜索配置、最多占用多少仿真预算槽位、停止启动新搜索候选的时限,以及可使总耗时超过该时限的在途仿真和预留复验;
|
||||
- 哪些参数连续性或工程边界属于假设;
|
||||
- 输出写到哪里,并明确源模型不变。
|
||||
|
||||
摘要后只问一次自然问题,例如:“就按这个方案开始吗?”用户明确同意后直接执行,不再追加连续性声明、算法参数或 token 确认。若用户明确只要计划,则交付摘要后停止,不把问题措辞成已经准备执行;等用户之后主动要求开始。
|
||||
计划正文只描述即将执行的运行,不把历史结果回顾、搜索审计明细或对本次结果的预测混入计划。默认设置不存在警告时,“采用默认搜索设置”已足够,不再把内部配置、端点播种或合同判定字段展开成技术清单。若安全展示视图包含 `nonDefaultSettings`,只列出其中实际偏离推荐默认值、并会随本计划一起确认的设置;不要反过来读取完整审计计划扩展技术细节。
|
||||
|
||||
用户尚未限制本轮只做计划、且接下来是否执行需要确认时,摘要后只问一次中性的自然问题,例如:“就按这个方案开始吗?”不要主动把换目标、放宽参数边界或其他扩展范围列成备选项。用户明确同意后直接执行,不再追加连续性声明、算法参数或 token 确认。若用户说“只要计划”“暂时不要运行”或同等意思,则交付摘要后直接陈述会停在计划阶段,不在本轮询问是否开始,等用户之后主动要求。用户主动提出调整时再讨论;涉及放宽工程边界时,必须先确认新的范围符合物理、安全和组件合同。
|
||||
|
||||
无警告且使用默认设置时,按下列内容边界组织计划回复;可以顺应用户语言调整措辞,但不要增加其他技术段落:
|
||||
|
||||
```text
|
||||
优化目标:让哪个结果按什么统计口径变大、变小或接近目标值。
|
||||
调整参数:参数名称、脚本 plan 返回的当前 SI 值、用户确认的 SI 范围。
|
||||
响应约束:列出约束;没有就说无。
|
||||
运行上限:采用默认搜索设置,最多占用多少仿真预算槽位;搜索到时后不再启动新候选,但会等在途仿真结束,并为找到的最佳可行候选预留一次独立复验。
|
||||
重要假设:用一句普通语言说明参数按连续物理量处理且不改变模式或结构。
|
||||
输出:plan 返回的新目录完整绝对路径,源模型不变。
|
||||
|
||||
结束语:若本轮可以询问执行,则问“就按这个方案开始吗?”;若用户说暂时不要运行,则说“计划已准备好,我会停在这里,等你之后明确说开始。”
|
||||
```
|
||||
|
||||
正式计划回复从第一个字起使用用户当前语言并直接进入计划内容;不加过程旁白,不显示 `warnings: []` 等内部状态,不复述内部枚举名,也不在计划后追加单位科普、算法原理、历史回顾、结果预测或调整建议。输出目录照抄 `plan` 返回的完整绝对路径,不用省略号或相对路径。只有真实警告、无法消除的单位歧义或其他需要用户决策的问题,才在相应条目中简短说明。
|
||||
|
||||
## DE/rand/1/bin 搜索
|
||||
|
||||
@@ -240,7 +259,7 @@ crossoverProbability = [0, 1]
|
||||
|
||||
只有 `solutionStatus == verified` 时才生成 `best-parameters.json`、`best-system.xml`、`best-project.json`、`result.json`、完整 `results.csv` 和目标/响应约束的独立 SVG 曲线。`best-project.json` 将被优化参数的原表达式替换为普通 SI 数值,源 JSON 不变。`optimize` 仅在状态为 `verified` 时返回退出码 `0`,其他结果返回 `4`。
|
||||
|
||||
最终汇报必须使用这一口径:
|
||||
只有 `solutionStatus == verified` 时,最终汇报才使用这一口径:
|
||||
|
||||
> 这是实际完成仿真的搜索点中表现最好的可行候选,并已通过一次独立复验;复验不证明搜索收敛、系统达到稳态或全局最优。
|
||||
|
||||
@@ -255,10 +274,14 @@ crossoverProbability = [0, 1]
|
||||
```powershell
|
||||
py -3.12 skills/system-simulation/scripts/optimization_skill.py plan PROJECT.json `
|
||||
--spec optimization-spec.json `
|
||||
--output-dir OUTPUT_DIR
|
||||
--output-dir OUTPUT_DIR `
|
||||
--plan-file PLAN_FILE `
|
||||
--present
|
||||
```
|
||||
|
||||
向用户展示计划并获得明确确认后,原样使用 `plan` 返回的三个值:
|
||||
普通 Skill 流程必须同时使用 `--plan-file` 和 `--present`:完整审计计划以 `0600` 权限独占写入 `PLAN_FILE`,stdout 只返回用户计划所需的白名单字段。`PLAN_FILE` 必须是位于 `OUTPUT_DIR` 外的新文件,不能覆盖既有文件,也不能与输出目录互为祖先或后代;默认用本次输出目录名加 UTC 时间戳或随机后缀生成同级文件,不复用固定的临时文件名。省略这两个选项的旧式完整 stdout 只用于兼容测试或显式审计排障,不用于普通对话。
|
||||
|
||||
向用户展示计划并获得明确确认后,在内部从 `PLAN_FILE` 读取并原样使用源 SHA、规格 SHA 和 `confirmationToken`,不要向用户展示:
|
||||
|
||||
```powershell
|
||||
py -3.12 skills/system-simulation/scripts/optimization_skill.py optimize PROJECT.json `
|
||||
@@ -275,7 +298,9 @@ Linux 使用已确认的 Python 3.12 解释器和相同参数:
|
||||
```bash
|
||||
python3.12 skills/system-simulation/scripts/optimization_skill.py plan PROJECT.json \
|
||||
--spec optimization-spec.json \
|
||||
--output-dir OUTPUT_DIR
|
||||
--output-dir OUTPUT_DIR \
|
||||
--plan-file PLAN_FILE \
|
||||
--present
|
||||
|
||||
python3.12 skills/system-simulation/scripts/optimization_skill.py optimize PROJECT.json \
|
||||
--spec optimization-spec.json \
|
||||
@@ -291,7 +316,8 @@ python3.12 skills/system-simulation/scripts/optimization_skill.py optimize PROJE
|
||||
```bash
|
||||
python3.12 skills/system-simulation/scripts/optimization_skill.py \
|
||||
--base-url http://127.0.0.1:18082 --timeout 60 \
|
||||
plan PROJECT.json --spec optimization-spec.json --output-dir OUTPUT_DIR
|
||||
plan PROJECT.json --spec optimization-spec.json --output-dir OUTPUT_DIR \
|
||||
--plan-file PLAN_FILE --present
|
||||
```
|
||||
|
||||
OpenClaw 中不假设当前目录是仓库根目录,使用 Skill 根目录占位符:
|
||||
@@ -299,9 +325,11 @@ OpenClaw 中不假设当前目录是仓库根目录,使用 Skill 根目录占
|
||||
```bash
|
||||
python3.12 "{baseDir}/scripts/optimization_skill.py" plan PROJECT.json \
|
||||
--spec optimization-spec.json \
|
||||
--output-dir OUTPUT_DIR
|
||||
--output-dir OUTPUT_DIR \
|
||||
--plan-file PLAN_FILE \
|
||||
--present
|
||||
```
|
||||
|
||||
也可以先进入本 Skill 目录,再使用 `scripts/optimization_skill.py plan ...` 和 `scripts/optimization_skill.py optimize ...`。不根据用户主目录、OpenClaw 数据目录或仓库名称猜测脚本路径。持续消费 JSONL 进展,定期报告已使用/最大后端提交数、当前代数、最佳可行目标、失败数、缓存命中和内层仿真阶段;不因仿真时间短暂停滞而声称卡死。
|
||||
也可以先进入本 Skill 目录,再使用 `scripts/optimization_skill.py plan ...` 和 `scripts/optimization_skill.py optimize ...`。不根据用户主目录、OpenClaw 数据目录或仓库名称猜测脚本路径。持续消费 JSONL 进展,定期报告已占用/最大仿真预算槽位、已完成和失败记录、当前代数、最佳可行目标、缓存命中和内层仿真阶段;不把槽位占用说成后端已接收或已完成,也不因仿真时间短暂停滞而声称卡死。
|
||||
|
||||
通常省略 `--optimization-id` 让脚本生成唯一 ID。若显式指定,同一后端任务保留窗口内必须使用新的 ID;快速复用旧 ID 会被后端按冲突拒绝。
|
||||
Reference in new issue
Block a user