---
name: mqc-legal-relation-master
description: 法律关系图大师。把一批案件材料推成一张法律关系图：谁与谁、就哪份合同或哪段工程、发生了什么关系。主体与客体并存，使用者指定的要害以深红标出。布局与走线由索引表查出、判据回读产物验过，出 SVG / PNG / PPTX / VSDX / drawio 五种可继续编辑的源文件，三种风格（奇川风 / 白描 / 歸藏风）每次只出所选的一种。适用于诉前梳理、起诉与答辩的事实部分、庭前准备与向当事人汇报。
tags: [法律, 诉讼可视化, 律师, 法律关系, 制图, 庭前三大法宝]
metadata:
  version: 1.0.0
---

# 法律关系图大师

庭前三大法宝之一。前两件是大事记表大师（时间线）与庭审对抗图大师
（争点攻防），这一件回答的是**结构**：谁与谁、就哪份合同或哪段工程、
发生了什么法律关系。

## 一、这张图画什么

**主体与客体并存。**只画当事人是不完整的——法律关系要靠客体串起来：
「总承包人与发包人**就哪一份合同**」「那份合同**指向哪一段工程**」。
缺了合同与工程，那些线只能标在两个当事人之间，依据与指向全丢了。

```
主体　当事人：原告、被告、第三人、担保人、案外人……
客体　合同、工程、标的物、款项……
```

两者同为模块，靠底色深浅区分，形状一律圆角（奇川风不许直角边）。

## 二、怎么跑

```
数主体数、算最大度、认结构
  ↓
查索引表拿到全部决定（能不能画、用哪档模块、候选网格、各项参数）
  ↓
布局 → 端口规划 → 走线 → 标签
  ↓
渲染 → 判据回读产物 → 不过就换候选
  ↓
所选的一种风格 × 五格式 → 导出物回读
```

**运行时不做推导。**索引是离线跑出来的，运行时只查不算。
1 到 6 个主体查到的是**结果**（143 张图全部穷举过），直接取布局，
0.1 到 0.2 秒出图；7 到 9 查度序列特征组；10 到 16 查结构分档。

### 模型要做的只有三步

```
1　读材料，写 relations.json            格式见 references/relations-guide.md
2　python scripts/make.py relations.json --plan-only      规模判断，一秒内返回
3　两轮提问（见下）拿到 choice.json，然后
   python scripts/make.py relations.json --out 目录 --choice choice.json
```

第 3 步一条命令做完：布局、渲染、所选风格、五种格式、路线判据、
导出物判据、出处索引、交付说明。**不要读 scripts 里的源码，不要另写生成脚本。**
第一次运行前可以跑一次 `make.py --check` 查环境（PNG 渲染器等）。

布局是唯一耗时的环节，结果缓存在输出目录的 layout.json。主体与关系不变时，
改标题、改备注、换风格、导出失败后重来，都直接复用、不再重跑布局。
只有改了主体或关系才会重新布局。

references 目录里除 relations-guide.md 之外都是研发记录，出图时不需要读。

## 二之〇、模块不超过 9 个

**写 relations.json 时就只取要紧的，模块尽量不超过 9 个。**
超过 9 个，布局难度与耗时成倍上升：15 个模块在 Windows 上实测半小时以上，
线也明显更乱。同一个股权案，15 个模块时交叉 14 处；精简到 9 个模块、
12 条关系，6 秒出图、交叉 0 处。关系条数的影响同样大：同样 9 个模块，
17 条关系要 31 秒、交叉 12 处，所以关系也只取要紧的。

万一整理出来超过上限，`make.py` 会停下（退出码 4），先走第〇轮：

```
python scripts/ask.py trim relations.json                               打印问题，照抄给使用者
python scripts/ask.py trim relations.json --keep 编号 --out r9.json       定模块（超过 9 个时）
python scripts/ask.py trim r9.json --keep-edges 编号 --out r9.json        定关系（超过 12 条时）
```

