本地大模型在 MES 排障中的应用:Ollama+Qwen 实战踩坑
背景:现场排障的痛点
MES 运维现场,设备离线、数据采集失败、接口超时等问题频发。新人工程师面对告警日志,往往无从下手;资深工程师的经验又难以沉淀复用。传统知识库检索慢、不智能,关键时刻掉链子。
于是萌生一个想法:用本地大模型构建 MES 排障助手,把历史故障案例、厂商文档、日志格式都投喂进去,现场直接问"XX 设备报 YYY 错误怎么查",模型秒级给排查步骤。
解决思路:Ollama+Qwen2.5-VL 本地部署
选择 Ollama 作为推理引擎,Qwen2.5-7B 作为基座模型。理由:
- 本地运行,数据不出厂,符合制造业信息安全要求
- 7B 模型在 16G 显存显卡上流畅运行,推理速度 5~10 tok/s
- Qwen 系列对中文友好,技术文档理解能力强
架构简单:前端(Vue)→ .NET API(Ollama 反向代理)→ Ollama 服务 → Qwen 模型。
实现步骤
1. 安装 Ollama 与模型
# Windows 便携版直接解压即用,无需服务注册
.\ollama.exe serve
# 新开终端拉取 Qwen2.5-7B
ollama run qwen2.5:7b
# 下载成功后,模型文件在 ~/.ollama/models/
2. .NET 后端集成
// 使用 HttpClient 反向代理到 Ollama
public class OllamaService
{
private readonly HttpClient _client = new();
public async Task<string> ChatAsync(string prompt)
{
var body = new
{
model = "qwen2.5:7b",
messages = new[] { new { role = "user", content = prompt } },
stream = false
};
var response = await _client.PostAsJsonAsync(
"http://localhost:11434/api/generate", body);
var result = await response.Content.ReadFromJsonAsync<JsonElement>();
return result["response"].GetString();
}
}
3. 前端调用与上下文构建
// Vue 3 前端组件
const askTroubleshoot = async (errorLog) => {
const context = `
工厂环境:MES v2.3, SQL Server, 设备协议 OPC UA
当前故障:${errorLog}
已知历史案例:[加载最近 5 条相似故障]
请给出排查步骤:`;
const response = await fetch('/api/ai/troubleshoot', {
method: 'POST',
body: JSON.stringify({ prompt: context })
});
const data = await response.json();
displayAnswer(data.answer);
}
踩坑记录
坑 1:中文编码问题
git-bash 里 curl -d '{"content":"中文"}' 会乱码。解决:用 Pythonjson.dumps(body, ensure_ascii=False).encode('utf-8')或PostAsJsonAsync自动处理。
坑 2:推理速度慢
CPU 模式推理速度 0.3 tok/s,现场等待不耐烦。解决:改用 16G 显存显卡(RTX 3090),速度提升 30 倍到 10 tok/s。
坑 3:上下文超限
把 100 条历史故障案例全塞进 prompt,Qwen 直接崩。解决:RAG 检索增强,只检索 Top-3 相似案例,context 控制在 4K 以内。
坑 4:幻觉问题
模型胡说八道"建议重启 MES 服务器"(其实是 PLC 问题)。解决:在 prompt 里加约束"仅基于提供的历史案例回答,不知道就说不知道"。
总结
本地大模型在 MES 排障场景的可行性已被验证:部署成本低(单台 16G 显卡 PC)、响应速度快(<3 秒)、数据不出厂。踩坑主要集中在编码、速度、上下文、幻觉四个方面,都有现成解法。
下一步计划:接入厂商文档知识库,实现"问接口文档 → 直接给示例代码"的能力。欢迎同行交流本地 AI 在生产环境的应用经验。