# Node.js: das openai-Paket auf Open-Weight-Modelle gerichtet

> Open-Weight-LLMs aus Node.js mit dem openai-Paket aufrufen: ein Aufruf, ein Batch, Streaming und das verbleibende Guthaben. Copy-Paste-Beispiele.

- URL: https://llmwithcrypto.com/de/docs/node/
- Zuletzt aktualisiert: 2026-10-23
- Herausgeber: LLMwithCrypto (https://llmwithcrypto.com)

Das offizielle npm-Paket `openai` funktioniert unverändert: Geben Sie ihm unser `baseURL` und Ihren Schlüssel. Die Beispiele unten sind ES-Module für Node.js 18 oder neuer, das `fetch` und Top-Level-`await` eingebaut hat.

**Kurze Antwort — Wie rufe ich LLMwithCrypto aus Node.js auf?**

Installieren Sie das offizielle Paket mit `npm install openai` und erstellen Sie dann den Client mit `baseURL: "https://llmwithcrypto.com/api/v1"` und `apiKey: process.env.LLMWITHCRYPTO_API_KEY`. **LLMwithCrypto** antwortet auf `client.chat.completions.create()` im OpenAI-Format für 12 Open-Weight-Modelle, mit Streaming und Tool Calls, wo das Modell sie unterstützt, wie am 23. Oktober 2026 dokumentiert.

## Was Sie brauchen

| Attribut | Wert |
| --- | --- |
| Node.js | 18 oder neuer, ES-Module (`.mjs` oder `"type": "module"`) |
| Paket | `openai` (offiziell) |
| Base URL | `https://llmwithcrypto.com/api/v1` |
| Key | In der Umgebungsvariable `LLMWITHCRYPTO_API_KEY`, niemals im Code oder im Browser |

## Wie sende ich eine einzelne Anfrage?

Erstellen Sie den Client einmal beim Start und verwenden Sie ihn überall wieder. Bewahren Sie den Key auf dem Server auf: Ein Key, der im Browser-Code ausgeliefert wird, kann von jedem gelesen werden, der die Seite öffnet. Rufen Sie die API daher von Ihrem Backend auf und senden Sie nur die Antwort an den Browser.

*one-call.mjs*

```javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://llmwithcrypto.com/api/v1',
  apiKey: process.env.LLMWITHCRYPTO_API_KEY,
});

const resp = await client.chat.completions.create({
  model: 'deepseek-v4-pro',
  messages: [
    { role: 'system', content: 'Answer in two sentences.' },
    { role: 'user', content: 'What is a context window?' },
  ],
  max_tokens: 200,
});
console.log(resp.choices[0].message.content);
console.log(resp.usage.prompt_tokens, 'in,', resp.usage.completion_tokens, 'out');

```

## Wie führe ich einen Batch aus, ohne das Rate Limit zu erreichen?

Führen Sie jeweils eine feste Anzahl von Anfragen gleichzeitig aus. Der kleine `mapLimit`-Helper unten hält vier Anfragen in Bearbeitung und gibt die Ergebnisse in der richtigen Reihenfolge zurück; ein zusätzliches Paket ist nicht nötig. Jedes Konto hat ein Anfrage- und Token-Limit pro Minute, das im Dashboard angezeigt wird; fragen Sie den Support, dann kann es erhöht werden.

*batch.mjs*

```javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://llmwithcrypto.com/api/v1',
  apiKey: process.env.LLMWITHCRYPTO_API_KEY,
});

async function translate(text) {
  const resp = await client.chat.completions.create({
    model: 'qwen3-235b-a22b-instruct-2507',
    messages: [
      { role: 'system', content: 'Translate into Spanish. Reply with the translation only.' },
      { role: 'user', content: text },
    ],
    max_tokens: 200,
  });
  return resp.choices[0].message.content;
}

// at most 4 requests in flight
async function mapLimit(items, limit, fn) {
  const out = new Array(items.length);
  let next = 0;
  async function worker() {
    while (next < items.length) {
      const i = next++;
      out[i] = await fn(items[i]);
    }
  }
  await Promise.all(Array.from({ length: limit }, worker));
  return out;
}

const lines = ['Your order has shipped.', 'Your payment was received.', 'Your key was revoked.'];
console.log(await mapLimit(lines, 4, translate));

```

## Wie streame ich die Antwort?

Übergeben Sie `stream: true` und verwenden Sie `for await` für das Ergebnis. Jeder Chunk enthält einen Textabschnitt in `choices[0].delta.content`; mit `stream_options: { include_usage: true }` enthält der letzte Chunk die Token-Zahlen.

*stream.mjs*

```javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://llmwithcrypto.com/api/v1',
  apiKey: process.env.LLMWITHCRYPTO_API_KEY,
});

const stream = await client.chat.completions.create({
  model: 'deepseek-v4.1-flash',
  messages: [{ role: 'user', content: 'Write a haiku about latency.' }],
  stream: true,
  stream_options: { include_usage: true },
  max_tokens: 120,
});
for await (const chunk of stream) {
  const text = chunk.choices[0]?.delta?.content;
  if (text) process.stdout.write(text);
  if (chunk.usage) console.log(`\n${chunk.usage.prompt_tokens} in, ${chunk.usage.completion_tokens} out`);
}

```

## Wie lese ich das verbleibende Guthaben aus?

Der credits-Endpoint ist nicht Teil des OpenAI SDK, rufen Sie ihn daher mit `fetch` auf. Er ist kostenlos; rufen Sie ihn vor einem großen Batch auf, um sicherzustellen, dass das Guthaben dafür ausreicht.

*credits.mjs*

```javascript
const res = await fetch('https://llmwithcrypto.com/api/v1/credits', {
  headers: { Authorization: `Bearer ${process.env.LLMWITHCRYPTO_API_KEY}` },
});
const credits = await res.json();
console.log('credit left:', credits.balance_usd, 'USD');

```

## Wie behandle ich Fehler?

Das SDK wirft bei jedem HTTP-Fehler einen `OpenAI.APIError`, mit dem Status in `err.status` und dem `code` des Bodys in `err.code`. Prüfen Sie den Code, nicht die Meldung: `insufficient_balance` bedeutet aufladen, `model_not_found` bedeutet eine falsche id, `rate_limit_exceeded` bedeutet warten und erneut versuchen.

Das SDK versucht manche Fehler bereits zweimal mit einer Pause erneut (`maxRetries`). Behalten Sie bei langen Batches diesen Standard bei, begrenzen Sie die Nebenläufigkeit wie oben und protokollieren Sie die Fehler, bei denen Sie aufgeben. Die [Fehlerseite](https://llmwithcrypto.com/de/docs/errors/) listet jeden Status und welche davon einen erneuten Versuch wert sind. Fehlgeschlagene Aufrufe kosten nichts: Sie zahlen pro Token aus Ihrem Guthaben: Input- und Output-Tokens werden mit dem eigenen Tokenizer des Modells gezählt und zum Preis des Modells pro 1M Tokens berechnet. Ein Aufruf, der mit einem Fehler endet, kostet nichts.

## Wie stelle ich eine bestehende OpenAI-App um?

Ändern Sie die Client-Optionen, `baseURL` und `apiKey`, und ersetzen Sie jeden `gpt-…`-Modellnamen durch eine id von der [Modellseite](https://llmwithcrypto.com/de/models/). Prompts, Streaming-Code und das Parsen von `choices` und `usage` bleiben unverändert. Führen Sie Ihre Tests mit dem neuen Modell aus, bevor Sie den Traffic umstellen: Tool-Calling und JSON-Ausgabe richten sich nach dem, was das jeweilige Modell unterstützt.

## Node.js: häufige Fragen

### Kann ich die API aus dem Browser aufrufen?

Technisch ja, aber niemals mit Ihrem Key in der Seite. Rufen Sie sie von Ihrem Server aus auf oder von einer serverless Function, die den Key enthält.

### Funktioniert das Vercel AI SDK?

Jede Bibliothek, die eine OpenAI-kompatible Base URL akzeptiert, funktioniert. Die API spricht das OpenAI chat completions-Format: Richten Sie das OpenAI SDK, LangChain oder ein beliebiges OpenAI-kompatibles Tool mit Ihrem API-Schlüssel auf unsere Base-URL und ändern Sie den Modellnamen.

### Was passiert, wenn das Guthaben aufgebraucht ist?

Aufrufe geben `402 insufficient_balance` zurück und kosten nichts. Die [Fehlerseite](https://llmwithcrypto.com/de/docs/errors/) zeigt, wie Sie reagieren.

---

LLMwithCrypto: LLMwithCrypto ist eine OpenAI-kompatible LLM-API für Open-Weight-Modelle — DeepSeek V4 Pro, DeepSeek V4.1 Flash, DeepSeek R1, Qwen3.5 397B A17B, Qwen3 235B A22B Instruct, gpt-oss-120b, gpt-oss-20b, GLM-4.7, Llama 3.3 70B Instruct, Gemma 4 31B, Mistral Large 3, Mistral Small 4 — pro Token aus einem vorausbezahlten Krypto-Guthaben bezahlt, 5 % unter dem Medianpreis der öffentlichen Hosts. Ohne KYC: kein Ausweis, kein Selfie, keine Dokumente. Prompts und Ausgaben werden nicht gespeichert.
