Skip to content

MikeMengTR/MentorRadar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MentorRadar

自动为本科生寻找方向匹配、有招生意向的博士/硕士导师

MentorRadar 是一个基于 LLM 的自动化导师搜索工具。输入你的毕业年份、研究兴趣和目标学校范围,它会自动爬取院系师资页面、匹配研究方向、查找招生信息,最终生成一份结构化的 Markdown + JSON 推荐报告。


目录


功能特性

  • 自动发现院系:内置 C9/985 高校的计算机、人工智能等院系数据库,无需手动输入链接
  • 关键词扩展:LLM 自动将你的研究方向扩展为 40+ 相关关键词(中英文),提升召回率
  • 智能匹配:对教师研究方向进行关键词评分,并通过 LLM 深度语义分析
  • 招生状态识别:自动搜索并判断导师是否明确招生(✅ 明确招生 / 🟡 可能招生 / ❓ 未知)
  • 多维度报告:每位导师附带职称、研究方向、匹配得分、代表论文、邮箱、主页链接
  • 反爬处理:自动修正反转邮箱、SSL 兼容回退、JS 渲染页面搜索回退
  • 每校配额:多校搜索时自动分配名额,确保各校均有代表性结果

工作流程

输入 (毕业年份 + 研究方向 + 学校范围)
  │
  ▼
Phase 0: 解析输入,LLM 扩展关键词 (~40个)
  │
  ▼
Phase 1: 从数据库加载目标院系列表
  │
  ▼
Phase 2: 抓取院系师资页面,提取教师名单
         (若页面 JS 渲染无法访问,自动搜索回退)
  │
  ▼
Phase 3: 关键词 + LLM 双重匹配,筛选相关教师
  │
  ▼
Phase 4: 爬取教师个人主页,提取详细信息
         (职称 / 研究方向 / 论文 / 邮箱)
         + 依据实际方向重新评分,过滤无关教师
  │
  ▼
Phase 5: 搜索招生信息,LLM 判断招生状态
  │
  ▼
Phase 6: 生成 Markdown + JSON 报告(按匹配度排序)

环境要求

  • Python 3.11+
  • Windows / macOS / Linux
  • 需要能访问 OpenRouter 或 DeepSeek API(国内需要代理或直连 DeepSeek)
  • 搜索引擎使用 DuckDuckGo(国内网络可能需要代理)

安装

1. 克隆项目

git clone https://github.com/yourname/MentorRadar.git
cd MentorRadar

2. 创建并激活虚拟环境(推荐)

# Conda
conda create -n dsf python=3.11
conda activate dsf

# 或者 venv
python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS/Linux
source .venv/bin/activate

3. 安装依赖

pip install -e ".[search]"

配置

创建 .env 文件

复制示例文件并填写 API Key:

cp .env.example .env

然后编辑 .env

# ── LLM 提供商选择 ──────────────────────────────────────────
# 可选值: openrouter_free | deepseek
DSFINDER_LLM_PROVIDER=openrouter_free

# ── API Keys (按所选 Provider 填写一个即可) ────────────────
# OpenRouter Key (在 https://openrouter.ai/keys 获取,注册即免费)
DSFINDER_OPENROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxx

# DeepSeek Key (在 https://platform.deepseek.com 获取,按量计费)
DSFINDER_DEEPSEEK_API_KEY=

# ── 模型覆盖 (可选,留空则使用 Provider 默认模型) ─────────
# 使用 OpenRouter 时,可指定具体模型,例如:
#   deepseek/deepseek-v3.2       (~$0.26/M tokens,推荐)
#   google/gemma-3-27b-it:free   (完全免费,但有限速)
DSFINDER_LLM_MODEL_LIGHT=deepseek/deepseek-v3.2
DSFINDER_LLM_MODEL_HEAVY=deepseek/deepseek-v3.2

# ── 抓取配置 ────────────────────────────────────────────────
DSFINDER_REQUEST_DELAY=2.0        # 请求间隔(秒),过低可能触发反爬
DSFINDER_MAX_CONCURRENT_SCHOOLS=3 # 并发学校数

Provider 选择建议

场景 推荐配置 费用
首次试用 / 测试逻辑 openrouter_free + google/gemma-3-27b-it:free 免费(有限速)
正式使用(推荐) openrouter_free + deepseek/deepseek-v3.2 ~¥0.3/次完整搜索
国内直连 DeepSeek deepseek + DeepSeek Key 同上,延迟更低

使用方法

方式一:Windows 一键运行(双击)

run.bat

首次运行会提示填写 API Key,填写后再次双击即可进入命令行交互。

方式二:命令行

基本用法:

python -m src.main --year 2027 --interests "大语言模型" "自然语言处理" --tier C9

指定具体学校:

