---
title: Jianghu108
canonical_url: "https://www.modelscope.cn/datasets/suxinchun/Jianghu108"
md_url: "https://www.modelscope.cn/datasets/suxinchun/Jianghu108.md"
repository: suxinchun/Jianghu108
chinese_name: "江湖108"
last_updated: 2026-09-22
license: "Apache License 2.0"
storage_size: "6.4 MB"
downloads: 4313
stars: 0
---

# Jianghu108

> Jianghu108 - suxinchun 在 ModelScope 开源的数据集。一个中国象棋江湖残局数据集

suxinchun/Jianghu108 是 ModelScope 魔搭社区上的数据集，存储大小 6.4 MB，采用 Apache License 2.0 许可。

- **Repository**: suxinchun/Jianghu108
- **License**: Apache License 2.0
- **Storage size**: 6.4 MB
- **Downloads**: 4313
- **Stars**: 0
- **Last updated**: 2026-09-22

Source: https://www.modelscope.cn/datasets/suxinchun/Jianghu108

---

**更新时间：2026-09-21**

本测试集江湖108（Jianghu108）为是一套是一套单选题形式表述的中国象棋江湖残局测试集，有包含图片和不包含图片的两种版本，方便衡量多模态与纯文本两类大模型的空间推理能力。这些题目全部为江湖残局，部分是古已有之，部分为现代新创。该集中的每道题目均包含以下字段：题目名称、来源（全部是B站up主从宽象棋2023的讲解链接，版权归原作者所有，本测试集不涉及视频内容，图片为自行渲染）、题目要求（红先胜/红先和）、红方坐标、黑方坐标（所有坐标均以汉字棋子名称-字母-数字表示）、ABCDE五个选项（其中第五个保证为"以上选项均不对"）、正确答案的序号。

---

## 一、前言：中国象棋江湖残局之所以适合用于大模型评测的几个原因

1. **规则清晰。** 中国象棋的规则人人都知道，就那么几条，没有别的了。有一些江湖残局确实是涉及规则争议（尤其是亚洲规则和中国规则对于一将一杀等要求不同的争议）的题，但本集也都排除这些题目，保证收录来的都是主变不涉及规则争议的，所以没有在规则上耍赖的空间。当然双方也可以故意去不正常走，能杀不杀，故意去长捉，这不在考虑范围内，我们已经要求了双方都是最优着法。
2. **有图片，且图片可以被文字完全精确描述。** 一个局面既可以用棋盘图表示，也可以用"棋子 + 坐标"的文字无损写出来，便于纯文本和多模态模型都能用同一套题。prompt也不涉及有无图片
3. **江湖残局总是有诱惑着法，好像很容易，大模型会像人类一样上钩。** 但其实有解杀还杀的妙手，实际上很难。这是最精妙的。
4. **便于以选择题形式出题。** 要求红先和／红先胜，问第一步走什么，给四个选项。当然也有不适用的，比如红先负之类，或者第一手没有选择、只此一手的将军，不将军就死了的，那就不选入，本测试集中只有合适的，也就是第一手有多种选择的。
比如id为23的这道《连火阵》，看起来是经典的弃掉双車好下炮，把H线两条車弃掉，炮下去一将就赢了，多么有胆量，多么像是正解，但是红車H3 D3+，黑方用卒吃，卒C3 x D3，红方再弃，車H4 D4+，黑方用马踩，马E2 x D4，这样就露出了黑炮。红方再走炮H2 H8+，黑方正好E1 E8+解将还杀直接杀死红方。正解第一手是一步软手，兵E9 D9，随后双方纠缠，最终和棋，非常难想到

![连火阵](boards/board_023.png)
<br>
<br>

5. **棋局的描述非常相似，即使泄露过也记不住。** 何况很少有中国象棋残局的标准文字表述，几乎全是视频；只要不告诉模型残局的名字，它是绝对无法找到这道题的。
6. **只要会下象棋，人人都能看懂。** 不是那种故意钻牛角尖的题目。大家都可以看到很多那种题目。
7. **这是全新的内容。** 据笔者所知，此前没有任何人做过中国象棋的江湖残局评测集。

