文件预览

SKILL.md

查看 Bohrium SciencePedia 技能包中的文件内容。

文件内容

SKILL.md

---
name: bohrium-wiki
description: "Browse and search Bohrium SciencePedia (encyclopedia) via open.bohrium.com. Use when: user asks about finding scientific topics, reading encyclopedia-style entries, browsing by major/level/field hierarchy, or looking up a specific concept's article. NOT for: paper search (use bohrium-paper-search), knowledge base management (use bohrium-knowledge-base)."
---

# SKILL: Bohrium SciencePedia

## Overview

Access **Bohrium SciencePedia** through the `/v1/literature-sage/wiki_v2/*` endpoints on `open.bohrium.com` — a hierarchical encyclopedia of scientific topics organized as `major` → `level` → `field` → `topic`.

**Use when**:

- Getting a quick definition of a scientific term (more focused than web-search — encyclopedia-style entries)
- Browsing by discipline (e.g., all subfields under materials science)
- Retrieving the full article of a topic (intro / applications / background sections)

**Don't use for**:

- Paper search → `bohrium-paper-search`
- Managing your own knowledge base → `bohrium-knowledge-base`

**No CLI support** — HTTP API only.

## Auth configuration

```json
"bohrium-wiki": {
  "enabled": true,
  "apiKey": "YOUR_ACCESS_KEY",
  "env": {
    "ACCESS_KEY": "YOUR_ACCESS_KEY"
  }
}
```

## Common template

```python
import os, requests

AK = os.environ["ACCESS_KEY"]
BASE = "https://open.bohrium.com/openapi/v1/literature-sage/wiki_v2"
H = {"accessKey": AK, "Content-Type": "application/json"}

# Optional global defaults
DEFAULTS = {"language": "en-US", "style": "Feynman"}
# language: "en-US" / "zh-CN"
# style: "Feynman" for accessible tone, or others
```

---

## Actions overview

| Action | Method | Purpose |
|--------|--------|---------|
| `info` | GET | Basic SciencePedia info |
| `major_levels` | POST | List all majors and their levels |
| `get_wiki_index` | POST | Fetch index for a given nodeId / fieldId |
| `get_level_wiki_index` | POST | List nodes filtered by `node_types` |
| `search_index_name` | POST | Keyword search of index entries |
| `level_fields` | POST | List fields under a set of level nodes |
| `article` | POST | Fetch the article body of a node / entry |

---

## 1. Info — `info`

```python
r = requests.get(f"{BASE}/info", headers={"accessKey": AK})
print(r.json())
```

---

## 2. Majors & levels — `major_levels`

```python
r = requests.post(f"{BASE}/major_levels", headers=H, json={**DEFAULTS})
for m in r.json().get("majors", []):
    levels = ", ".join(l["name"] for l in m.get("levels", []))
    print(f"- {m['name']} [{m['node_id']}]  levels: {levels}")
```

---

## 3. Search entries — `search_index_name`

```python
r = requests.post(f"{BASE}/search_index_name", headers=H, json={
    "name": "graphene",
    "node_types": ["field"],   # Filter: major / level / field / topic
    "style": "Feynman",
})
for i, n in enumerate(r.json().get("wiki_indices", []), 1):
    print(f"[{i}] [{n['node_type']}] {n['node_name']}  id={n['node_id']}")
```

---

## 4. All nodes under a level — `get_level_wiki_index`

```python
r = requests.post(f"{BASE}/get_level_wiki_index", headers=H, json={
    "node_types": ["major", "level"],
    **DEFAULTS,
})
for n in r.json().get("wiki_indices", [])[:50]:
    print(f"[{n['node_type']}] {n['node_name']}  ({n['node_id']})")
```

---

## 5. Index for a given node — `get_wiki_index`

```python
r = requests.post(f"{BASE}/get_wiki_index", headers=H, json={
    "node_id": "NODE_ID_HERE",
    # or "field_id": "FIELD_ID_HERE"
    **DEFAULTS,
})
print(r.json())
```

---

## 6. Bulk list fields under level — `level_fields`

```python
r = requests.post(f"{BASE}/level_fields", headers=H, json={
    "node_ids": ["LEVEL_NODE_ID1", "LEVEL_NODE_ID2"],
    "page_num": 1, "page_size": 10,
    **DEFAULTS,
})
for row in r.json().get("items", []):
    major = row.get("major", {}).get("name")
    level = row.get("level", {}).get("name")
    field = row.get("field", {}).get("name")
    print(f"- {major}/{level}/{field}  topics={row.get('topic_count')}")
```

---

## 7. Article body — `article`

```python
r = requests.post(f"{BASE}/article", headers=H, json={
    "node_id": "NODE_ID",         # or "entry_id": "ENTRY_ID"
    **DEFAULTS,
})
doc = r.json().get("document", {})
print(f"# {doc.get('article_name')}")
print(doc.get("main_content", "")[:2000])
```

**Common fields**: `document.article_name` / `document.main_content` / `document.applications` / `document.seo_title`.

---

## curl example

```bash
AK="YOUR_ACCESS_KEY"
BASE="https://open.bohrium.com/openapi/v1/literature-sage/wiki_v2"

# Search entries by keyword
curl -s -X POST "$BASE/search_index_name" \
  -H "accessKey: $AK" -H "Content-Type: application/json" \
  -d '{"name":"graphene","node_types":["field"],"style":"Feynman"}' \
  | jq '.wiki_indices[] | {node_name, node_type, node_id}'
```

---

## Troubleshooting

| Symptom | Cause | Fix |
|---------|-------|-----|
| `No matches for "..."` | Keyword not in index | Try synonyms; expand `node_types` to `["field","topic","major","level"]` |
| Empty `article` | Wrong nodeId/entryId or no body | First call `search_index_name` to obtain the correct `node_id` |
| All-English (or all-Chinese) results | Wrong `language` | Set `"language": "en-US"` or `"zh-CN"` |

## Pairs well with

- **wiki** for a baseline explanation of a concept → **paper-search** to go deep
- **wiki** to browse the discipline tree (`major_levels`) → pick a field → **scholar** to find leading researchers