Zurück zum Blog

API & SDKAnleitung

LangChain ChatOpenAI mit einer benutzerdefinierten base_url: CheapTokens in Python

Richten Sie LangChains ChatOpenAI auf CheapTokens aus: base_url, Schlüssel und Modell-ID in Python, dann invoke, Streaming und Token-Verbrauch pro Aufruf.

Von CheapTokens TeamVeröffentlicht am Aktualisiert am 4 Min. Lesezeit

Python-Code: ChatOpenAI mit base_url auf die CheapTokens-API gesetzt
Auf dieser Seite
  1. Welche Modell-ID in model gehört
  2. base_url über die Umgebung setzen
  3. Die Antwort streamen
  4. Token-Verbrauch pro Aufruf lesen
  5. Was eine LangChain-Pipeline pro Tag kostet
  6. Was diese Anleitung abdeckt

Sie haben bereits eine LangChain-Chain, die mit ChatOpenAI spricht, und möchten sie auf einem anderen Endpunkt ausführen, ohne sie neu zu schreiben. Das geht so: Übergeben Sie drei Argumente, base_url, api_key und model, und der Rest der Chain bleibt unverändert. CheapTokens spricht das OpenAI-Chat-Completions-Protokoll unter https://api.cheaptokens.dev/v1, daher funktioniert ChatOpenAI direkt damit.

Die folgenden Schritte folgen der LangChain-ChatOpenAI-Dokumentation mit Stand vom 27. Oktober 2026. Die Seite zeigt kein Datum und keine Version, daher lege ich hier keine langchain-openai-Version fest: Installieren Sie die neueste.

Schritt für Schritt

LangChain in drei Schritten verbinden

Installieren

bash
pip install -U langchain-openai

Schlüssel setzen

Bewahren Sie den Schlüssel in einer Umgebungsvariable auf, nicht in der Datei:

bash
export CHEAPTOKENS_API_KEY="your-key"

Modell aufrufen

python
import os
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

msg = llm.invoke("Explain what a token is in one sentence.")
print(msg.content)

invoke() gibt eine Nachricht zurück; .content ist der Antworttext. Das ist die gesamte Verbindung. Holen Sie sich einen Schlüssel und laden Sie das Guthaben in der CheapTokens-Dokumentation auf.

Vier Schritte: base_url setzen, api_key setzen, die vollständige Modell-ID verwenden, usage_metadata lesen
Vier Dinge zum Setzen: base_url, api_key, die vollständige Modell-ID, dann usage lesen

Welche Modell-ID in model gehört#

Verwenden Sie die vollständige ID mit dem Entwickler-Präfix. Ein Kurzname wie deepseek-v4-flash ist das, was Sie in Preistabellen sehen; die API erwartet deepseek-ai/DeepSeek-V4-Flash-0731. Die IDs aus der CheapTokens-Modellliste:

  • deepseek-ai/DeepSeek-V4-Flash-0731: 380K Kontext, bis zu 32.768 Ausgabe-Tokens pro Antwort. Ein guter Standard für Chains mit langen Dokumenten und langen Antworten.
  • zai-org/GLM-5.3-Flash: 390K Kontext, bis zu 8.192 Ausgabe-Tokens.
  • MiniMaxAI/MiniMax-M2.7: 180K Kontext, bis zu 8.192 Ausgabe-Tokens.

Das Wechseln ist eine einzeilige Änderung, denn das Modell ist nur ein String:

