---
name: judge-assignment
version: 1.0.0
description: |
  项目分组评委智能分配 — 读取专家信息和项目分组两个 Excel 文件，按照「学科匹配 + 校内外搭配」
  的规则，为每个项目组分配评委，输出带颜色标注的结果 Excel。
  适用于各类评审、答辩、遴选等需要为分组分配评委的场景。
  触发条件：用户提到"分配评委"、"评委分组"、"项目分组评委"、"专家分配"、"judge assignment"等。
metadata:
  version: 1.0.0
---

# 项目分组评委智能分配

## 概述

本 Skill 指导 AI 根据专家信息（校内/校外、学科背景）和项目分组（研究方向），
**半自动**完成评委分配，输出带颜色标注的结果 Excel 文件。

**工作模式：** AI 主导分配决策 + 脚本辅助评分/验证/生成 Excel。纯自动贪心算法在复杂约束下
易产生次优解，因此本 Skill 采用「AI 分析数据 → 手动匹配分配 → 脚本验证输出」的流程。

**核心能力：**
- 解析专家信息 Excel 和项目分组 Excel，展示数据摘要
- 基于学科关键词计算专家→分组的匹配分数
- AI 半自动完成分配：校外专家优先匹配，校内专家填充，学科充分对齐
- 支持校内外搭配（默认 2校内+1校外）
- 生成多 Sheet 结果 Excel（分配总表、专家明细、统计汇总、图例）

## 输入文件约定

### 专家信息 Excel（必需列）

| 列 | 含义 | 示例 |
|----|------|------|
| 校内/校外 | 专家来源 | 校内专家 / 校外专家 |
| 工号 | 唯一标识 | 9691 |
| 姓名 | 专家姓名 | 薛睿 |
| 学院/学科 | 所属学科 | 外国语、化生、管理、材料... |

### 项目分组 Excel（必需列）

| 列 | 含义 | 示例 |
|----|------|------|
| 分组 | 组号 | 1, 2, 3... |
| 项目研究方向 | 该组涵盖的学科/方向 | 法学、文学、社会学... |

## 执行流程

### Step 1：解析数据，展示摘要

用 Python 读取两个 Excel，向用户展示：

```
python3 -c "
import pandas as pd
experts = pd.read_excel('<专家文件>')
groups = pd.read_excel('<分组文件>')
print(f'专家: {len(experts)} 人 (校内: {校内数}, 校外: {校外数})')
print(f'分组: {len(groups)} 组')
# -- 按学科汇总 --
for dept, grp in experts.groupby('学院/学科'):
    print(f'  {dept}: {list(grp[\"姓名\"])}')
# -- 每组研究方向 --
for _, r in groups.iterrows():
    print(f'  第{r[\"分组\"]}组: {r[\"项目研究方向\"][:80]}...')
"
```

确认参数：
1. **每组评委数**（默认 3）
2. **目标校内外配比**（默认 2校内+1校外）
3. **是否需要某些组特定安排**

### Step 2：计算匹配分数

运行评分脚本，为每个专家计算其与各组研究方向的匹配度：

```bash
python3 <SKILL_ROOT>/assign_judges.py --mode score \
  <专家文件> <分组文件>
```

匹配规则（定义在 `assign_judges.py` 的 `DEPT_MAPPING` 中）：

| 分数 | 含义 | 示例 |
|------|------|------|
| 10 | 完全匹配 | 化生→生命科学/化学、材料→材料 |
| 5 | 映射匹配 | 测绘→地球科学, 经管→经济学 |
| 0 | 无直接匹配 | 需跨学科安排 |

可根据实际数据扩展 `DEPT_MAPPING`。

### Step 3：半自动分配（AI 主导）

**这是核心步骤。** AI 基于匹配分数 + 领域知识完成分配：

1. **先摸底**：统计校外专家学科分布和数量，确认哪些组天然有匹配
2. **定纯校内组**：找出完全没有校外专家匹配的组（如纯工程类），标记为纯校内组
3. **校外专家逐一分配**：每位校外专家分配到匹配度最高且还有空位的组
4. **校内专家填充**：按学科匹配补足每个组
5. **跨学科兜底**：剩余专家以学科多样性原则填充

**分配检查清单：**
- [ ] 每位专家只分配一次
- [ ] 每组人数正确
- [ ] 15组有校外（假设有15位校外专家）
- [ ] 纯校内组学科方向有校内专家充分覆盖
- [ ] 无"数学专家分到语言学组"之类的明显错配
- [ ] 跨学科分配有合理理由

### Step 4：生成结果 Excel

用 Python 脚本（内联编写或使用项目中的 `generate_assignment.py`）生成带格式的结果 Excel：

**输出文件 Sheet 结构：**

| Sheet | 内容 |
|-------|------|
| 评委分配总表 | 组号、研究方向、3位评委（图片/姓名/工号/学院）、校内外配比、匹配说明 |
| 专家分配明细 | 原始专家清单 + 分配去向列（未分配标红） |
| 统计汇总 | 总组数、校内外配比、纯校内组列表、未分配专家 |
| 图例说明 | 颜色含义 |

**颜色规范：**
- 🟢 `E2EFDA` 浅绿 = 校内专家
- 🟡 `FFF2CC` 浅黄 = 校外专家
- 🟠 `FCE4D6` 浅橙 = 纯校内组行底色
- 🔴 `FFD7D7` 浅红 = 未分配专家行

### Step 5：验证

验证清单（自动或手动）：

- [ ] 每组恰好 N 位评委
- [ ] 无专家重复分配
- [ ] 校内评委总人次 = 目标值
- [ ] 校外评委总人次 = 目标值
- [ ] 有校外专家的组数 = min(总组数, 校外专家数)
- [ ] 列出所有未分配专家

## 关键设计决策

### 为什么是 AI 半自动而非全自动？

纯贪心算法（按 match_score 逐人分配）在复杂约束下易产生次优解：
- 校外专家被"抢"到不匹配的组（如语言学专家分到工程组）
- 无法识别"这3个工程组该一起做纯校内组"的全局最优
- 学科映射的边界情况需要人类判断

AI 半自动模式利用评分数据做参考，同时应用全局视角和领域知识做最终决策，
这在实际使用中效果远优于纯自动。

### 纯校内组的选择原则

当校外专家不足以覆盖所有组时，选以下类型的组作为纯校内组：
1. 完全没有相关学科校外专家的组
2. 校内同学科专家足够覆盖的组
3. 多个同类组（如"工程与能源1/2/3组"）可以一起处理

## 使用方法

### 基本用法
```
请为项目分组分配评委，专家信息在 专家信息.xlsx，项目分组在 项目分组.xlsx。
```

### 自定义参数
```
请为项目分组分配评委，每组5位评委，优先保证 3校内+2校外。
```

### 仅调整现有分配
```
在现有分配结果上，把第3组的校外专家换成经管背景的。
```

### 扩展学科映射
编辑 `assign_judges.py` 中的 `DEPT_MAPPING` 字典，添加新的学科对应关系。

## 参考文件

| 文件 | 用途 |
|------|------|
| `SKILL.md` | 本文件，完整执行流程 |
| `assign_judges.py` | 评分引擎 + 验证工具，含 `DEPT_MAPPING` 学科映射表 |