Node 18+,只用内置 fetch。完整可跑脚本:仓库根目录 examples/paper-client.mjs。
1. 准备
export LLMWIKI_BASE_URL=http://127.0.0.1:8000
export LLMWIKI_API_TOKEN=sv_你的密钥 # 设置 → API 密钥
下面都假设:
const BASE = process.env.LLMWIKI_BASE_URL.replace(/\/$/, "");
const token = process.env.LLMWIKI_API_TOKEN;
const headers = {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
};
2. 建任务文献库(幂等)
const res = await fetch(`${BASE}/v1/integrations/paper/task-libraries`, {
method: "POST",
headers,
body: JSON.stringify({
external_task_id: "lp_task_6",
name: "用户 · 任务6 · 选题",
}),
});
const { knowledge_base: kb } = await res.json();
// 务必保存(slug = 同一用户下唯一):
// kb.id → HTTP 导入 / 短索引
// kb.slug → MCP …/{slug}/mcp(或参数 knowledge_base);论文 form.llmwikiSlug
3. 导入参考文献
await fetch(`${BASE}/v1/knowledge-bases/${kb.id}/imports/references`, {
method: "POST",
headers,
body: JSON.stringify({
mode: "upsert",
references: [
{
external_id: "ref_1",
title: "标题",
authors: ["作者"],
journal: "期刊",
year: "2023",
abstract: "摘要…",
},
],
}),
});
4. 取短索引(写作引用表)
const index = await fetch(
`${BASE}/v1/knowledge-bases/${kb.id}/reference-index`,
{ headers }
).then((r) => r.json());
// index.items[].citation → 如 "[1] 标题。作者。…"
5. 读某篇正文(可选)
const docs = await fetch(
`${BASE}/v1/knowledge-bases/${kb.id}/documents`,
{ headers }
).then((r) => r.json());
const { content } = await fetch(
`${BASE}/v1/documents/${docs[0].id}/content`,
{ headers }
).then((r) => r.json());
HTTP 读正文仅作 MCP 不可达时的回退:挑几篇 content 注入写作 prompt,避免将全库正文放入上下文。
推荐写作路径:百炼 Responses 挂 MCP,模型自行 search / read(见下)。
6. 写作检索(MCP,推荐)
百炼 Responses 挂 MCP,推荐 …/{kb.slug}/mcp(锁定空间)。模型在写作过程中自行 search / read,不必业务侧先抽摘要再注入。
更多说明见 通义千问 MCP。
npm install openai
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.DASHSCOPE_API_KEY, // sk-… 百炼
baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1",
});
// kb.slug 来自建库响应;MCP 须公网可达(不能是仅本机 127.0.0.1)
const mcpUrl = process.env.LLMWIKI_MCP_URL; // 例:https://your-host/{slug}/mcp
const svKey = process.env.LLMWIKI_API_KEY; // sv_…
const mcpTool = {
type: "mcp",
server_protocol: "sse",
server_label: "wenxian-bianyi",
server_description:
"文稿智库。先 guide,再 search/read;可省略 knowledge_base。用户要求落稿时再 write。",
server_url: mcpUrl,
headers: {
Authorization: `Bearer ${svKey}`,
},
};
const response = await client.responses.create({
model: "qwen3.5-plus",
input: "根据文献库资料撰写相关小节……",
tools: [mcpTool],
});
console.log(response.output_text);
// 若用全局 /mcp:在 input / 系统提示中写死 knowledge_base = kb.slug
7. 一键跑通
node examples/paper-client.mjs
会打印 kb.id、kb.slug、导入结果、摘录长度。
接口说明:论文平台对接