Bohrium Scholar Search & Profile — Bohrium 学者搜索与个人资料
v1搜索 scholars and fetch scholar 性能分析 via open.bohrium.com. Use when: user asks to find/搜索/look up a scholar, re搜索er, or academic by name, affiliation, or re搜索 direction; or asks about a specific re搜索er's publications, citations, h-索引, education, work experience, or re搜索 性能分析. NOT for: paper/patent content 搜索 (use bohrium-paper-搜索), knowledge base management, or file operations.
运行时依赖
安装命令
点击复制技能文档
SKILL:Bohrium Scholar Search & Profile 概述 通过Bohrium OpenAPI网关(open.bohrium.com)查询学者信息。提供两个核心端点: 端点 方法 路径 目的 学者搜索 POST /openapi/v1/paper-server/scholar/search 按姓名/隶属/研究标签搜索学者 学者信息 GET /openapi/v1/paper-server/scholar/info?scholarId=xxx 通过scholarId获取完整的个人资料 典型工作流程: 给定学者姓名 → 搜索候选人 → 选择目标scholarId → 获取完整个人资料(论文、引用、h指数、研究方向、教育/工作历史)。 无CLI支持 — 所有操作使用HTTP API。 身份验证 ACCESS_KEY从OpenClaw配置文件~/.openclaw/openclaw.json中读取: "bohrium-scholar-search": { "enabled": true, "apiKey": "YOUR_ACCESS_KEY", "env": { "ACCESS_KEY": "YOUR_ACCESS_KEY" } } OpenClaw自动将env.ACCESS_KEY注入运行时环境。 运行时解析 读取os.environ["ACCESS_KEY"] ├─ 非空 → 直接使用 └─ 空 → 提示用户: "ACCESS_KEY未在OpenClaw中配置。请在~/.openclaw/openclaw.json中设置bohrium-scholar-search.env.ACCESS_KEY,使用从https://bohrium.dp.tech获取的AccessKey,然后重启OpenClaw会话。" 重要:不要在其他文件中持久化AccessKey或将其硬编码到源代码中;始终通过OpenClaw环境注入。 错误处理 如果API返回无效AccessKey(代码2000)或HTTP 401: 配置在OpenClaw中的密钥无效或已过期。 提示用户: "您的AccessKey无效。请更新~/.openclaw/openclaw.json中的bohrium-scholar-search.env.ACCESS_KEY,然后重启OpenClaw会话。" 常见代码模板 import os, requests AK = os.environ.get("ACCESS_KEY", "") if not AK: raise RuntimeError( "ACCESS_KEY未找到。请在~/.openclaw/openclaw.json中配置它,位于bohrium-scholar-search.env.ACCESS_KEY。" ) BASE = "https://open.bohrium.com/openapi/v1/paper-server" HEADERS_JSON = {"accessKey": AK, "Content-Type": "application/json"} HEADERS = {"accessKey": AK} 标准工作流程 用户询问学者 │ ├─ 已知scholarId → 直接调用学者信息 └─ 未知scholarId → 先调用学者搜索 └─ 从响应中选择items[].scholarId → 调用学者信息 学者搜索 基本搜索 r = requests.post(f"{BASE}/scholar/search", headers=HEADERS_JSON, json={ "name": "Yann LeCun", "page": 1, "pageSize": 5 }) data = r.json() for item in data["data"]["items"]: print(f"[{item['scholarId']}] {item.get('nameEn','')} / {item.get('nameZh','')}") print(f" Org: {item.get('scholarOrgNameEn','')}") print(f" Papers: {item.get('paperNums',0)}, Citations: {item.get('citationNums',0)}, h-index: {item.get('hIndex',0)}") 带过滤条件的搜索 r = requests.post(f"{BASE}/scholar/search", headers=HEADERS_JSON, json={ "name": "Zhang San", "school": "Tsinghua University", "affiliation": "Tsinghua University", "tags": "machine learning", "page": 1, "pageSize": 10 }) 请求参数 参数 类型 必需 描述 name string 是 学者姓名关键字(1-99个字符) school string 否 学校/机构 tags string 否 研究兴趣标签 affiliation string 否隶属(英文) affiliationZh string 否隶属(中文) page int 否 页码,缺省为1 pageSize int 否 页大小,缺省为10 关键响应字段 data.items[] 数组,每个项包含: 字段 描述 scholarId 唯一学者ID,用于信息端点 nameEn / nameZh 英文/中文姓名 paperNums 发表论文数 citationNums 引用数 hIndex h指数 scholarOrgNameEn / scholarOrgNameZh隶属名称(英文/中文) isHighCited 高被引学者标志 学者信息 使用搜索端点返回的scholarId获取完整个人资料: r = requests.get( f"{BASE}/scholar/info", headers=HEADERS, params={"scholarId": scholar_id} ) info = r.json()["data"] print(info.get("nameEn"), "|", info.get("nameZh")) print("Research:", info.get("researchDirection")) print("Education:", info.get("educationBackgroundZh") or info.get("educationBackground")) print("Work:", info.get("workExperienceZh") or info.get("workExperience")) 附加响应字段 除了搜索返回的字段外: 字段 描述 researchDirection 研究方向数组 educationBackground / educationBackgroundZh 教育背景(英文/中文) workExperience / workExperienceZh 工作经历(英文/中文) 演示指南 将API响应格式化为用户友好的摘要,突出: 姓名:nameEn / nameZh 隶属:scholarOrgNameEn / scholarOrgNameZh 指标:paperNums / citationNums / hIndex 高被引:isHighCited 研究方向:researchDirection 教育:优先educationBackgroundZh,回退到educationBackground 工作经历:workExperienceZh或workExperience