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. 背景与动机
  2. 核心挑战
  3. 总体架构
  4. 数据库构建
  5. 智能体设计
  6. 完整工作流程
  7. 实验评估
  8. 消融实验
  9. 关键提示词设计
  10. 技术总结与创新点

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 描述数据库,为 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_blockadd_lineset_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 识别

  1. 识别框图中的每个 Block 及其对应的 Block 类型
  2. 以 JSON 格式请求数据库返回相关 Block 的描述
{
  "request_blocks": ["block type 1", "block type 2", ...]
}

Round 2 - 连接描述

  1. 基于 Block 描述,分析端口标签并映射到真实端口名
  2. 以标准格式输出连接关系:
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_blockadd_lineset_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个部分)

  1. What is the simulation about? — 仿真的整体描述
  2. What are the main simulation steps? — 主要仿真步骤
  3. What theoretical knowledge and mathematical modeling are involved? — 涉及的理论知识与数学模型
  4. 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(BGTBmatch+CGTCmatch)

其中:

  • 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=BGTBgen:正确预测的 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=CGTCgen:正确预测的连接集合

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 实验设计

验证三种变体系统的性能:

  1. SimuGen:完整系统
  2. w/o Unit Test Reviewer:移除单元测试审核器
  3. w/o Debug Locator:移除调试定位器(代码仅执行一次,报错即失败)
  4. 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 关键结论

  1. 协同效应:同时移除两个组件后,平均准确率从 94.5% 骤降至 51.7%,说明两者的联合贡献大于各自独立贡献之和

  2. Unit Test Reviewer 的价值

    • 在 Bipolar Transistor 场景中,有 Reviewer 比无 Reviewer 准确率高出 33.35%
    • 虽然 Reviewer 无法直接判断连接是否"正确",但能验证连接的逻辑合理性,促使 Investigator 重新检查
  3. 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

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