---

## 二、本测试集的内容与格式

### 2.1 文件清单

| 文件 / 目录 | 说明 |
| --- | --- |
| `江湖残局.json` | 数据集本体，108 题 |
| `boards/board_001.png` … `board_108.png` | 每题一张棋盘图，尺寸 **792×870** |
| `images/` | 统计图与词云图 |
| `各题明细.md` | 全部 108 题的题面、棋盘图、四个选项与正解明细表 |
| `test_deepseek_xiangqi.py` | 评测脚本 |
| `检查笔误.mjs` | 数据校验脚本（`node 检查笔误.mjs`） |

### 2.2 题面模板

108 题的 `header` 字段都是相同的，内容如下：

```
这是一局中国象棋高难度的江湖残局，规则采用亚洲棋规，禁止长将长捉，其他不限，本局没有规则争议，也就是正解不依靠一将一杀等规则争议取得。此外也不考虑双方各60步内均不吃子则和棋的规则。红先。标准的10行9列棋盘，黑上红下，以红方视角的左侧和红方视角的底线交叉点为棋盘左下点，即原点，从原点出发从左到右的列记为A-I列共9列，从下到上的行记为1-10行共10行。双方的棋子和走法均在该坐标系下表示。棋子走法记录为棋子、原位置、目标位置，标“+”表示走子后产生将军，标“x”表示吃目标位置上的子，没有标注则代表不吃子且不将军。保证初始局面为合法局面。那么，在当前局面下，本局能成为正解的红方第一步是？请将你的答案选项字母放在<box>与</box>之间，如<box>X</box>。
```

题面里同时声明了两条对评测有影响的规则约定：**禁止长将长捉**（正解不依靠规则争议取得），以及**不考虑"双方各 60 步内均不吃子则判和"的规定**，这个是原视频就不考虑的。题目要求的胜负结论（红先胜／红先和）不写在 `header` 里，而是由每题的 `circumstance` 字段单独给出，拼装题面时插进去（见第四节）。

### 2.3 数据结构

顶层为 `{"problems": [ ... ]}`，每题字段顺序为：

```
id, name, source, header, circumstance, Red, Black, options, correctAnswer
```

| 字段 | 说明 |
| --- | --- |
| `id` | 题号，1–108 |
| `name` | 残局名（如"双蛟翦水""长坂坡""螳臂挡車"）。108 个名字互不重复；**请特别注意评测时不要提供给模型！！！** |
| `source` | 该题的 B 站视频来源链接，同上，不要提供给模型 |
| `header` | 题面，108 题都一样，见 2.2 |
| `circumstance` | 该题的胜负结论，只有两种取值：`在双方最优应对下，本局红方胜`、`在双方最优应对下，本局红方无法取胜，为和棋` 。没有红先负的|
| `Red` / `Black` | 红方、黑方的棋子位置，形如 `車B1 炮B4 炮B7 帥F2 兵F9` |
| `options` | 5 个选项；前 4 个是具体着法（如 `A：炮B7 B10+`），第 5 个固定为 `E：以上选项都不对` |
| `correctAnswer` | 正解选项字母（A~E） |

### 2.4 坐标系与记法

- 棋盘 10 行 9 列，**黑上红下**。
- 以红方视角的左侧与红方视角的底线交叉点为原点：从左到右为 **A–I 列**（9 列），从下到上为 **1–10 行**（10 行）。这样做是为了避免中国象棋传统记录方法红黑镜像对称导致的问题，大模型会花费大量时间去处理这个，因此不用传统记法。
- 红方底线是第 1 行，黑方底线是第 10 行；河界在第 5 行与第 6 行之间，红方半场为 1–5 行，黑方半场为 6–10 行。
- 走法记为"棋子、原位置、目标位置"，如 `炮B7 B10+`。`+` 表示走子后产生将军，`x` 表示吃目标位置上的子；两者都不标，表示既不吃子也不将军。

### 2.5 棋子用字

