Junjie
2026-04-27 172396e53411f9ceed80c8ee4bafd7297fe37624
fix: align auto tune prompt and audit schema
2个文件已修改
41 ■■■■ 已修改文件
src/main/java/com/zy/ai/utils/AiPromptUtils.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/sql/20260427_create_ai_auto_tune_tables.sql 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/ai/utils/AiPromptUtils.java
@@ -125,12 +125,12 @@
            blocks.put(AiPromptBlockType.TOOL_POLICY,
                    "==================== 可用 MCP 工具 ====================\n\n" +
                            "你只能使用以下 MCP 工具进行自动调参工作:\n" +
                            "- dispatch_get_auto_tune_snapshot:获取当前调度、设备、站点、容量与可写参数快照\n" +
                            "- dispatch_get_recent_auto_tune_jobs:获取近期自动调参任务和变更结果\n" +
                            "- dispatch_apply_auto_tune_changes:提交调参变更,必须先 dry-run 再实际应用\n" +
                            "- dispatch_revert_last_auto_tune_job:仅在明确需要回滚最近一次调参时使用\n\n" +
                            "- wcs_local_dispatch_get_auto_tune_snapshot:获取当前调度、设备、站点、容量与可写参数快照\n" +
                            "- wcs_local_dispatch_get_recent_auto_tune_jobs:获取近期自动调参任务和变更结果\n" +
                            "- wcs_local_dispatch_apply_auto_tune_changes:提交调参变更,必须先 dry-run 再实际应用\n" +
                            "- wcs_local_dispatch_revert_last_auto_tune_job:仅在明确需要回滚最近一次调参时使用\n\n" +
                            "禁止调用上述列表之外的工具完成调参。禁止输出自由格式 JSON 让外层解析后调参;所有参数读取、试算、应用和回滚都必须通过 MCP 工具完成。\n\n" +
                            "实际应用前必须先调用 dispatch_apply_auto_tune_changes 执行 dry-run。只有 dry-run 返回允许应用且没有高风险拒绝原因时,才可以再次调用 dispatch_apply_auto_tune_changes 执行实际应用。");
                            "实际应用前必须先调用 wcs_local_dispatch_apply_auto_tune_changes 执行 dry-run。只有 dry-run 返回允许应用且没有高风险拒绝原因时,才可以再次调用 wcs_local_dispatch_apply_auto_tune_changes 执行实际应用。");
            blocks.put(AiPromptBlockType.OUTPUT_CONTRACT,
                    "==================== 输出要求 ====================\n\n" +
                            "输出必须使用简体中文,并保持审计友好:\n" +
@@ -143,27 +143,26 @@
            blocks.put(AiPromptBlockType.SCENE_PLAYBOOK,
                    "==================== 自动调参规则 ====================\n\n" +
                            "Step 1 获取事实\n" +
                            "- 先调用 dispatch_get_auto_tune_snapshot 获取后端快照/MCP facts。\n" +
                            "- 如需判断近期调参影响,再调用 dispatch_get_recent_auto_tune_jobs。\n" +
                            "- 先调用 wcs_local_dispatch_get_auto_tune_snapshot 获取后端快照/MCP facts。\n" +
                            "- 如需判断近期调参影响,再调用 wcs_local_dispatch_get_recent_auto_tune_jobs。\n" +
                            "- 方向与容量事实必须来自后端快照或 MCP facts,禁止从前端地图推断。\n\n" +
                            "Step 2 分析站点运行态\n" +
                            "- 运行时站点分析只能使用 autoing、loading、taskNo。\n" +
                            "- 禁止使用 taskWriteIdx 或 taskBufferItems 作为调参依据。\n\n" +
                            "Step 3 限制可写参数\n" +
                            "- sys_config.crnOutBatchRunningLimit\n" +
                            "- sys_config.conveyorStationTaskLimit\n" +
                            "- sys_config.aiAutoTuneIntervalMinutes\n" +
                            "- asr_bas_station.out_task_limit\n" +
                            "- asr_bas_crnp.maxOutTask\n" +
                            "- asr_bas_dual_crnp.maxOutTask\n" +
                            "- asr_bas_crnp.maxInTask\n" +
                            "- asr_bas_dual_crnp.maxInTask\n\n" +
                            "提交给 MCP/apply-service 的 target_key 必须使用以下键名,不得提交原始数据库列名作为 CRN/双工位堆垛机参数键:\n" +
                            "- crnOutBatchRunningLimit:对应 sys_config.crnOutBatchRunningLimit\n" +
                            "- conveyorStationTaskLimit:对应 sys_config.conveyorStationTaskLimit\n" +
                            "- aiAutoTuneIntervalMinutes:对应 sys_config.aiAutoTuneIntervalMinutes\n" +
                            "- outTaskLimit:对应 asr_bas_station.out_task_limit\n" +
                            "- maxOutTask:对应 asr_bas_crnp.max_out_task / asr_bas_dual_crnp.max_out_task\n" +
                            "- maxInTask:对应 asr_bas_crnp.max_in_task / asr_bas_dual_crnp.max_in_task\n\n" +
                            "Step 4 提交变更\n" +
                            "- 先通过 dispatch_apply_auto_tune_changes 执行 dry-run。\n" +
                            "- 先通过 wcs_local_dispatch_apply_auto_tune_changes 执行 dry-run。\n" +
                            "- dry-run 通过后才允许通过同一工具实际应用。\n" +
                            "- 如果工具返回拒绝、冷却中、存在活动任务风险或参数不在白名单内,必须停止实际应用。\n\n" +
                            "Step 5 回滚边界\n" +
                            "- 只有当最近一次自动调参被 MCP facts 明确证明造成异常,才允许调用 dispatch_revert_last_auto_tune_job。\n" +
                            "- 只有当最近一次自动调参被 MCP facts 明确证明造成异常,才允许调用 wcs_local_dispatch_revert_last_auto_tune_job。\n" +
                            "- 不得臆测回滚原因。");
            return blocks;
        }
