Home >博客

BigModel API 怎么用?Node.js 调用完整教程

Published Updated

做后端工具的人,把 Node.js 和大模型 API 接起来,本质上就是一次 HTTP 请求加一段 JSON。这篇教程从零讲清楚怎么用 Node.js 调用 BigModel API:前置条件、第一次请求、参数说明、错误处理、流式输出,最后给一份能直接跑起来的完整示例。

开始之前需要准备什么

写代码之前,先确认两件事:

  • Node.js 18 或更高版本——示例用 Node 内置的 fetch,不需要额外装 HTTP 客户端库。Node 16 需要补 polyfill,18+ 最省事。
  • 一个 BigModel API Key——在账号后台创建。把它当密码对待:放到环境变量里,不要提交进代码仓库。

初始化项目

建一个目录并初始化 package.json,项目本身没有依赖:

mkdir bigmodel-node-demo
cd bigmodel-node-demo
npm init -y

把 Key 存到环境变量:

export BIGMODEL_API_KEY="你的key"

发起第一次请求

新建 first-request.mjs,写一个最简的对话请求:

const apiKey = process.env.BIGMODEL_API_KEY;
const endpoint = process.env.BIGMODEL_API_URL || 'https://api.bigmodel.org/v1/chat/completions';

const response = await fetch(endpoint, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${apiKey}`
  },
  body: JSON.stringify({
    model: 'bigmodel-latest',
    messages: [
      { role: 'system', content: '你是一个简洁的技术助手。' },
      { role: 'user', content: '用一句话解释 BigModel API。' }
    ],
    temperature: 0.7
  })
});

if (!response.ok) {
  throw new Error(`请求失败:${response.status} ${await response.text()}`);
}

const data = await response.json();
console.log(data.choices[0].message.content);

node first-request.mjs 运行。重点是 messages 数组:每一轮都是 role 加 content,模型把整个对话历史作为上下文。

理解请求参数

  • model——要用的模型标识,选你账号下可用的。
  • messages——从旧到新的对话记录。
  • temperature——控制随机性。0–0.3 适合抽取、分类这类确定性任务,0.8–1 适合创意写作。
  • max_tokens——限制生成长度,控制成本和响应大小。
  • stream——设为 true 时,token 会增量返回而不是一次给完整响应。

大多数报错都来自传了接口不认识的字段,或者模型名写错。调试前先对照 API 文档核一遍参数。

错误处理

用 HTTP 状态码判断问题:

  • 400——参数格式错误或字段不支持,看错误体里的提示。
  • 401——Key 缺失或无效,检查 Key 和 Authorization 头格式。
  • 429——触发限流,尊重 Retry-After 头,或做指数退避。
  • 5xx——服务端问题,指数退避加抖动后重试。
async function callWithRetry(fn, { retries = 3 } = {}) {
  for (let attempt = 0; attempt <= retries; attempt++) {
    try {
      return await fn();
    } catch (error) {
      if (attempt === retries || !isRetryable(error)) throw error;
      await new Promise(resolve => setTimeout(resolve, 2 ** attempt * 500));
    }
  }
}

流式输出

把 stream 设为 true,然后读取响应体流。接口返回 Server-Sent Events,每行 data: 后面是一段 JSON。

const response = await fetch(endpoint, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${apiKey}` },
  body: JSON.stringify({ model, messages, stream: true })
});

const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  const chunk = decoder.decode(value, { stream: true });
  process.stdout.write(chunk);
}

长回答用流式体验更好,还能在满足条件时提前中断,比如输出完第一句话就停。

完整示例

下面这段把上面的能力串起来:带重试、带封装、输出干净。模型名换成你账号可用的即可。

// ask.mjs
const apiKey = process.env.BIGMODEL_API_KEY;

async function ask(model, messages, options = {}) {
  const response = await fetch('https://api.bigmodel.org/v1/chat/completions', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${apiKey}` },
    body: JSON.stringify({ model, messages, ...options })
  });
  if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
  const data = await response.json();
  return data.choices[0].message.content;
}

const answer = await ask('bigmodel-latest', [
  { role: 'user', content: '用一段话介绍正则测试工具。' }
], { temperature: 0.5, max_tokens: 300 });

console.log(answer);

常见问题

一定要用 SDK 吗?不用。接口就是 HTTPS + JSON,fetch 足够,SDK 只是多了重试和类型定义的便利。

接口地址从哪里来?以官方文档给的 baseUrl 为准,不同账号区域可能不同。建议放到环境变量,换环境不用改代码。

怎么保证 Key 安全?用环境变量或密钥管理服务。不要写死在代码里、不要打日志,泄露了立刻轮换。

下一步

先跑通一次非流式请求,确认响应结构,再加重试和流式。稳定之后把调用封装成独立模块,业务代码就不用碰 HTTP 细节了。

FAQ

用 Node.js 调用 BigModel API 一定要 SDK 吗?
不用。接口就是 HTTPS + JSON,Node 18+ 自带的 fetch 就够用,SDK 只是多了重试和类型定义的便利。
调用报 429 怎么办?
说明触发限流。尊重响应里的 Retry-After 头,或者用指数退避加抖动后重试,不要立刻连发。
BigModel API 支持流式输出吗?
支持。把请求参数 stream 设为 true,然后读取响应体的 Server-Sent Events,每行 data: 后面是一段 JSON。

目录

信息

  • 点击34
  • 发布日期2026/09/14
0/500
友善分享您的看法。

更多帖子

探索本节更多文章