You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: en/bohrium-lkm/SKILL.md
+48-20Lines changed: 48 additions & 20 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,13 +7,13 @@ description: "Large Knowledge Model (LKM) via open.bohrium.com (v1). Use when: u
7
7
8
8
## Overview
9
9
10
-
LKM (Large Knowledge Model) v1 endpoints on `open.bohrium.com` let you search and trace knowledge extracted from scientific literature: search claim/question nodes, retrieve reasoning chains, view a paper-level knowledge graph, trace the reasoning behind a single claim, and batch-hydrate node details by ID.
10
+
LKM (Large Knowledge Model) v1 endpoints on `open.bohrium.com` let you search and trace knowledge extracted from scientific literature: search claim/question/abstract knowledge hits, retrieve reasoning chains, view a paper-level knowledge graph, trace the reasoning behind a single claim, and batch-hydrate node details by ID.
|`POST /v1/lkm/papers/graph`| Paper-level knowledge graph: full graph extracted from a paper |
19
19
|`GET /v1/lkm/claims/{id}/reasoning`| Single-claim reasoning chain: why a claim holds |
@@ -22,7 +22,7 @@ LKM (Large Knowledge Model) v1 endpoints on `open.bohrium.com` let you search an
22
22
23
23
**Choosing an entry point:**
24
24
25
-
- Find claims/questions by keyword/semantics → `/search`
25
+
- Find claims/questions/abstracts by keyword/semantics → `/search`
26
26
- Find whole reasoning chains whose research/experimental process is similar (not just a single matching claim) → `/reasoning/search`
27
27
- Open one paper and view its full structured graph → `/papers/graph`
28
28
- Have a claim ID, want its reasoning chain → `/claims/{id}/reasoning`
@@ -48,7 +48,7 @@ The 5 retrieval endpoints fall into two groups:
48
48
49
49
> `/papers/graph` can be a standalone starting point if you already have a DOI or title; otherwise its `package_id`/`paper_id` typically comes from paper metadata returned by `/search` or `/reasoning/search`.
50
50
51
-
A search entry point's output (node IDs, paper IDs) is exactly the downstream input. Data flow:
51
+
A search entry point's output (node IDs, paper IDs) is exactly the downstream input. `/search` defaults to paper aggregation: each main `variables[]` row is the representative hit for roughly one paper, and same-paper hits are folded into `related`. Abstract hits are paper-level background context; do not treat them as claims or reasoning roots.
52
52
53
53
```mermaid
54
54
flowchart TD
@@ -127,26 +127,34 @@ The examples below call `lkm_data(r)` so the documented `code` contract is alway
127
127
128
128
---
129
129
130
-
## 1. Node search — `POST /search`
130
+
## 1. Public search — `POST /search`
131
131
132
-
Recall claim / question nodes in LKM via natural language. Returns individual nodes, not full reasoning chains.
132
+
Recall claim / question / abstract hits in LKM via natural language. By default, the server aggregates by paper and returns one representative main hit per paper, with additional same-paper hits in `related`. It returns hits and paper metadata, not full reasoning chains.
133
133
134
134
```python
135
135
r = requests.post(f"{BASE}/search", headers=H, json={
136
136
"query": "The 2017 chemistry curriculum standard increases emphasis on real‑world problem situations and contexts (explicitly including industrial production, environmental issues, and socio‑technical “hot topics”).",
|`sort_by`| string | no | Sort strategy, default `comprehensive` when omitted: `relevance`(pure relevance, most on-target top hit) / `recent`(prefers newer once relevance bar is met) / `journal`(prefers high-quality journals once relevance bar is met) / `comprehensive`(relevance+recency+quality+diversity combined) |
161
-
|`scopes`| string[]| no | Restrict node type: `claim`, `question`; omit = no restriction |
169
+
|`scopes`| string[]| no | Restrict hit scope: node types `claim` / `question` / `abstract`, or claim roles `conclusion` / `premise`; omit = no restriction |
162
170
|`filters.visibility`| string | no | Content visibility, usually `public`|
163
171
|`filters.role`| string | no | Restrict claim role: `conclusion`/`premise`/`highlight`|
164
172
|`filters.paper_ids`| string[]| no | Restrict recall to papers, plain numeric IDs, **no `paper:` prefix**, up to 50 |
165
-
|`filters.dois`| string[]| no | Restrict recall to papers by DOI, up to 50; server resolves each to a paper_id then merges with `paper_ids` for filtering; can be combined with `paper_ids`, omit = no paper restriction |
173
+
|`filters.dois`| string[]| no | Restrict recall to papers by DOI, up to 50; can be combined with `paper_ids`|
174
+
|`filters.title`| string | no | Fuzzy paper-title filter. When combined with `paper_ids` / `dois`, all dimensions are intersected (AND). Title filtering returns only the most relevant few papers by default and is not exhaustive. |
175
+
|`filters.publication_date_start` / `filters.publication_date_end`| string | no | Publication-date bounds in `YYYY-MM-DD`; either side may be omitted |
176
+
|`filters.limit_publication_date`| bool | no | Default `true`: apply the given date range; if both bounds are omitted, fall back to approximately the last 20 years. Set `false` to remove publication-date filtering entirely and recall undated papers. |
166
177
|`reasoning_only`| bool | no |`true` returns only conclusion claims backed by a reasoning chain (legacy alias `evidence_only`) |
167
178
|`include_paper_enrich`| bool | no |`true` returns richer paper metadata (larger response; use only when needed) |
168
179
|`offset`| int | no | Page start, max 10000 |
@@ -172,16 +183,21 @@ for v in data["variables"]:
172
183
173
184
| Field | Description |
174
185
|-------|-------------|
175
-
|`data.variables[].id`|Global node ID (`gcn_...`), usable in later reasoning / batch calls|
176
-
|`data.variables[].type`|`claim`or `question`|
177
-
|`data.variables[].role`| Claim role: `conclusion`/`premise`, etc. |
178
-
|`data.variables[].score`| Retrieval rank score — **not credibility/evidence strength**, do not show as confidence |
186
+
|`data.variables[]`|Main result list after aggregation; each row is the representative hit for roughly one paper. `id` is the hit object ID.|
187
+
|`data.variables[].type`|`claim`, `question`, or `abstract`|
188
+
|`data.variables[].role`| Claim role: `conclusion` / `premise`, etc. |
189
+
|`data.variables[].score`/ `rerank_score`| Retrieval rank score — **not credibility/evidence strength**, do not show as confidence |
179
190
|`data.variables[].has_reasoning`| Whether the claim has a traceable reasoning chain (prefer `true` when showing reasoning) |
180
191
|`data.variables[].provenance.source_packages`| Source paper package IDs |
181
-
|`data.papers`| Paper metadata map, key like `paper:<id>`|
192
+
|`data.related`| Other relevant same-paper snippets folded under the main hit. This is same-paper context, not cross-paper recommendation and not the complete paper graph. |
193
+
|`data.papers`| Authoritative paper metadata map, key like `paper:<id>`; use this for paper cards, DOI, journal, impact factor, etc. |
182
194
|`data.has_more`| Whether more pages exist (next page: same body, `offset += page count`) |
183
195
184
-
**Constraint:** when `reasoning_only=true`, `scopes` must be omitted or `["claim"]`, and `filters.role` must be omitted or `conclusion`; conflicts return `290002`.
196
+
**Constraints and policy:**
197
+
198
+
-`paper_ids`, `dois`, and `title` are intersected (AND). If any dimension resolves to no papers, the whole result is empty.
199
+
-`abstract` hits are paper-level context for judging relevance or RAG background. Do **not** use them as claims and do not request reasoning chains from them.
200
+
- When `reasoning_only=true`, `scopes` must be omitted or `["claim"]` / `["conclusion"]`, and `filters.role` must be omitted or `conclusion`; conflicts return `290002`.
185
201
186
202
> **Sorting note:** the recency/quality boosts in `recent`/`journal`/`comprehensive` are all relevance-gated, so they never pull in irrelevant content; existing callers that omit `sort_by` automatically get the better `comprehensive` default ordering.
187
203
@@ -198,7 +214,13 @@ r = requests.post(f"{BASE}/reasoning/search", headers=H, json={
198
214
"retrieval_mode": "hybrid",
199
215
"sort_by": "comprehensive", # optional; default comprehensive; or relevance/recent/journal
200
216
"format": "graph",
201
-
# "filters": {"paper_ids": ["811977903947382784"], "dois": ["10.1038/s41586-021-03381-x"]}, # optional; restrict recall to papers, ≤50 each
217
+
# "filters": {
218
+
# "paper_ids": ["811977903947382784"],
219
+
# "dois": ["10.1038/s41586-021-03381-x"],
220
+
# "title": "phase stability",
221
+
# "publication_date_start": "2020-01-01",
222
+
# "limit_publication_date": True,
223
+
# },
202
224
"offset": 0,
203
225
"limit": 20
204
226
})
@@ -218,6 +240,9 @@ for c in data["reasoning_chains"]:
218
240
|`retrieval_mode`| string | no |`hybrid`(default) / `semantic` / `lexical`|
219
241
|`sort_by`| string | no | Sort strategy, same values/semantics as `/search` (`relevance`/`recent`/`journal`/`comprehensive`), default `comprehensive` when omitted |
220
242
|`filters.paper_ids` / `filters.dois`| string[]| no | Restrict recall to papers, same semantics as `/search`: plain numeric IDs (no `paper:` prefix) / DOIs, ≤50 each, can be combined |
243
+
|`filters.title`| string | no | Fuzzy paper-title filter; intersects (AND) with `paper_ids` and `dois`|
244
+
|`filters.publication_date_start` / `filters.publication_date_end`| string | no | Publication-date bounds in `YYYY-MM-DD`; either side may be omitted |
245
+
|`filters.limit_publication_date`| bool | no | Default `true`; if both bounds are omitted, fall back to approximately the last 20 years. `false` removes publication-date filtering and can recall undated papers. |
0 commit comments