v0.2 变更: 支持 国产化 Linux (银河麒麟 V10 / 统信 UOS 20, x86_64 与 aarch64) · Ollama 离线安装 · Python 多版本机器可指定, 无 3.11+ 时用包内便携运行时 · 修 xzy 测试报告 5 条 (tzdata / 数据路径 / 主轴承跳转 / 报警台数口径 / 报告章节跳转) · 中文表达按 OEM 术语基准替换。
一套纯离线的风电场数据分析应用 (如东海上风电场, 西门子 SWT-4.0-130, 38 台): 把运行数据、状态监测、报警、工单、油样落到每台机组的正确部件上, 给出带证据、带边界、带责任人的检修结论; 判断在代码里, 本机模型只负责问答、解释与引用, 不发明结论。软件不含任何联网功能。
包内七个模块 (统一入口 http://127.0.0.1:28084/):
| 路径 | 模块 | 用途 |
|---|---|---|
| / | 中文门户 | 总览 / 系统架构 / 方法 / 经验发现 / 案例 / 文档 (含治理清单) |
| /detail/ | 综合详细分析工作台 | 系统矩阵、检修助手、问答区、汇报纸 (含结构化事实契约) |
| /cms/ | CMS 振动诊断 | 六层振动模型逐台判读 |
| /sim/ /sim/sys/ | 仿真与回放 · 四系统合页 | 液压等系统仿真台 (案例判据标定用) |
| /viewer/ | 三维拆装工作台 | 部件层级三维 |
| /release/r1 /release/r2 | Release 层 (只读) | 契约生 Verdict / 老结论分层 |
| /healthz /api/version | 自检 | 模块状态、指纹 |
| 项 | 最低 | 推荐 |
|---|---|---|
| 系统 | Windows 10 64 位 · 银河麒麟 V10 · 统信 UOS 20 · Ubuntu 20.04+ · CentOS 8+ | Windows 11 / 麒麟 V10 SP3 |
| 架构 | x86_64 | x86_64 或 aarch64 (两套离线轮子都在包内) |
| Python | 3.11+ ; 机器上没有也行 —— 包内带便携运行时 3.12.14 (麒麟/统信自带多为 3.7/3.9, 跑不了本项目依赖) | 3.12.x |
| 内存 | 16 GB | 32 GB |
| 磁盘 | 5 GB + 三维资产 1 GB | 另加模型 30–60 GB (SSD) |
| 显卡 (只影响问答/本地审核) | 无 (CPU 慢档, 首答 30–60 s) | NVIDIA ≥ 12 GB; ≥ 24 GB 可开 27B 升档 |
| Ollama | 可选; 离线安装包在 vendor/ollama/ (Windows 1.5 GB / Linux 1.4 GB, 单独交付不在主包) |
同左 |
安装目录不要带空格和中文 (例 D:\guanlan\app 或 /opt/guanlan)。
..._program.zip 到 D:\guanlan\app; 再解压 ..._viewer.zip (得 release\viewer\)、..._deliverables.zip (得 release\如东\)。install.bat (或 powershell -ExecutionPolicy Bypass -File install.ps1)。脚本会:
列出机器上所有 Python 并选 ≥3.11 → 没有就解包内便携运行时 → 建 .venv → 从 wheels\win_amd64 离线装依赖 → 写配置 → 装 Ollama (若 vendor\ollama\OllamaSetup.exe 在位, 静默安装) → 自检。
install.ps1 -Python "C:\Python312\python.exe"install.ps1 -UseBundledPythoninstall.ps1 -SkipOllamacheck.bat 全绿 → start.bat。tar 或 unzip 解包到 /opt/guanlan # 目录不要带空格与中文
cd /opt/guanlan && sh install.sh # 自动识别发行版与架构, 选 Python, 离线装依赖
# 多版本机器指定: GUANLAN_PY=/usr/bin/python3.11 sh install.sh
.venv/bin/python guanlan.py serve # 启动; 停止用 ... stop
install.sh 找不到 3.11+ 时自动解包内便携运行时 (vendor/python/cpython-3.12*-<架构>-*.tar.gz), 不需要联网、不需要编译。
Ollama (可选): 包内有 vendor/ollama/ollama-linux-amd64.tar.zst 时
sudo tar -I zstd -C /usr -xf vendor/ollama/ollama-linux-amd64.tar.zst
sudo useradd -r -s /bin/false -m -d /usr/share/ollama ollama # 已有则跳过
ollama serve &
麒麟/统信若无 zstd: sudo yum install zstd 或 sudo apt install zstd。
在有网机器上 ollama pull qwen3:8b deepseek-r1:14b bge-m3 (显存 ≥24 GB 再 qwen3.8:27b), 然后把整个模型目录拷到内网机同位置:
%USERPROFILE%\.ollama\models · Linux /usr/share/ollama/.ollama/models 或 ~/.ollama/models
拷完 ollama list 能看到模型即可。没有模型时问答不可用, 其余页面照常。在有网机器上: python scripts/fetch_offline_deps.py all --targets win_amd64,linux_x86_64,linux_aarch64
下载各平台轮子 + 便携 Python + Ollama 安装包, 校验值写进 vendor/MANIFEST.json。
start.bat (约 10–30 s, 自动打开浏览器到 http://127.0.0.1:28084/)。stop.bat。check.bat (Python/依赖/数据/发布件/端口/模型/模型可用性检查)。.venv\Scripts\python.exe guanlan.py status。/detail/: 系统矩阵 (38 台 × 九系统判级) → 点台号看证据窗; 检修助手 (检修四链); 问答区: 选模型 (默认 8B; 复杂问题会自动升档到 27B 并在尾注标明), 回答后自动附"结构化事实契约"引文块; 引不到契约条时会明写"未被契约背书"。汇报纸可导出。/cms/: 每台机组六层判读, 机制未定不点零件。/ops (2026-09-12 新增): 停/启服务 · 执行重算 · 清除产物 —— 一个按钮一件事。
按钮按真实状态启用 (不能做的动作是灰的; 后端同样校验并返回 409, 直接打 API 也绕不过);
"启动服务"起来后会自动打开门户; "停止组件服务"保留控制台本身(否则点完页面就没了);
"清除产物"是把产物挪到 _products_off\ (可恢复), 不动 data\raw\。页面同时显示各服务端口状态、
产物件数、逐件来源台账、验收锚点, 以及当前任务的进度/退出码/日志尾巴。| 档 | 模型 | 用途 | 显存 |
|---|---|---|---|
| 默认问答 | qwen3:8b | 所有提问首选 | ≥ 6 GB (CPU 可跑, 慢) |
| 升档 | qwen3.8:27b | 8B 校闸没过时自动重答一次 | ≥ 20 GB |
| 审核票 | deepseek-r1:14b (+ 27B 第二票) | 交叉审核初筛 (离线审级, 非独立审级) | ≥ 10 GB |
| 检索 | bge-m3 | 向量检索 | 2 GB |
配置在 configs\models.json; 换模型 = 改这里 + ollama pull, 不改任何结论。
模型闸 (src\ontology\llm_gate.py) 对每次调用: 固定随机种子与温度 (同问同证据同答) · 同一时刻只一个生成请求 · 瞬断自动重试一次 · 连续 3 次失败熔断 60 s 并明示 · 每次调用写审计日志 logs\llm_audit.jsonl (模型摘要、提示指纹、参数、耗时、输出指纹)。
已知答案回放: 服务运行中执行 .venv\Scripts\python.exe guanlan.py qa --n 6 --budget 300, 六道固定问题必须出文、引用期望结论编号、校闸全过、在预算内 → 结果在 logs\known_answer_*.json。换模型或升级后必跑。
D:\guanlan\app\
guanlan.py 启动器 (check / serve / status / stop / open / qa)
start.bat stop.bat check.bat install.ps1
configs\serve.json 端口、发布目录、Python 路径
configs\models.json 模型档
configs\{farms,contracts,canonical}\ 场配置、数据契约、canonical 字典
src\ 分析代码 (windscada / windcms / ontology / sop)
scripts\ 服务与工具脚本
outputs\rudong\ 如东产物: windscada (parquet) / ontology (本体) / sop (findings) / guanlan (事实契约) / windcms / m5_cms_tcm
release\ 门户 portal.html / 仿真服务 / viewer 三维资产 / 如东 治理清单交付件
resources\ 仿真回放资产
wheels\win_amd64\ 离线依赖轮子
logs\ run\ 日志 (各服务 + 模型审计) / 运行时 pid
docs\ 本说明书、系统设计与样板、系统工程意见
configs\serve.json。注意 v0.1 里网关的上游端口表 (scripts\guanlan_gateway.py ROUTES) 仍是硬编码, 改端口须两处同步 (v0.2 合并)。outputs\ 与 release\。PYTHONUTF8=1; 若终端显示乱码, 先 chcp 65001。.venv\Scripts\python.exe scripts\rebuild_all.py (含 SCADA 侧 10 个构建器, 逐台读 ~14 GB, 约 15 分钟;
只换了台账类数据时加 --skip-scada, 约 2 分钟); 等价操作: 运维控制台 /ops → "执行重算"。
链路: 放数据 → 三门台账 → 月度派生件 → 补齐缺件 → 本体(码表/铺开/决策链/趋势/检索/参数表) → 本体审计,
并自动重启组件服务 (网关保留, 所以控制台页面不会断)。
两条必须如实知道的边界: ① 随包里有一批产物没有生成端 (如 pitch_daily、pc_monthly_bins、
CMS/TCM 兼容链), 重算后再由随包件补齐 —— 每件的来源逐条记在 outputs\rudong\_provenance.json
(raw-derived = 由 data\raw 重算 / shipped = 用随包件补齐); ② 补齐后某页仍无数据,
看 docs\重算缺口与补件清单_v0.1.md (哪件缺 · 卡住哪个页面 · 找谁补 · 补齐判据)。outputs\rudong\ 与 release\ 及变化摘要、审级件、人裁记录。有了重算链, 现场换数据也可自行重算,
步骤与验收见 docs\重算操作手册_v0.1.md (§0 一条命令 · §0b 控制台 · §5b 清产物/恢复)。stop.bat → 把当前 outputs\ 与 release\ 整目录复制到 D:\guanlan\backup\<日期>\ → 解压更新包覆盖 → check.bat → start.bat → 打开 /api/version 核对指纹与更新说明一致。check.bat 与 guanlan.py qa。回滚 = 用备份目录覆盖回去。| 现象 | 原因 | 处理 |
|---|---|---|
start.bat 报端口占用 |
别的程序占了 28084/18033/18020/18791/18792/64292 | stop.bat 后重试; 仍占则改 configs\serve.json (见 §7) |
| 页面显示"本机模型未启动" / 问答 503 | Ollama 没起或模型没拉 | 开始菜单启动 Ollama; ollama list 确认模型; check.bat |
| 问答很慢 (> 1 min) | CPU 档或显存不足 | 看 check.bat 的探针耗时; 显存 < 12 GB 时只用 8B, 关掉升档 (models.json profiles) |
| 治理清单页 not found | release\如东\ 未解压 |
解压 _deliverables.zip 到程序目录 |
| 三维页空白 | release\viewer\ 未解压 |
解压 _viewer.zip |
| 中文乱码 | 终端编码 | chcp 65001; 启动器已强制 UTF-8 |
| 杀毒软件拦截 | 嵌入 Python 或 Ollama 被误报 | 把 D:\guanlan 加入信任目录 |
| 服务起了页面打不开 | 浏览器代理把 127.0.0.1 也走代理 | 浏览器代理例外加 127.0.0.1 |
日志: logs\gateway.log logs\detail.log logs\cms.log … ; 模型调用: logs\llm_audit.jsonl。
VERSION; 包内 SHA256SUMS.txt 列出三个 zip 的校验值, 解压前请核对 (certutil -hashfile <文件> SHA256)。http://127.0.0.1:28084/api/version 显示代码指纹、门户指纹、事实契约条数与 sha。check.bat / install.sh 的输出反馈给维护方。scripts/fetch_offline_deps.py 自取)。