将仪器文件转换为标准化的 Allotrope Simple Model (ASM) 格式,用于 LIMS 上传、数据湖或移交给数据工程团队。
注意:这是示例技能
本技能演示了技能如何支持你的数据工程任务——自动化模式转换、解析仪器输出并生成可用于生产的代码。
针对你的组织进行自定义:
- 修改
references/文件以包含你公司的特定模式或本体映射- 使用 MCP 服务器连接到定义你模式的系统(例如你的 LIMS、数据目录或模式注册表)
- 扩展
scripts/以处理专有仪器格式或内部数据标准此模式可适用于任何需要在格式之间转换或根据组织标准进行验证的数据转换工作流。
不确定时: 如果你不确定如何将字段映射到 ASM(例如这是原始数据还是计算数据?设备设置还是环境条件?),请向用户询问澄清。参考
references/field_classification_guide.md获取指导,但当歧义仍然存在时,与用户确认而不是猜测。
# 首先安装依赖
pip install allotropy pandas openpyxl pdfplumber --break-system-packages
# 核心转换
from allotropy.parser_factory import Vendor
from allotropy.to_allotrope import allotrope_from_file
# 使用 allotropy 转换
asm = allotrope_from_file("instrument_data.csv", Vendor.BECKMAN_VI_CELL_BLU)ASM JSON(默认) - 完整语义结构,含本体 URI
扁平化 CSV - 2D 表格表示
两者 - 生成两种格式以获得最大灵活性
重要: 将原始测量与计算/衍生值分开。
measurement-document(直接仪器读数)calculated-data-aggregate-document(衍生值)计算值必须通过 data-source-aggregate-document
包含可追溯性:
"calculated-data-aggregate-document": {
"calculated-data-document": [{
"calculated-data-identifier": "SAMPLE_B1_DIN_001",
"calculated-data-name": "DNA integrity number",
"calculated-result": {"value": 9.5, "unit": "(unitless)"},
"data-source-aggregate-document": {
"data-source-document": [{
"data-source-identifier": "SAMPLE_B1_MEASUREMENT",
"data-source-feature": "electrophoresis trace"
}]
}
}]
}按仪器类型的常见计算字段: | 仪器 | 计算字段 | |------------|-------------------| | 细胞计数器 | 存活率 %、细胞密度稀释调整值 | | 分光光度计 | 浓度(来自吸光度)、260/280 比值 | | 酶标仪 | 来自标准曲线的浓度、%CV | | 电泳 | DIN/RIN、区域浓度、平均尺寸 | | qPCR | 相对定量、倍数变化 |
有关原始 vs 计算分类的详细指导,请参见
references/field_classification_guide.md。
在交付给用户之前始终验证 ASM 输出:
python scripts/validate_asm.py output.json
python scripts/validate_asm.py output.json --reference known_good.json # 与参考文件比较
python scripts/validate_asm.py output.json --strict # 将警告视为错误验证规则:
软验证方法:
未知技术、单位或样品角色会产生警告(而不是错误),以允许向前兼容。如果
Allotrope 在 2024 年 12
月之后添加新值,验证器不会阻止它们——它会标记以进行手动验证。如果需要更严格的验证,使用
--strict 模式将警告视为错误。
检查内容:
data-source-aggregate-document)完整列表请参见
references/supported_instruments.md。关键仪器:
| 类别 | 仪器 |
|---|---|
| 细胞计数 | Vi-CELL BLU、Vi-CELL XR、NucleoCounter |
| 分光光度法 | NanoDrop One/Eight/8000、Lunatic |
| 酶标仪 | SoftMax Pro、EnVision、Gen5、CLARIOstar |
| ELISA | SoftMax Pro、BMG MARS、MSD Workbench |
| qPCR | QuantStudio、Bio-Rad CFX |
| 色谱 | Empower、Chromeleon |
始终首先尝试 allotropy。 直接检查可用供应商:
from allotropy.parser_factory import Vendor
# 列出所有支持的供应商
for v in Vendor:
print(f"{v.name}")
# 常见供应商:
# AGILENT_TAPESTATION_ANALYSIS (用于 TapeStation XML)
# BECKMAN_VI_CELL_BLU
# THERMO_FISHER_NANODROP_EIGHT
# MOLDEV_SOFTMAX_PRO
# APPBIO_QUANTSTUDIO
# ... 还有更多当用户提供文件时,先检查 allotropy
是否支持它,然后再回退到手动解析。
scripts/convert_to_asm.py 的自动检测仅覆盖 allotropy
供应商的一个子集。
仅在 allotropy 不支持该仪器时使用。 此备用方案:
calculated-data-aggregate-document使用灵活解析器:
对于仅 PDF 文件,使用 pdfplumber 提取表格,然后应用第 2 层解析。
编写自定义解析器之前,始终:
references/examples/ 或询问用户references/instrument_guides/validate_asm.py --reference <file>| 错误 | 正确方法 |
|---|---|
| Manifest 作为对象 | 使用 URL 字符串 |
| 小写检测类型 | 使用 "Absorbance" 而不是 "absorbance" |
| "emission wavelength setting" | 发射使用 "detector wavelength setting" |
| 所有测量在一个文档中 | 按孔/样品位置分组 |
| 缺少程序元数据 | 提取每个测量的所有设备设置 |
生成科学家可以移交的独立 Python 脚本:
# 导出解析器代码
python scripts/export_parser.py --input "data.csv" --vendor "VI_CELL_BLU" --output "parser_script.py"导出的脚本:
instrument-data-to-allotrope/
├── SKILL.md # 本文件
├── scripts/
│ ├── convert_to_asm.py # 主转换脚本
│ ├── flatten_asm.py # ASM → 2D CSV 转换
│ ├── export_parser.py # 生成独立解析器代码
│ └── validate_asm.py # 验证 ASM 输出质量
└── references/
├── supported_instruments.md # 完整仪器列表及 Vendor 枚举
├── asm_schema_overview.md # ASM 结构参考
├── field_classification_guide.md # 不同字段类型的放置位置
└── flattening_guide.md # 扁平化工作原理
用户:"将这份细胞计数数据转换为 Allotrope 格式"
[上传 viCell_Results.xlsx]
Claude:
1. 检测 Vi-CELL BLU(95% 置信度)
2. 使用 allotropy 原生解析器进行转换
3. 输出:
- viCell_Results_asm.json(完整 ASM)
- viCell_Results_flat.csv(2D 格式)
- viCell_parser.py(可导出代码)
用户:"我需要给我们的数据工程师解析 NanoDrop 文件的代码"
Claude:
1. 生成独立的 Python 脚本
2. 包含示例输入/输出
3. 记录所有假设
4. 提供 Jupyter notebook 版本
用户:"将这份 ELISA 数据转换为可以上传到我们 LIMS 的 CSV"
Claude:
1. 解析酶标仪数据
2. 生成扁平化 CSV,包含列:
- sample_identifier、well_position、measurement_value、measurement_unit
- instrument_serial_number、analysis_datetime、assay_type
3. 根据常见 LIMS 导入要求进行验证
pip install allotropy --break-system-packages如果 allotropy 原生解析失败:
在可用时根据 Allotrope 模式验证输出:
import jsonschema
# 模式 URL 在 references/asm_schema_overview.md 中