前言
工业现场的设备日志分析,长期以来主要靠老师傅的经验积累和人工翻阅。面对动辄几千上万条的运行记录,想快速定位故障根因并不容易。漏看几条关键告警就可能延误处理。
大模型能力提升很快,就琢磨着能不能把它塞进传统的工控上位机软件里,做个顺手的小工具。既不用推翻现有的工作流程,又能帮现场人员省点力气。本文推荐一个基于 .NET 8 + WPF 的日志分析工具,把日志解析、大模型调用、报告生成串成一条线,主打一个"能用、好用、不添乱"。
项目介绍
一款面向工厂运维、设备操作和维修工程师的桌面工具,核心任务是帮用户把杂乱的设备运行日志"翻译"成清晰可读的诊断报告。
整个流程很直白:导入日志文件 → 程序自动解析结构化字段 → 调用大模型 API(结合内置的故障知识库和提示词模板)→ 输出诊断结论 → 一键导出报告。没有复杂的配置,打开软件就能干活。
项目虽然是个工具,但代码组织、配置管理、异常处理都按正经工业软件的套路来,不是那种跑通就扔的验证原型。
项目功能
功能模块 | 具体说明 |
日志导入与解析 | 支持 .log / .txt / .json 格式,自动识别时间戳、告警级别、运行信息等关键字段 |
AI 智能故障分析 | 调用大模型 API,结合内置诊断知识库和提示词模板,输出结构化分析结论 |
诊断报告生成 | 自动生成 Markdown / TXT 格式报告,包含故障诱因、处置建议、风险等级 |
报告本地导出 | 一键保存到本地,方便交接、归档或打印 |
API 密钥管理 | 支持环境变量读取或界面加密存储(DPAPI 本地加密,不留明文) |
配置热加载 | 提示词、知识库、接口参数全部外置为文件,修改后无需重新编译 |
项目特点
场景落地,不玩虚的:不是拿大模型随便聊两句,而是真正贴合工控上位机的工作习惯——解析、分析、出报告,每一步都有明确的输入输出,现场人员拿到就能用。
用知识库和提示词"管住"大模型:内置了针对工业设备的故障诊断知识库,配合强约束的提示词模板,要求模型按固定字段输出(故障代码、诱因、建议等),有效减少 AI 胡编乱造的情况。说白了就是让大模型当个严谨的分析员,而不是天马行空的聊天机器人。
交互响应很"跟手":所有网络请求都走异步,UI 线程不会被卡死。导入大文件时界面照常响应,分析过程中有进度提示,按钮状态会根据当前操作自动禁用/启用,防止用户误操作。这些细节在工业软件里特别重要——现场可没人愿意对着一个"未响应"的窗口干瞪眼。
密钥存储讲究安全:API Key 不走明文,要么用系统环境变量,要么通过 DPAPI 加密后存在配置文件里。界面输入时用密码框遮挡,保存后也不再回显明文,兼顾了易用性和安全性。
配置全外置,改起来方便:提示词、知识库、接口地址、模型名称全在 config/ 目录下,用文本编辑器就能改。想对接不同的模型或者适配不同的设备类型,改配置文件就行,不用动代码。
项目技术
技术项 | 选型与说明 |
运行时 | .NET 8(跨平台基础库,实际部署在 Windows) |
开发语言 | C# 12 |
桌面框架 | WPF(MVVM 模式,但本例采用 Code-Behind 简化实现) |
UI 组件库 | MaterialDesignThemes / MaterialDesignColors(界面风格统一,自带暗色主题支持) |
JSON 处理 | System.Text.Json(配置读写时强制使用 UTF-8 BOM,兼容中文不乱码) |
HTTP 请求 | 原生 HttpClient,配合 ConfigureAwait(false) 避免死锁 |
密钥加密 | DPAPI(ProtectedData 类,用户级加密,绑定当前 Windows 账户) |
异步编程 | async / await 模式,所有耗时操作均异步执行 |
项目代码
日志解析模块:按行读取文件,用正则匹配时间戳和告警级别,遇到 JSON 格式则反序列化。解析结果存放到 ObservableCollection 中,界面列表自动更新。
AI 调用模块:读取 config/提示词/诊断提示词.txt 作为 system prompt,将解析后的日志摘要作为 user prompt 拼接,构造标准的 Chat Completion 请求体。调用过程中用 CancellationTokenSource 支持超时取消。
报告生成模块:根据用户选择的导出格式(.md 或 .txt),将 AI 返回的 JSON 结构化内容渲染成对应格式的文本。Markdown 输出会保留标题、列表和代码块样式。
配置管理:自定义一个 ConfigManager 静态类,启动时加载 appsettings.json,并提供 SaveApiKey() / LoadApiKey() 方法处理加密存储。配置变更时会触发 OnPropertyChanged 通知界面更新。
代码整体遵循了分层思路:UI 层只负责展示和用户交互,业务逻辑放在 MainWindow.xaml.cs 中独立的方法里,配置和工具类单独抽取。
项目效果
点击"导入日志",选择一份设备运行日志文件(比如来自 PLC 或 SCADA 系统的导出文件),程序自动解析并在左侧表格中展示每条记录的时间、级别和内容摘要,状态栏会显示"已导入 XX 条日志"。
接着点击"AI 故障分析",按钮变为禁用状态,右侧区域显示"分析中...",同时状态栏提示进度。等待几秒到十几秒(取决于网络和模型响应速度),右侧会刷新出结构化的诊断报告——包括故障概述、诱因分析、处置建议、风险等级等,内容格式和提示词模板里约束的一致。
如果对结果满意,点击"导出报告"选择保存路径,一份 .md 文件就生成了,直接用 Typora 或其他 Markdown 编辑器打开就能看,也可以转成 PDF 发给同事。
整个过程从打开软件到拿到报告,不超过两分钟。对比以前人工翻日志再写分析记录,效率提升非常明显。
项目源码
项目源码包含完整的项目文件、配置文件模板和示例日志。
GitHub:https://github.com/qqlif/IndustrialEquipmentLogAIAnalyzer