先定模块，再定关系，每一步都只在超限时才问。

模块清单：★ 标出建议保留的，先保当事人，再从相连的里面按关系多少补齐，
保证留下的图连通。关系清单：★ 先保每个模块至少挂一条，其余按
relations.json 里的先后补满（所以关系要按重要性从高到低写）。

同一方向、同一对模块之间的多条关系先自动合并成一条，关系名用「；」
连起来、一个字不删，合并后常常就不超限了。

使用者报编号；**不回答就按 ★**；回答「全部」则不删，照出但会很慢。
留下的某个模块若一条关系都没有，脚本直接报错，不出孤立的模块。
没留下的模块与关系写进出处索引的「未入图」一节，不会凭空消失。

## 二之一、交互：第〇轮（仅超限时）加两轮

**先问，再出图。风格没定之前不渲染任何一种。**不问就动手，
模型会把三种风格全出一遍，额度直接翻三倍，这是实测出来的问题。

问题的措辞由脚本打印，照抄给使用者，不要自己改写：

```
python scripts/ask.py round1                      第一轮
python scripts/ask.py round2 relations.json       第二轮
python scripts/ask.py resolve relations.json --style 编号 --mark 编号
```

**第一轮：交付给谁。**交付对象与风格放在同一个问题里，报一个编号：

```
1　法官（开庭、提交法院、打印）→ 白描
2　当事人与客户（当面讲、微信发）→ 奇川风
3　同行、讲课、公众号（线上展示）→ 歸藏风
4　让我定（按奇川风出，接着问重点）
```

不回答就按奇川风。**每次只出所选的一种风格**，
使用者没有另外开口要，就不出另外两种。

**第二轮：强调标在哪里。选奇川风时才问。**
主体、客体、关系一起编号列出，使用者报至多两个编号，0 为不标。
不回答就一处都不标。本 skill 把强调的选择放在奇川风里：选白描或歸藏风时
不设第二轮，按选入制视同使用者未指定，图上不标强调。

`resolve` 会把回答变成确定的选择，越界一律报错、不猜：
多选风格、白描或歸藏风却带了强调、强调超过两处、编号不在清单里。
出口处还有一道：`export_all` 收到白描或歸藏风的 SVG 却带着强调标记
或深红，直接拒绝导出。

其余的一律不问：模块大小、网格、走线、分页，那些是算出来的。

## 二之二、照录原文，不替当事人改写

这是 V1 定下的铁则，三大法宝一体适用：**主体名与关系名照录源文件**，
只准断行与调整视觉层次，不准改写、缩写、归纳。
「北京某某科技发展有限公司」不能自作主张写成「某某公司」——
当事人的准确名称本身就是法律事实的一部分。

放不下就换行、就加大模块，不靠删字解决。实在放不下的，
写进 provenance 交由人工在渲染前确认，不要静默截断。

**强调是选入制，这是 V1 定下的规矩。**要害由使用者指定，全图至多两处，
节点与关系都算；使用者跳过、说「直接出图」或没回答，这张图就**一处都不标**，
不得由模型自行挑一个来填空。强调在奇川风里是深红实底；本 skill 只在奇川风里
提供指定强调的机会，选白描或歸藏风即视同未指定。

## 三、画不出来的情形要先说

拿到案件先算最大度。**关系最多的那个主体超过 12 条就画不出来**——
单个模块的端口容量是 12（高档模块）或 10（矮档）。这时应当告诉使用者
需要拆图或把几条关系合并表述，而不是硬画一张读不懂的。

超过 16 个主体同理：超出已验证范围，建议按争点拆成两张。

## 四、判据必须回读产物

索引只保证交叉与拐弯的指标，**不保证不穿主体、不贴边、箭头到位**——
那些必须读最终 SVG 的坐标才知道。十三条判据（`scripts/route_guard.py`）
在出图之后跑一遍，不过就换下一个候选网格。

