# AI 输出校验诊断补充(2026-10-16,已发布) 后续发布状态:用户明确要求发布后端,四文件已于 2026-10-16 发布为 `20261016-report-diagnostics-r1`,11:12:47(Asia/Shanghai)恢复入口及唯一新 worker。137 路径、30 表维护期业务/结构保持、29 服务器/31 公网 HTTPS、历史报告读取及同服务身份日志探针通过;未重试正式评估或新增模型调用。实际 worker 拒绝事件尚未触发,原两次具体拒绝原因仍未知。详见[后端校验诊断发布记录](后端校验诊断发布-20261016.md);以下“本轮未发布/待授权”为本地实施阶段历史状态。 用户反馈同一评估两次提示“分析结果未通过格式校验”。生产只读检查确认评估 471、版本 718 的首次执行和重试均在第 4 批停止,前三批检查点有效;错误码为 AI_INVALID_REPORT,属于模型输出解析拒绝。原两次失败响应未保存,无法还原具体拒绝分支。 前轮用户明确允许最多一次真实诊断。2026-10-16 10:22:14—10:22:35(Asia/Shanghai)使用原冻结资料及精确第 4 批请求,整批、10 条条件、16 个模板和正文均通过。输入 9780/输出 2985 token,耗时 20980 毫秒;没有继续后续批、保存正式报告或修改任务。只说明该请求可以产出有效结果,不能认定原问题已修复。原始响应仅内存解析;防重复标记必须保留,不得重跑入口。 本轮“继续下一步”承接先本地补充脱敏诊断并离线验证的建议。没有生产访问、发布、新增真实模型调用、提交或推送。 ## 实现范围 后端 `D:/AAdesk/202609/airz` 三个既有运行文件修改、一个新增: | 文件 | 作用 | | --- | --- | | DeepSeekException.php | 新增默认 null 的内部 diagnostic 属性;构造、错误码、消息和 usage 保持。 | | ProductAiBatches.php | 在原解析位置捕获 AI_INVALID_REPORT,尽力附加脱敏记录,再抛原异常;区分 response、checkpoint、aggregate。 | | AnalysisBatchTasks.php | 在原调用失败处理后尽力写一条独立 PHP error_log 事件;仍以原错误码、空 usage 包装重抛,防止末批用量重复计入首条日志。 | | AiReportDiagnostics.php | 构造和写出时均做白名单过滤;不刷新框架日志缓冲。 | 事件前缀为 `AIRZ_AI_REPORT_REJECTION `,包含 assessment/revision/task 标识、仅 response 对应的调用日志 ID,冻结计划批号/批次摘要,原请求/响应 SHA256、响应字节数、用量白名单,以及固定规则分类、白名单校验文件/实际拒绝行/源码 SHA256。`invalid()` 集中抛错会追溯到实际调用它的校验行;未匹配位置使用固定 UNMAPPED_REJECTION,不输出任意文件或异常信息。规则分类用于缩小范围,实际分支应结合文件、行号和源码摘要判断。 不记录模型正文、用户填写值、未知 JSON 键、异常消息、堆栈参数或完整路径。checkpoint/aggregate 没有本次请求与用量,不归给上一批调用。日志格式错误或写入故障不得改变原异常、状态、调用次数和检查点。不重新生成提示、不再次调用模型或重跑业务解析。诊断不加入报告、检查点、业务表和接口响应。 本轮没有修改提示词、准入/三态/数值/证据校验、评分、自动重试、数据结构或小程序。未知仍 unknown;全部填写项和已有未提交改动保留。未对原失败根因作猜测性修复。 ## 验证 新增 `tests/report_rejection_diagnostics.php`:43 项纯内存检查。首次红灯验证缺少诊断属性,实施后通过。覆盖中途失败、保留已通过前缀、重试首调用的真实批号、零调用检查点拒绝、aggregate 元数据、错误位置、请求/响应摘要、未知键/枚举/异常消息/嵌套对象脱敏、日志故障隔离和供应商错误保持。 全新本机隔离 MySQL/Redis、真实模型构造阻断的实际任务入口:原 25 项分批任务检查和新增 10 项诊断集成检查通过。第三批格式失败只产生一条事件,原用量、检查点及失败状态保持。29 张合成表清空、6 个原触发器保留、Redis DB15 无键;仅本轮所属服务退出,51578/51579 端口释放,数据目录保留备查。未加载默认生产 `.env`。 相关回归按套件单列:模板 89、批量规划 36、自填参考建议 59、条件 68、grounding 81、年龄 55、地区事实 68;包含套件与重复运行不累计成总数。4 个运行文件及新测试 PHP 语法检查通过。256 个当前后端运行 PHP 仅本轮 3 修改/1 新增,77 个小程序 UTS/UVue 文件摘要保持。独立代码审查未发现明确新增缺陷。 证据与本地候选:`D:/AAdesk/202609/airz-backups/report-rejection-diagnostics-20261016`,含 before 快照、红/绿检查、实际任务入口日志、清理回执、源码摘要、implementation.diff、verification.json 和 candidate。前轮收费诊断证据另在 `profile-advice-format-diagnosis-20261016`;服务器 `/root/airz-format-diagnosis-20261016/model-call.started` 必须保留。 ## 后续边界 本地实施结束时线上仍为 `20261015-profile-advice-r1`;随后已获授权并完成上述发布。现场同用户 PHP 的默认 error_log 输出至 stderr,worker unit 配置路由到 journal;纯合成 sink 脱敏与默认输出标记通过。探针独立于正式 worker 进程及 sandbox,未验证真实业务拒绝事件在 journal 中的完整闭环,不将其解释为原问题修复。 候选四文件需要配套部署,无 DDL、业务迁移或模型配置变更。实际发布需用户明确授权,并重新对照现场旧文件、备份和排空任务;本地 baseline 不能替代现场备份。上线本补丁只增强失败可追踪性,不保证原评估立即成功。 正式恢复另需模型调用授权。应重试原评估、同模型复用前三批冻结检查点,从第 4 批继续;后续最多还有 4 批,不新建重跑 7 批。前轮唯一诊断通过不等于正式报告已生成,也不能据其成功响应反推原两条失败原因。