入学文件自动验证系统

一款通过AI自动读取、验证留学生入学申请PDF文件并生成多语言通知邮件的自动化系统,适用于大学招生办公室。

  • by Raewon12
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Raewon12/mcp

使用说明

🎓 汉城大学外国人入学第一次文件自动验证系统

AX Frontier Challenge参赛作品

如果员工将志愿者文件PDF连同文件夹一起上传 AI阅读、验证、4种语言的指导邮件 自动创建。 提供Streamlit演示屏幕和MCP服务器。

Python 3.10+ FastMCP Claude Vision Streamlit 63 tests passing

🏆 AX前沿挑战 鼓励奖 获奖作品

提交征集活动时运营的实时演示(Streamlit Cloud)获奖后结束。 下面 快速查看在本地运行时,可以使用相同的屏幕。


快速查看

如果您想绕过代码查看演示屏幕:

git clone <repo-url> hansung-admission && cd hansung-admission
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env       # 그리고 .env 안에 ANTHROPIC_API_KEY 채워넣기
streamlit run demo/streamlit_app.py

→在浏览器中 http://localhost:8501 打开。

详细的安装和运行选项包括: 6号安装 · 7运行方法 参考。


📌 一目了然

项目 内容
目标录取 2026年度汉城大学纯外国人学部新、编入学
用户 入学处职员(应聘者本人X)
输入 志愿者PDF文件夹(护照、TOPIK、余额证明、外国人登记证、证件照片、入学申请书等最多8种)
输出 综合判定(PASS/REVIEW/FAIL)+单证验证+奖学金+4种语言指南邮件
界面 ①本地Streamlit演示②Claude Desktop③Claude Code
AI用处 使用Claude Vision提取PDF信息+生成指南。资格判定是决定性规则

1.为什么制作

1.1外国人入学材料为何困难

吸引留学生成为大学生存战略的现在,入学处业务量暴增,但文件验证方式与10年前相同。

  • 教育部“Study Korea 300K”-到2027年为止的外国留学生目标为30万名
  • 汉城大学外国人招募-每年2次,每个赛季累计讨论
  • 每位志愿者提交的文件 19种,各国的格式、语言各不相同

员工每次手动检查:

🧾 确认项目(可自动验证的8种)

  • 学生、父母国籍-如果有一人是韩国国籍,将被取消资格
  • 护照 -到期日是否在入学日(2026-09-30)之后,6个月内到期警告
  • 外国人登记证(ARC) -到期日·滞留资格(D-2、D-4等)
  • 出入境事实证明书 -以国内居民为对象,包括查询时间(生日至报名日期)
  • 各学科 主题 条件+证书批次、考试日、到期日
  • 余额证明书 -2千万韩元以上/发放3个月内/到期日入学日以后
  • 证件照 -3.5×4.5厘米,3个月内拍摄
  • 入学志愿书、誓约书、同意书 -是否签名、填写
  • ★ 验证文件之间的名称交叉 -自动检测不同名义的文件

员工需要判断的领域:

  • 学历认证真伪(APOSTIU、领事、CHISI)、家庭关系、艺体组合等11种

1.2该项目的解决方案

[지원자 PDF 폴더]
       ↓
[AI 추출 — Claude Vision]   ← 자동 분류 + 정보 추출
       ↓
[규칙 검증 — 결정적 룰셋]    ← 모집요강 JSON 기준
       ↓
[종합 판정 + 4개 언어 안내 메일]
  • AI只读PDF,资格判定是决定性代码→相同的输入→相同的答案
  • 更新招募大纲时只更换JSON,工具代码保持不变
  • 隐私:未使用面部照片,未使用名称掩蔽,未使用AI学习(ZDR)

2.制作了什么

2.1两种使用方式

方式 目标 屏幕
Streamlit演示Web应用程序 招生处工作人员实际使用的屏幕 上传文件夹→显示提取信息→验证→结果
MCP服务器 在Claude Desktop/Code中用自然语言呼叫 “越南阮蒂昂,请研究软件融合新人”

