Builds an ECN-to-Markdown LLMs Pipeline

Recently, manufacturers have started to use more structured Markdown formats, for creating Engineering Change Notices (ECNs). This has led to the potential for ECN automation with large language models (LLMs) as LLMs can be used in a pipeline to convert unstructured data into a structured format.

Builds an ECN-to-Markdown LLMs Pipeline

First, we prepare an ECN markdown template with placeholders like ${title} and ${date}. We can use LLMs to extract the information and put it in the placeholders.

ecn_template = r"""
<div style="margin-top: 10%;margin-bottom: 5%;text-align: center;font-size: 4rem;">产品变更通知</div>

<div style="margin-top: 5%;margin-bottom: 5%;text-align: center;font-size: 2rem;">${title}</div>

**文档编号**:

**重要级别**:一般 /重要

**适用区域**:国内/国际/All

**生效日期**:${date}

**涉及ECR编号:${ECR_number}

## 变更信息描述
${content}

## 变更措施

${documentation}

## 注意事项
${important_note}
"""

Then, we can generate an ECN template to test the program.

document = """
1. 变更背景与原因
	•	客诉单据:CS-2025-0103、CS-2025-0117
	•	现象:少量现场设备在高温环境下出现偶发重启;探头温度校准偏差在极端条件下超出±1.5°C。
	•	根因:日志缓冲区不足导致异常循环写入;温度补偿曲线边界条件处理不完善。
	•	目标:修复稳定性问题,提升 DICOM 互操作细节;增强异常日志追溯能力。

2. 变更内容(What)
	1.	软件:系统软件版本由 V01.01.12.00 升级至 V01.02.01.00
	•	修复:温度补偿边界处理、异常日志写入策略
	•	优化:DICOM C-STORE 失败重试与状态码回传
	•	新增:开机自检中温度传感器冗余校验
	2.	硬件/BOM(不改变电路原理,仅改料号容量):
	•	U12(外置 EEPROM)由 512KB 替换为 1MB(同封装,同电气特性),料号从 EE-24C512-AX 变更为 EE-24C1M-AX
	•	仅为容量升级,以满足扩展日志与配置备份需求

3. 影响评估(Impact)
	•	功能:无新增用户可见功能;稳定性与互操作性提升
	•	性能:在 45°C 环境下运行稳定性提升(预期 MTBF ↑)
	•	可靠性:对 EMC/安规无影响(不改版图与功耗显著项)
	•	制造:SMT 不变更工艺;来料检验 AQL 不变;需更新治具写入脚本
	•	供应链:新料 U12 交期 3 周,可与原料并行备库 2 周
	•	售后:需提供现场升级包与回退包;编写操作指引
	•	法规:国内三类注册证不变更;按软件小变更管理进行技术文档更新与内部评审存档
	•	成本:单机物料成本 +¥1.2;库存处置成本预计 ¥18,000(含重工与报废)

4. 风险与控制措施(Risk & Control)
	•	风险:软件升级后特定旧配置迁移失败(低概率)
	•	控制:升级前自动备份;失败则回退至旧版本并提示
	•	风险:新 EEPROM 批次一致性
	•	控制:首批 500 台加严抽检(功能+时序裕量测试)

5. 验证与确认计划(V&V)
	•	单元测试与回归测试(覆盖温度补偿与日志模块)
	•	环境应力:高低温循环(-10~55°C)、72h 老化试验
	•	互操作:DICOM 与第三方 PACS 兼容性冒烟 + 回归
	•	现场试点:两家医院灰度试点各 20 台,持续 2 周无重大缺陷后放量
	•	输出物:测试报告、问题清单及关闭记录、试点总结

6. 文件与系统更新(Documents)
	•	更新 SRS/SDD、软件发布说明(RN-AX8AX9-V01.02.01.00)
	•	制造作业指导书(WI-MFG-AX9-ITC01)版本升级至 Rev.C
	•	售后升级作业指导(SVC-UPG-AX)新增回退流程章节
	•	PLM/BOM 变更:U12 料号替换,生效自 Rev.F

7. 实施计划(Plan)
	•	断点序列号/批次:自 2025-08-28 起生产批次 LOT# AX9-25W35 起执行
	•	在制品处理:
	•	未上件:使用新料 U12
	•	已上件未过功能测:可替换重工
	•	成品/在库:按售后统一升级软件
	•	现场存量:通过远程包或上门批量升级,完成率目标 95%/60 天

"""

Finally, we can design a pipeline using Ollama's local LLMs to extract information from the ECN template and insert it into the ECN markdown template.

import os
import ollama
from string import Template
import json

#ecn_template = Template(ecn_template)

prompt = f"""
You are an AI assistant that only responds with valid JSON for parsing ECN documents, like so:
{{
    "title": "AX8软件发布",
    "date": "2025-08-14",
    "ECR_number": "ECR-S2-0007274",
    "content": ["提取ECR变更的内容",],
    "important_note": "提取ECR的注意事项"
}}
You need to reply with the JSON object for this document:

<<<
{document}
>>>

Return ONLY valid JSON.
"""

response = ollama.chat(
    model='qwen3:0.6b',
    messages=[
        {'role': 'system', 'content': 'You are a helpful assistant.'},  # No pirate-speak
        {'role': 'user', 'content': prompt}
    ],
    think=False
)

data = json.loads(response['message']['content'])