Files
airz-uniapp/docs/AI输出校验诊断补充-20261016.md
hujun e5406c23a6 fix: 修复匹配详情提示及公积金可选路径问题
修复匹配详情中“用户自填未经核验”等来源说明,清理未参与项的橙色注意提示,修正贷款统计口径文案;补充公积金完整可选路径提取逻辑,确保明确无额外时长要求的公积金分支可正确识别并通过。
2026-10-19 16:11:59 +08:00

45 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 批。前轮唯一诊断通过不等于正式报告已生成,也不能据其成功响应反推原两条失败原因。