判据本身也踩过坑，记在 `references/INDEX-README.md`：
判据说「有问题」的时候，先确认它查的是不是该查的东西。

## 五、三风格

| 风格 | 用途 | 要点 |
|---|---|---|
| 奇川风 | 彩色母版 | 深红实底标要害，全图至多两处 |
| 白描 | 法庭与打印 | 黑线白底；不提供强调选项，按选入制不标 |
| 歸藏风 | 线上与讲课 | 浅灰点阵底、无衬线、大字轻标题；不提供强调选项，按选入制不标 |

后两种是对奇川风产物的确定性变换，**位置、尺寸、走线一字不差**。
详见 `references/label-spec.md`。

## 六、五种格式

```
svg     母版，可继续编辑
png     交付与插图，规范指定用 Noto Serif CJK SC 栅格化
pptx    每个元素都是原生形状，不是图片，颜色大小位置文字都能改
vsdx    ProcessOn / Visio / WPS 导入编辑
drawio  可在 draw.io 里继续编辑，走线逐点照搬 SVG，配色跟随所选风格
```

一次出齐用 `exports.export_all(svg, base, style=所选风格)`；要看导出物判据明细，加 `return_guard=True`。

PPT 的字体档默认 `safe`（宋体 / 微软雅黑 / Consolas），
交付给律师的文件要在他自己的机器上直接能开。

**导出物也要回读。**三种可编辑格式都从同一份最终 SVG 取几何，
导出后由 `scripts/export_guard.py` 逐个拆开读回、与 SVG 对照：
条数一致（E1）、横平竖直（E2）、拐点逐点对上（E3）、
虚实与箭头一致（E4）、主体块位置尺寸一致（E5）、文字齐全（E6）。

**交付规则**：pptx 与 vsdx 两者都过判据才交；任一未过，
两者一起撤下，只交 svg、png、drawio，并在交付说明里写明未交付的原因。
drawio 未过同样撤下。不拿一份歪线的文件糊弄过去。

改动之后跑三套自检，全过才算没改坏：

```
python tests/export_checks.py      导出物判据、改坏验证、交互边界
python tests/make_checks.py        一条命令出图、缓存、拒绝错误输入、长名称、第〇轮
python tests/layout_regression.py  17 个 6 到 9 主体的案例，与改动前的原版逐例比，不许有一例更差
```

踩过的坑：本 skill 的 SVG 拐角是圆弧（A 命令）、虚线属性用单引号，
而 V1 的解析器只认 M / L / Q 与双引号，直接交过去会让每个拐角
歪成斜线、虚线全成实线。所以交给 V1 之前先经 `svg_geom.normalize` 规整，
V1 本身不动。

## 六之二、交付说明

每次交付都按同一格式写明，由 `scripts/delivery.py` 生成：

```
交付：svg、png、pptx、vsdx、drawio
风格：奇川风
强调：无（使用者未指定）
规模：9 个主体 11 条关系
判据：全部通过
```

四行按重要性排，不写寒暄、不写过程。**强调那一行不能省**——
使用者没指定要害时要明说「无」，这是红色选入制的落实处：
写了「无」，就等于承认这张图一处红都没有，而不是悄悄挑了一个。

## 七、参考

```
references/relations-guide.md  relations.json 的写法（出图时唯一需要读的参考）
references/INDEX-README.md   索引的分段、归并依据与踩过的坑
references/label-spec.md     标注机制：字号、字体、标题、标签、强调
references/scale-table.md    5 到 16 主体、四种结构的基准实测
references/route-plan.md     生成路径的成本结构与参数依据
references/layout-study.md   布局目标函数的研究（含若干负面结论）
references/feasibility.md    索引能做到什么程度的数学边界
```

负面结论也写进去了，省得以后重走：布局目标函数对交叉的相关系数只有
+0.36、格位上预估交叉与实际负相关、双核的平面画法在端口约束下不成立。