python -m src.main --year 2027 --interests "计算机视觉" "多模态" --schools "清华大学" "北京大学" "上海交通大学"

按学校层次搜索:

# C9 高校
python -m src.main --year 2026 --interests "强化学习" "机器人" --tier C9

# 985 高校(范围更广,耗时更长)
python -m src.main --year 2027 --interests "自然语言处理" --tier 985 --max-results 100

排除某些学校:

python -m src.main --year 2027 --interests "大语言模型" --tier C9 --exclude "清华大学" "北京大学"

控制返回数量:

# 默认 50,每所学校最多 max-results/学校数 位(至少5位)
python -m src.main --year 2027 --interests "大语言模型" --tier C9 --max-results 100

方式三:Windows bat 脚本(传参)

run.bat --year 2027 --interests "大语言模型" "自然语言处理" --schools "清华大学" "哈尔滨工业大学"

输出报告

报告保存在 output/ 目录,文件名含时间戳:

output/
├── report_20260331_021219.md    # Markdown 格式(可直接阅读)
└── report_20260331_021219.json  # JSON 格式(可程序处理)

Markdown 报告示例

# MentorRadar 导师推荐报告

## 查询条件
- 目标: 2027年毕业, 方向: 大语言模型, 自然语言处理, 范围: 哈尔滨工业大学

## 搜索统计
- 搜索学校: 1 所 | 搜索院系: 2 个 | 扫描教师: 16 位 | 匹配教师: 13 位

---

### 1. 张伟男 — 哈尔滨工业大学 社会计算与信息检索研究中心

- **职称**: 教授、人工智能学院执行院长、博士生导师
- **研究方向**: 人工智能, 具身智能, 大模型, 人机对话
- **匹配度**: ★★★★☆ (0.85)
- **匹配分析**: 方向标注为DT(对话系统),是LLM的核心应用领域,高度匹配
- **招生状态**: 🟡 可能招生
- **邮箱**: wnzhang@ir.hit.edu.cn
- **主页**: https://homepage.hit.edu.cn/zhangweinan
- **代表论文**: ...

招生状态含义

标识 含义
✅ 明确招生 主页或公告中有明确的招生说明
🟡 可能招生 在职博导,有招生可能,未找到明确公告
❓ 未知 未找到足够信息判断

匹配度评分

分数 含义
★★★★★ (0.9+) 研究方向高度契合,多个核心关键词命中
★★★★☆ (0.7-0.9) 研究方向明显相关,核心方向一致
★★★☆☆ (0.6-0.7) 研究方向部分重叠
★★☆☆☆ (0.4-0.6) 有相关性,建议进一步确认
★☆☆☆☆ (0.2-0.4) 相关性较低,需自行判断

参数说明

参数 必填 说明 示例
--year 本科毕业年份(用于判断招生时间窗口) --year 2027
--interests 研究方向关键词,可多个 --interests "大语言模型" "NLP"
--tier 三选一 学校层次(C9 / 985 / 211 / 双一流) --tier C9
--schools 三选一 指定具体学校列表 --schools "清华大学" "北大"
--benchmark 三选一 基准学校(搜索该学校及以上水平) --benchmark "南京大学"
--exclude 排除的学校 --exclude "清华大学"
--max-results 最多返回教师数(默认50) --max-results 100

支持的学校范围

C9 高校(内置完整院系数据库)

学校 支持院系 状态
北京大学 信息科学技术学院、计算机学院、智能学院
清华大学 计算机科学与技术系、软件学院、人工智能学院
复旦大学 计算机科学技术学院、人工智能创新研究院
上海交通大学 计算机科学与工程系、人工智能研究院 ✅(部分页面需搜索回退)
浙江大学 计算机科学与技术学院 ⚠️ SSL 兼容性问题
中国科学技术大学 计算机科学与技术学院
南京大学 计算机科学与技术系、人工智能学院
哈尔滨工业大学 计算机科学与技术学院、社会计算与信息检索研究中心
西安交通大学 计算机科学与技术学院、人工智能学院 ⚠️ SSL 兼容性问题

说明:浙大和西交的校园网站存在 SSL 协议版本兼容性问题,程序会自动尝试多种回退策略并记录在报告的"未完成项"中。

985 高校

985 高校数据库中包含 39 所学校,但院系数据库(data/departments.json)目前以 C9 为主。对于 C9 以外的 985 学校,程序会使用搜索引擎回退策略发现相关教师,效果相对有限。

欢迎通过 Pull Request 补充其他学校的院系数据。


常见问题

Q: 运行后提示 "401 Authentication Error"?

检查 .env 文件中是否正确填写了 API Key,注意:

  • 使用 OpenRouter 时,Key 应填在 DSFINDER_OPENROUTER_API_KEY
  • 使用 DeepSeek 时,Key 应填在 DSFINDER_DEEPSEEK_API_KEY
  • 不要编辑 .env.example,要编辑 .env