2.2自动验证的8种文件

文档验证项目 |---|---|---| | 1 | 🛂 护照 |到期日≥入学日,6个月内到期警告| | 2 | 🪪 外国人登记证(ARC) |到期日,滞留资格码| | 3 | ✈️ 出入境事实证明书 |查询时间包括(生日至报名日期) | 4 | 📜 TOPIK成绩证明书 |各学科最低等级,2年有效期| | 5 | 💰 余额证明书 2000万韩元以上,发放3个月以内 | 6 | 📷 证件照 3.5×4.5厘米,3个月内拍摄 | 7 | 📝 入学志愿书、同意书、誓约书 |是否签名、填写| | 8 | 🎓 韩国语课程结业证 |发放机构·进修学期数(奖学金加算)|

★ 名称交叉验证 -对提取的所有文件的名称进行比较,检测出不同名称的文件(例如TOPIK是本人,韩语课程结业证书是他人→警告)


3.体系结构

   ┌────────────────────────┐         ┌────────────────────────┐
   │ Streamlit 데모 화면     │         │ Claude Desktop / Code  │
   │ (입학처 직원용 UI)      │         │ (자연어 질의)          │
   └───────────┬────────────┘         └───────────┬────────────┘
               │                                  │ stdio (MCP)
               │ 직접 import                       │
               ↓                                  ↓
   ┌──────────────────────────────────────────────────────────┐
   │              admission/ (핵심 패키지)                     │
   │  ├─ extractors.py  · Claude Vision PDF → 구조화 데이터    │
   │  ├─ rules.py       · 결정적 검증 룰 (순수 함수)           │
   │  ├─ intake.py      · 추출+검증 파이프라인                 │
   │  └─ email.py       · 다국어 안내 메일 (한·영·중·베)       │
   └────────────────────────┬─────────────────────────────────┘
                            ↓
   ┌──────────────────────────────────────────────────────────┐
   │  data/*.json — 모집요강에서 추출한 룰셋 (출처 페이지 명시) │
   └──────────────────────────────────────────────────────────┘

3.1文件夹结构

mcp/
├── server.py                ← MCP 진입점, FastMCP 도구 17개
│
├── admission/               ← 핵심 패키지
│   ├── data.py              · data/*.json lru_cache 로더
│   ├── rules.py             · 결정 로직 (순수 함수)
│   ├── extractors.py        · PDF → 구조화 데이터 (Claude Vision, 8종)
│   ├── intake.py            · extract / validate / process 3단계
│   └── email.py             · 다국어 안내 메일 생성기
│
├── demo/                    ← Streamlit 데모
│   ├── streamlit_app.py     · 3단계 UI (정보 입력 → 검증 → 결과)
│   ├── mcp_adapter.py       · Claude API + MCP tool_use 어댑터
│   └── __init__.py
│
├── data/                    ← 모집요강 룰셋 (JSON 6종)
│   ├── departments.json     · 학과·TOPIK 요건
│   ├── scholarship.json     · 장학금 매트릭스
│   ├── documents.json       · 19종 서류 정의
│   ├── schedule.json        · 1·2차 일정·TOPIK 컷오프
│   ├── legalization.json    · 학력 인증 방식
│   └── contact.json         · 입학처 연락처
│
├── templates/               ← 다국어 메일 (4언어 × 2시나리오 = 8개)
├── samples/                 ← 합성 PDF + 가상 지원자 3명
├── tests/                   ← pytest 63개 케이스
├── scripts/                 ← 합성 PDF 생성기
├── docs/                    ← 모집요강 원본·공모전 자료
└── .streamlit/config.toml   ← 한성대 블루 테마

3.2设计原则

分级文件角色 |---|---|---| | 📦 数据 | data/*.json |招募大纲1:1映射, _meta.source在中指定页面来源| | 🔍 提取 | admission/extractors.py | Claude Vision为PDF→JSON| | ⚙️ 验证 | admission/rules.py |决定性函数,可测试单位| | 🔌 MCP适配器 | server.py 自然语言调用函数 | 🖥️ 演示UI | demo/streamlit_app.py |员工演示屏幕|


4.17个MCP工具

4.1资格·材料验证(9种)

工具 用途
check_nationality_eligibility 国籍资格(学生+父母)
check_topik_requirement 各学科TOPIK最低等级
validate_topik_score TOPIK等级·有效期
validate_finances 余额、发放日期、到期日期
validate_passport 护照到期日
validate_arc 外国人登记证到期日·滞留资格
validate_entry_exit 出入境事实证明期限
validate_photo 证件照规格·拍摄日期
validate_application_bundle 签署入学申请书、同意书、誓约书

4.2交叉验证(1种)

工具 用途
check_name_consistency 多个文件的名称是否相同

4.3信息·计算(4种)

工具 用途
list_required_documents 应聘者情况需要材料
get_legalization_method 各国学历认证方式
calculate_scholarship 第一学期奖学金比例
next_deadline 以今天为准,下一个日历+D-day

4.4综合自动化(1种)

工具 用途
process_application_folder PDF文件夹→自动分类、提取、验证综合报告

4.5通知邮件(2种)

工具 用途
generate_guide_email 1封邮件(1种语言)
generate_guide_email_multilang 同时使用4种语言(ko·en·zh·vi)

邮件方案: supplement (请求补充)· received (接收完毕)


5.演示方案(3个示例)

您可以通过三个示例文件夹演示不同的判定类型。

|文件夹|申请人|国籍·学科判定|演示点| |---|---|---|---|---| | 왕메이링_중국_글로벌K비즈니스 王美玲中国·全球K商务 通过 |正常流程,所有文件通过| | 응웬티흐엉_베트남_SW융합 越南·SW融合 审查 ★韩语课程结业证以他人名义→姓名交叉验证检测| | 마리아산토스_필리핀_영상엔터테인먼트 马里亚·桑托斯菲律宾影像娱乐公司 审查 |余额1500万韩元<2000万韩元→财政未达标探测


6.安装

6.1环境准备(仅前一次)

cd ~/Desktop/프로젝트파일/mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

6.2 Anthropic API密钥设置

.env.example的 .env复制到并输入API密钥:

cp .env.example .env
# .env 파일을 열어 ANTHROPIC_API_KEY 채워넣기

.env:

ANTHROPIC_API_KEY=sk-ant-api03-xxxxxxxxxxxxxxxx
ANTHROPIC_MODEL=claude-sonnet-4-6

⚠️ .env是 .gitignore注册在中,千万不要提交。


7.执行方法(4种选择)

📌 所有的方法 第6节安装必须先完成。 每次运行 source .venv/bin/activate从激活虚拟环境开始。

7.1在本地运行Streamlit演示(★最快)

入学处职员实际使用的画面。文件夹上传→AI自动提取→验证结果+4种语言邮件。

source .venv/bin/activate
streamlit run demo/streamlit_app.py

浏览器将自动 http://localhost:8501以打开。打不开的话直接连接。

使用流程:

  1. Step1-输入信息
    • 从左侧下拉菜单中选择示例文件夹或直接拖放PDF
    • 上传后AI读取文件,提取的信息显示在屏幕上(20-40秒)
    • 自动填写姓名、国籍、出生日期、学科、录取、音轨(有入学申请书PDF时)
    • 直接选择次数→ 开始自动验证
  2. Step2-继续验证
    • 使用提取的数据验证规则+生成四种语言的邮件(即时)
  3. Step 3-结果
    • 综合判定卡(PASS/REVIEW/FAIL)
    • 左侧:按文件验证结果+名称交叉验证
    • 右侧:韩、英、中、贝指南邮件(切换到标签)

7.2将MCP服务器连接到Claude Desktop

想用自然语言要求验证的时候。

~/Library/Application Support/Claude/claude_desktop_config.json 添加到(MacOS):

{
  "mcpServers": {
    "hansung-admission": {
      "command": "/Users/raewon/Desktop/프로젝트파일/mcp/.venv/bin/python",
      "args": ["/Users/raewon/Desktop/프로젝트파일/mcp/server.py"]
    }
  }
}

Claude Desktop重启→左下角🔧 单击图标→ hansung-admission 显示后连接成功。

使用示例:

“请检查samples/applicants/王美玲_中国_全球K商务文件夹。中国国籍,全球K商务新人,韩语曲目。”

→克劳德 process_application_folder 调用工具进行自动验证。

7.3在Claude Code中使用

在项目根目录中 .mcp.json 创建:

{
  "mcpServers": {
    "hansung-admission": {
      "command": "./.venv/bin/python",
      "args": ["./server.py"]
    }
  }
}

在相应目录中 claude 运行时自动识别。

7.4直接从Python调用(用于开发)

from admission import intake

result = intake.process_application_folder(
    folder_path="samples/applicants/왕메이링_중국_글로벌K비즈니스",
    applicant_name="왕메이링",
    nationality="China",
    mother_nationality="China",
    father_nationality="China",
    department_key="global_k_business",
    track="korean",
)
print(result["overall"])      # 'pass' | 'review' | 'fail'
print(result["overall_flags"])

8.测试

source .venv/bin/activate
pytest tests/ -v
# → 63 passed in 0.32s

仅包括规则和邮件单元测试(无API调用)。Vision提取集成测试因成本原因单独编写脚本:

python scripts/verify_topik_extraction.py
python scripts/verify_financial_extraction.py
# … 등

9.生成合成PDF样本

当示例PDF损坏或想要创建新案例时:

cd scripts
python generate_topik_samples.py            # TOPIK 4종
python generate_financial_samples.py        # 잔고증명 4종
python generate_korean_course_samples.py    # 한국어과정 수료증 4종
python generate_a_category_samples.py       # 응웬티흐엉 A카테고리 5종
python generate_demo_applicant.py           # 왕메이링 풀세트
python generate_demo_applicant_3.py         # 마리아 산토스 풀세트

所有合成PDF都带有“SAMPLE/样本”水印,以防止伪造误用。


10.隐私政策

该系统涉及护照、余额证明等超敏感信息,从一开始就保守设计。

原则 适用
👁 未提取脸部 在Vision提示符下忽略照片区域,仅文本
🔒 名称、编号掩蔽 仅以提取后立即掩蔽的形式显示(응웬티***)
🧠 AI美学学习Anthropic API未使用I/O学习。正式实施时申请零数据保留(ZDR)
🧪 只开发合成数据 samples/ 全部为SAMPLE水印。实际志愿者PDF .gitignore
📝 禁止日志PII 未保存API响应原文,调试时仅字段名

附录-快速整理MCP

第一次接触MCP的人的一页摘要。

MCP是什么? 连接AI模型和外部工具、数据的开放式标准协议。Anthropic将于2024年公开。可以看作是给AI戴上“手和眼睛”的USB规格。

组件

Host ←→ MCP Client ←→ MCP Server

配置角色示例 |---|---|---| | Host|运行AI的应用程序| Claude Desktop、Claude Code、Cursor、Zed| | MCP Client | Host内置通信模块|自动,无需手动处理| | MCP Server |工具·数据提供| ←本项目 |

最简单的示例

from fastmcp import FastMCP

mcp = FastMCP("My Server")

@mcp.tool()
def greet(name: str) -> str:
    """이름을 받아서 인사합니다"""
    return f"안녕하세요, {name}님!"

mcp.run()

本项目 server.py是本示例中的17个工具扩展插件。


🎓 汉城大学外国人入学第一次文件自动验证系统 AX前沿挑战·Fall 2026标准·Built with FastMCP+Claude Vision+Streamlit