360 Secure SkillHub
360 安全技能中心

Bohrium Paper & Patent Search

该 Skill 说明如何调用 Bohrium 的 RAG 检索接口:用 Python requests 或 curl 提交关键词列表与自然语言问题,检索英文论文或全球专利,并支持日期范围、JCR 分区、收录数据库与结果数量过滤,返回含 DOI、标题、摘要、期刊、影响因子和引用数的结构化结果。

sorrymaker0624
sorrymaker0624
热度 33.15
最近更新 2026-06-02 18:53:21
分类:搜索依赖:第三方 API / 代码执行应用场景:研究

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add bohrium-paper-search
Metadata
name
bohrium-paper-search
description
Search academic papers and patents via open.bohrium.com RAG engine. Use when: user asks about searching/finding academic papers, literature review, patent search, or technical survey using keywords or natural language questions. NOT for: knowledge base management, file management, or dataset operations.

SKILL: Bohrium Paper & Patent Search

Overview

Search academic papers and patents using the Bohrium RAG search engine. Combines keyword matching with semantic understanding, supporting natural language queries, date range filtering, JCR zone/database filtering, and AI reranking.

Supported Search Types:

Type Endpoint Corpus
English papers /openapi/v2/paper/rag/pass/keyword English academic papers (title, abstract, corpus, figures)
Patents /openapi/v2/paper/rag/pass/patent Global patents (with classification, assignee filtering)

Use cases: Literature review, technical survey, method comparison, trend analysis.

No CLI support — all operations use the HTTP API.

Authentication

ACCESS_KEY is read from the OpenClaw config ~/.openclaw/openclaw.json:

"bohrium-paper-search": {
  "enabled": true,
  "apiKey": "YOUR_ACCESS_KEY",
  "env": {
    "ACCESS_KEY": "YOUR_ACCESS_KEY"
  }
}

OpenClaw automatically injects env.ACCESS_KEY into the runtime.

Common Code Template

import os, requests

AK = os.environ.get("ACCESS_KEY", "")
BASE = "https://open.bohrium.com"
PAPER_BASE = f"{BASE}/openapi/v2/paper"
HEADERS_JSON = {"accessKey": AK, "Content-Type": "application/json"}

English Paper Search

Basic Search

r = requests.post(f"{PAPER_BASE}/rag/pass/keyword", headers=HEADERS_JSON, json={
    "words": ["deep learning", "molecular dynamics"],
    "question": "How to use deep learning for molecular dynamics simulation?",
    "startTime": "",
    "endTime": "",
    "pageSize": 10
})
data = r.json()
print(f"Found {len(data['data'])} papers")
for p in data["data"]:
    print(f"  [{p['doi']}] {p['enName']}")
    print(f"    Journal: {p.get('publicationEnName', '')}, IF: {p.get('impactFactor', 0)}")
    print(f"    Date: {p['coverDateStart']}, Citations: {p['citationNums']}")

Advanced Search (Date Range + JCR Zone + Database + Type)

r = requests.post(f"{PAPER_BASE}/rag/pass/keyword", headers=HEADERS_JSON, json={
    "words": ["deep learning", "protein structure"],
    "question": "deep learning protein structure prediction",
    "type": 5,                          # Search version (see below)
    "startTime": "2024-01-01",          # Start date YYYY-MM-DD
    "endTime": "2025-01-01",            # End date
    "jcrZones": ["Q1", "Q2"],           # JCR zone filter
    "includeDbs": ["SCI"],              # Database filter
    "areaIds": [],                      # Area IDs (optional)
    "publicationIds": [],               # Publication IDs (optional)
    "pageSize": 20
})

Request Parameters