Q: 提示 "404 Model Not Found"?

OpenRouter 上的免费模型会不定期下线。编辑 .env,将 DSFINDER_LLM_MODEL_LIGHTDSFINDER_LLM_MODEL_HEAVY 改为当前可用的免费模型。可在 OpenRouter Models 查看当前所有免费模型。

Q: 搜索结果为空 / DuckDuckGo 无法访问?

DuckDuckGo 在部分网络环境下需要代理。建议:

  • 配置系统代理后重试
  • 程序已内置多引擎回退,实际影响有限

Q: 某些学校显示"未提取到教师信息"?

可能原因:

  1. 该学校院系页面使用 JavaScript 动态加载(程序已有搜索回退,但覆盖率有限)
  2. SSL 证书版本过旧(程序已尝试 3 种 SSL 策略)
  3. 网站暂时不可访问

失败的院系会记录在报告末尾的"未完成项"部分。

Q: 运行速度太慢?

  • 每位教师需约 30-60 秒(包含网页抓取 + 2-3 次 LLM 调用)
  • 搜索 C9 全部学校 + 50 名教师约需 30-60 分钟
  • 建议先用 --schools "学校A" "学校B" 测试 1-2 所学校,确认效果后再扩大范围
  • 使用 DeepSeek 直连(国内)比 OpenRouter 延迟更低

Q: 邮箱显示乱码或格式异常?

部分高校(如哈工大)用 CSS/JS 对邮箱进行反转处理防止爬虫,程序会自动检测并修正。若仍出现异常,可直接访问教师主页确认联系方式。

Q: 如何添加更多学校的院系数据?

编辑 data/departments.json,按如下格式添加:

{
  "某某大学": [
    {
      "name": "计算机科学与技术学院",
      "url": "https://cs.xxx.edu.cn",
      "faculty_url": "https://cs.xxx.edu.cn/jsml/list.htm",
      "tags": ["计算机", "AI", "NLP"]
    }
  ]
}

其中 faculty_url 是教师列表页的直接链接,tags 用于关键词匹配优先级。


费用说明

免费方案(OpenRouter 免费模型)

  • 使用 google/gemma-3-27b-it:free 等免费模型
  • 完全免费,但存在速率限制(可能触发 429 错误,程序会自动重试)
  • 适合测试和低频使用

付费方案(推荐)

deepseek/deepseek-v3.2(通过 OpenRouter,$0.26/M input tokens)为例:

操作 约消耗 tokens 约费用
Phase 0 关键词扩展 ~500 <$0.001
Phase 2 教师列表提取(每个院系) ~3000 ~$0.001
Phase 3 方向匹配(每批教师) ~2000 ~$0.001
Phase 4 教师详情提取(每位) ~2000 ~$0.001
Phase 5 招生判断(每位) ~1500 <$0.001
完整搜索 1 所学校(~10位教师) ~50,000 ~$0.02(约¥0.15)
完整搜索 C9(~50位教师) ~200,000 ~$0.08(约¥0.6)

实际费用受模型选择、页面内容长度、重试次数等因素影响,以上为粗略估算。


项目结构

MentorRadar/
├── src/
│   ├── main.py              # 命令行入口
│   ├── pipeline.py          # 主流程编排(Phase 0-6)
│   ├── config.py            # 配置管理(API Key、模型选择)
│   ├── models/
│   │   └── schemas.py       # Pydantic 数据模型
│   ├── phases/
│   │   ├── p0_input.py      # 输入解析 + 关键词扩展
│   │   ├── p1_department.py # 院系发现
│   │   ├── p2_faculty.py    # 教师列表抓取
│   │   ├── p3_match.py      # 方向匹配
│   │   ├── p4_detail.py     # 教师详情抓取
│   │   ├── p5_recruitment.py# 招生信息搜索
│   │   └── p6_report.py     # 报告生成
│   ├── llm/
│   │   └── client.py        # LLM 客户端(OpenAI-compatible)
│   ├── scraper/
│   │   └── fetcher.py       # HTTP 抓取(SSL 兼容处理)
│   └── search/
│       └── engine.py        # DuckDuckGo 搜索封装
├── data/
│   ├── departments.json     # 院系数据库(C9 + 部分985)
│   ├── schools.json         # 学校层次数据(C9/985/211)
│   └── prompts/             # LLM Prompt 模板
├── output/                  # 报告输出目录(自动创建)
├── .env.example             # 环境变量示例
├── pyproject.toml           # 项目依赖
└── run.bat                  # Windows 一键运行脚本

License

MIT

About

自动为本科生/硕士寻找方向匹配的博士/硕士导师

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors