SimuGen:基于多模态 Agent 框架的 Simulink 仿真模型自动生成技术文档
SimuGen:基于多模态 Agent 框架的 Simulink 仿真模型自动生成技术文档
论文来源:SimuGen: Multi-modal Agentic Framework for Constructing Block Diagram-Based Simulation Models
作者:Xinxing Ren(Brunel University of London)、Qianbo Zang(SnT, Université du Luxembourg)、Zekun Guo(University of Hull)
论文编号:arXiv 2506.15695v2
目录
1. 背景与动机
1.1 问题场景
Simulink 是 MATLAB 环境下用于动态系统建模与仿真的主流图形化平台,广泛应用于汽车、航空航天、机器人等工程领域。传统上,工程师需要手动搭建 Simulink 模型(Block Diagram),耗时耗力。
近年来,大语言模型(LLM)在代码生成领域展现了强大能力,但在 Simulink 仿真生成方面仍面临严峻挑战:
- 数据稀缺:公开的 Simulink 模型数据远少于通用代码数据;
- 图形化结构:LLM 主要处理线性文本,难以理解二维 Block Diagram 的拓扑结构;
- 领域知识不足:Block 路径、端口配置、连接规则等 Simulink 专属知识在预训练数据中匮乏。
早期尝试(如 SLGPT,仅在 400 个 Simulink 模型上微调)只能生成简单框图,无法泛化到复杂系统。
1.2 研究目标
核心问题:能否从文字描述 + Simulink 框图图像,自动生成完整、正确的 Simulink 仿真代码?
本文提出 SimuGen,一个多模态 Agentic 框架,通过视觉理解 + 领域知识 + 多 Agent 协作,实现 Simulink 模型的自动化构建。
2. 核心挑战
SimuGen 论文将 LLM 生成 Simulink 模型的失败模式总结为四类:
2.1 概念性错误(Conceptual Errors)
- 原因:LLM 缺乏领域知识,无法理解控制系统的数学结构或物理信号流
- 示例:在 Simscape RC 电路模型中,LLM 直接从保守电气端口(Conserving Port)取电压,而不使用 Voltage Sensor,导致语法正确但物理语义错误
- 解决方案:引入框图图像作为输入,让 LLM 从已有结构推断拓扑,而非从零生成
2.2 Block 实现错误(Block Implementation Errors)
- 原因:LLM 引用无效的库路径、错误配置端口号、混淆 Block 名称
- 常见错误:
- Block 路径错误(如
simulink/Sources/Constant写错) - 端口号不匹配(port mismatch)
- 连接重复(duplicated connections)
- Block 路径错误(如
- 解决方案:构建 Block 描述数据库,为 LLM 提供精确的结构化元数据
2.3 连接实现错误(Linkage Implementation Errors)
- 原因:LLM 生成不符合 Simulink 规范的连线配置
- 常见错误:
- 连接不兼容的端口类型
- 遗漏必要的中间 Block
- 端口标签错误
- 解决方案:设计 Unit Test Reviewer + Debug Locator 模块,系统性评估连接合法性
2.4 上下文窗口瓶颈(Context Window Bottleneck)
- 原因:单一 LLM 管理整个 Simulink 自动化流程(Block 识别、连接验证、代码生成、调试)时,随对话轮次增加,上下文焦点退化,出现过度自信、忽视错误的现象
- 解决方案:采用多 Agent 框架,每个 Agent 专注于特定子任务,避免上下文污染
3. 总体架构
SimuGen 采用 多智能体协作架构,包含 6 个专业化 Agent 和 1 个领域知识数据库。
┌─────────────────────────────────────┐
│ SimuGen 框架 │
│ │
Simulink │ ┌───────────┐ ┌──────────────┐ │
框图图像 ───────► │ │Investigator│◄──►│Unit Test │ │
+ │ │ 调查员 │ │ Reviewer │ │
仿真描述 │ └─────┬─────┘ │ 单元测试审核 │ │
│ │ └──────────────┘ │
│ ▼ │
│ ┌───────────┐ ┌──────────────┐ │
│ │Block │◄──►│ Executor │ │
│ │ Builder │ │ 执行器 │ │
│ │ 代码构建 │ └──────┬───────┘ │
│ └───────────┘ │ │
│ ▼ │
│ ┌───────────┐ ┌──────────────┐ │
│ │Report │ │Debug Locator │ │
│ │ Writer │◄───│ 调试定位器 │ │
│ │ 报告生成 │ └──────────────┘ │
│ └───────────┘ │
│ │
│ ┌─────────────────────────────┐ │
│ │ Simulink Block Database │ │
│ │ (50 个 Block 的领域知识) │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────────┘
架构特点:
- 模块化(Modular):每个 Agent 职责单一,降低单 LLM 的认知负担
- 可解释(Interpretable):中间结果(连接描述、单元测试报告)可人工审查
- 可扩展(Extensible):数据库可持续更新,Agent 可独立替换或升级
4. 数据库构建
4.1 数据库内容
SimuGen 构建了一个 Simulink Block 专属知识库,覆盖 50 种常用 Block,包含三类信息:
| 信息类型 | 内容描述 |
|---|---|
| Full Block Description(完整 Block 描述) | Block 类型、库路径、底层原理、连接相关参数规格、端口名称及描述 |
| Function Description(函数描述) | add_block、add_line、set_param 等 matlab.engine API 的使用说明 |
| Code Template(代码模板) | 标准化的 Python/matlab.engine 代码框架 |
4.2 数据库在 RAG 流程中的作用
- Investigator Agent 通过 RAG(检索增强生成)查询数据库,获取与框图相关 Block 的完整描述
- Block Builder Agent 使用代码模板和函数描述生成精确的仿真代码
- Unit Test Reviewer 依据 Block 描述验证连接的规范合法性
5. 智能体设计
5.1 Investigator(调查员)
职责:识别框图中的 Block,通过 RAG 检索描述,提取 Block 连接关系
输入:
- Simulink 框图图像
- 仿真文字描述
- 包含 50 种 Block 类型的库列表
两阶段执行:
Round 1 - Block 识别:
- 识别框图中的每个 Block 及其对应的 Block 类型
- 以 JSON 格式请求数据库返回相关 Block 的描述
{
"request_blocks": ["block type 1", "block type 2", ...]
}
Round 2 - 连接描述:
- 基于 Block 描述,分析端口标签并映射到真实端口名
- 以标准格式输出连接关系:
BlockA (BlockA's block type) PortX <-> BlockB (BlockB's block type) PortY
关键约束:
- 同一 Input Port 不能被连接超过一次(Electrical Reference 和 Solver Configuration 除外)
- 连接方向:
<->左侧为输出端口,右侧为输入端口 - Block 名称中不得包含
/符号
5.2 Unit Test Reviewer(单元测试审核器)
职责:验证 Investigator 输出的连接描述是否符合 Simulink 建模规范
8 项检查内容:
| 序号 | 检查项目 | 说明 |
|---|---|---|
| 1 | Block 列表存在性 | 验证识别的 Block 是否已列出 |
| 2 | 多余 Block 检测 | 检查连接描述中是否出现未列出的 Block |
| 3 | Block 名称格式 | Block 名称中不得包含 / |
| 4 | 连接描述格式 | 严格校验 BlockA (type) PortX <-> BlockB (type) PortY 格式 |
| 5 | 参数设置验证 | 检查端口相关参数是否与规格匹配 |
| 6 | 重复连接检测 | 同一 Input Port 不可被连接两次 |
| 7 | Block 连接类型验证 | 纯输出 Block 不可接收输入;纯输入 Block 不可发出输出 |
| 8 | 完整端口验证 | 每个 Block 的输入/输出端口均需有连接 |
输出格式:
{
"Investigator_unit_test_pass": true // 或 false(附错误详情)
}
工作机制:
- 若检查不通过,反馈错误信息给 Investigator,触发修正
- 本质上是"标准合规性审核",而非直接判断连接正确性
5.3 Block Builder(代码构建器)
职责:将 Investigator 输出的连接描述转化为可执行的 Python/matlab.engine 代码
使用资源:
- Code Template(代码模板)
- Function Description(API 函数说明)
- Full Block Description(Block 详细描述)
- Investigator 输出的连接描述
代码生成约束:
- 仅使用
add_block、add_line、set_param三个函数 set_param仅用于影响端口数量/连接的参数设置,不设置其他参数- 使用精确的端口名称(而非端口标签)
- 严格按照 Block 描述中指定的库路径
代码示例结构:
import matlab.engine
eng = matlab.engine.start_matlab()
model = 'model_name'
eng.new_system(model, 'Model')
eng.open_system(model)
# 添加 Block
eng.add_block('library_path/BlockType', f'{model}/BlockName')
# 建立连接
eng.add_line(model, 'BlockA/PortX', 'BlockB/PortY', 'autorouting', 'on')
eng.save_system(model)
5.4 Executor(执行器)
职责:自动执行 Block Builder 生成的代码并返回执行结果
- 自动化组件,无 LLM 参与
- 捕获运行时错误信息,传递给 Debug Locator
5.5 Debug Locator(调试定位器)
职责:分析错误信息,定位错误根因,提供有针对性的修复反馈
调试逻辑(两阶段判断):
Executor 返回错误
│
▼
检查代码连线/参数配置是否
与 Investigator 连接描述一致?
│
┌───┴───┐
一致 不一致
│ │
▼ ▼
继续检查 直接反馈给
端口参数 Block Builder
是否正确 修正代码
│
▼
一致 → 问题在连接描述本身
→ 反馈给 Unit Test Reviewer 和 Investigator
重新审查连接描述
设计意图:
- 避免绕过 Investigator 直接修改代码,确保代码与原始框图保持一致
- 提供 5-10 行精准错误定位,降低修复复杂度
5.6 Report Writer(报告生成器)
职责:仿真成功执行后,生成综合性仿真报告
报告结构(4个部分):
- What is the simulation about? — 仿真的整体描述
- What are the main simulation steps? — 主要仿真步骤
- What theoretical knowledge and mathematical modeling are involved? — 涉及的理论知识与数学模型
- How is each step implemented in code? — 各步骤的代码实现细节
6. 完整工作流程
输入: Simulink 框图图像 + 仿真文字描述
│
▼
┌───────────────┐
│ Investigator │ ──── Round 1: 识别 Block,RAG 查询数据库
│ (Round 1&2) │ ──── Round 2: 提取连接描述
└──────┬────────┘
│ 连接描述
▼
┌──────────────────┐
│ Unit Test Reviewer│ ──── 执行 8 项合规检查
└──────┬───────────┘
│ ┌──────────────────┐
├── 不通过 ──────────► Investigator 修正 │
│ └──────────────────┘
│ 通过
▼
┌───────────────┐
│ Block Builder │ ──── 生成 matlab.engine Python 代码
└──────┬────────┘
│ 仿真代码
▼
┌────────────┐
│ Executor │ ──── 执行代码
└──────┬─────┘
│
├── 执行失败 ──► Debug Locator ──► 代码问题 → Block Builder 修正
│ └── 连接问题 → Investigator + Reviewer 修正
│ 执行成功
▼
┌──────────────┐
│ Report Writer │ ──── 生成综合仿真报告
└──────────────┘
│
▼
输出: 可执行 Simulink 仿真代码 + 仿真报告
7. 实验评估
7.1 实验设置
评估数据集:9 个仿真场景,涵盖 4 个工程领域
| 仿真领域 | 仿真示例 | GT Blocks | GT Connections |
|---|---|---|---|
| General Application | Artificial Algebraic Loops | 5 | 5 |
| General Application | State Event | 5 | 6 |
| General Application | Zero Crossing Detection | 9 | 10 |
| General Application | Simulink Model | 11 | 13 |
| Physical Modeling | Bouncing Ball | 7 | 7 |
| Electrical Systems | Bipolar Transistor | 13 | 20 |
| Electrical Systems | RC Circuit | 14 | 16 |
| Electrical Systems | 2 Bus Loadflow | 14 | 13 |
| Automotive Modeling | Wheel Speed | 12 | 11 |
LLM 配置:
- Investigator Agent:GPT-4.1 或 o4-mini(需要视觉推理能力)
- 其余 Agent:o3-mini(推理任务,兼顾性能与成本效率)
7.2 准确率指标
准确率计算公式:
Accuracy = 1 2 ( ∣ B m a t c h ∣ ∣ B G T ∣ + ∣ C m a t c h ∣ ∣ C G T ∣ ) \text{Accuracy} = \frac{1}{2} \left( \frac{|B_{match}|}{|B_{GT}|} + \frac{|C_{match}|}{|C_{GT}|} \right) Accuracy=21(∣BGT∣∣Bmatch∣+∣CGT∣∣Cmatch∣)
其中:
- B G T B_{GT} BGT:Ground Truth 模型中的 Block 集合
- B m a t c h = B G T ∩ B g e n B_{match} = B_{GT} \cap B_{gen} Bmatch=BGT∩Bgen:正确预测的 Block 集合
- C G T C_{GT} CGT:Ground Truth 模型中的连接集合
- C m a t c h = C G T ∩ C g e n C_{match} = C_{GT} \cap C_{gen} Cmatch=CGT∩Cgen:正确预测的连接集合
7.3 主要实验结果
| 仿真场景 | o4-mini 准确率(%) | GPT-4.1 准确率(%) |
|---|---|---|
| Artificial Algebraic Loops | 100 | 100 |
| State Event | 73.3 | 68.55 |
| Zero Crossing Detection | 95.5 | 72.25 |
| Simulink Model | 100 | 87.75 |
| Bouncing Ball | 100 | 100 |
| Bipolar Transistor | 95 | 77.5 |
| RC Circuit | 95.3 | 71.88 |
| 2 Bus Loadflow | 100 | 88.7 |
| Wheel Speed | 91.25 | 82.15 |
| 平均 | 94.5 | 83.2 |
关键发现:
- o4-mini 作为 Investigator 时平均准确率 94.5%,显著优于 GPT-4.1(83.2%)
- 原因:o4-mini 具备视觉链式推理(vision-integrated chain-of-thought),能根据 Unit Test Reviewer 的反馈精确缩放框图区域重新识别
- 准确率与模型复杂度(连接数)成反比,连接数 < 10 的模型普遍接近 100%
- State Event 场景准确率偏低,可能因两款模型在预训练时接触事件驱动 Simulink 块图像较少
7.4 成本与运行时间
| 仿真场景 | 成本($) | 运行时间(s) |
|---|---|---|
| Artificial Algebraic Loops | 0.06 | 121.91 |
| State Event | 0.05 | 105.99 |
| Zero Crossing Detection | 0.09 | 169.57 |
| Simulink Model | 0.13 | 232.35 |
| Bouncing Ball | 0.22 | 297.34 |
| Bipolar Transistor | 0.41 | 642.44 |
| RC Circuit | 0.16 | 358.27 |
| 2 Bus Loadflow | 0.14 | 221.89 |
| Wheel Speed | 0.21 | 325.95 |
| 均值 | $0.17 | 275.41s |
典型仿真任务平均花费约 $0.17,耗时约 4.6 分钟。
8. 消融实验
8.1 实验设计
验证三种变体系统的性能:
- SimuGen:完整系统
- w/o Unit Test Reviewer:移除单元测试审核器
- w/o Debug Locator:移除调试定位器(代码仅执行一次,报错即失败)
- w/o All:同时移除两个组件
8.2 消融结果
| 仿真场景 | SimuGen | w/o Reviewer | w/o Debug | w/o All |
|---|---|---|---|---|
| Artificial Algebraic Loops | 100 | 100 | 100 | 100 |
| State Event | 73.3 | 73.3 | 73.3 | 73.3 |
| Zero Crossing Detection | 95.5 | 95.5 | 95.5 | 95.5 |
| Simulink Model | 100 | 100 | 100 | 100 |
| Bouncing Ball | 100 | 92.8 | 100 | — |
| Bipolar Transistor | 95 | 61.65 | — | — |
| RC Circuit | 95.3 | 95.3 | 95.3 | — |
| 2 Bus Loadflow | 100 | 96.15 | 100 | 96.15 |
| Wheel Speed | 91.25 | 91.25 | 91.25 | — |
| 平均 | 94.5 | 86.21 | 83.9 | 51.7 |
(— 表示任务失败,无法完成)
8.3 关键结论
-
协同效应:同时移除两个组件后,平均准确率从 94.5% 骤降至 51.7%,说明两者的联合贡献大于各自独立贡献之和
-
Unit Test Reviewer 的价值:
- 在 Bipolar Transistor 场景中,有 Reviewer 比无 Reviewer 准确率高出 33.35%
- 虽然 Reviewer 无法直接判断连接是否"正确",但能验证连接的逻辑合理性,促使 Investigator 重新检查
-
Debug Locator 的补充作用:
- 多数任务在无 Debug Locator 时仍可完成(连接逻辑正确时代码生成较易)
- 但在 Bipolar Transistor 场景中,Unit Test Agent 遗漏的问题由 Debug Locator 在运行时捕获并修复,缺失时任务失败
9. 关键提示词设计
9.1 Investigator Prompt(Round 1)核心设计
# ROLE #
You are an Investigator responsible for deeply analyzing a simulation
explanation, its corresponding simulation diagram, and a simulation blocks list.
# TASK #
- List all blocks used, matching them to block types in the library
- NEVER include '/' in block names
- If multiple instances of the same block exist, annotate them (e.g., sum 1, sum 2)
- Output request_blocks in JSON format for database retrieval
9.2 Investigator Prompt(Round 2)核心设计
# TASK #
- Describe connections using STRICT format:
BlockA (type) PortX <-> BlockB (type) PortY
# RULES #
- Left of '<->' is OUTPUT port, right is INPUT port — NEVER flip
- Same Input Port MUST NOT be connected more than once
(Exception: Electrical Reference, Solver Configuration)
- Parameters affecting port count MUST be declared in parentheses
9.3 Unit Test Reviewer Prompt 核心设计
8 项检查 + 结果以 JSON 输出:
{ "Investigator_unit_test_pass": true }
9.4 Block Builder Prompt 核心设计
# TASK #
Generate complete matlab.engine Python code
- Use ONLY: add_block, add_line, set_param (port-related only)
- Use EXACT port names from Block Description (NOT visual labels)
- Output COMPLETE code with NO ellipsis or placeholders
9.5 Debug Locator Prompt 核心设计
# TASK #
1. Locate 5-10 lines most likely causing the error
2. Check if code matches Investigator's connection description
- If MATCH: issue is in connection description → notify Investigator + Reviewer
- If MISMATCH: issue is in code → provide fix to Block Builder
10. 技术总结与创新点
10.1 三大核心创新
| 创新点 | 描述 |
|---|---|
| 多模态 LLM Agent | 首个将 LLM Agent 与 Simulink 框图图像理解相结合的框架,通过视觉 + 语言推理生成精确仿真代码 |
| 标准合规性审核器 | 设计了专用 Unit Test Reviewer,不依赖代码执行,通过 8 项自然语言级检查验证连接规范性,间接提升生成准确率 |
| 分级调试机制 | Debug Locator 实现错误根因分级(代码错误 vs 连接描述错误),避免绕过结构层修改代码 |
10.2 技术路线对比
| 方法 | SimuGen | 单一 LLM | Fine-tuning |
|---|---|---|---|
| 数据需求 | 无需训练数据 | 无需 | 需大量标注数据 |
| 可解释性 | 高(中间步骤可审查) | 低 | 中 |
| 扩展性 | 高(模块化设计) | 低 | 中 |
| 复杂模型能力 | 强(94.5%) | 弱 | 有限 |
| 成本 | $0.17/任务均值 | 低 | 高(训练成本) |
10.3 局限性与未来方向
当前局限:
- 仅覆盖 50 种常用 Block,数据库需进一步扩展
- State Event 等事件驱动场景准确率仍有提升空间
- Unit Test Reviewer 无法直接判断连接正确性,只能验证合规性
未来方向:
- 扩展 Block 数据库覆盖范围
- 引入更强的视觉推理模型提升框图识别精度
- 探索对仿真结果的功能正确性验证
文档生成时间:2026-04-01
论文原文:https://arxiv.org/abs/2506.15695
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)