去年秋天,苏州一家电子元器件厂的品质部经理找到我们。他们厂做PCB连接器和接插件,客户都是汽车电子和工业设备厂家——博世、大陆、施耐德这些。品质管理的要求很高,每批出货都要附带完整的检验报告。
问题在于:这些检验报告全部是纸质的。IQC来料检验、IPQC过程检验、OQC出货检验——每天产生约200-300份纸质记录,全按日期捆起来塞进文件柜。3年下来,5个文件柜塞得满满当当。
"上周有个客户审核,要翻出去年12月一批N型连接器的拉力测试报告。我和两个同事翻了一整个下午,最后发现是当初放错柜子了。"品质经理说这话的时候一脸无奈。"审核的人就在旁边等着,场面很尴尬。"
这事我记得很清楚,因为当时我跟他说了一句:你这个问题的根子不在"翻不到",而在"根本没有被翻的机制"。纸质文件一旦归档,就等于进了黑洞——你再也没办法按"产品批次""检测项目""责任人"或"检测日期范围"去搜。能搜到的唯一方式是"记得放在哪个柜子第几层"。人脑的记忆力靠不住,更何况是3年前的事。
这篇文章记录我们帮这家厂用AI Agent + 边缘网关搭建"质检文档智能处理系统"的完整过程。不吹效果,只说做了什么、遇到了什么麻烦、最后效果如何。
一、现场情况摸底
去厂里蹲了两天,先把情况摸清楚。
纸质文档的规模
- 平均每天产生约250份各种检验记录
- 每份记录通常1-2页A4纸,少数4-6页(附带测量数据表格)
- 存储方式:按日期装订成册,每册约50份,塞进文件柜
- 保留期限:客户要求至少保留5年
- 当前累积:约3年,估计有15万-20万份文档
文档的内容结构
不同环节的记录格式略有不同,但共同点是——大部分是手写体,少部分是用Excel打印出来再手填的表格。
- IQC来料检验单:供应商名称、物料编码、批次号、抽检数量、检验项目(尺寸/外观/性能)、测量值、判定结果(合格/不合格/让步接收)、检验员签名
- IPQC过程检验单:产线编号、工序名称、抽样时间、检测项目、CPK值、异常描述、处理措施
- OQC出货检验报告:客户名、订单号、产品型号、出货数量、检验标准、各项检测数据、判定结果
每份记录中最核心但也最头痛的部分是:检验员手写的测量数值和备注文字。有些人的字工整,有些人的字像天书——尤其是40多岁的老检验员,写的数字"7"像"1"、"4"像"9"、"0"像"6"。
真正的痛点排序
跟品质经理、IQC主管、客户审核对接人分别聊了一圈,痛点按严重程度排列:
- 客户审核翻查太慢——审核员在会议室等着,翻几小时找不到报告,直接影响客户对品质体系的评价
- 不良追溯基本靠"记得"——某批产品在客户那边出了问题,想查当时的检验记录,如果当事人不记得放在哪里,几乎不可能找到
- 统计报表纯手工——每月要交品质月报(不良率趋势、主要不良类型分布),品质部的人要从一堆记录里手动统计,每月花3-5天
- 文件柜空间不够——按这个速度,再过1年半文件柜就要加一排
教训:很多工厂觉得"纸质记录也在存档,没问题"。但"存档"和"可检索"是两回事。纸质文档一旦超出人脑记忆的范围,就变成纯粹的沉没成本——你花了时间填它、装订它、存它,但再也不会去用它。
二、方案设计
目标很清晰:把这些纸质检验记录数字化,让品质部能按任意条件(产品批次、检测项目、日期范围、不良类型)快速检索到原始记录。
为什么选边缘网关+RAG Agent,而不是传统OCR服务
讨论时有人提议直接买个商用OCR系统。我否决了,原因有两个:
- 数据不出厂——这家厂的客户(博世、大陆)对数据安全有严格的审计要求,检验记录不能上传到云端第三方服务。所有处理必须在工厂局域网内完成
- 不仅仅是OCR——纯OCR只能把图像转成文字,但用户需要的是"查一下去年N型连接器的拉力测试数据"——这涉及到语义理解、信息提取和检索,不是一个OCR引擎能搞定的
最终方案分了四层:
采集层:高速扫描仪 + 文档工作站
- 在品质部配一台高速馈纸扫描仪(支持双面扫描,60页/分钟),专门用来扫描存量文档和未来增量
- 一台文档工作站(通用PC,配边缘AI网关的软件)负责扫描调度和图像预处理
- 扫描分辨率设300dpi(低于200dpi手写体识别率明显下降,高于400dpi文件太大且收益递减)
处理层:边缘AI网关做OCR+信息提取
核心处理模块全部跑在边缘AI网关(标准型S200)上:
- 图像预处理——去倾斜矫正、去噪、对比度增强。纸质扫描件最常见的问题是:纸张折叠产生的阴影条纹、订书钉孔的干扰、手写笔迹过淡
- 版面分析——识别文档中的表格区域、文字段落、签名栏、日期区域
- OCR引擎——本地跑PaddleOCR(离线版),预加载简体中文手写体+印刷体模型。实测发现标准版对工厂手写数字的识别率只有约70%,需要额外微调
- 字段提取Agent——用大模型做轻量化信息提取:从OCR结果中取出结构化的字段(批次号、检测项目、数值、判定结果等),写回结构化数据库
知识层:RAG Agent构建可检索的知识库
这是整个系统的"大脑":
- 所有提取后的结构化数据写入SQLite数据库(单机够用,不用上MongoDB)
- 原始OCR文本经过切分后,用本地Embedding模型(BGE-small-zh)做向量化,存入向量库
- 用户可以通过自然语言查询:"查一下去年12月N型连接器的拉力测试数据"——系统会先做语义检索找到相关文档块,再用大模型组装答案,同时附上扫描件原文的链接
应用层:查询看板 + 审核快速通道
- 一个简单的Web查询界面,支持:关键词搜索、日期范围筛选、产品批次筛选、检测项目筛选
- "审核模式"——客户审核时可以直接在平板上搜索,找到文档后一键调出原始扫描件
- "自动报表"——每月1号自动生成上月的品质月报,包括:不良率趋势图、主要不良类型分布、供应商来料合格率排名、各产线过程能力CPK趋势
三、实施过程
第一阶段:存量文档扫描(第1-4周)
这个阶段比想象中慢。3年约18万页文档,每天扫描+质检,平均只能处理1500页。主要时间不花在扫描上(扫描本身很快),而花在:
- 文档拆订——之前用订书机装订的,需要先把订书钉拆掉,否则扫描仪会卡纸
- 去污——有些文档沾了油、咖啡渍,或者边角被撕破了,扫描出来全是黑边——需要人工判断"这张能不能扫"还是"先复印一张再扫"
- 分类标记——每份文档需要先标记类型(IQC/IPQC/OQC),按年份月份分好,扫描时按文件夹归类。这个分类工作要品质部的人来做,他们手上有自己的日常工作,每天只能抽出2-3个小时
最后花了整整4周才把3年的存量文档全部扫完。总共约17.8万页,占用了约85GB存储空间(JPG压缩格式)。
踩坑小插曲:第二周扫描仪进纸轮磨损了,每扫50-60页就会卡纸。之前没买备用进纸组件,修一次耽误了1天。后来多买了一套易损件备着。
第二阶段:OCR管线搭建和调优(第2-5周,与第一阶段重叠)
扫描开始后第2周,我就开始在边缘网关上搭OCR管线了。
第一次跑OCR——结果惨不忍睹
直接用PaddleOCR标准模型跑了一遍。印刷体效果还行(约95%准确率),但手写体的数字和汉字识别率只有60-70%。最糟糕的是检验员手写的数字——"7"和"1"、"4"和"9"、"0"和"6"经常搞混。还有检验员的签名字迹潦草到OCR完全认不出。
手写体数字的专项优化
解决办法是从已扫的文档里抽了约5000个手写数字样本,标注后做了一次增量训练。我把这个叫做"数字专训"——只针对0-9十个数字,模型结构用轻量的MobileNetV3。训练后的准确率从70%提升到约92%。
还有一个发现:表格结构检测比手写体识别更容易出问题。尤其是一些检验单,表格线是手画的、歪的、不闭合的,版面分析模型经常把相邻列的内容合并成一行。后来改用了一个基于OpenCV的规则式表格检测器(检测水平线和垂直线交点来还原单元格),比纯AI方案更鲁棒。
字段提取Agent的精度迭代
OCR完成后的下一步是从文本中提取结构化字段。这个环节踩了最大的坑。
我用了一种轻量方案:把OCR文本+预先定义的字段模板传给一个本地跑的小模型,让模型提取字段。但同一个检验单在不同月份有不同版本——抬头位置变了、表格列宽调整了、甚至"检验项目"改成了"检测内容"。模板不匹配,提取精度在40-60%之间打转。
后来改了策略:不做全局模板匹配,而是基于规则+模糊匹配做定位。
# 简化后的检测项提取逻辑
def extract_inspection_items(ocr_result):
items = []
# 找到表格区域
tables = detect_tables(ocr_result.bboxes)
for table in tables:
# 找到"检验项目"所在的行列
header_row = find_row_containing(table, ["检验项目","检测内容","检查项目"])
# 找到"判定结果"所在的行列
result_row = find_row_containing(table, ["判定","结果","合格"])
if header_row and result_row:
# 遍历每一行数据
for row in table.rows_between(header_row, result_row):
item = {
"name": row.cells[header_row.col_idx].text.strip(),
"spec": row.cells[header_row.col_idx + 1].text.strip(),
"measurement": row.cells[header_row.col_idx + 2].text.strip(),
"result": row.cells[result_row.col_idx].text.strip()
}
items.append(item)
return items
这套规则+模糊匹配的方案,把字段提取精度从40-60%提升到了约85%。剩下的15%靠界面上的"手动校正"功能——操作人员确认一下,提取错误的数据会被收集起来,定期做规则改进。
第三阶段:RAG知识库搭建(第5-6周)
所有存量文档完成OCR和信息提取后,向量化建库。
一开始我犯了另一个错误:把整页OCR文本直接切段做向量化。结果用户搜"去年12月N型连接器拉力测试",出来的结果经常是"某份检验单的标题行里面有'拉力'这两个字,但内容完全不相关"。
改进方法:以检验项目为单位做切分。每份检验单的每一个"检验项目"(比如"端子拉力测试")作为一个独立的检索单元,元数据带上批次、日期、产品型号。这样用户搜"拉力测试 N型连接器"时,系统直接命中对应的检测明细,精度大幅提升。
Embedding模型选了BGE-small-zh(量化版),在边缘网关上推理速度约50ms/次,足够了。向量库用FAISS存本地,单机检索延迟在100ms以内。
第四阶段:查询看板上线和并行测试(第7-8周)
Web查询界面花了一周搭建,基本功能:
- 搜索框(自然语言搜索 + 关键词搜索)
- 筛选器(日期范围、文档类型、产品型号、供应商)
- 搜索结果卡片(摘要+元数据+缩略图)
- 详情页(原始扫描件 + OCR文本对照 + 提取的结构化数据)
- "审核模式"一键切换(字体放大、高亮关键词、快速翻页)
上线后并行测试了2周——品质部的人继续用原来的纸质方式,同时在新系统上查。对比两种方式的效率和准确率。
四、实际效果
客户审核时找一份历史检验报告,以前平均要40分钟(运气不好翻一两个小时)。用新系统后,输入批次号+产品型号+日期范围,2分钟内就能找到并展示原始扫描件。
以前品质部每月花3-5天手动统计不良数据。新系统每月1号自动生成品质月报,10分钟更新完毕。品质经理说"月初解脱了"。
以前客户投诉某批产品有问题,能追溯到当年检验记录的概率不到30%。现在只要知道批次号,系统100%能找到对应记录。上线后两个月里,成功追溯了7次客户投诉的原始检验数据,有2次查出来确实是出厂时就有问题,5次查出是客户使用不当造成的——帮厂里省了5次不必要的赔偿。
但也有一些不太理想的地方:
- 手写体识别还不是100%——有个老检验员的字特别潦草,他的记录OCR识别率只有75%左右。我们让他写了一份标准字体的"样本对照表",用来做二次校对
- 扫描端工作量不低——尤其是存量文档,4周扫描17.8万页,需要专人负责。如果新建工厂从一开始就用电子记录,能省掉大量后补工作
- 字段提取仍有约15%需要人工校正——操作员每天花约30分钟在界面上做校对,这是可以接受的,但离"完全自动化"还有距离
五、踩坑汇总
整个项目跑下来,踩了这么些坑:
- 扫描仪进纸轮是易耗品,提前备好备件——扫了不到3万页就磨损了,停工1天等配件
- 手写数字比想象中难识别得多——尤其是中国工人写的"7"带一横,跟"1"太像。需要专项训练数字识别模型,不能用通用OCR
- 表格结构检测不要指望纯AI——手画表格线不闭合、歪斜、甚至没线(空格排版),规则式检测器更可靠
- 字段提取用"模板匹配"会死在版本变化上——检验单格式改了3次。规则+模糊匹配比模板灵活得多
- 向量化切分以检验项目为单位,不要以页面为单位——细粒度检索精度更高
- 扫描前的文档预处理(拆订、分类、去污)占了一半时间——不要低估这个环节的工作量
- 存量文档扫描需要专人全职投入——品质工程师自己扫效率低,最好外包或招临时工
- 不要一开始就追求"全自动化"——15%的人工校正率在工厂场景下是可接受的,比100%人工翻档案已经好一个数量级
六、我的思考
做完这个项目,几点感受:
"文档数字化"在工厂里被严重低估了。很多工厂愿意花几十万买一台检测设备,但不愿意花几万块钱把一堆纸质的检验报告数字化。他们看不到"翻不到文档"的隐形成本——客户满意度下降、审核评分降低、不良追溯失败导致的赔偿。这些成本不显眼,但实实在在流失了。
OCR+RAG的组合很适合工厂内网的私有化部署。不需要云,不需要GPU(边缘网关的CPU+NPU足够跑PaddleOCR和BGE-small),数据不出厂区,满足大客户的审计要求。整套方案的成本(硬件+开发+部署)远低于商用文档管理系统——而后者通常不支持手写体、不能做语义检索、不支持定制字段提取。
最让我意外的是:"自动出月报"这个我开始觉得是锦上添花的功能,反而是品质经理用下来评价比较高的。他说:"以前每个月那几天我都要加班统计数据,现在一号早上到公司,报告已经自己生成了。哪天要是系统突然停了,我可能都不知道怎么交差了。"这说明一个道理:帮用户省掉他们最讨厌的重复劳动,比给一个炫酷的技术功能更有价值。
也有一个没解决的问题:纸质文档的防篡改。数字化之后,电子数据可以改,但纸质原件是唯一的法律证据。我们现在保留原始扫描件作为底稿,但未来如果遇到法律纠纷(比如产品责任索赔),扫描件本身的证据效力还需要跟客户的法务确认。这个留给了厂里后续跟客户沟通。
更多案例和实际项目经验分享,可以在 www.bycims5g.cn/cases/ 上找到。
七、给你的建议
如果你也在考虑把工厂的纸质质量记录数字化,几点实在的建议:
- 先搞清楚你真正的痛点——是客户审核翻查慢?是不良追溯困难?还是统计报表太费时?不同的痛点对应不同的方案侧重点。我们这个项目最大的驱动力不是"数字化"本身,而是"客户审核太难看了"
- 存量文档分批处理,别想一口吃成胖子——我们做的是近3年的,但建议先做最近1年的,跑通流程后再回溯。18万页4周扫完,天天像搬家
- 手写体识别要专项优化——不要指望通用OCR能搞定工厂检验员的手写数字。先收集一批样本单独训练数字识别,成本不高但收益明显
- 表格结构检测用规则比用AI更稳——至少作为兜底。工厂的检验单表格变化多,不闭合、不对齐是常态
- 留好人工校正入口——找个实习生每天花半小时校对OCR提取结果,比花两周调模型精度更划算
- 保留原始扫描件作为底稿——电子数据可被质疑,原始扫描件的管理(存储、备份、防篡改)也要纳入方案
- 自动报表功能别忽视——它可能是用户觉得最有价值的功能,尽管它在技术层面上最简单
这套方案的完整部署脚本、OCR模型微调脚本、字段提取规则和Web看板代码,我都打包整理好留在厂里了。遇到类似问题也欢迎交流。