ai4scholar 0.3.4 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/src/hooks/scholar-mode.js +1 -1
- package/dist/src/hooks/scholar-mode.js.map +1 -1
- package/dist/src/tools/auto-cite.d.ts +24 -0
- package/dist/src/tools/auto-cite.d.ts.map +1 -0
- package/dist/src/tools/auto-cite.js +137 -0
- package/dist/src/tools/auto-cite.js.map +1 -0
- package/dist/src/tools/sci-draw.d.ts +24 -0
- package/dist/src/tools/sci-draw.d.ts.map +1 -0
- package/dist/src/tools/sci-draw.js +113 -0
- package/dist/src/tools/sci-draw.js.map +1 -0
- package/docs/tutorial.md +110 -66
- package/package.json +1 -1
- package/skills/literature-survey/SKILL.md +7 -0
- package/skills/auto-cite/SKILL.md +0 -150
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ Powered by [ai4scholar.net](https://ai4scholar.net).
|
|
|
6
6
|
|
|
7
7
|
## What It Does
|
|
8
8
|
|
|
9
|
-
AI4Scholar gives your OpenClaw agent direct access to **6 academic platforms** through **
|
|
9
|
+
AI4Scholar gives your OpenClaw agent direct access to **6 academic platforms** through **37 built-in tools**, plus a literature survey skill for comprehensive report generation.
|
|
10
10
|
|
|
11
11
|
### Platforms
|
|
12
12
|
|
|
@@ -19,7 +19,7 @@ AI4Scholar gives your OpenClaw agent direct access to **6 academic platforms** t
|
|
|
19
19
|
| **bioRxiv** | Biology preprints |
|
|
20
20
|
| **medRxiv** | Health sciences preprints |
|
|
21
21
|
|
|
22
|
-
### Tools (
|
|
22
|
+
### Tools (37)
|
|
23
23
|
|
|
24
24
|
**Search (9)**
|
|
25
25
|
|
|
@@ -91,12 +91,23 @@ AI4Scholar gives your OpenClaw agent direct access to **6 academic platforms** t
|
|
|
91
91
|
|------|-------------|
|
|
92
92
|
| `paper_quality_rank` | Rank papers by CCF classification, citations, year, h-index |
|
|
93
93
|
|
|
94
|
+
**Auto-Citation (1)**
|
|
95
|
+
|
|
96
|
+
| Tool | Description |
|
|
97
|
+
|------|-------------|
|
|
98
|
+
| `auto_cite` | One-click citation annotation: add real references to academic text (IEEE/APA/Vancouver/Nature styles) |
|
|
99
|
+
|
|
100
|
+
**Scientific Drawing (1)**
|
|
101
|
+
|
|
102
|
+
| Tool | Description |
|
|
103
|
+
|------|-------------|
|
|
104
|
+
| `sci_draw` | AI-powered scientific figure generation (text-to-image, edit, style transfer, SVG, critique) |
|
|
105
|
+
|
|
94
106
|
### Skills
|
|
95
107
|
|
|
96
108
|
| Skill | Description |
|
|
97
109
|
|-------|-------------|
|
|
98
110
|
| **literature-survey** | Multi-source literature survey with HTML report generation |
|
|
99
|
-
| **auto-cite** | Automatically add citation markers and reference list to academic text |
|
|
100
111
|
|
|
101
112
|
### Slash Commands
|
|
102
113
|
|
|
@@ -194,6 +205,8 @@ ai4scholar/
|
|
|
194
205
|
│ │ ├── biorxiv.ts # 6 bioRxiv/medRxiv tools
|
|
195
206
|
│ │ ├── doi-download.ts # 2 DOI-based download tools
|
|
196
207
|
│ │ ├── quality-rank.ts # Paper quality ranking (CCF)
|
|
208
|
+
│ │ ├── auto-cite.ts # Auto-citation via ai4scholar API
|
|
209
|
+
│ │ ├── sci-draw.ts # Scientific figure generation
|
|
197
210
|
│ │ ├── pdf-utils.ts # PDF download & text extraction
|
|
198
211
|
│ │ ├── result.ts # Tool result helpers
|
|
199
212
|
│ │ └── params.ts # Parameter parsing
|
|
@@ -204,9 +217,7 @@ ai4scholar/
|
|
|
204
217
|
├── scripts/ # Python helpers (HTML reports)
|
|
205
218
|
├── assets/ # Report templates
|
|
206
219
|
├── skills/
|
|
207
|
-
│
|
|
208
|
-
│ │ └── SKILL.md
|
|
209
|
-
│ └── auto-cite/
|
|
220
|
+
│ └── literature-survey/
|
|
210
221
|
│ └── SKILL.md
|
|
211
222
|
├── data/
|
|
212
223
|
│ └── ccf_2022.jsonl # CCF ranking data
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAkDlD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,iBAAiB,QAqGtD"}
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,8 @@ import { createArxivSearchTool, createArxivDownloadTool, createArxivReadTool } f
|
|
|
8
8
|
import { createBiorxivSearchTool, createMedrxivSearchTool, createBiorxivDownloadTool, createMedrxivDownloadTool, createBiorxivReadTool, createMedrxivReadTool, } from "./src/tools/biorxiv.js";
|
|
9
9
|
import { createDoiDownloadTool, createDoiReadTool } from "./src/tools/doi-download.js";
|
|
10
10
|
import { createPaperQualityRankTool } from "./src/tools/quality-rank.js";
|
|
11
|
+
import { createAutoCiteTool } from "./src/tools/auto-cite.js";
|
|
12
|
+
import { createSciDrawTool } from "./src/tools/sci-draw.js";
|
|
11
13
|
import { handleLibrary, handleProjects, handleReadingList, } from "./src/commands.js";
|
|
12
14
|
import { createScholarModeHook } from "./src/hooks/scholar-mode.js";
|
|
13
15
|
export default function register(api) {
|
|
@@ -63,6 +65,10 @@ export default function register(api) {
|
|
|
63
65
|
api.registerTool(createDoiReadTool());
|
|
64
66
|
// --- Quality evaluation (1 tool) ---
|
|
65
67
|
api.registerTool(createPaperQualityRankTool());
|
|
68
|
+
// --- Auto-cite (1 tool) ---
|
|
69
|
+
api.registerTool(createAutoCiteTool());
|
|
70
|
+
// --- Scientific drawing (1 tool) ---
|
|
71
|
+
api.registerTool(createSciDrawTool());
|
|
66
72
|
// --- Slash commands ---
|
|
67
73
|
api.registerCommand({
|
|
68
74
|
name: "library",
|
|
@@ -88,6 +94,6 @@ export default function register(api) {
|
|
|
88
94
|
// --- Hooks ---
|
|
89
95
|
api.on("before_prompt_build", createScholarModeHook(), { priority: 100 });
|
|
90
96
|
api.on("before_tool_call", createSkillInjectionHook(path.dirname(api.source)));
|
|
91
|
-
api.logger.info(`AI4Scholar plugin loaded —
|
|
97
|
+
api.logger.info(`AI4Scholar plugin loaded — 37 tools registered (apiKey: ${cfg?.apiKey ? "configured" : "missing"})`);
|
|
92
98
|
}
|
|
93
99
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const SCHOLAR_MODE_PROMPT = `[AI4Scholar] You have
|
|
1
|
+
const SCHOLAR_MODE_PROMPT = `[AI4Scholar] You have 37 academic tools covering Semantic Scholar, PubMed, Google Scholar, arXiv, bioRxiv, and medRxiv. Capabilities: search, paper detail, citations, references, author lookup, recommendations, snippet search, batch queries, title matching, bulk search, PDF download, full-text reading, DOI-based paper download (institutional access), paper quality ranking (CCF), auto-citation (auto_cite tool), and scientific figure generation (sci_draw tool). For paper search or literature questions, call the search tools directly and respond in Markdown. When the user pastes academic text and asks to add citations/references, call the auto_cite tool directly. When the user asks to create scientific figures or diagrams, call the sci_draw tool. Only read the literature-survey SKILL.md when the user explicitly requests an HTML report or a comprehensive multi-source survey.`;
|
|
2
2
|
export function createScholarModeHook() {
|
|
3
3
|
return (event, _context) => {
|
|
4
4
|
if (!event.messages || event.messages.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scholar-mode.js","sourceRoot":"","sources":["../../../src/hooks/scholar-mode.ts"],"names":[],"mappings":"AAgBA,MAAM,mBAAmB,GAAG,
|
|
1
|
+
{"version":3,"file":"scholar-mode.js","sourceRoot":"","sources":["../../../src/hooks/scholar-mode.ts"],"names":[],"mappings":"AAgBA,MAAM,mBAAmB,GAAG,q3BAAq3B,CAAC;AAEl5B,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,KAAgB,EAAE,QAAqB,EAAc,EAAE;QAC7D,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare function createAutoCiteTool(): {
|
|
2
|
+
label: string;
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
parameters: import("@sinclair/typebox").TObject<{
|
|
6
|
+
text: import("@sinclair/typebox").TString;
|
|
7
|
+
mode: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
8
|
+
minCitations: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
9
|
+
field: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
10
|
+
yearPreference: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
11
|
+
excludePreprints: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
12
|
+
excludeConferences: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
13
|
+
citationStyle: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
14
|
+
}>;
|
|
15
|
+
execute: (_id: string, raw: unknown) => Promise<{
|
|
16
|
+
type: "tool_result";
|
|
17
|
+
content: {
|
|
18
|
+
type: "text";
|
|
19
|
+
text: string;
|
|
20
|
+
}[];
|
|
21
|
+
isError?: boolean;
|
|
22
|
+
}>;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=auto-cite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-cite.d.ts","sourceRoot":"","sources":["../../../src/tools/auto-cite.ts"],"names":[],"mappings":"AA8FA,wBAAgB,kBAAkB;;;;;;;;;;;;;;mBA0CT,MAAM,OAAO,OAAO;;;;;;;;EAsC5C"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { Type } from "@sinclair/typebox";
|
|
2
|
+
import { getApiKey } from "./api-client.js";
|
|
3
|
+
import { readString, readNumber } from "./params.js";
|
|
4
|
+
import { Result } from "./result.js";
|
|
5
|
+
const BASE_URL = "https://ai4scholar.net";
|
|
6
|
+
const TIMEOUT_MS = 300_000;
|
|
7
|
+
async function callAutoCiteApi(body) {
|
|
8
|
+
const apiKey = getApiKey();
|
|
9
|
+
if (!apiKey)
|
|
10
|
+
return { ok: false, error: "API key not configured" };
|
|
11
|
+
const res = await fetch(`${BASE_URL}/api/proxy/auto-cite`, {
|
|
12
|
+
method: "POST",
|
|
13
|
+
headers: {
|
|
14
|
+
Authorization: `Bearer ${apiKey}`,
|
|
15
|
+
"Content-Type": "application/json",
|
|
16
|
+
"User-Agent": "ai4scholar-openclaw/0.3",
|
|
17
|
+
},
|
|
18
|
+
body: JSON.stringify(body),
|
|
19
|
+
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
20
|
+
});
|
|
21
|
+
if (!res.ok) {
|
|
22
|
+
const text = await res.text().catch(() => "");
|
|
23
|
+
return { ok: false, error: `HTTP ${res.status}: ${text}` };
|
|
24
|
+
}
|
|
25
|
+
const reader = res.body?.getReader();
|
|
26
|
+
if (!reader)
|
|
27
|
+
return { ok: false, error: "No response body" };
|
|
28
|
+
const decoder = new TextDecoder();
|
|
29
|
+
let buffer = "";
|
|
30
|
+
let result = null;
|
|
31
|
+
let lastError = null;
|
|
32
|
+
while (true) {
|
|
33
|
+
const { done, value } = await reader.read();
|
|
34
|
+
if (done)
|
|
35
|
+
break;
|
|
36
|
+
buffer += decoder.decode(value, { stream: true });
|
|
37
|
+
const lines = buffer.split("\n");
|
|
38
|
+
buffer = lines.pop() || "";
|
|
39
|
+
let currentEvent = "";
|
|
40
|
+
for (const line of lines) {
|
|
41
|
+
if (line.startsWith("event: ")) {
|
|
42
|
+
currentEvent = line.slice(7).trim();
|
|
43
|
+
}
|
|
44
|
+
else if (line.startsWith("data: ")) {
|
|
45
|
+
try {
|
|
46
|
+
const data = JSON.parse(line.slice(6));
|
|
47
|
+
if (currentEvent === "result") {
|
|
48
|
+
result = data;
|
|
49
|
+
}
|
|
50
|
+
else if (currentEvent === "error") {
|
|
51
|
+
lastError = data.message || "Processing error";
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// skip malformed JSON
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (result)
|
|
61
|
+
return { ok: true, data: result };
|
|
62
|
+
return { ok: false, error: lastError || "No result received from auto-cite API" };
|
|
63
|
+
}
|
|
64
|
+
export function createAutoCiteTool() {
|
|
65
|
+
return {
|
|
66
|
+
label: "Auto-Cite Academic Text",
|
|
67
|
+
name: "auto_cite",
|
|
68
|
+
description: "Automatically add real citations to academic text. Analyzes the text, searches matching papers from Semantic Scholar / PubMed / Google Scholar, and inserts citation markers [1], [2] with a formatted reference list. Supports IEEE, APA, Vancouver, Nature, and numbered citation styles. Returns annotated text + references + BibTeX. Processing takes 20-60 seconds.",
|
|
69
|
+
parameters: Type.Object({
|
|
70
|
+
text: Type.String({
|
|
71
|
+
description: "Academic text to annotate with citations (100-10000 characters)",
|
|
72
|
+
}),
|
|
73
|
+
mode: Type.Optional(Type.String({
|
|
74
|
+
description: "'auto' (detect citation locations, default) or 'manual' (use [CITE] markers in text)",
|
|
75
|
+
enum: ["auto", "manual"],
|
|
76
|
+
})),
|
|
77
|
+
minCitations: Type.Optional(Type.Number({
|
|
78
|
+
description: "Minimum number of citations to add in auto mode (default 10)",
|
|
79
|
+
minimum: 1,
|
|
80
|
+
maximum: 50,
|
|
81
|
+
})),
|
|
82
|
+
field: Type.Optional(Type.String({ description: "Academic field for search optimization (e.g. 'computer science', 'biology')" })),
|
|
83
|
+
yearPreference: Type.Optional(Type.Number({ description: "Preferred publication year for cited papers (e.g. 2024)" })),
|
|
84
|
+
excludePreprints: Type.Optional(Type.Boolean({ description: "Exclude preprints from citations (default false)" })),
|
|
85
|
+
excludeConferences: Type.Optional(Type.Boolean({ description: "Exclude conference papers from citations (default false)" })),
|
|
86
|
+
citationStyle: Type.Optional(Type.String({
|
|
87
|
+
description: "Citation format: 'ieee' (default), 'apa', 'vancouver', 'nature', 'numbered'",
|
|
88
|
+
enum: ["ieee", "apa", "vancouver", "nature", "numbered"],
|
|
89
|
+
})),
|
|
90
|
+
}),
|
|
91
|
+
execute: async (_id, raw) => {
|
|
92
|
+
const p = raw;
|
|
93
|
+
const text = readString(p, "text", { required: true });
|
|
94
|
+
if (text.length < 100)
|
|
95
|
+
return Result.err("text_too_short", "Text must be at least 100 characters");
|
|
96
|
+
if (text.length > 10000)
|
|
97
|
+
return Result.err("text_too_long", "Text must be at most 10000 characters");
|
|
98
|
+
const body = { text };
|
|
99
|
+
const mode = readString(p, "mode");
|
|
100
|
+
if (mode)
|
|
101
|
+
body.mode = mode;
|
|
102
|
+
const minCitations = readNumber(p, "minCitations");
|
|
103
|
+
if (minCitations !== undefined)
|
|
104
|
+
body.minCitations = minCitations;
|
|
105
|
+
const field = readString(p, "field");
|
|
106
|
+
if (field)
|
|
107
|
+
body.field = field;
|
|
108
|
+
const yearPref = readNumber(p, "yearPreference");
|
|
109
|
+
if (yearPref !== undefined)
|
|
110
|
+
body.yearPreference = yearPref;
|
|
111
|
+
if (p.excludePreprints !== undefined)
|
|
112
|
+
body.excludePreprints = p.excludePreprints;
|
|
113
|
+
if (p.excludeConferences !== undefined)
|
|
114
|
+
body.excludeConferences = p.excludeConferences;
|
|
115
|
+
const style = readString(p, "citationStyle");
|
|
116
|
+
if (style)
|
|
117
|
+
body.citationStyle = style;
|
|
118
|
+
try {
|
|
119
|
+
const res = await callAutoCiteApi(body);
|
|
120
|
+
if (!res.ok)
|
|
121
|
+
return Result.err("api_error", res.error);
|
|
122
|
+
const { annotatedText, references, bibtex, stats } = res.data;
|
|
123
|
+
return Result.ok({
|
|
124
|
+
annotatedText,
|
|
125
|
+
referenceCount: references.length,
|
|
126
|
+
references,
|
|
127
|
+
bibtex: bibtex || "",
|
|
128
|
+
stats,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
return Result.err("request_failed", e instanceof Error ? e.message : String(e));
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=auto-cite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-cite.js","sourceRoot":"","sources":["../../../src/tools/auto-cite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare function createSciDrawTool(): {
|
|
2
|
+
label: string;
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
parameters: import("@sinclair/typebox").TObject<{
|
|
6
|
+
action: import("@sinclair/typebox").TString;
|
|
7
|
+
prompt: import("@sinclair/typebox").TString;
|
|
8
|
+
model: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
9
|
+
imageSize: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
10
|
+
aspectRatio: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
11
|
+
images: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
|
|
12
|
+
stylePreset: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
13
|
+
lang: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
14
|
+
}>;
|
|
15
|
+
execute: (_id: string, raw: unknown) => Promise<{
|
|
16
|
+
type: "tool_result";
|
|
17
|
+
content: {
|
|
18
|
+
type: "text";
|
|
19
|
+
text: string;
|
|
20
|
+
}[];
|
|
21
|
+
isError?: boolean;
|
|
22
|
+
}>;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=sci-draw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sci-draw.d.ts","sourceRoot":"","sources":["../../../src/tools/sci-draw.ts"],"names":[],"mappings":"AAkBA,wBAAgB,iBAAiB;;;;;;;;;;;;;;mBA8CR,MAAM,OAAO,OAAO;;;;;;;;EAmE5C"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { Type } from "@sinclair/typebox";
|
|
2
|
+
import { getApiKey } from "./api-client.js";
|
|
3
|
+
import { readString } from "./params.js";
|
|
4
|
+
import { Result } from "./result.js";
|
|
5
|
+
const BASE_URL = "https://ai4scholar.net";
|
|
6
|
+
const TIMEOUT_MS = 300_000;
|
|
7
|
+
export function createSciDrawTool() {
|
|
8
|
+
return {
|
|
9
|
+
label: "Scientific Drawing",
|
|
10
|
+
name: "sci_draw",
|
|
11
|
+
description: "Generate or process scientific figures using AI. Actions: 'smart' (auto-optimize prompt, supports Chinese), 'generate' (text-to-image), 'edit' (modify existing image), 'style' (style transfer), 'compose' (combine multiple images), 'iterate' (auto-review and refine), 'critic' (expert review, returns text), 'svg' (generate SVG vector graphics). Models: 'flash' (fast), 'flash31' (balanced, default), 'pro' (high quality). Returns image URL or SVG code.",
|
|
12
|
+
parameters: Type.Object({
|
|
13
|
+
action: Type.String({
|
|
14
|
+
description: "Operation type: 'smart', 'generate', 'edit', 'style', 'compose', 'iterate', 'critic', 'svg'",
|
|
15
|
+
enum: ["smart", "generate", "edit", "style", "compose", "iterate", "critic", "svg"],
|
|
16
|
+
}),
|
|
17
|
+
prompt: Type.String({
|
|
18
|
+
description: "Description or instruction for the image. Can be empty for 'critic' action. Supports Chinese in 'smart' mode.",
|
|
19
|
+
}),
|
|
20
|
+
model: Type.Optional(Type.String({
|
|
21
|
+
description: "Model: 'flash' (fast), 'flash31' (balanced, default), 'pro' (high quality)",
|
|
22
|
+
enum: ["flash", "flash31", "pro"],
|
|
23
|
+
})),
|
|
24
|
+
imageSize: Type.Optional(Type.String({
|
|
25
|
+
description: "Output resolution: '1K', '2K' (default), '4K'",
|
|
26
|
+
enum: ["1K", "2K", "4K"],
|
|
27
|
+
})),
|
|
28
|
+
aspectRatio: Type.Optional(Type.String({
|
|
29
|
+
description: "Aspect ratio: '1:1' (default), '16:9', '4:3', '3:4', '9:16'",
|
|
30
|
+
})),
|
|
31
|
+
images: Type.Optional(Type.Array(Type.String(), {
|
|
32
|
+
description: "Input images as base64 data URIs or URLs. Required for edit/style/compose/iterate/critic.",
|
|
33
|
+
})),
|
|
34
|
+
stylePreset: Type.Optional(Type.String({ description: "Style preset name (for 'style' action)" })),
|
|
35
|
+
lang: Type.Optional(Type.String({
|
|
36
|
+
description: "Language: 'en' (default), 'zh'",
|
|
37
|
+
enum: ["en", "zh"],
|
|
38
|
+
})),
|
|
39
|
+
}),
|
|
40
|
+
execute: async (_id, raw) => {
|
|
41
|
+
const p = raw;
|
|
42
|
+
const apiKey = getApiKey();
|
|
43
|
+
if (!apiKey)
|
|
44
|
+
return Result.err("no_api_key", "API key not configured");
|
|
45
|
+
const action = readString(p, "action", { required: true });
|
|
46
|
+
const prompt = readString(p, "prompt") ?? "";
|
|
47
|
+
const needsImages = ["edit", "style", "compose", "iterate", "critic"];
|
|
48
|
+
const images = p.images;
|
|
49
|
+
if (needsImages.includes(action) && (!images || images.length === 0)) {
|
|
50
|
+
return Result.err("missing_images", `Action '${action}' requires at least one image in the 'images' parameter`);
|
|
51
|
+
}
|
|
52
|
+
if (action === "compose" && images && images.length < 2) {
|
|
53
|
+
return Result.err("insufficient_images", "Action 'compose' requires at least 2 images");
|
|
54
|
+
}
|
|
55
|
+
const body = { action, prompt };
|
|
56
|
+
const model = readString(p, "model");
|
|
57
|
+
if (model)
|
|
58
|
+
body.model = model;
|
|
59
|
+
const imageSize = readString(p, "imageSize");
|
|
60
|
+
if (imageSize)
|
|
61
|
+
body.imageSize = imageSize;
|
|
62
|
+
const aspectRatio = readString(p, "aspectRatio");
|
|
63
|
+
if (aspectRatio)
|
|
64
|
+
body.aspectRatio = aspectRatio;
|
|
65
|
+
if (images)
|
|
66
|
+
body.images = images;
|
|
67
|
+
const stylePreset = readString(p, "stylePreset");
|
|
68
|
+
if (stylePreset)
|
|
69
|
+
body.stylePreset = stylePreset;
|
|
70
|
+
const lang = readString(p, "lang");
|
|
71
|
+
if (lang)
|
|
72
|
+
body.lang = lang;
|
|
73
|
+
try {
|
|
74
|
+
const res = await fetch(`${BASE_URL}/api/proxy/nano/generate`, {
|
|
75
|
+
method: "POST",
|
|
76
|
+
headers: {
|
|
77
|
+
Authorization: `Bearer ${apiKey}`,
|
|
78
|
+
"Content-Type": "application/json",
|
|
79
|
+
"User-Agent": "ai4scholar-openclaw/0.3",
|
|
80
|
+
},
|
|
81
|
+
body: JSON.stringify(body),
|
|
82
|
+
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
83
|
+
});
|
|
84
|
+
if (!res.ok) {
|
|
85
|
+
const errText = await res.text().catch(() => "");
|
|
86
|
+
return Result.err("api_error", `HTTP ${res.status}: ${errText}`);
|
|
87
|
+
}
|
|
88
|
+
const data = (await res.json());
|
|
89
|
+
if (!data.success) {
|
|
90
|
+
return Result.err("generation_failed", "Image generation failed");
|
|
91
|
+
}
|
|
92
|
+
const result = { action };
|
|
93
|
+
if (data.imageUrl)
|
|
94
|
+
result.imageUrl = data.imageUrl;
|
|
95
|
+
if (data.svgCode)
|
|
96
|
+
result.svgCode = data.svgCode;
|
|
97
|
+
if (data.svgUrl)
|
|
98
|
+
result.svgUrl = data.svgUrl;
|
|
99
|
+
if (data.optimizedPrompt)
|
|
100
|
+
result.optimizedPrompt = data.optimizedPrompt;
|
|
101
|
+
if (data.critique)
|
|
102
|
+
result.critique = data.critique;
|
|
103
|
+
if (data.creditCost !== undefined)
|
|
104
|
+
result.creditCost = data.creditCost;
|
|
105
|
+
return Result.ok(result);
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
return Result.err("request_failed", e instanceof Error ? e.message : String(e));
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=sci-draw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sci-draw.js","sourceRoot":"","sources":["../../../src/tools/sci-draw.ts"],"names":[],"mappings":"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"}
|
package/docs/tutorial.md
CHANGED
|
@@ -1,35 +1,74 @@
|
|
|
1
|
-
# AI4Scholar OpenClaw
|
|
1
|
+
# AI4Scholar OpenClaw 教程:安装、配置与使用
|
|
2
2
|
|
|
3
3
|
> 让你的 OpenClaw 龙虾学会搜论文、读全文、评质量、加引用。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
AI4Scholar 提供两种接入方式:
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
| | MCP 方式(轻量) | 插件方式(完整) |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| 安装 | 无需安装,改配置即可 | 需要安装插件 |
|
|
10
|
+
| 学术搜索工具 | ✅ | ✅ 37 个工具 |
|
|
11
|
+
| PDF 下载/阅读 | ✅ | ✅ |
|
|
12
|
+
| 文献自动标注 | ❌ | ✅ `auto_cite` |
|
|
13
|
+
| 科研绘图 | ❌ | ✅ `sci_draw` |
|
|
14
|
+
| 论文质量评估(CCF) | ❌ | ✅ |
|
|
15
|
+
| 文献综述技能 | ❌ | ✅ |
|
|
16
|
+
| Scholar Mode 提示 | ❌ | ✅ |
|
|
17
|
+
| Slash 命令 | ❌ | ✅ |
|
|
8
18
|
|
|
9
|
-
|
|
19
|
+
**推荐**:如果你只想快速体验论文搜索,用 MCP 方式;如果需要完整的科研助手能力,装插件。
|
|
10
20
|
|
|
11
|
-
|
|
12
|
-
- **Node.js** ≥ 18
|
|
13
|
-
- **ai4scholar.net 账号**(用于获取 API Key)
|
|
21
|
+
---
|
|
14
22
|
|
|
15
|
-
|
|
23
|
+
## 一、获取 API Key
|
|
16
24
|
|
|
17
|
-
|
|
25
|
+
1. 打开 [ai4scholar.net](https://ai4scholar.net?src=openclaw)
|
|
26
|
+
2. 注册或登录你的账号
|
|
27
|
+
3. 点击「创建 API Key」,复制生成的 Key
|
|
28
|
+
|
|
29
|
+
请妥善保管你的 API Key,不要分享给他人。
|
|
18
30
|
|
|
19
31
|
---
|
|
20
32
|
|
|
21
|
-
##
|
|
33
|
+
## 二、方式一:MCP 接入(最简单)
|
|
22
34
|
|
|
23
|
-
|
|
24
|
-
2. 注册或登录你的账号
|
|
25
|
-
3. 进入 [ai4scholar.net](https://ai4scholar.net?src=openclaw)
|
|
26
|
-
4. 点击「创建 API Key」,复制生成的 Key
|
|
35
|
+
只需在 `openclaw.json`(通常在 `~/.openclaw/openclaw.json`)中添加 MCP 服务器配置:
|
|
27
36
|
|
|
28
|
-
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"mcpServers": {
|
|
40
|
+
"ai4scholar": {
|
|
41
|
+
"url": "https://mcp.ai4scholar.net/sse",
|
|
42
|
+
"headers": {
|
|
43
|
+
"Authorization": "Bearer 你的API Key"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
重启 Gateway 即可使用:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
openclaw gateway stop && openclaw gateway start
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
配好后直接跟 Agent 对话就能搜论文了。如果你需要更多能力(文献综述、自动引用、质量评估等),继续往下看插件安装方式。
|
|
29
57
|
|
|
30
58
|
---
|
|
31
59
|
|
|
32
|
-
##
|
|
60
|
+
## 三、方式二:安装插件(完整体验)
|
|
61
|
+
|
|
62
|
+
### 前提条件
|
|
63
|
+
|
|
64
|
+
- **OpenClaw** 已安装并可正常运行(版本 ≥ 2024.0.0)
|
|
65
|
+
- **Node.js** ≥ 18
|
|
66
|
+
|
|
67
|
+
如果你还需要生成 HTML 格式的文献综述报告(可选),额外需要:
|
|
68
|
+
|
|
69
|
+
- **Python** ≥ 3.8
|
|
70
|
+
|
|
71
|
+
### 安装
|
|
33
72
|
|
|
34
73
|
在终端中执行:
|
|
35
74
|
|
|
@@ -46,9 +85,11 @@ npm config set registry https://registry.npmmirror.com
|
|
|
46
85
|
安装完成后,重启 OpenClaw Gateway:
|
|
47
86
|
|
|
48
87
|
```bash
|
|
49
|
-
openclaw gateway
|
|
88
|
+
openclaw gateway stop && openclaw gateway start
|
|
50
89
|
```
|
|
51
90
|
|
|
91
|
+
> `openclaw gateway start` 会以后台服务方式运行,关闭终端也不会停止。如果只想前台调试,用 `openclaw gateway`(Ctrl+C 退出)。
|
|
92
|
+
|
|
52
93
|
### 验证安装
|
|
53
94
|
|
|
54
95
|
```bash
|
|
@@ -69,9 +110,7 @@ pnpm build
|
|
|
69
110
|
openclaw plugins install -l .
|
|
70
111
|
```
|
|
71
112
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
## 四、配置插件
|
|
113
|
+
### 配置 API Key
|
|
75
114
|
|
|
76
115
|
安装完成后,插件已自动启用,但还需要配置 API Key。启动 Gateway 时你会看到提示信息,告诉你如何配置。
|
|
77
116
|
|
|
@@ -93,7 +132,7 @@ API Key 获取地址:[ai4scholar.net](https://ai4scholar.net?src=openclaw)
|
|
|
93
132
|
配置完成后重启 Gateway 即可生效:
|
|
94
133
|
|
|
95
134
|
```bash
|
|
96
|
-
openclaw gateway
|
|
135
|
+
openclaw gateway stop && openclaw gateway start
|
|
97
136
|
```
|
|
98
137
|
|
|
99
138
|
启动日志中出现 `apiKey: configured` 说明配置成功。
|
|
@@ -102,11 +141,11 @@ openclaw gateway
|
|
|
102
141
|
|
|
103
142
|
---
|
|
104
143
|
|
|
105
|
-
##
|
|
144
|
+
## 四、插件能力一览
|
|
106
145
|
|
|
107
|
-
安装后,你的 OpenClaw Agent 将获得 **
|
|
146
|
+
安装后,你的 OpenClaw Agent 将获得 **37 个学术工具**,覆盖 6 大数据库平台。
|
|
108
147
|
|
|
109
|
-
###
|
|
148
|
+
### 4.1 论文搜索
|
|
110
149
|
|
|
111
150
|
| 工具 | 平台 | 说明 |
|
|
112
151
|
|------|------|------|
|
|
@@ -120,7 +159,7 @@ openclaw gateway
|
|
|
120
159
|
| `search_semantic_bulk` | Semantic Scholar | 批量搜索,单次最多 1000 条 |
|
|
121
160
|
| `search_semantic_paper_match` | Semantic Scholar | 按标题精确匹配 |
|
|
122
161
|
|
|
123
|
-
###
|
|
162
|
+
### 4.2 论文详情
|
|
124
163
|
|
|
125
164
|
| 工具 | 说明 |
|
|
126
165
|
|------|------|
|
|
@@ -129,7 +168,7 @@ openclaw gateway
|
|
|
129
168
|
| `get_semantic_paper_batch` | 批量获取论文详情(最多 500 篇) |
|
|
130
169
|
| `get_pubmed_paper_batch` | 批量获取 PubMed 论文详情 |
|
|
131
170
|
|
|
132
|
-
###
|
|
171
|
+
### 4.3 引用与参考文献
|
|
133
172
|
|
|
134
173
|
| 工具 | 说明 |
|
|
135
174
|
|------|------|
|
|
@@ -138,7 +177,7 @@ openclaw gateway
|
|
|
138
177
|
| `get_pubmed_citations` | PubMed 引用查询 |
|
|
139
178
|
| `get_pubmed_related` | PubMed 相关论文推荐 |
|
|
140
179
|
|
|
141
|
-
###
|
|
180
|
+
### 4.4 作者信息
|
|
142
181
|
|
|
143
182
|
| 工具 | 说明 |
|
|
144
183
|
|------|------|
|
|
@@ -148,14 +187,14 @@ openclaw gateway
|
|
|
148
187
|
| `get_semantic_author_batch` | 批量获取作者详情(最多 1000 人) |
|
|
149
188
|
| `get_semantic_paper_authors` | 获取某论文的所有作者详情 |
|
|
150
189
|
|
|
151
|
-
###
|
|
190
|
+
### 4.5 论文推荐
|
|
152
191
|
|
|
153
192
|
| 工具 | 说明 |
|
|
154
193
|
|------|------|
|
|
155
194
|
| `get_semantic_recommendations` | 基于多篇论文推荐相关论文 |
|
|
156
195
|
| `get_semantic_recommendations_for_paper` | 基于单篇论文推荐 |
|
|
157
196
|
|
|
158
|
-
###
|
|
197
|
+
### 4.6 PDF 下载与全文阅读
|
|
159
198
|
|
|
160
199
|
| 工具 | 说明 |
|
|
161
200
|
|------|------|
|
|
@@ -170,15 +209,27 @@ openclaw gateway
|
|
|
170
209
|
| `download_by_doi` | 通过 DOI 下载论文 PDF(支持校园网机构访问) |
|
|
171
210
|
| `read_by_doi` | 通过 DOI 下载并提取论文全文 |
|
|
172
211
|
|
|
173
|
-
###
|
|
212
|
+
### 4.7 论文质量评估
|
|
174
213
|
|
|
175
214
|
| 工具 | 说明 |
|
|
176
215
|
|------|------|
|
|
177
216
|
| `paper_quality_rank` | 基于 CCF 分级、引用量、发表年份、作者 h-index 综合评分排序 |
|
|
178
217
|
|
|
218
|
+
### 4.8 文献自动标注
|
|
219
|
+
|
|
220
|
+
| 工具 | 说明 |
|
|
221
|
+
|------|------|
|
|
222
|
+
| `auto_cite` | 一键为学术文本添加真实引用,支持 IEEE / APA / Vancouver / Nature 格式,返回标注文本 + 参考文献列表 + BibTeX |
|
|
223
|
+
|
|
224
|
+
### 4.9 科研绘图
|
|
225
|
+
|
|
226
|
+
| 工具 | 说明 |
|
|
227
|
+
|------|------|
|
|
228
|
+
| `sci_draw` | AI 科研绘图:智能绘图(支持中文)、文生图、图片编辑、风格转换、多图组合、迭代优化、图片评审、SVG 矢量图 |
|
|
229
|
+
|
|
179
230
|
---
|
|
180
231
|
|
|
181
|
-
##
|
|
232
|
+
## 五、Slash 命令
|
|
182
233
|
|
|
183
234
|
安装插件后,你可以在聊天中使用以下快捷命令:
|
|
184
235
|
|
|
@@ -190,11 +241,9 @@ openclaw gateway
|
|
|
190
241
|
|
|
191
242
|
---
|
|
192
243
|
|
|
193
|
-
##
|
|
194
|
-
|
|
195
|
-
插件包含两个 AI 技能,Agent 会根据你的需求自动调用。
|
|
244
|
+
## 六、内置技能
|
|
196
245
|
|
|
197
|
-
###
|
|
246
|
+
### 6.1 文献综述(literature-survey)
|
|
198
247
|
|
|
199
248
|
**触发方式**:当你明确要求 Agent 做一份完整的文献综述或生成 HTML 报告时。
|
|
200
249
|
|
|
@@ -207,34 +256,9 @@ openclaw gateway
|
|
|
207
256
|
|
|
208
257
|
Agent 会自动执行多轮搜索、筛选、整理,生成结构化的综述报告。
|
|
209
258
|
|
|
210
|
-
### 7.2 自动引用标注(auto-cite)
|
|
211
|
-
|
|
212
|
-
**触发方式**:当你粘贴一段学术文本,并要求 Agent 添加引用/参考文献时。
|
|
213
|
-
|
|
214
|
-
**示例**:
|
|
215
|
-
|
|
216
|
-
```
|
|
217
|
-
请给下面这段文字加上引用:
|
|
218
|
-
|
|
219
|
-
Large language models have shown remarkable capabilities in understanding
|
|
220
|
-
and generating scientific text. Recent studies demonstrate that these models
|
|
221
|
-
can assist in hypothesis generation, experimental design, and data analysis.
|
|
222
|
-
The integration of tool-use capabilities further enhances their potential
|
|
223
|
-
for automated scientific discovery.
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
Agent 会自动:
|
|
227
|
-
1. 分析文本,识别需要引用的断言
|
|
228
|
-
2. 在 Semantic Scholar、PubMed 等平台搜索匹配论文
|
|
229
|
-
3. 用 `paper_quality_rank` 评估候选论文质量
|
|
230
|
-
4. 在原文中插入引用标记 [1]、[2, 3]
|
|
231
|
-
5. 在末尾生成 APA 格式参考文献列表
|
|
232
|
-
|
|
233
|
-
所有引用的论文都是从真实数据库搜索得到的,DOI 可验证。
|
|
234
|
-
|
|
235
259
|
---
|
|
236
260
|
|
|
237
|
-
##
|
|
261
|
+
## 七、使用示例
|
|
238
262
|
|
|
239
263
|
以下是一些常见的使用场景,直接在聊天中发送即可。
|
|
240
264
|
|
|
@@ -283,9 +307,25 @@ Agent 会自动:
|
|
|
283
307
|
### 自动加引用
|
|
284
308
|
|
|
285
309
|
```
|
|
286
|
-
给下面这段 Introduction
|
|
310
|
+
给下面这段 Introduction 加上引用,用 IEEE 格式:
|
|
311
|
+
|
|
312
|
+
(粘贴你的学术文本,100-10000 字符)
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
Agent 会调用 `auto_cite` 工具,服务端自动完成引用匹配,返回标注好的文本和参考文献列表(约 20-60 秒)。
|
|
316
|
+
|
|
317
|
+
### 科研绘图
|
|
318
|
+
|
|
319
|
+
```
|
|
320
|
+
帮我画一张蛋白质结构示意图,标注 alpha helix 和 beta sheet
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
帮我画一张 CRISPR-Cas9 基因编辑机制图,用高质量模式
|
|
325
|
+
```
|
|
287
326
|
|
|
288
|
-
|
|
327
|
+
```
|
|
328
|
+
把这张图转换成论文风格(发送图片后)
|
|
289
329
|
```
|
|
290
330
|
|
|
291
331
|
### 文献综述
|
|
@@ -297,7 +337,7 @@ Agent 会自动:
|
|
|
297
337
|
|
|
298
338
|
---
|
|
299
339
|
|
|
300
|
-
##
|
|
340
|
+
## 八、常见问题
|
|
301
341
|
|
|
302
342
|
### Q: 安装后提示 "plugin not found"
|
|
303
343
|
|
|
@@ -330,11 +370,15 @@ PDF 文本提取依赖论文的 PDF 格式。扫描版 PDF 或图片较多的论
|
|
|
330
370
|
openclaw plugins install ai4scholar
|
|
331
371
|
```
|
|
332
372
|
|
|
333
|
-
|
|
373
|
+
重新执行安装命令会自动更新到最新版本。更新后重启 Gateway:
|
|
374
|
+
|
|
375
|
+
```bash
|
|
376
|
+
openclaw gateway stop && openclaw gateway start
|
|
377
|
+
```
|
|
334
378
|
|
|
335
379
|
---
|
|
336
380
|
|
|
337
|
-
##
|
|
381
|
+
## 九、反馈与贡献
|
|
338
382
|
|
|
339
383
|
- **GitHub**: [github.com/literaf/ai4scholar](https://github.com/literaf/ai4scholar)
|
|
340
384
|
- **网站**: [ai4scholar.net](https://ai4scholar.net)
|
package/package.json
CHANGED
|
@@ -71,6 +71,13 @@ metadata:
|
|
|
71
71
|
|------|---------|
|
|
72
72
|
| `paper_quality_rank` | Rank papers by quality score (CCF classification, citations, year, h-index) |
|
|
73
73
|
|
|
74
|
+
### Auto-Citation & Scientific Drawing
|
|
75
|
+
|
|
76
|
+
| Tool | Purpose |
|
|
77
|
+
|------|---------|
|
|
78
|
+
| `auto_cite` | Automatically add real citations to academic text (server-side, supports IEEE/APA/Vancouver/Nature styles) |
|
|
79
|
+
| `sci_draw` | Generate scientific figures with AI (text-to-image, edit, style transfer, SVG, critique) |
|
|
80
|
+
|
|
74
81
|
### PDF Download & Full-text Reading
|
|
75
82
|
|
|
76
83
|
| Tool | Purpose |
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: auto-cite
|
|
3
|
-
description: "Automatically add citation markers to academic text and generate a numbered reference list. Use when the user pastes a paragraph or section (e.g. Introduction, Related Work) and asks to add citations/references."
|
|
4
|
-
metadata:
|
|
5
|
-
{
|
|
6
|
-
"openclaw":
|
|
7
|
-
{
|
|
8
|
-
"emoji": "📎",
|
|
9
|
-
},
|
|
10
|
-
}
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Auto-Cite: Automatic Citation Annotation
|
|
14
|
-
|
|
15
|
-
**Don't ask permission. Just do it.**
|
|
16
|
-
|
|
17
|
-
## What This Skill Does
|
|
18
|
-
|
|
19
|
-
User pastes academic text → You identify where citations are needed → Search real papers → Insert citation markers [1], [2, 3] → Append a numbered APA reference list.
|
|
20
|
-
|
|
21
|
-
Every cited paper MUST come from a real database (Semantic Scholar, PubMed, arXiv, bioRxiv, medRxiv). Never fabricate papers.
|
|
22
|
-
|
|
23
|
-
## Workflow
|
|
24
|
-
|
|
25
|
-
### Step 1: Analyze the Text
|
|
26
|
-
|
|
27
|
-
Read the entire text. For each sentence, decide:
|
|
28
|
-
|
|
29
|
-
**Needs citation:**
|
|
30
|
-
- Factual claims ("X has been shown to...", "Studies have demonstrated...")
|
|
31
|
-
- Methodological references ("The Transformer architecture...", "Using the BERT model...")
|
|
32
|
-
- Statistical or quantitative claims ("affects 30% of...", "outperforms by 5%...")
|
|
33
|
-
- Domain consensus ("It is widely accepted that...")
|
|
34
|
-
- Comparisons or enumerations of existing methods
|
|
35
|
-
|
|
36
|
-
**Does NOT need citation:**
|
|
37
|
-
- The author's own contributions or opinions
|
|
38
|
-
- Common knowledge ("Neural networks are computational models...")
|
|
39
|
-
- Transitional sentences and connective text
|
|
40
|
-
- Descriptions of the current paper's method
|
|
41
|
-
|
|
42
|
-
Output a mental list of citation positions, each with:
|
|
43
|
-
- The sentence or clause that needs a citation
|
|
44
|
-
- What kind of support it needs (foundational work, method origin, evidence, survey)
|
|
45
|
-
- 2-3 English search keywords
|
|
46
|
-
|
|
47
|
-
### Step 2: Search Papers
|
|
48
|
-
|
|
49
|
-
For each citation position, search across appropriate platforms:
|
|
50
|
-
|
|
51
|
-
| Text Domain | Primary Search | Secondary Search |
|
|
52
|
-
|-------------|---------------|-----------------|
|
|
53
|
-
| Biomedical / Clinical | `search_pubmed` | `search_semantic`, `search_biorxiv`, `search_medrxiv` |
|
|
54
|
-
| Computer Science / AI / ML | `search_semantic` | `search_arxiv` |
|
|
55
|
-
| General / Cross-discipline | `search_semantic` | `search_pubmed` |
|
|
56
|
-
| Preprints / Cutting-edge | `search_arxiv`, `search_biorxiv` | `search_semantic` |
|
|
57
|
-
|
|
58
|
-
For each position, search 10-20 candidates. Use English search terms even for Chinese input text.
|
|
59
|
-
|
|
60
|
-
**Do NOT use** `search_google_scholar` for this workflow — use the five platforms above.
|
|
61
|
-
|
|
62
|
-
### Step 3: Rank by Quality
|
|
63
|
-
|
|
64
|
-
Call `paper_quality_rank` with the candidate papers to get quality scores and CCF rankings.
|
|
65
|
-
|
|
66
|
-
The tool evaluates:
|
|
67
|
-
- **CCF rank** (A/B/C) for CS venues
|
|
68
|
-
- **Citation count** (log-scaled)
|
|
69
|
-
- **Publication year** (newer = better, within reason)
|
|
70
|
-
- **Author h-index** (if available)
|
|
71
|
-
- **arXiv penalty** (pure arXiv preprints score lower)
|
|
72
|
-
|
|
73
|
-
### Step 4: Select Best Matches
|
|
74
|
-
|
|
75
|
-
For each citation position, pick the best 1-3 papers considering:
|
|
76
|
-
|
|
77
|
-
1. **Semantic relevance** (most important) — does the paper actually discuss what the sentence claims?
|
|
78
|
-
2. **Quality score** from Step 3 — prefer higher-ranked venues and more-cited papers
|
|
79
|
-
3. **Recency** — prefer newer papers unless citing foundational/seminal work
|
|
80
|
-
4. **Diversity** — avoid citing the same paper in too many positions; avoid citing only one research group
|
|
81
|
-
|
|
82
|
-
**Deduplication rules:**
|
|
83
|
-
- If the same paper matches multiple positions, use a single reference number across all positions
|
|
84
|
-
- If a sentence needs multiple citations (e.g., listing several approaches), group them: [3, 5, 7]
|
|
85
|
-
- Aim for 1-2 citations per position; 3 is the maximum unless enumerating methods
|
|
86
|
-
|
|
87
|
-
### Step 5: Generate Output
|
|
88
|
-
|
|
89
|
-
Produce TWO sections:
|
|
90
|
-
|
|
91
|
-
#### Part 1: Annotated Text
|
|
92
|
-
|
|
93
|
-
The original text with [N] markers inserted at the correct positions.
|
|
94
|
-
|
|
95
|
-
Rules:
|
|
96
|
-
- Place markers at the END of the relevant clause or sentence, BEFORE the period
|
|
97
|
-
- Use sequential numbering starting from [1]
|
|
98
|
-
- Group multiple citations: [1, 2] or [3-5]
|
|
99
|
-
- Preserve ALL original text — do not modify wording, only insert markers
|
|
100
|
-
|
|
101
|
-
Example:
|
|
102
|
-
```
|
|
103
|
-
Large language models have achieved remarkable performance across NLP tasks [1, 2]. However, these models often generate outputs misaligned with human values [3]. RLHF has emerged as a promising approach to address this challenge [4, 5].
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
#### Part 2: Reference List
|
|
107
|
-
|
|
108
|
-
Numbered APA-format references at the end. Each entry includes:
|
|
109
|
-
- Authors (first author et al. if >3 authors)
|
|
110
|
-
- Year in parentheses
|
|
111
|
-
- Title
|
|
112
|
-
- Journal/conference name
|
|
113
|
-
- DOI or URL (if available)
|
|
114
|
-
|
|
115
|
-
Format:
|
|
116
|
-
```
|
|
117
|
-
[1] Brown, T. et al. (2020). Language Models are Few-Shot Learners. Advances in Neural Information Processing Systems, 33, 1877-1901.
|
|
118
|
-
[2] Touvron, H. et al. (2023). LLaMA: Open and Efficient Foundation Language Models. arXiv:2302.13971.
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
For papers with DOI, append the DOI link.
|
|
122
|
-
For arXiv papers, use the arXiv ID format.
|
|
123
|
-
For PubMed papers, include the PMID.
|
|
124
|
-
|
|
125
|
-
## Chinese Input
|
|
126
|
-
|
|
127
|
-
When user provides Chinese text:
|
|
128
|
-
- Search keywords must be in **English** (translate internally)
|
|
129
|
-
- Annotated text output remains in **Chinese** (preserve original)
|
|
130
|
-
- Reference list uses English (paper titles, author names stay in original language)
|
|
131
|
-
- Respond in Chinese when communicating with the user
|
|
132
|
-
|
|
133
|
-
## Quality Checklist
|
|
134
|
-
|
|
135
|
-
Before returning results, verify:
|
|
136
|
-
|
|
137
|
-
- [ ] Every [N] marker corresponds to a real paper in the reference list
|
|
138
|
-
- [ ] Every paper in the reference list has been verified via search tools (not hallucinated)
|
|
139
|
-
- [ ] Citation positions are reasonable (factual claims have citations, opinions don't)
|
|
140
|
-
- [ ] No duplicate entries in the reference list
|
|
141
|
-
- [ ] Sequential numbering with no gaps
|
|
142
|
-
- [ ] Reference list is in APA format
|
|
143
|
-
|
|
144
|
-
## Constraints
|
|
145
|
-
|
|
146
|
-
- **Never fabricate papers** — every citation must come from tool search results
|
|
147
|
-
- **Never modify the user's original text** beyond inserting [N] markers
|
|
148
|
-
- Do not add citations to the author's own claims or contributions
|
|
149
|
-
- If a passage is too vague to find good citations, skip it rather than force a bad match
|
|
150
|
-
- Prefer published papers over preprints when both are available
|