让 AI 真正看懂设计图:M2-CODER 如何像人类程序员一样写代码
“
“如果 AI 只能读文字,却看不懂 UML 图和流程图,它就永远只算半个程序员。”
—— M2-CODER 论文作者
一、为什么“看图写代码”这么难?
今天的程序员已经习惯用 UML 类图 和 流程图 把需求讲清楚,再动手写代码。
但绝大多数大模型(LLM)仍停留在“纯文本”阶段:你给它一段文字描述,它返回一段代码。一旦需求里出现一张图,它就抓瞎。
M2-CODER 的出现,正是为了补上这块拼图。
二、M2-CODER 是什么?
一句话总结:
M2-CODER 是一个能同时阅读文字和 UML/流程图的多语言、多模态代码生成模型。
2.1 三大核心组件
三、M2C-INSTRUCT:让模型见过 1310 万张图
3.1 数据来源
-
阶段 1(1290 万条):GitHub 代码 → 渲染成高亮图片 + 保留原始文本 -
阶段 2(16.8 万条):精选高质量问题 → 人工画 UML/流程图 → 再写代码
3.2 一张图是怎么诞生的?(三步流水线)
-
原型问题
用 LLM 写 Python 题、解、单元测试,人工多轮校对。 -
画图
用 LLM 把解法转成 PlantUML / Mermaid,再人工精修:-
删掉文字里与图重复的信息 -
把关键细节只留在图里
-
-
多语言翻译
9 位志愿者 + LLM 辅助,把题、解、测试全翻译成 C#、Java、Kotlin… 一共 10 种语言。
3.3 语言分布
四、M2EVAL:首个“看图写代码”公开评测
4.1 任务定义
输入:
-
一段文字需求 -
一张 UML 或流程图
输出:
-
可编译、可运行、通过全部单元测试的代码
4.2 300 道题长什么样?
每道题都有 10 种语言版本,共 3000 份代码待生成。
五、实验结果:7 B 模型打平 70 B
5.1 平均成绩(Pass@1)
“
7 B 的 M2-CODER 在 10 门语言上平均成绩超过同量级模型 2 倍以上,逼近百亿参数大模型。
5.2 语言差异
-
脚本语言更友好:Python、JavaScript、PHP 平均分 > 30 % -
静态类型语言更难:C#、Scala、Swift 平均分 < 20 % -
根本原因:强类型语言对变量命名、可见性要求更严格,模型容易漏看细节。
六、手把手:如何复现 M2-CODER
6.1 环境准备
# 1. 硬件:8×A800 80 G(或同等显存)
# 2. 镜像:官方 Dockerfile 已开源
docker build -t m2-coder .
docker run --gpus all -it m2-coder
6.2 数据下载
# 阶段 1 完整数据(可选轻量版 4.25 M 条)
git clone https://github.com/MCEVAL/MMCoder
cd MMCoder/data
# 解压后约 1 TB,轻量版约 200 GB
6.3 训练命令(两阶段)
# 阶段 1:全参数微调,3 天
llamafactory-cli train \
--model_name_or_path Qwen2-VL-7B-base \
--dataset m2c_stage1 \
--output_dir checkpoints/stage1 \
--per_device_train_batch_size 128 \
--learning_rate 5e-5 \
--num_train_epochs 1
# 阶段 2:只训 LLM,2 天
llamafactory-cli train \
--model_name_or_path checkpoints/stage1 \
--dataset m2c_stage2 \
--output_dir checkpoints/stage2 \
--freeze_vision_tower true \
--num_train_epochs 2
6.4 本地评测
# 运行 M2EVAL 基准
python evaluate.py \
--model checkpoints/stage2 \
--benchmark m2eval \
--languages python java cpp csharp
七、常见疑问 FAQ
Q1:没有图也能做题吗?
A:不能。M2EVAL 故意把关键信息只放在图里,纯文本无法拿到满分。实验里 DeepSeek-V3、Qwen2.5-Coder 去掉图后得分为 0。
Q2:7 B 模型会不会太小?
A:在“看图写代码”任务上,数据质量比参数量更重要。1310 万条图文对齐的数据让 7 B 也能打出 25 % 的成绩,同量级模型只有 10 % 左右。
Q3:商用授权怎么算?
A:M2C-INSTRUCT 数据来自 GitHub 公开仓库,已按 StarCoder 协议过滤;评测基准 M2EVAL 采用 CC-BY-4.0;模型权重遵循 Qwen2-VL 原许可,可商用但需保留版权声明。
八、局限与下一步
九、结语:把“半个程序员”变成“完整程序员”
M2-CODER 第一次让大模型像人一样,把 UML 图和流程图当作“一等公民”。
如果你厌倦了在提示词里反复用文字描述“那个箭头是什么意思”,不妨让 M2-CODER 直接看图说话。
项目地址:
-
代码与权重:https://github.com/MCEVAL/MMCoder -
数据集:https://huggingface.co/datasets/MCEVAL/M2C-INSTRUCT -
评测基准:https://huggingface.co/datasets/MCEVAL/M2EVAL
“
把图扔给 AI,剩下的让它来。