全库统一（盘面与选项文本一致）：红方 **帥 仕 相 馬 炮 兵 車**，黑方 **将 士 象 馬 砲 卒 車**。也就是"马"双方都写作 `馬`；"炮"红方写 `炮`、黑方写 `砲`；"士/仕""象/相"按红黑分工。

### 2.6 数据校验

每题均由 `检查笔误.mjs` 校验，检查项如下：

- 双方均无重复占位；每方恰好一个帅/将；
- 红方只用红方字形，黑方只用黑方字形（如上"士、象"不得出现在红方）；
- 开局双方都不被将军，且帅将不照面；
- 帅/将、士/仕都在九宫内；象/相只在自己半场的 7 个象位（红 A3 C1 C5 E3 G1 G5 I3；黑 A8 C6 C10 E8 G6 G10 I8）；
- 兵/卒每个都能从开局原位走到（只能向前，过河后才能横走）；
- **四个选项都是当前局面下的合法着法**：符合各子走法（含蹩马腿、塞象眼、炮隔子吃子），走子后不使自己被将军、不走成帅将照面；
- 标 `x` 的落点确实有子且不是将帅；标 `+` 的走法确实将军；落点不得为己方子；
- 各方子力不超上限：车马炮各 ≤2、士象各 ≤2、兵卒各 ≤5、帅将各 1；
- `circumstance` 为两种标准写法之一；记法的空格、`x` 与 `+` 的格式统一；
- 正解选项本身是合法走法。

但这些局面还都是@从宽象棋2023讲的，也许有讲的不对的吧，请批评指正

---

## 三、统计信息

### 3.1 数据一览

| 项目 | 数值 |
| --- | --- |
| 题数 | 108 |
| 判定 | 红先胜 **46**、红先和 **62** |
| 正解选项分布 | A 22、B 22、C 22、D 22、E 20（E 为"以上选项都不对"） |
| 红方子数 | 2–12 枚，均值 6.21 |
| 黑方子数 | 3–16 枚，均值 7.08 |
| 双方合计子数 | 7–23 枚，均值 13.30 |
| 选项性质（432 条） | 吃子 75 条、含将军 268 条 |
| 正解性质（108 条） | 吃子 13 条、含将军 61 条 |
| 名称 | 108 个互不重复；3 字 8 个、4 字 96 个、5 字 3 个、8 字 1 个 |
| 首着 | 四个选项的首着（起点→终点）共 140 种不同，正解 66 种；四个选项的全部着法（棋子+起点→终点）共 307 种不同，正解 77 种 |

### 3.2 正解选项分布

108 题的正解在 A~E 五个选项上的分布；虚线为完全均匀时的 21.6 题。

![正解选项分布](images/08_选项分布柱状图.png)
<br>
<br>
### 3.3 判定分布

108 题的判定构成：红先胜 46 题、红先和 62 题。

![判定分布](images/03_胜负饼图.png)
<br>
<br>
### 3.4 名称

108 个残局名的字数构成：3 字、4 字、5 字、8 字。

![名称字数分布](images/01_名称字数分布饼图.png)
<br>
<br>
108 个完整残局名堆成的词云，每个名称只出现一次，故无大小之分。

![名称词云](images/02_名称词云.png)
<br>
<br>
按字统计的词云，字号表示该字在 108 个残局名中出现的次数。

![字词云](images/02b_字词云.png)
<br>
<br>
### 3.5 子力数量

红方每局棋子枚数的分布（2–12 枚，均值 6.21）。

![红方子数分布](images/04a_子数分布_红方.png)
<br>
<br>
黑方每局棋子枚数的分布（3–16 枚，均值 7.08）。

![黑方子数分布](images/04b_子数分布_黑方.png)
<br>
<br>
红方各子（車馬炮兵仕相）的平均枚数，及它与该子上限之比。

![红方各子枚数与上限之比](images/04c_种类与上限_红方.png)
<br>
<br>
黑方各子（車馬砲卒士象）的平均枚数，及它与该子上限之比。

![黑方各子枚数与上限之比](images/04d_种类与上限_黑方.png)
<br>
<br>
### 3.6 子力位置分布