python
llm = ChatOpenAI(
    model="zai-org/GLM-5.3-Flash",
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

Alle drei teilen sich ein Guthaben, sodass Sie jedes auf derselben Chain ausprobieren können, ohne etwas Neues zu eröffnen. Aktuelle Preise finden Sie auf der Preisseite; für MiniMax-M2.7 beträgt der Input $0.05 und der Output $0.15 pro 1M Tokens.

base_url über die Umgebung setzen#

Ihre Chain ruft ChatOpenAI auf, das Anfragen an api.cheaptokens.dev/v1 sendet
Wohin die Anfrage geht: Chain, ChatOpenAI, CheapTokens API

Wenn Sie den Code lieber nicht anfassen möchten, liest LangChain die Adresse aus der Umgebung. Die Dokumentation gibt die Rangfolge an:

  1. das Argument base_url (oder openai_api_base), das Sie im Code übergeben;
  2. OPENAI_API_BASE, das LangChain liest;
  3. OPENAI_BASE_URL, das das openai-SDK liest.

Kurzer Check

Sie setzen base_url im Code und exportieren zusätzlich OPENAI_BASE_URL mit einer anderen Adresse. Welche verwendet ChatOpenAI?

Antwort anzeigen

Antwort: Das base_url-Argument im Code

Das explizite Argument hat die höchste Priorität, dann OPENAI_API_BASE, dann OPENAI_BASE_URL. Eine vergessene Variable in Ihrer Shell leitet einen Aufruf, der base_url explizit setzt, nicht um.

Ein Nebeneffekt aus derselben Dokumentationsseite: Wenn OPENAI_BASE_URL gesetzt ist, lässt LangChain stream_usage standardmäßig weg. Das ist in den nächsten beiden Abschnitten wichtig.

Die Antwort streamen#

Für eine UI möchten Sie Text, sobald er eintrifft. stream() liefert Chunks, und jeder Chunk hat ein .content-Stück:

python
for chunk in llm.stream("Write a three-line summary of how HTTP works."):
    print(chunk.content, end="", flush=True)

Das reicht für ein Chat-Fenster. Wenn Sie am Ende eines Streams auch die Token-Anzahl möchten, übergeben Sie stream_usage=True: ChatOpenAI(..., stream_usage=True). Diese Anleitung zählt Tokens aus invoke(), wie im nächsten Abschnitt. Streaming im reinen OpenAI-SDK wird in Streaming responses in Python behandelt.

Token-Verbrauch pro Aufruf lesen#

Jede von invoke() zurückgegebene Nachricht trägt usage_metadata mit den Tokens, die der Aufruf verbraucht hat:

python
msg = llm.invoke("Summarize this ticket in one line: my invoice shows the wrong VAT number.")
print(msg.usage_metadata)
# {'input_tokens': ..., 'output_tokens': ..., 'total_tokens': ...}

Summieren Sie diese über eine Pipeline und Sie haben ein Budget pro Lauf:

python
total_in = total_out = 0
for ticket in tickets:
    msg = llm.invoke(ticket)
    total_in += msg.usage_metadata["input_tokens"]
    total_out += msg.usage_metadata["output_tokens"]

Input und Output werden getrennt bepreist, daher sollten Sie beide Zahlen behalten. Warum diese Aufteilung existiert, steht in Input vs output tokens, und ein vollständiger Tracker mit einer Stopp-bei-Budget-Sicherung ist in Track AI agent token cost in Python zu finden.

Was eine LangChain-Pipeline pro Tag kostet#

Angenommen, Sie betreiben einen Support-Bot mit 2.000 Tickets pro Tag. Jeder Aufruf sendet das Ticket plus einen Prompt, etwa 3.000 Tokens, und die Antwort umfasst etwa 500 Tokens. Bei MiniMax-M2.7 kostet ein solcher Aufruf $0.00023. Verschieben Sie die Schieberegler auf Ihre eigenen Zahlen; die Seite summiert sie zu den aktuellen Preisen:

Kostenrechner

Ein Tag des Support-Bots

Eingabe-Tokens pro Anfrage: 3.000 · Ausgabe-Tokens pro Anfrage: 500 · Anfragen pro Tag: 2.000

ModellPro TagPro Monat
GLM-5.3-Flash$0.16$4.80
DeepSeek-V4-Flash$0.19$5.70
MiniMax-M2.7$0.45$13.50

Der Rechner zeigt die Tagessumme: Bei dieser Art von Aufruf macht der Input den Großteil der Tokens aus und der Output den kleineren Teil. Bei CheapTokens liegt die Gesamtsumme, Input und Output zusammengerechnet, unter der von OpenRouter, und der Preis ist zu jeder Stunde gleich: Es gibt keine Spitzenzeiten-Tarife, um die Sie herumplanen müssen.

Was diese Anleitung abdeckt#

Das Beispiel verwendet einfache Chat-Completions: invoke, stream und usage_metadata. ChatOpenAI folgt der OpenAI-Spezifikation, daher steht der Antworttext in .content. Laut der LangChain-Dokumentation wechselt es zur Responses-API, wenn Sie integrierte Tools oder den Parameter reasoning verwenden.

Wenn ein Aufruf fehlschlägt, ist die Ursache meist eine von drei Dingen: /v1 fehlt in base_url, eine kurze Modell-ID statt der vollständigen, oder die Schlüsselvariable ist nicht in der Shell exportiert, die Python ausführt. Die Liste der häufigen Verbindungsfehler zeigt, wie jeder aussieht.

Nächster Schritt: Führen Sie den dreistufigen Block oben mit Ihrer eigenen Chain aus und probieren Sie dann dieselbe Chain auf OpenAI-kompatiblen Endpunkten mit einer anderen Modell-ID aus.