# TypeScript 与 Node.js 接入 Grok API

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

## 安装 TypeScript SDK

```bash
npm install openai
```

```bash
GROK_API_DEV_KEY=sk-lg-YOUR_API_KEY
```

## 发送第一个 Grok 请求

```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);
```

## 只在服务端保存 API 密钥

```typescript
// 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 });
}
```

## 在 Node.js 中流式输出

```typescript
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 错误参考](https://grok-api.dev/zh/docs/errors)

## 相关页面

- [Messages API](https://grok-api.dev/zh/docs/messages)
- [Streaming API](https://grok-api.dev/zh/docs/streaming)
- [Python](https://grok-api.dev/zh/docs/python)
- [cURL](https://grok-api.dev/zh/docs/curl)
