mcpField
J
jinko-task-export-to-matlab

jinko-task-export-to-matlab

github.com/novainsilico数据与数据库4129 次安装1 周前更新
代码仓库

关于 jinko-task-export-to-matlab

jinko-task-export-to-matlab 指导将 Jinkō 模型结果与 MATLAB/SimBiology 仿真进行对照,面向需要验证模型一致性的科研人员。它用导出清单、明确的输出选择和单位处理来支持可复现比较。

主要功能

  1. 01导出并校验 Jinkō 工作簿与设置
  2. 02复用已保存的 SimBiology 项目
  3. 03选择并求解指定时间序列
  4. 04按导出设置运行 MATLAB 仿真
  5. 05比较误差、单位与曲线下面积
  6. 06生成 Markdown、JSON 和 CSV 报告

适用场景

  1. 01检查 Jinkō 与 MATLAB 模型结果的一致性
  2. 02比较选定输出及其单位
  3. 03分析事件时间点造成的差异
  4. 04保存可复核的模型比较产物

MCP 相关

运行 MATLAB 前要求检查完整工具注册表;若发现 MATLAB MCP 工具,则通过它检查、执行并获取结果。只有未发现合适工具时才使用本地 MATLAB CLI。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/novainsilico/jinko-skills --skill jinko-task-export-to-matlab

安装后在 Claude Code 中输入/jinko-task-export-to-matlab确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
evals/
evals.json
scripts/
jinko_matlab_parity.py

详细介绍

Jinkō 到 MATLAB / SimBiology

**前置条件:**此技能需要已初始化的 jinko-sdk 连接,并且 SDK 满足其 metadata.requires_sdk 范围。运行 jinko-sdk-setup 技能(../jinko-sdk-setup/SKILL.md),并仅在检查通过后继续。会话代码只能兑换一次,因此请在启动此技能自己的 SDK 进程前再次调用 get_session_code。如果找不到该技能,请从 novainsilico/jinko-skills 安装。

引导工作流,但确定性的文件处理和比较计算请使用 scripts/jinko_matlab_parity.py。此辅助脚本是实现细节:不要将其介绍为用户必须学习的 CLI,也不要要求用户复现其命令。这样可以避免重复编写临时代码,并为科学结果保留上下文。

MATLAB MCP 能力检查关卡

启动 MATLAB、运行 MATLAB 代码,或声称 MATLAB/SimBiology MCP 服务不可用之前,请明确检查完整的可调用工具注册表,确认其中是否包含 MATLAB 或 SimBiology 能力。检查可延迟发现的工具;不要仅凭初始工具摘要推断 MCP 不存在。在提供 ALL_TOOLS 的环境中,请查询其中的 matlab 或 simbiology;否则,请使用平台的工具发现机制。

  • 可调用的 MATLAB 求值或脚本执行 MCP 工具表示该服务可用。说明这一发现,并使用该 MCP 检查、执行 MATLAB 操作及获取结果。
  • 只有在完整能力检查未发现合适的 MATLAB MCP 操作后,才能使用本地 MATLAB CLI。简要记录此回退方式,以便用户区分 MCP 支持的运行和本地运行。
  • 如果发现结果含糊不清,请勿继续:先查明情况,再选择执行路径。此关卡可防止绕过不可见或延迟加载的 MCP 服务。

从模型入手,而非输出

  1. 完成 MATLAB MCP 能力检查关卡。若服务可用,请使用它;未经用户指示,不要安装或重新配置服务。
  2. 只询问 CM 短 ID(提供 Jinkō CM 链接也可以;请提取其中的 ID)。先导出,再询问要比较哪些输出。
  3. 创建专用运行目录,例如 /tmp/jinko-to-matlab/<cm-sid>/,并在该目录中调用辅助脚本的 export 命令。它会安全地提取压缩包,要求其中恰好包含一个工作簿及与之匹配的 SimulationSettings_<model_name>.yaml,验证设置,并写入带内容哈希的 parity-manifest.json。

成功访问、导出或验证清单后,不要再次要求确认。简要告知生成的工作簿和设置文件路径。 默认情况下,辅助脚本会保留现有清单和结果文件。若要有意重新运行,请先检查现有文件,再使用 --overwrite。

复用已导入的项目

在请求任何 Model Builder 操作前,先读取清单中的 reuse.workbook_unchanged。

  • 如果存在可发现的已保存 .sbproj,且工作簿未更改,请复用该项目。每次比较都应用当前导出的设置;仅更新设置无需重新导入。
  • 如果不存在已保存项目、工作簿已更改,或发现多个候选项目,请提出一个简洁的问题。对于项目已更改或缺失的情况,请指引用户新建一个空白 Model Builder 模型,删除其默认的 unnamed compartment,然后使用 Home → Model → Import Model Components from Excel。请用户将项目保存在运行目录中。删除该占位项可避免将额外的 compartment 一并带入导入的模型。这是唯一必须的手动步骤:SimBiology 有文档说明的 SBML/项目导入方式,但没有 Excel 组件导入 API。
  • 绝不要覆盖提供的 .sbproj。将其载入 MATLAB,并仅在内存中为当前比较修改配置和剂量。