Parameter Type Required Description
words string[] Yes Keyword list; recommend 3-8 English terms
question string Yes Natural language research question
type integer No Search version for the keyword endpoint, max 5: 0=basic, 1=enhanced, 2=pro, 3=pro2.0, 4=image, 5=title+abstract+corpus+image+target
startTime string No Start date YYYY-MM-DD, empty string for no limit
endTime string No End date YYYY-MM-DD
jcrZones string[] No JCR zone filter, e.g. ["Q1","Q2"]
includeDbs string[] No Database filter, e.g. ["SCI","SSCI"]
areaIds string[] No Area IDs
publicationIds number[] No Publication IDs
subjectIds number[] No Subject IDs
pageSize integer Yes Result count, 1-100, default 50

Response Fields

Field Description
code 0=success
message Status message
data[] Paper list
data[].doi DOI
data[].paperId Paper ID
data[].enName English title
data[].zhName Chinese title
data[].enAbstract English abstract
data[].zhAbstract Chinese abstract
data[].authors Author list
data[].coverDateStart Publication date
data[].publicationEnName Journal name
data[].publicationCover Journal cover URL
data[].impactFactor Impact factor
data[].citationNums Citation count
data[].popularity Popularity score
data[].pieces Related corpus snippet
data[].figures[] Related figures (figureId, imageUrl, enExplain)
data[].languageType 0=English

Patent Search

r = requests.post(f"{PAPER_BASE}/rag/pass/patent", headers=HEADERS_JSON, json={
    "type": 3,
    "words": ["neural network"],
    "question": "neural network",
    "pageSize": 5
})
data = r.json()
for p in data:
    print(f"  Patent: {p}")

Note: Patent search type is capped at 3; English paper keyword search type is capped at 5.

Patent Request Parameters

Parameter Type Required Description
type integer No Patent search version, max 3
words string[] Yes Keyword list
question string Yes Search question or keyword description
pageSize integer Yes Results per page

Patent Response Fields

Returns array format with patent information objects.


Search Tips

Keyword Selection

# GOOD: 3-8 professional terms
words = ["molecular dynamics", "force field", "deep potential", "neural network"]

# BAD: Too generic
words = ["science", "research"]

Combine question for Better Relevance

words is for exact keyword matching, question is for semantic understanding. Best results come from combining both; this applies to English paper keyword search and patent search:

{
    "words": ["GNN", "molecular property", "prediction"],
    "question": "How do graph neural networks predict molecular properties?",
    "pageSize": 20
}

Filter for High-Quality Journals

{
    "words": ["..."],
    "question": "...",
    "jcrZones": ["Q1"],          # Q1 journals only
    "includeDbs": ["SCI"],       # SCI-indexed only
    "startTime": "2023-01-01",   # Recent 2 years
    "endTime": "2025-12-31"
}

curl Examples

AK="YOUR_ACCESS_KEY"
BASE="https://open.bohrium.com"
PAPER_BASE="$BASE/openapi/v2/paper"

# English paper search
curl -s -X POST "$PAPER_BASE/rag/pass/keyword" \
  -H "Content-Type: application/json" \
  -H "accessKey: $AK" \
  -d '{"words":["deep learning","protein"],"question":"deep learning protein structure prediction","type":5,"startTime":"2024-01-01","endTime":"2025-01-01","jcrZones":["Q1"],"pageSize":5}'

# Patent search
curl -s -X POST "$PAPER_BASE/rag/pass/patent" \
  -H "Content-Type: application/json" \
  -H "accessKey: $AK" \
  -d '{"type":3,"words":["neural network"],"question":"neural network","pageSize":5}'

Troubleshooting

Problem Cause Solution
code is non-zero Request parameter error Check message field for details
401 Unauthorized Invalid accessKey Verify ACCESS_KEY is correct
Irrelevant results Keywords too generic or vague question Use 3-8 professional terms + clear question
Empty results Date range too narrow or filters too strict Widen startTime/endTime or remove jcrZones
Response has multiple JSON lines Normal behavior (streaming) Parse first line only: json.loads(response.text.split('\n')[0])
Patent pieces empty Some patents lack corpus indexing Normal; use abstracts for content instead