问题的起点#
绿城哨兵要解决的问题很具体:ESP32 巡检小车在园区里拍照,后端识别植物有没有病虫害。选型时第一反应是上最大的模型——识别精度越高,误报越少嘛。
但把三个约束摆在一起算账之后,想法变了。
一笔不算不知道的账#
| 方案 | 单次推理延迟 | 显存需求 | 单张图片成本 |
|---|---|---|---|
| 72B 旗舰 | 4~8 秒 | 多卡 | 高 |
| 7B 级别 | 1~2 秒 | 单卡 | 低 |
| 云端 API | 2~4 秒 | 无 | 按量计费 |
巡检小车一天要拍几百张照片,如果每张都走大模型,成本和延迟都会失控。更关键的是:病虫害诊断的瓶颈根本不在模型的智力,而在数据。
我的做法:两级流水线#
最后的架构是两级:
# 伪代码:两级推理流水线
def diagnose(image):
level_1 = light_model.detect_anomaly(image) # 7B:有没有异常?
if not level_1.is_suspicious:
return None # 90% 的照片在这里结束
return expert_model.analyze(image, level_1) # 重活交给专门的链路
第一级用小模型做「有没有问题」的粗筛,绝大多数正常照片在这里就被放行;只有可疑样本才进入第二级的详细分析。整个系统的均摊成本降了一个量级,而最终的诊断质量并没有打折——因为真正需要智能的地方,智能都用在了刀刃上。
几点教训#
- 榜单分数不等于业务价值。模型选型的第一步是写清楚调用频率和预算,而不是看跑分。
- 流水线思维比单模型思维重要。把「识别」拆成「粗筛 + 细诊」,比换更大的模型有效得多。
- 延迟是一种体验成本。巡检场景里,工人等不起 8 秒——快本身就是功能。
选模型和点菜不一样:不是越贵越好,而是看这张桌子坐了谁。