Distill a graduate supervisor/mentor into an AI Skill. Auto-collect papers/research records/supervision logs, generate academic guidance Skill + Mentor Persona, with continuous evolution. | 蒸馏研究生导师/教授成 AI Skill,自动采集论文/项目/指导记录,生成学术指导 Skill + 导师风格 persona,支持持续进化。
Language / 语言: This skill supports both English and Chinese. Detect the user's language from their first message and respond in the same language throughout. Below are instructions in both languages — follow the one matching the user's language.
本 Skill 支持中英文。根据用户第一条消息的语言,全程使用同一语言回复。下方提供了两种语言的指令,按用户语言选择对应版本执行。
当用户说以下任意内容时启动:
/create-mentor当用户对已有导师 Skill 说以下内容时,进入进化模式:
/update-mentor {slug}当用户说 /list-mentors 时列出所有已生成的导师。
本 Skill 运行在 Claude Code 环境,使用以下工具:
| 任务 | 使用工具 |
|---|---|
| 读取 PDF 文档 | Read 工具(原生支持 PDF) |
| 读取图片截图 | Read 工具(原生支持图片) |
| 读取 MD/TXT 文件 | Read 工具 |
| 解析飞书消息 JSON 导出 | Bash → python3 ${CLAUDE_SKILL_DIR}/tools/feishu_parser.py |
| 飞书全自动采集(推荐) | Bash → python3 ${CLAUDE_SKILL_DIR}/tools/feishu_auto_collector.py |
| 飞书文档(浏览器登录态) | Bash → python3 ${CLAUDE_SKILL_DIR}/tools/feishu_browser.py |
| 飞书文档(MCP App Token) | Bash → python3 ${CLAUDE_SKILL_DIR}/tools/feishu_mcp_client.py |
| 钉钉全自动采集 | Bash → python3 ${CLAUDE_SKILL_DIR}/tools/dingtalk_auto_collector.py |
| 解析邮件 .eml/.mbox | Bash → python3 ${CLAUDE_SKILL_DIR}/tools/email_parser.py |
| 写入/更新 Skill 文件 | Write / Edit 工具 |
| 版本管理 | Bash → python3 ${CLAUDE_SKILL_DIR}/tools/version_manager.py |
| 列出已有 Skill | Bash → python3 ${CLAUDE_SKILL_DIR}/tools/skill_writer.py --action list |
基础目录:Skill 文件写入 ./mentors/{slug}/(相对于本项目目录)。
如需改为全局路径,用 --base-dir ~/.openclaw/workspace/skills/mentors。
参考 ${CLAUDE_SKILL_DIR}/prompts/intake.md 的问题序列,只问 3 个问题:
华南师大 心理学院 教授 认知神经科学 研究方向温和 放养型 每周开组会 论文要求严格 鼓励学生自主探索除姓名外均可跳过。收集完后汇总确认再进入下一步。
询问用户提供原材料,展示四种方式供选择:
原材料怎么提供?
[A] 飞书自动采集(推荐)
输入姓名,自动拉取消息记录 + 文档 + 多维表格
[B] 钉钉自动采集
输入姓名,自动拉取文档 + 多维表格
消息记录通过浏览器采集(钉钉 API 不支持历史消息)
[C] 飞书链接
直接给文档/Wiki 链接(浏览器登录态 或 MCP)
[D] 上传文件
PDF / 图片 / 导出 JSON / 邮件 .eml
[E] 直接粘贴内容
把文字复制进来
可以混用,也可以跳过(仅凭手动信息生成)。
首次使用需配置:
python3 ${CLAUDE_SKILL_DIR}/tools/feishu_auto_collector.py --setup
群聊采集(使用 tenant_access_token,需 bot 在群内):
python3 ${CLAUDE_SKILL_DIR}/tools/feishu_auto_collector.py \
--name "{name}" \
--output-dir ./knowledge/{slug} \
--msg-limit 1000 \
--doc-limit 20
私聊采集(需要 user_access_token + 私聊 chat_id):
私聊消息只能通过用户身份(user_access_token)获取,应用身份无权访问私聊。
前置条件:
用户需要提供以下信息:
app_id 和 app_secret(在飞书开放平台创建自建应用获取)im:message — 以用户身份读取/发送消息im:chat — 以用户身份读取会话列表如果用户缺少以上任何信息,引导他们完成配置。不要假设用户已经配好了。
获取 user_access_token 的完整流程:
当用户提供了 app_id、app_secret,并确认已开通用户权限后:
帮用户生成 OAuth 授权链接:
https://open.feishu.cn/open-apis/authen/v1/authorize?app_id={APP_ID}&redirect_uri=http://www.example.com&scope=im:message%20im:chat
⚠️ 注意:
redirect_uri需要在飞书应用的「安全设置 → 重定向 URL」中添加http://www.example.com
用户在浏览器打开链接,登录并授权
页面会跳转到 http://www.example.com?code=xxx,用户复制 code 给你
用 code 换取 token:
python3 ${CLAUDE_SKILL_DIR}/tools/feishu_auto_collector.py --exchange-code {CODE}
或者你自己写 Python 脚本调飞书 API 换取:
# 1. 获取 app_access_token
POST https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal
Body: {"app_id": "xxx", "app_secret": "xxx"}
# 2. 用 code 换 user_access_token
POST https://open.feishu.cn/open-apis/authen/v1/oidc/access_token
Header: Authorization: Bearer {app_access_token}
Body: {"grant_type": "authorization_code", "code": "xxx"}
获取私聊 chat_id:
用户通常不知道 chat_id。当用户有了 user_access_token 但没有 chat_id 时,你应该自己写 Python 脚本来获取:
POST https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id
Header: Authorization: Bearer {user_access_token}
Body: {"receive_id": "{对方open_id}", "msg_type": "text", "content": "{\"text\":\"你好\"}"}
# 返回值中的 chat_id 就是私聊会话 ID
GET /im/v1/chats 不会返回私聊会话,这是飞书 API 的限制,不是权限问题,不要尝试用这个接口找私聊GET https://open.feishu.cn/open-apis/contact/v3/scopes
# 返回应用可见范围内所有用户的 open_id
执行采集:
拿到 user_access_token 和 chat_id 后:
python3 ${CLAUDE_SKILL_DIR}/tools/feishu_auto_collector.py \
--open-id {对方open_id} \
--p2p-chat-id {chat_id} \
--user-token {user_access_token} \
--name "{name}" \
--output-dir ./knowledge/{slug} \
--msg-limit 1000
灵活性原则:以上 API 调用不一定要用 collector 脚本,如果脚本跑不通或者场景不匹配,你可以直接写 Python 脚本调飞书 API 完成任务。核心 API 参考:
POST /auth/v3/app_access_token/internal、POST /authen/v1/oidc/access_tokenPOST /im/v1/messages?receive_id_type=open_idGET /im/v1/messages?container_id_type=chat&container_id={chat_id}GET /contact/v3/scopes、GET /contact/v3/users/{user_id}自动采集内容:
采集完成后用 Read 读取输出目录下的文件:
knowledge/{slug}/messages.txt → 消息记录(群聊 + 私聊)knowledge/{slug}/docs.txt → 文档内容knowledge/{slug}/collection_summary.json → 采集摘要如果采集失败,根据报错自行判断原因并尝试修复,常见问题:
首次使用需配置:
python3 ${CLAUDE_SKILL_DIR}/tools/dingtalk_auto_collector.py --setup
然后输入姓名,一键采集:
python3 ${CLAUDE_SKILL_DIR}/tools/dingtalk_auto_collector.py \
--name "{name}" \
--output-dir ./knowledge/{slug} \
--msg-limit 500 \
--doc-limit 20 \
--show-browser # 首次使用加此参数,完成钉钉登录
采集内容:
采集完成后 Read 读取:
knowledge/{slug}/docs.txtknowledge/{slug}/bitables.txtknowledge/{slug}/messages.txt如消息采集失败,提示用户截图聊天记录后上传。
Read 工具直接读取python3 ${CLAUDE_SKILL_DIR}/tools/feishu_parser.py --file {path} --target "{name}" --output /tmp/feishu_out.txt
然后 Read /tmp/feishu_out.txtpython3 ${CLAUDE_SKILL_DIR}/tools/email_parser.py --file {path} --target "{name}" --output /tmp/email_out.txt
然后 Read /tmp/email_out.txtRead 工具直接读取用户提供飞书文档/Wiki 链接时,询问读取方式:
检测到飞书链接,选择读取方式:
[1] 浏览器方案(推荐)
复用你本机 Chrome 的登录状态
✅ 内部文档、需要权限的文档都能读
✅ 无需配置 token
⚠️ 需要本机安装 Chrome + playwright
[2] MCP 方案
通过飞书 App Token 调用官方 API
✅ 稳定,不依赖浏览器
✅ 可以读消息记录(需要群聊 ID)
⚠️ 需要先配置 App ID / App Secret
⚠️ 内部文档需要管理员给应用授权
选择 [1/2]:
选 1(浏览器方案):
python3 ${CLAUDE_SKILL_DIR}/tools/feishu_browser.py \
--url "{feishu_url}" \
--target "{name}" \
--output /tmp/feishu_doc_out.txt
首次使用若未登录,会弹出浏览器窗口要求登录(一次性)。
选 2(MCP 方案):
首次使用需初始化配置:
python3 ${CLAUDE_SKILL_DIR}/tools/feishu_mcp_client.py --setup
之后直接读取:
python3 ${CLAUDE_SKILL_DIR}/tools/feishu_mcp_client.py \
--url "{feishu_url}" \
--output /tmp/feishu_doc_out.txt
读取消息记录(需要群聊 ID,格式 oc_xxx):
python3 ${CLAUDE_SKILL_DIR}/tools/feishu_mcp_client.py \
--chat-id "oc_xxx" \
--target "{name}" \
--limit 500 \
--output /tmp/feishu_msg_out.txt
两种方式输出后均用 Read 读取结果文件,进入分析流程。
用户粘贴的内容直接作为文本原材料,无需调用任何工具。
如果用户说"没有文件"或"跳过",仅凭 Step 1 的手动信息生成 Skill。
将收集到的所有原材料和用户填写的基础信息汇总,按以下两条线分析:
线路 A(Work Skill):
${CLAUDE_SKILL_DIR}/prompts/work_analyzer.md 中的提取维度线路 B(Persona):
${CLAUDE_SKILL_DIR}/prompts/persona_analyzer.md 中的提取维度参考 ${CLAUDE_SKILL_DIR}/prompts/work_builder.md 生成 Work Skill 内容。
参考 ${CLAUDE_SKILL_DIR}/prompts/persona_builder.md 生成 Persona 内容(5 层结构)。
向用户展示摘要(各 5-8 行),询问:
Work Skill 摘要:
- 研究方向:{xxx}
- 方法路径:{xxx}
- 论文/实验规范:{xxx}
...
Persona 摘要:
- 指导方式:{xxx}
- 反馈风格:{xxx}
- 决策模式:{xxx}
...
确认生成?还是需要调整?
用户确认后,执行以下写入操作:
1. 创建目录结构(用 Bash):
mkdir -p mentors/{slug}/versions
mkdir -p mentors/{slug}/knowledge/docs
mkdir -p mentors/{slug}/knowledge/messages
mkdir -p mentors/{slug}/knowledge/emails
2. 写入 work.md(用 Write 工具):
路径:mentors/{slug}/work.md
3. 写入 persona.md(用 Write 工具):
路径:mentors/{slug}/persona.md
4. 写入 meta.json(用 Write 工具):
路径:mentors/{slug}/meta.json
内容:
{
"name": "{name}",
"slug": "{slug}",
"created_at": "{ISO时间}",
"updated_at": "{ISO时间}",
"version": "v1",
"profile": {
"school": "{school}",
"department": "{department}",
"title": "{title}",
"research_area": "{research_area}"
},
"tags": {
"guidance_style": [...],
"feedback_style": [...],
"requirement_level": [...],
"training_orientation": [...],
"boundaries": [...]
},
"impression": "{impression}",
"knowledge_sources": [...已导入文件列表],
"corrections_count": 0
}
5. 生成完整 SKILL.md(用 Write 工具):
路径:mentors/{slug}/SKILL.md
SKILL.md 结构:
---