提供单一比较选项

使用辅助工具的 list-series 命令获取静态时间依赖 ID。 将它们显示为符合条件的输出,并请用户选择一到十个。不要将 Time 包含在该列表中,也不要将其计入数量限制。不要静默选择、 重命名或替换组件。

用户选择输出后,调用辅助工具的 solve 命令。它会发送 准确的 Jinkō 负载 ['Time', *selected_ids];Time 区分大小写,且除非请求,否则不会返回。 将导出的 parity-manifest.json 传递给 该命令,并要求响应中包含每个请求的序列和 Time。辅助工具 会将 Jinkō 返回的秒转换为导出的 TimeUnits,并写入 matlab_output_times;将这些值用作 MATLAB 的 OutputTimes,绝不要推导出均匀网格,也不要将原始 Jinkō 秒数传递给配置不同的 MATLAB 模型。

使用导出的配置运行 MATLAB

加载已保存的项目,解析请求的模型(仅当项目包含多个模型时才询问),并使用其活动配置集。应用清单中的:

当能力检查发现 MATLAB MCP 服务时,请在现有 MATLAB 会话中使用该 MCP 执行这些操作。不要用本地 CLI 运行替代它。

configset.CompileOptions.DefaultSpeciesDimension = settings.CompileOptions.DefaultSpeciesDimension;
configset.CompileOptions.DimensionalAnalysis = settings.CompileOptions.DimensionalAnalysis;
configset.CompileOptions.UnitConversion = settings.CompileOptions.UnitConversion;
configset.SolverOptions.AbsoluteTolerance = settings.SolverOptions.AbsoluteTolerance;
configset.SolverOptions.RelativeTolerance = settings.SolverOptions.RelativeTolerance;
configset.SolverType = settings.SolverType;
configset.TimeUnits = settings.TimeUnits;
configset.StopTime = settings.StopTime;
configset.SolverOptions.OutputTimes = matlabOutputTimes;

仿真前,检查模型剂量。如果有任何剂量未激活,请告知用户其名称,并询问是否要在本次内存中的奇偶校验运行中激活它们、保留其已保存状态,或停止。不要持久化此选择。运行 sbiosimulate,仅收集所选序列及其单位,并写入精简的 MATLAB 结果 JSON:

{
  "dose_decision": "activate inactive doses for this run",
  "time": { "unit": "second", "values": [0, 3600] },
  "series": [{ "id": "Tumor", "unit": "mole", "values": [1, 2] }]
}

time.unit 必须反映 MATLAB 输出时间单位;每个序列 ID 必须与所选 Jinkō ID 完全一致。组件缺失或单位转换不受支持属于映射失败,不能以猜测代替。

比较并报告

使用 Jinkō 和 MATLAB JSON 文件调用辅助工具的 compare 命令。该命令:

  • 使用阿伏伽德罗常数转换兼容的 mole/substance_count 值;
  • 在对齐前转换常见时间单位;
  • 对逐点匹配保留每个重复 Jinkō 时间戳处的最终值(事件后的状态),随后在唯一递增的时间点上积分;
  • 使用 abs <= 1e-8 + 1e-6 * abs(jinko) 作为诊断指标,报告逐点最大绝对/相对误差和不匹配数量;
  • 计算 Jinkō 和 MATLAB 的梯形积分 AUC,并将相对 AUC 误差超过 1% 标记为 WARN。如果参考 AUC 为零,则报告绝对 AUC 误差,并将 AUC 状态设为 N/A;如果任何所选序列的参考 AUC 为零,则总体状态也为 N/A,绝不能无条件报告 PASS。

将 comparison.md 作为精简结果表呈现。以 AUC 状态作为主要结果;说明逐点不匹配可能反映求解器/事件时间差异。保留 comparison.json 和 comparison.csv 作为运行产物,其中包括单位、转换、所选输出和重复时间处理策略。

故障处理

  • 如果缺少设置、输出 ID 或时间对齐信息,请停止并指出具体的前置条件。不要使用推断值继续。
  • 要求单位明确且兼容,时间序列值为有限数值。缺少单位、NaN 或无穷大都意味着比较输入失败,而非一致。
  • 将选择限制为一到十个请求输出。内部必须包含 Time。
  • 不要编辑 Jinkō 模型、其求解选项或源项目。
  • 如果没有 MATLAB MCP,请提供适用于当前项目的最少命令,并且仅请求辅助工具所需的 MATLAB 结果 JSON;不要创建新的持久化用户工作流。

评论

支持 Markdown