
Anthropic Python SDK: installieren, base_url setzen, streamen und Fehler behandeln
Das anthropic Paket ist der offizielle Python-Client von Anthropic für die Claude API. Es übernimmt Authentifizierung, Wiederholungsversuche, Streaming und typisierte Fehler und funktioniert unverändert mit jedem Anthropic-kompatiblen Endpunkt: Legen Sie base_url (oder ANTHROPIC_BASE_URL) fest, und der übrige Code bleibt gleich.
Installation
pip install anthropicDie Versionen 1.x laufen mit httpx2 und benötigen Python 3.10 oder neuer. Wenn Sie Ihren eigenen HTTP-Client übergeben, verwenden Sie die SDK-eigene DefaultHttpxClient damit die standardmäßigen Zeitlimits und Verbindungslimits erhalten bleiben.
Client erstellen
import anthropic
client = anthropic.Anthropic(
api_key="your_key", # default: ANTHROPIC_API_KEY
base_url="https://aiprimetech.io", # default: ANTHROPIC_BASE_URL, else https://api.anthropic.com
)base_url ist die Stamm-URL des Hosts. Das SDK hängt /v1/messages selbst an, sodass https://aiprimetech.io/v1 zu /v1/v1/messages und ein 404 page not foundführen würde. Wenn beide Variablen in der Umgebung gesetzt sind, anthropic.Anthropic() benötigt keinerlei Argumente:
export ANTHROPIC_API_KEY=your_key
export ANTHROPIC_BASE_URL=https://aiprimetech.ioNachricht senden
message = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Summarise TCP slow start in two sentences."}],
)
for block in message.content:
if block.type == "text":
print(block.text)
print(message.usage.input_tokens, message.usage.output_tokens)
print(message._request_id) # log this with any failure reportcontent ist eine Liste von Blöcken (Text, Denkprozesse, Werkzeugnutzung). Prüfen Sie daher block.type statt content[0].text ungeprüft auszulesen.
Antworten streamen
with client.messages.stream(
model="claude-sonnet-5",
max_tokens=16000,
messages=[{"role": "user", "content": "Write a short story about a lighthouse."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
final = stream.get_final_message()Verwenden Sie Streaming bei langen Eingaben, langen Ausgaben oder einem großen max_tokens: Eine einzelne Anfrage ohne Streaming muss innerhalb des Zeitlimits abgeschlossen sein, ein Stream hingegen nicht. messages.create(..., stream=True) liefert Ihnen den unverarbeiteten Ereignis-Iterator, wenn Sie die Hilfsfunktion nicht benötigen.
Asynchroner Client
import asyncio, anthropic
client = anthropic.AsyncAnthropic(base_url="https://aiprimetech.io")
limit = asyncio.Semaphore(3) # stay within your key's concurrency
async def ask(question: str) -> str:
async with limit:
msg = await client.messages.create(
model="claude-haiku-4-5",
max_tokens=512,
messages=[{"role": "user", "content": question}],
)
return next(b.text for b in msg.content if b.type == "text")
async def main():
answers = await asyncio.gather(*(ask(q) for q in ["What is DNS?", "What is BGP?"]))
print(answers)
asyncio.run(main())Die Semaphore ist wichtig. Hunderte Anfragen gleichzeitig mit asyncio.gather zu senden, ist die häufigste Ursache für Concurrency limit exceeded Fehler, die wir bei Python-Clients beobachten.
Zeitlimits und Wiederholungsversuche
Standardwerte: ein Zeitlimit von 10 Minuten pro Anfrage und 2 automatische Wiederholungsversuche mit exponentiellem Backoff. Das SDK wiederholt Anfragen bei Verbindungsfehlern, 408, 409, 429 und 5xx-Antworten. Da auch Zeitüberschreitungen Wiederholungsversuche auslösen, beträgt die tatsächliche Gesamtdauer im schlimmsten Fall das Zeitlimit multipliziert mit der Anzahl der Versuche.
client = anthropic.Anthropic(base_url="https://aiprimetech.io", timeout=60.0, max_retries=4)
# override for one call only
client.with_options(timeout=300.0).messages.create(
model="claude-opus-5-5",
max_tokens=4000,
messages=[{"role": "user", "content": "Review this design doc..."}],
)Fehlerbehandlung
| Status | Ausnahme | Erneut versuchen? |
|---|---|---|
| 400 | anthropic.BadRequestError | Nein: Anfrage korrigieren |
| 401 | anthropic.AuthenticationError | Nein: falscher oder fehlender Schlüssel |
| 403 | anthropic.PermissionDeniedError | Nein |
| 404 | anthropic.NotFoundError | Nein: Modell-ID oder URL |
| 429 | anthropic.RateLimitError | Ja, nach einer Pause |
| 5xx, einschließlich 529 bei Überlastung | anthropic.InternalServerError | Ja |
| Netzwerkfehler | anthropic.APIConnectionError | Ja |
| Zeitüberschreitung | anthropic.APITimeoutError | Ja, oder Streaming verwenden |
try:
message = client.messages.create(model="claude-sonnet-5", max_tokens=1024,
messages=[{"role": "user", "content": "Hi"}])
except anthropic.NotFoundError as e:
print("Bad model ID or URL:", e.message)
except anthropic.RateLimitError as e:
print("Rate limited, retry after", e.response.headers.get("retry-after"))
except anthropic.APIStatusError as e:
print(e.status_code, e.type, e.message)
except anthropic.APIConnectionError:
print("Network problem")Fangen Sie zuerst die spezifischen Klassen ab und APIStatusError zuletzt; ein allgemeines except verschleiert den Unterschied zwischen Fehlern, bei denen sich ein Wiederholungsversuch lohnt, und Fehlern, die eine Codeänderung erfordern. e.type liefert die Zeichenfolge für den Fehlertyp der API, etwa rate_limit_error oder overloaded_error.
Modell-IDs
| Modell-ID | Einsatzbereich |
|---|---|
claude-sonnet-5 | Standard für Programmier- und Agentenaufgaben: schnell, leistungsstark, mittleres Preisniveau. |
claude-opus-5-5 | Anspruchsvollere Denkaufgaben, umfangreiche Refactorings, lange Agentenläufe. |
claude-fable-5-1 | Am leistungsfähigsten und am teuersten; für die schwierigsten Aufgaben reservieren. |
claude-haiku-4-5 | Günstig und schnell: Titel, Zusammenfassungen, Klassifizierung, kleine Schritte. |
client.models.list() gibt die Modelle zurück, die ein Endpunkt bereitstellt, sodass Sie eine ID vor der Verwendung prüfen können. Verwenden Sie die IDs genau wie angegeben: ohne Datumssuffixe.
Fehlerbehebung auf einem Gateway
| Was Sie sehen | Ursache | Lösung |
|---|---|---|
NotFoundError durch 404 page not found | /v1 in base_url | Stamm-URL des Hosts verwenden |
AuthenticationError | Schlüssel im Prozess nicht gesetzt oder mit Leerraum eingefügt | Ausgeben len(os.environ["ANTHROPIC_API_KEY"]) |
RateLimitError: Concurrency limit exceeded for user | Zu viele gleichzeitig laufende Anfragen | Ein asyncio.Semaphore wie oben |
APITimeoutError bei langen Aufgaben | Anfrage ohne Streaming überschreitet das Zeitlimit | Streaming verwenden oder erhöhen: timeout |
InternalServerError: No available accounts | Vorübergehend begrenzte Kapazität beim vorgelagerten Anbieter | Das SDK Wiederholungsversuche durchführen lassen; erhöhen: max_retries |
Insufficient account balance | Guthaben aufgebraucht | Guthaben aufladen |
Mehr zu modellseitigen Fehlern: die Anleitung zu Claude API-Fehlern.
Häufig gestellte Fragen
Wie installiere ich das Anthropic Python SDK?
Wie lege ich eine benutzerdefinierte Basis-URL im Anthropic Python SDK fest?
Welche Standardwerte gelten für Zeitlimit und Wiederholungsversuche?
Wie verwende ich Streaming mit dem Python SDK?
Holen Sie sich einen API-Schlüssel – ohne Anthropic-Konto oder Warteliste.
API-Schlüssel erhaltenAI Prime Tech ist ein unabhängiges API-Gateway. Es ist weder mit Anthropic verbunden noch von Anthropic empfohlen und auch kein Wiederverkäufer von Anthropic. Claude und zugehörige Modellnamen sind Marken ihrer jeweiligen Inhaber.