开发日志 2026-08-13

文章目录

开发日志 2026-08-13(周四)

今日概览

今天共产生 14 个 Codex 会话,主要工作:

  1. 芯片人工分类流程优化:分类不确定时标记「待人工分类」,人工调整后重新提取参数(独立工作树实施 + 浏览器实测)
  2. 板卡检测 NPU 推理后端切换:ONNX → OM(昇腾),并解决首推阻塞导致 Pod 被杀的问题
  3. 后端仓库A 内存持续积攒排查:http.Client 复用与信号量配置化
  4. 办公自动化:局域网打印机批量打印与 PDF 分页
  5. 工程规范:测试代码统一放 tests/ 目录
  6. 其他:事务失败错误复现

一、芯片人工分类流程优化(客户项目A,主要开发)

背景

分类识别存在两类问题:

  1. 库中没有匹配的分类、或模型不确定归哪一类时(例如只识别到一级分类「接口芯片」,二级分类与库中已有分类接近但不对应),模型只能停在二级缺失状态;
  2. 只有叶子节点分类才带分类参数,仅识别到一级分类时参数为空,导致这类数据进入业务模块丁分析时没有参数依据。

优化方案(用户确认采用方案 1)

  • 保留模型识别到的当前分类,但标记为「待人工分类」状态,明确提示人工介入;人工调整分类后自动触发重新提取参数;
  • 仅识别到一级分类(无分类参数)的数据,不再纳入业务模块丁分析范畴。

实现(独立工作树 + 功能分支)

  • 前端:数据结构增加分类状态 / AI 建议备注 / 跳过分类等字段,新增「分类状态」筛选;列表页在待人工分类时显示琥珀色「⚠ 待人工分类」徽标,悬浮展示 AI 的二级分类猜测;校验页顶部增加黄色提示条(含一级分类、AI 建议、操作指引),保存时检测分类是否变化,变化则提示「分类已更新,正在后台重新提取参数」并刷新详情;
  • 后端配合标记与重新提取的触发链路。

验证

  • 类型检查无新增错误、生产构建通过;
  • 用 playwright-cli 连接真实浏览器实测:列表行显示「一级分类 ⚠ 待人工分类」徽标与悬浮提示;分类状态筛选正确携带参数;校验页提示条完整;修改分类保存后出现「正在后台重新提取参数」并重新加载详情。Console 无新增报错。

思路

与其让模型在「库中没有合适分类」时硬猜一个二级分类(昨天已修掉编造 ID 的问题),不如把不确定性显式暴露给人工确认,同时保证错误参数不会带着空模板落库或进入下游分析。

二、板卡检测 NPU 推理后端切换(客户项目A)

背景

板卡检测服务部署在华为昇腾 NPU 环境,出现两类问题:

  1. 实际使用 ONNX 模型,但 ultralytics 的 ONNX 后端在选 provider 时只有 CUDA / CoreML / CPU 三条路,npu:0 既不是 CUDA 也不是 MPS,图计算实际落在 CPU 上;
  2. 首推时 torch_npu 逐算子编译导致超过 90 秒阻塞,触发 liveness 探针把 Pod 杀掉,任务反复失败(多次尝试 AI Core 占用 0%)。

排查与选型

  • 确认根因不是配置问题,而是代码里写死的 provider 选择逻辑;
  • 对比三条可行路线:MindIE(镜像自带,需改推理调用)、CANN Execution Provider(要重编 onnxruntime,最折腾)、ATC 转 OM + ais_bench(离线固化,规避首推编译);用户明确不要 CPU 方案。

落地改动(本地可落地部分)

  • /api/detect 由异步改为同步,推理走 FastAPI 线程池,不再占死事件循环,健康检查在推理期间照常响应;
  • 增加启动预热(预加载模型 + 哑推理,失败不阻塞启动);
  • 新增 NPU 专用配置(模型走挂载目录,不打包进镜像);
  • Dockerfile 调整:升级依赖、安装推理运行时与评测工具、删除旧模型拷贝与半精度逻辑;
  • 新增导出脚本:在 Linux 构建机上完成 ONNX → OM 导出并校验元数据;
  • 业务侧配套调整,并补挂模型目录。

遗留问题

昇腾侧换后端后需继续排查 AI Core 0% 的问题(按用户要求通过网络搜索方案跟进);另「创建结构化数据失败:failed transaction」错误再次出现,待定位。

三、后端仓库A 内存持续积攒排查(客户项目A)

排查结论(按影响排序)

  • P0 :每个 LLM 请求都新建 http.Client,空闲连接从不回收------对话、Token 估算、健康检查、指标、向量化、外部检索等多处都存在,是内存持续积攒的主要来源;
  • 信号量类问题:quick-query 拆图、厂商补全等并发控制需要确认语义(并发数 = 同时处理的图片数,与 CPU 相关),且信号量参数需要能在配置中调整,而不是硬编码;
  • 顺带梳理了 OCR / 提取 / 审核三种任务在超时时的语义差异:OCR 超时直接置失败不重试,提取超时会进入待重试直到上限,审核超时会清标记重新排队。是否给 OCR 也加上「超时重试到上限」由用户确认。

产出

排查结论 + 修复计划已输出;http.Client 复用与信号量配置化是下一步落地重点。

五、办公自动化:局域网打印(项目B)

  • 将 8 份 PDF 用局域网打印机单面打印;
  • 把入网承诺书 PDF 按页拆分成独立 PDF 后逐份打印;
  • 提交打印任务并跟进(含重复加打一份),打印机排队出纸后完成。

六、工程规范(客户项目A)

AGENTS.md「铁律」新增:所有测试代码 / 脚本统一写在对应项目的 tests/ 目录下,项目没有该目录则先创建。

七、其他故障

  • 事务失败错误「Could not complete operation in a failed transaction」在创建结构化数据时复现,进入排查列表;
  • 若干 qwen 视觉分析子会话用于人工分类 UI 截图核验(列表徽标、校验页提示条)。

复盘与后续

可复用经验:

  • 推理后端选型先查框架写死的 provider 路径,再决定改代码还是换后端;
  • 内存类问题按「资源是否每次新建、是否回收」排序排查,http.Client / 连接池是最常见大头;
  • 「分类不确定」交给人工确认,比让模型硬猜更可靠,也方便后续人工数据反哺。

待办:

  • OCR 超时是否加重试(待用户确认)
  • ONNX → OM 换后端后 AI Core 0% 继续排查(网络搜索方案)
  • 人工分类功能分支合并回主分支
  • 后端仓库A http.Client 复用与信号量配置化落地
  • failed transaction 错误定位
相关推荐
土豆~1 天前
开发日志 2026-08-12
桌面端·开发日志·报告pdf·提示词升级·构建发版