Grok API

TypeScript 与 Node.js 接入 Grok API

View as Markdown

更新于:

使用 OpenAI 包在 TypeScript 和 Node.js 服务端调用 Grok 4.5。示例覆盖 Responses API、类型化事件、流式输出和错误处理。

安装 TypeScript SDK

在 Node.js 项目中安装 OpenAI 包,并把 lockfile 提交到版本库。API 密钥应从服务端环境变量读取,不要写入源代码。

npm
npm install openai
.env
GROK_API_DEV_KEY=sk-lg-YOUR_API_KEY

baseURL 已以 /v1 结尾,调用方法时 SDK 会自行添加 /responses。

发送第一个 Grok 请求

OpenAI SDK 返回类型化响应对象。完整文本位于 output_text,usage 可用于记录 token 用量。

TypeScript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.GROK_API_DEV_KEY,
  baseURL: "https://api.llm-gate.tech/v1",
  timeout: 3_600_000,
  maxRetries: 2,
});

const response = await client.responses.create({
  model: "grok-4.5",
  input: "Explain the event loop in two sentences.",
});

console.log(response.output_text);
console.log(response.usage);

ESM 项目可以使用 top-level await。CommonJS 或旧构建配置可以把调用放入 async 函数。

只在服务端保存 API 密钥

不要在 React Client Component 中创建客户端,也不要通过公共环境变量暴露 GROK_API_DEV_KEY。请从 server route、server action、worker 或独立后端调用 Grok。

Next.js route
// app/api/grok/route.ts
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.GROK_API_DEV_KEY,
  baseURL: "https://api.llm-gate.tech/v1",
});

export async function POST(request: Request) {
  const { input } = await request.json();
  const response = await client.responses.create({
    model: "grok-4.5",
    input,
  });

  return Response.json({ text: response.output_text });
}

只向浏览器返回必要数据。日志中不要记录 API 密钥或完整的私密 prompt。

在 Node.js 中流式输出

设置 stream: true 并遍历返回的异步流。文本位于 response.output_text.delta,response.completed 包含最终响应和 usage。

TypeScript streaming
const stream = await client.responses.create({
  model: "grok-4.5",
  input: "Write a short TypeScript example.",
  stream: true,
});

for await (const event of stream) {
  if (event.type === "response.output_text.delta") {
    process.stdout.write(event.delta);
  }
}

浏览器断开连接后,如果运行环境支持取消,请停止上游请求。

错误与重试

OpenAI.APIError 提供 HTTP 状态和错误名称。可以有限重试 429 和临时 5xx,但 400、401、403 和 404 应先修正原因。

TypeScript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.GROK_API_DEV_KEY,
  baseURL: "https://api.llm-gate.tech/v1",
  maxRetries: 2,
  timeout: 3_600_000,
});
  • timeout 应小于反向代理的超时时间。
  • 使用队列或 semaphore 限制并发请求。
  • 不要在日志中记录 GROK_API_DEV_KEY 或完整私密输入。
  • 需要支持排查时请保存 response ID。

API 错误

相关页面