如何把文稿智库 MCP 挂到通义千问 / 百炼(论文平台、自有后端、百炼应用等)。
工具清单与参数(query / tags / path / knowledge_base 等)以 MCP 工具(参数) 为准。控制台侧栏「千问问答」是站内试用,与正式接入共用同一套工具;只用侧栏时不必按本文接入。
MCP 是什么(一分钟)
接入时不要手写 search / read HTTP。流程是:
- 接入代码只调百炼 Responses API,在
tools里挂上文稿智库的 MCP 地址。 - 百炼让千问决定何时调工具;百炼再去连文稿智库 MCP(SSE)。
- 工具结果回到模型,模型继续推理并给出最终回答。
接入时需要: DashScope API Key(sk-…,调千问)+ 文稿智库 sv_…(让百炼连上 MCP)+ 公网 MCP URL。
接入前准备
| 项 | 说明 |
|---|---|
| 空间 slug | 建库返回的 knowledge_base.slug,或控制台空间地址里的短名 |
| MCP URL | 推荐 https://<公网主机>/{slug}/mcp(已锁空间) |
sv_… | 文稿智库 设置页创建的 API 密钥 |
DASHSCOPE_API_KEY | 阿里云百炼密钥(sk-…),调千问用 |
控制台也可:打开空间 → 侧栏「复制 MCP」,或设置页复制锁定空间的 JSON。
本地调试可用 http://localhost:8080/{slug}/mcp;挂百炼时 server_url 必须对百炼公网可达(HTTPS)。仅本机 127.0.0.1 百炼连不上。
两种入口(/{slug}/mcp 与全局 /mcp)见 MCP 工具 · 入口。
接入请求填什么、模型填什么
Responses 请求里配置的是 MCP 服务本身,不是 search / read 的业务参数:
| 字段 | 谁填 | 作用 |
|---|---|---|
server_url | 接入代码 | MCP 地址;用 /{slug}/mcp 即锁定空间 |
headers.Authorization | 接入代码 | Bearer sv_… |
server_description | 接入代码(可选) | 自然语言提示(先 guide、再 search 等);不是 API 传参 |
server_label | 接入代码 | 标签名,便于区分多个 MCP |
input | 接入代码 | 用户问题 / 写作任务;按学科时在此写明科目 |
query / tags / path / knowledge_base 等 | 模型 | 详见表与语义见 MCP 工具(参数) |
✅ server_url = https://host/{slug}/mcp
❌ 指望 server_description 里写 knowledge_base=xxx 当作强制参数
❌ 在 Responses 请求体里直接塞 tags=[...](无效)
完整示例(Node.js)
npm install openai
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.DASHSCOPE_API_KEY,
baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1",
});
const SLUG = "your-space-slug";
const MCP_HOST = "https://your-host";
const SV_KEY = 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: `${MCP_HOST}/${SLUG}/mcp`,
headers: {
Authorization: `Bearer ${SV_KEY}`,
},
};
const response = await client.responses.create({
model: "qwen3.5-plus", // 须支持 MCP,见百炼文档
input: "根据库里的资料,简要说明某某方法的适用条件。",
tools: [mcpTool],
});
console.log(response.output_text);
流式:
const stream = await client.responses.create({
model: "qwen3.5-plus",
input: "根据库里资料回答:……",
tools: [mcpTool],
stream: true,
});
for await (const event of stream) {
if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
}
}
process.stdout.write("\n");
保存为 qwen-mcp.mjs 后:
export DASHSCOPE_API_KEY=sk-…
export LLMWIKI_API_KEY=sv_…
node qwen-mcp.mjs
官方说明:百炼 · 通过 Responses API 接入 MCP。若使用业务空间专属域名,把 baseURL 换成文档中的 {WorkspaceId}.cn-beijing.maas.aliyuncs.com/... 即可,tools 里 MCP 字段写法相同。
知识库按学科缩小范围
接入时把科目写进 input(并可用 server_description 提醒),由模型调用 search(..., tags=[...])。参数语义见 MCP 工具 · tags。
const SUBJECT_TAGS = ["生命医学", "医学"]; // 一级、二级;可再加三级
const QUESTION = "免疫治疗的适用条件是什么?";
const response = await client.responses.create({
model: "qwen3.5-plus",
input: [
`检索范围:仅限科目 tags = ${JSON.stringify(SUBJECT_TAGS)}(AND)。`,
`调用 search 时必须传 tags 参数,取值与上完全一致;不要用 path 传科目目录。`,
`问题:${QUESTION}`,
].join("\n"),
tools: [
{
...mcpTool,
server_description:
"文稿智库知识库。若用户指定了科目,search 必须带 tags(一级/二级/三级,AND)。" +
"先 guide,再 search/read;可省略 knowledge_base。",
},
],
});
console.log(response.output_text);
精确到三级时例如 ["生命医学", "医学", "临床医学"]。科目须与库内资料上的 tags 一致。
全局 /mcp 时,在 input 中写死 knowledge_base = <slug>(更稳妥仍用 /{slug}/mcp)。
论文写作场景
- 建库并保存
knowledge_base.slug(及id)。 - 写作请求按上文挂载
…/{slug}/mcp+Bearer sv_…。 - 模型自行检索;片段作为工具结果进入上下文。
- 仅当 MCP 不可达时,再走 HTTP 摘录并注入 prompt(回退)。
鉴权对照
| 用途 | 凭证 |
|---|---|
| 调百炼 / 千问 | Authorization: Bearer sk-…(DASHSCOPE_API_KEY) |
| 百炼连接文稿智库 MCP | MCP headers 里 Bearer sv_… |
| 调文稿智库 HTTP API | 同样可用 Bearer sv_… 或登录 JWT |
| 控制台网页 | 登录即可;侧栏问答由站内代连 MCP |
常见踩坑:把 sk- 填进 MCP headers,或把 sv_ 当成 DashScope Key——两边密钥用途不同,不要混用。
相关
MCP 工具(参数) · 论文平台对接 · 典型流程 · 常用标识