在钢铁冶炼场景中,如何让大语言模型同时"看懂"炉口火焰、"读懂"时序传感器数据、并给出专业的操作指导?本文完整记录了从数据构建、模型微调、API部署到实时接入RTSP视频流和工业传感器的全流程实战,包含踩坑总结。
一、项目背景
转炉炼钢是钢铁生产的核心环节。操作人员需要同时观察炉口火焰状态、读取副枪测量的碳温氧数据、判断吹炼阶段并决定下一步操作。这个决策过程高度依赖经验,且需要同时处理视觉信息和数值信息——恰好是多模态大模型的适用场景。
本项目选用Qwen2.5-VL-7B-Instruct作为基座模型,通过LoRA微调使其具备转炉工艺分析能力。训练数据来自真实的火焰视频帧和时序传感器数据库,最终部署为OpenAI兼容API服务,并接入实时RTSP视频流和HTTP传感器接口,实现端到端的智能指导。
技术选型一览
组件 | 选型 | 理由 |
|---|---|---|
基座模型 | Qwen2.5-VL-7B-Instruct | 原生支持图片理解,7B参数量适配单卡4090 |
微调方法 | LoRA (rank=64, alpha=128) | 显存友好,单卡可训,效果接近全参数微调 |
训练框架 | LLaMA-Factory | 开箱即用的多模态训练支持 |
数据格式 | ShareGPT (messages + images) | 兼容OpenAI对话格式,多模态字段清晰 |
推理服务 | LLaMA-Factory API Server | 原生Windows支持,无需WSL2 |
实时数据 | HTTP POST + RTSP | 传感器每1秒读取,视频每5秒抓帧 |
二、多模态训练数据构建
2.1 数据来源
训练数据来自三个异构数据源:
视频文件:带有时间戳命名的MP4文件,记录炉口火焰实况。每个炉次对应一个视频和一个JSON元数据文件。
ClickHouse时序数据库:存储所有传感器的高频采集数据(碳含量、温度、氧含量等),按EID(传感器唯一编号)索引。
MySQL关系数据库:存储传感器元信息,包括EID、中文点位说明、所属工序等。
2.2 数据处理流水线
核心思路是:从视频中提取关键帧作为"图像模态",从数据库查询时序数据生成趋势图作为"图表模态",再结合工艺参数生成问答对文本。
def build_multimodal_dataset(samples, ch_client): dataset = [] for i, sample in enumerate(samples): # 1. 提取火焰帧(前/中/后三个时间点) flame_paths = extract_flame_frames(sample, positions=["early", "mid", "late"]) # 2. 生成时序趋势图(综合/碳含量/温度三种) chart_paths = generate_trend_charts(sample, ch_client, types=["combined", "carbon", "temp"]) # 3. 生成7种类型的问答对 qnas = generate_qna(sample, i) # 综合分析/操作指导/关联分析/异常诊断/趋势预测/安全评估/质量建议 # 4. 构建ShareGPT格式条目 for qi, qna in enumerate(qnas): entry = { "messages": [ {"role": "system", "content": qna["system"]}, {"role": "user", "content": [...]}, # 图片+文本 {"role": "assistant", "content": qna["answer"]}, ], "images": [path1, path2, ...] # 1-2张图片 } dataset.append(entry) return dataset2.3 七种问答场景设计
为了让模型覆盖不同维度的分析能力,设计了七种问答类型:
类型 | 输入模态 | 分析维度 |
|---|---|---|
综合工况分析 | 火焰图 + 文本 | 碳温氧状态、火焰特征、阶段判断 |
操作指导 | 时序趋势图 + 文本 | 枪位建议、供氧策略、辅料调整 |
火焰-参数关联 | 双图(火焰+时序) + 文本 | 火焰亮度与碳温的关联分析 |
异常诊断 | 火焰图 + 文本 | 喷溅/返干/过吹等异常识别 |
趋势预测 |