各图以棋盘为底（与 `boards/` 同款：双线外框、河界、楚河汉界、炮花、外侧 A–I 与 1–10 坐标），圈内数字为该格在所有题目中出现该方棋子的总次数。

全部 108 局双方子力的落点分布，圈内数字为该格累计出现枚数。

![全部子力位置](images/05a_热力_全部子力.png)
<br>
<br>
红方子力的落点分布，圈内数字为该格累计出现枚数。

![红方子力位置](images/05c_热力_红方.png)
<br>
<br>
黑方子力的落点分布，圈内数字为该格累计出现枚数。

![黑方子力位置](images/05d_热力_黑方.png)
<br>
<br>
红方 車 的落点分布，圈内数字为该格累计出现枚数。

![红車位置分布](images/05e_红車.png)
<br>
<br>
红方 馬 的落点分布，圈内数字为该格累计出现枚数。

![红馬位置分布](images/05e_红馬.png)
<br>
<br>
红方 炮 的落点分布，圈内数字为该格累计出现枚数。

![红炮位置分布](images/05e_红炮.png)
<br>
<br>
红方 兵 的落点分布，圈内数字为该格累计出现枚数。

![红兵位置分布](images/05e_红兵.png)
<br>
<br>
红方 仕 的落点分布，圈内数字为该格累计出现枚数。

![红仕位置分布](images/05e_红仕.png)
<br>
<br>
红方 相 的落点分布，圈内数字为该格累计出现枚数。

![红相位置分布](images/05e_红相.png)
<br>
<br>
红方 帥 的落点分布，圈内数字为该格累计出现枚数。

![红帥位置分布](images/05e_红帥.png)
<br>
<br>
黑方 車 的落点分布，圈内数字为该格累计出现枚数。

![黑車位置分布](images/05f_黑車.png)
<br>
<br>
黑方 馬 的落点分布，圈内数字为该格累计出现枚数。

![黑馬位置分布](images/05f_黑馬.png)
<br>
<br>
黑方 砲 的落点分布，圈内数字为该格累计出现枚数。

![黑砲位置分布](images/05f_黑砲.png)
<br>
<br>
黑方 卒 的落点分布，圈内数字为该格累计出现枚数。

![黑卒位置分布](images/05f_黑卒.png)
<br>
<br>
黑方 士 的落点分布，圈内数字为该格累计出现枚数。

![黑士位置分布](images/05f_黑士.png)
<br>
<br>
黑方 象 的落点分布，圈内数字为该格累计出现枚数。

![黑象位置分布](images/05f_黑象.png)
<br>
<br>
黑方 将 的落点分布，圈内数字为该格累计出现枚数。

![黑将位置分布](images/05f_黑将.png)
<br>
<br>
### 3.7 第一着分布

四个选项中按棋子区分的首着，出现最多的前 10 种。

![所有可选第一着](images/06a_可选第一着分布.png)
<br>
<br>
108 条正解的首着，按棋子区分后出现最多的前 10 种。

![正解第一着](images/06b_正解第一着分布.png)
<br>
<br>
### 3.8 走法性质

432 条候选中吃子着法的条数（75 条）。

![选项：吃子与否](images/07a_选项_吃子与否.png)
<br>
<br>
108 条正解中吃子着法的条数（13 条）。

![正解：吃子与否](images/07b_正解_吃子与否.png)
<br>
<br>
432 条候选中走子后产生将军的条数（268 条）。

![选项：将军与否](images/07c_选项_将军与否.png)
<br>
<br>
108 条正解中走子后产生将军的条数（61 条）。

![正解：将军与否](images/07d_正解_将军与否.png)
<br>
<br>
### 3.9 黑方是否已有一步杀

108 局中，黑方在开局已能一步将死红方的题数：53 题有，55 题没有。

![黑方一步杀](images/09_黑方开局一步杀饼图.png)
<br>
<br>
---

## 四、Prompt 构造说明

### 4.1 拼装规则

发给模型的题面由四部分组成：