src/main/resources/sql/20260427_create_ai_auto_tune_tables.sql
@@ -18,12 +18,12 @@
  `prompt_tokens` INT NOT NULL DEFAULT 0 COMMENT 'Prompt tokens',
  `completion_tokens` INT NOT NULL DEFAULT 0 COMMENT 'Completion tokens',
  `total_tokens` INT NOT NULL DEFAULT 0 COMMENT '总tokens',
  `created_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_sys_ai_auto_tune_job_status` (`status`),
  KEY `idx_sys_ai_auto_tune_job_start_time` (`start_time`),
  KEY `idx_sys_ai_auto_tune_job_finish_time` (`finish_time`),
  KEY `idx_sys_ai_auto_tune_job_created_time` (`created_time`)
  KEY `idx_sys_ai_auto_tune_job_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI自动调参任务审计表';
CREATE TABLE IF NOT EXISTS `sys_ai_auto_tune_change` (
@@ -38,10 +38,10 @@
  `result_status` VARCHAR(32) NOT NULL COMMENT '结果状态:success/rejected/failed/dry_run',
  `reject_reason` VARCHAR(512) DEFAULT NULL COMMENT '拒绝原因',
  `cooldown_expire_time` DATETIME DEFAULT NULL COMMENT '冷却截止时间',
  `created_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_sys_ai_auto_tune_change_job_id` (`job_id`),
  KEY `idx_sys_ai_auto_tune_change_result_status` (`result_status`),
  KEY `idx_sys_ai_auto_tune_change_cooldown` (`cooldown_expire_time`),
  KEY `idx_sys_ai_auto_tune_change_created_time` (`created_time`)
  KEY `idx_sys_ai_auto_tune_change_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI自动调参变更审计表';