第03章:制造业——设备手册×质检标准×工艺知识库
第03章:制造业——设备手册×质检标准×工艺知识库
制造业的知识不在人的脑子里——在3000本设备手册、2000份工艺文档和无数次口口相传的"经验"里。RAG的使命是把这些经验变成随时可查的大脑。
制造业RAG的3个核心场景
场景1:设备手册检索
"CJ-200注塑机的最大射出压力是多少?"
"这台机器出现E-047报警怎么处理?"
场景2:工艺知识库
"ABS材料在85度模温下的收缩率通常是多少?"
"产品边缘毛刺的常见原因和解决方法?"
场景3:质检标准查询
"汽车外饰件的表面粗糙度Ra值标准是多少?"
"这批产品的检验规程在哪?"
挑战1:文档类型极其复杂
真实的制造业文档库
/shared/documents/
├── 设备手册/
│ ├── CJ-200_操作手册.pdf # 标准PDF
│ ├── 液压系统维修手册.pdf # 扫描件(纯图片)
│ ├── PLC程序说明.doc # Word 2003格式
│ ├── 电气原理图.dwg # AutoCAD文件
│ └── 日立注塑机_日文原版.pdf # 日文
├── 工艺文档/
│ ├── 注塑工艺卡/
│ │ ├── ABS-PC_工艺参数.xlsx # Excel表格
│ │ └── PA66+GF_参数记录.csv # CSV数据
│ ├── 工艺变更通知/
│ │ ├── ECN-2024-0891.pdf
│ │ └── ECN-2025-0156.pdf
│ └── 老师傅经验/
│ ├── 张工_注塑调机笔记.jpg # 手写笔记拍照
│ └── 会议纪要_20250312.docx
├── 质检标准/
│ ├── GB_T_XXXXX-2023.pdf # 国标
│ ├── 客户检验标准_丰田.pdf # 客户标准
│ └── 内部检验规程_v15.docx
└── 安全文档/
├── MSDS_化学品清单.pdf
└── 安全操作规程.pdf
FDE的文档预处理流程
class ManufacturingDocProcessor:
"""制造业文档预处理Pipeline"""
async def process_directory(self, root_dir: str):
for filepath in self.walk(root_dir):
doc_type = self.classify_document(filepath)
if doc_type == "scanned_pdf":
# 扫描件 → OCR
text = await self.ocr_process(filepath)
elif doc_type == "excel":
# Excel → 转换为结构化文本
text = await self.excel_to_structured_text(filepath)
elif doc_type == "cad":
# CAD文件 → 提取文字注释
text = await self.extract_cad_annotations(filepath)
elif doc_type == "image":
# 手写笔记照片 → Vision LLM识别
text = await self.vision_ocr(filepath)
else:
# 标准文档 → 直接解析
text = await self.parse_document(filepath)
# 添加元数据
metadata = {
"source": filepath,
"doc_type": doc_type,
"department": self.extract_department(filepath),
"equipment": self.extract_equipment_ref(text),
"version": self.extract_version(text),
"date": self.extract_date(text)
}
# 选择分块策略
chunks = self.chunk_by_type(text, doc_type)
# 入库
await self.ingest(chunks, metadata)
def excel_to_structured_text(self, filepath: str):
"""
将Excel工艺参数表转为可检索的文本。
原始Excel:
| 产品型号 | 料温(℃) | 模温(℃) | 射出压力(bar) | 保压(bar) |
|---------|---------|---------|-------------|----------|
| A-001 | 230 | 60 | 1200 | 800 |
| A-002 | 245 | 70 | 1400 | 900 |
转换后的文本:
"产品A-001的注塑工艺参数:料温230℃,模温60℃,
射出压力1200bar,保压800bar。"
"产品A-002的注塑工艺参数:料温245℃,模温70℃,
射出压力1400bar,保压900bar。"
"""
pass
挑战2:技术参数的精确查询
制造业用户的查询很多是精确参数查询。纯向量搜索在这里表现很差。
混合搜索配置
class ManufacturingSearch:
"""制造业混合搜索配置"""
def search(self, query: str) -> list:
# 1. 判断查询类型
query_type = self.classify_query(query)
if query_type == "parameter":
# 参数查询:"CJ-200最大射出压力"
# → 优先BM25(精确匹配型号和参数名)
weights = {"vector": 0.3, "bm25": 0.5, "sql": 0.2}
elif query_type == "troubleshoot":
# 故障排查:"E-047报警怎么处理"
# → 优先向量搜索(语义理解故障描述)
weights = {"vector": 0.6, "bm25": 0.3, "sql": 0.1}
elif query_type == "process":
# 工艺查询:"ABS注塑收缩率"
# → 向量和BM25均衡
weights = {"vector": 0.4, "bm25": 0.4, "sql": 0.2}
else:
weights = {"vector": 0.5, "bm25": 0.3, "sql": 0.2}
# 2. 多路搜索
results = self.hybrid_search(query, weights)
# 3. Rerank(对参数查询特别重要)
if query_type == "parameter":
results = self.rerank_with_metadata(results, query)
return results
设备型号的同义词映射
# 同一台设备,不同人叫不同名字
EQUIPMENT_ALIASES = {
"CJ-200": ["CJ200", "长江200", "长江注塑机200吨", "200T注塑机", "1号机"],
"KraussMaffei_3200": ["KM3200", "德国3200吨", "大机", "3号机"],
"海天MA2500": ["海天2500", "HT-2500", "MA2500", "5号机"],
}
# 查询预处理:将别名映射到标准名
def normalize_equipment_name(query: str) -> str:
for standard_name, aliases in EQUIPMENT_ALIASES.items():
for alias in aliases:
if alias in query:
return query.replace(alias, standard_name)
return query
挑战3:老师傅的经验知识
制造业最宝贵的知识不在文档里——在老师傅的脑子里。FDE需要帮客户把这些知识沉淀下来。
经验知识采集流程
# 用结构化访谈模板采集老师傅经验
INTERVIEW_TEMPLATE = """
## 经验知识采集表
### 基本信息
- 采集日期:
- 师傅姓名:
- 工龄:
- 专长领域:
### 场景描述
1. **问题/场景**:遇到什么情况?
2. **判断依据**:你怎么判断出问题的?看什么指标?听什么声音?摸什么温度?
3. **解决方法**:你怎么处理的?步骤是什么?
4. **注意事项**:有什么容易犯的错?
5. **例外情况**:什么时候这个方法不管用?
### 示例
问题:注塑产品出现银纹
判断:看银纹方向——如果顺着流动方向,多半是料温太高或干燥不够
解决:
1. 先检查料温设置
2. 确认干燥机运行正常(温度80-90℃,时间≥4小时)
3. 如果以上都正常,降低射出速度试试
注意:PA66比ABS更容易出银纹,干燥要求更严格
"""
# 将采集到的经验转化为知识库条目
async def ingest_expert_knowledge(interview_data: dict):
# 结构化存储
await openclaw.add_profile("expert_knowledge", interview_data["id"], {
"expert": interview_data["expert_name"],
"domain": interview_data["domain"],
"problem": interview_data["problem"],
"diagnosis": interview_data["diagnosis"],
"solution": interview_data["solution"],
"caveats": interview_data["caveats"],
"exceptions": interview_data["exceptions"]
})
# 同时作为文档索引(支持自然语言搜索)
document = format_as_document(interview_data)
await openclaw.ingest_text(
text=document,
collection="expert_knowledge",
metadata={"expert": interview_data["expert_name"]}
)
制造业RAG的Agent配置
manufacturing_rag_agent = Agent(
name="Manufacturing Knowledge AI",
system_prompt="""你是工厂的技术知识助手。
回答问题时的原则:
1. 优先引用官方技术手册和标准文件
2. 参数值必须精确——带单位、带来源
3. 如果知识库中没有找到答案,明确说"未找到相关信息"
4. 涉及安全的问题(电气、化学品、高温高压),必须提醒安全注意事项
5. 如果是老师傅的经验,标注"经验分享"以区别于官方标准
回答格式:
- 先给直接答案
- 然后给详细解释
- 最后标注信息来源
""",
tools=[
search_equipment_manuals,
search_process_documents,
search_quality_standards,
search_expert_knowledge,
query_process_parameters # SQL查询工艺参数表
]
)
制造业RAG的评估指标
| 指标 | 目标值 | 测量方法 |
|---|---|---|
| 参数查询准确率 | ≥95% | 准备100个参数问题,人工验证 |
| 故障排查覆盖率 | ≥80% | 覆盖Top 50常见故障 |
| 工艺知识覆盖率 | ≥70% | 覆盖主要产品的工艺参数 |
| 响应时间 | <3秒 | P95延迟 |
| 来源引用准确率 | ≥90% | 引用的文档确实包含答案 |
本章核心结论
- 制造业文档复杂度极高——扫描件、Excel表格、CAD文件、手写笔记都需要预处理。
- 参数查询是制造业RAG的核心场景——必须用混合搜索(BM25权重加大)。
- 设备别名映射是必须做的——同一台机器在不同部门可能有5个叫法。
- 老师傅的经验是最宝贵的知识——用结构化访谈模板采集,转化为可检索的知识。
- 安全是红线——涉及安全的回答必须带安全提醒。
下一章:金融RAG——法规文档、合规审查和研报知识库的特殊处理方式。