1. `header` 中到"保证初始局面为合法局面。"为止的部分；
2. 该题 `circumstance` 转成的结论句：胜局为"已知在双方最优应对下，本局红方胜，"，和局为"已知在双方最优应对下，本局红方无法取胜，为和棋，"；
3. `header` 的问句部分："那么，在当前局面下，本局能成为正解的红方第一步是？请将你的答案选项字母放在<box>与</box>之间，如<box>X</box>"；
4. 三行内容："红方棋子位置: …"、"黑方棋子位置: …"、"选项："加五个选项各占一行。

### 4.2 第 1 题的完整题面

```
这是一局中国象棋高难度的江湖残局，规则采用亚洲棋规，禁止长将长捉，其他不限，本局没有规则争议，也就是正解不依靠一将一杀等规则争议取得。此外也不考虑双方各60步内均不吃子则和棋的规则。红先。标准的10行9列棋盘，黑上红下，以红方视角的左侧和红方视角的底线交叉点为棋盘左下点，即原点，从原点出发从左到右的列记为A-I列共9列，从下到上的行记为1-10行共10行。双方的棋子和走法均在该坐标系下表示。棋子走法记录为棋子、原位置、目标位置，标“+”表示走子后产生将军，标“x”表示吃目标位置上的子，没有标注则代表不吃子且不将军。保证初始局面为合法局面。已知在双方最优应对下，本局红方胜，那么，在当前局面下，本局能成为正解的红方第一步是？请将你的答案选项字母放在<box>与</box>之间，如<box>X</box>
红方棋子位置: 車B1 炮B4 炮B7 帥F2 兵F9
黑方棋子位置: 馬A1 卒A2 卒A3 砲A5 士D10 車E5 将E10 士F10 象G6 卒I2 砲I5
选项：
A：炮B7 B10+
B：炮B4 E4+
C：車B1 E1
D：兵F9 x F10+
E：以上选项都不对
```

### 4.3 多模态输入

Vision 版在以上文字之后附加该题棋盘图 `boards/board_XXX.png`，不加任何说明文字以保证公平。棋盘图上只有棋盘、棋子、外侧坐标，以及四个选项的走法标记：A/B/C/D 四条不同颜色的弧形箭头（红、蓝、绿、紫），起点旁有同色字母标号；移动类箭头的尖端落在目标坐标点上，吃子类箭头的尖端停在被吃棋子边缘；被吃的子照常画出。图上没有标题、没有子力列表、没有选项文字，有楚河汉界，有坐标字母和数字。

### 4.4 答案提取与判定

- 正确判定：优先取回复里最后一个 `<box>X</box>` 中的字母（X 为 A\~E），与 `correctAnswer` 比对；未按格式回复时，回退取正文中最后一个孤立的 A\~E 字母。
- 未作答（回复为空）不计为正确。

---

## 五、测试脚本与结果

`test_deepseek_xiangqi.py`：`--model flash|pro|vision`，三个模型共用同一题面。参数：

| 参数 | 作用 |
| --- | --- |
| `--model flash\|pro\|vision` | 选择模型；vision 额外附棋盘图 |
| `--ids 1,5,23` | 只测指定题号 |
| `--batches N` | 并发数，默认 108（每题一个请求） |
| `--think` / `--no-think` | 思考模式（默认开启）／直接回答 |
| `--max-tokens N` | 思考模式输出上限，默认 131072 |
| `--detail low\|high\|original\|auto` | Vision 图片 detail |
| `--dry-run` | 只打印拼装好的题面，不发起请求 |
| `--base-url` / `--api-key` | 接口地址与密钥 |

---

## 六、也可以看看

- [痛快80](https://www.modelscope.cn/datasets/suxinchun/MaedaNobuaki80)：一个围棋死活题数据集，前田陈尔《痛快》中的 80 道死活题，以单选题形式表述。
- [三国杀数据集](https://www.modelscope.cn/datasets/suxinchun/Sanguosha)：一个三国杀数据集。
- [AI大宝](https://www.modelscope.cn/studios/suxinchun/AI-Sanguosha)：一个三国杀 AI 的创空间。
