Dieser Leitfaden soll Claude die Grundlagen der Verwendung der Claude API vermitteln. Er bietet Erklärungen und Beispiele für Modell-IDs/die grundlegende Messages API, Tool-Nutzung, Streaming, erweitertes Denken und nichts anderes.
Intelligentestes Modell: Claude Opus 4.7: claude-opus-4-7
Intelligentes Modell: Claude Sonnet 4.6: claude-sonnet-4-6
Für schnelle, kostengünstige Aufgaben: Claude Haiku 4.5: claude-haiku-4-5-20251001import anthropic
import os
message = anthropic.Anthropic(
api_key=os.environ.get("ANTHROPIC_API_KEY")
).messages.create(
model="claude-opus-4-7",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Claude"}],
)
print(message){
"id": "msg_01XFDUDYJgAACzvnptvVoYEL",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello!"
}
],
"model": "claude-opus-4-7",
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 12,
"output_tokens": 6
}
}Die Messages API ist zustandslos, was bedeutet, dass Sie immer die vollständige Gesprächshistorie an die API senden. Sie können dieses Muster verwenden, um ein Gespräch im Laufe der Zeit aufzubauen. Frühere Gesprächsrunden müssen nicht unbedingt tatsächlich von Claude stammen. Sie können synthetische assistant-Nachrichten verwenden.
import anthropic
message = anthropic.Anthropic().messages.create(
model="claude-opus-4-7",
max_tokens=1024,
messages=[
{"role": "user", "content": "Hello, Claude"},
{"role": "assistant", "content": "Hello!"},
{"role": "user", "content": "Can you describe LLMs to me?"},
],
)
print(message)Sie können einen Teil von Claudes Antwort an der letzten Position der Eingabenachrichtenliste vorab ausfüllen. Dies kann verwendet werden, um Claudes Antwort zu beeinflussen. Das folgende Beispiel verwendet "max_tokens": 1, um eine einzelne Multiple-Choice-Antwort von Claude zu erhalten.
message = anthropic.Anthropic().messages.create(
model="claude-sonnet-4-5",
max_tokens=1,
messages=[
{
"role": "user",
"content": "What is latin for Ant? (A) Apoidea, (B) Rhopalocera, (C) Formicidae",
},
{"role": "assistant", "content": "The answer is ("},
],
)Claude kann sowohl Text als auch Bilder in Anfragen lesen. Sowohl base64- als auch url-Quellentypen werden für Bilder unterstützt, zusammen mit den Medientypen image/jpeg, image/png, image/gif und image/webp.
Erweitertes Denken kann Claude manchmal bei sehr schwierigen Aufgaben helfen. Bei Modellen vor Claude Opus 4.7 muss die Temperatur auf 1 gesetzt werden, wenn erweitertes Denken aktiviert ist.
Erweitertes Denken wird in den folgenden Modellen unterstützt:
claude-opus-4-1-20250805)claude-opus-4-20250514)claude-sonnet-4-6)claude-sonnet-4-5-20250929)Wenn erweitertes Denken aktiviert ist, erstellt Claude thinking-Inhaltsblöcke, in denen es sein internes Denken ausgibt. Die API-Antwort enthält thinking-Inhaltsblöcke, gefolgt von text-Inhaltsblöcken.
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-7",
max_tokens=16000,
thinking={"type": "adaptive", "display": "summarized"},
messages=[
{
"role": "user",
"content": "Are there an infinite number of prime numbers such that n mod 4 == 3?",
}
],
)
# The response will contain summarized thinking blocks and text blocks
for block in response.content:
if block.type == "thinking":
print(f"\nThinking summary: {block.thinking}")
elif block.type == "text":
print(f"\nResponse: {block.text}")Der Parameter budget_tokens bestimmt die maximale Anzahl von Token, die Claude für seinen internen Denkprozess verwenden darf. Bei Claude 4-Modellen gilt diese Grenze für vollständige Denk-Token und nicht für die zusammengefasste Ausgabe. Größere Budgets können die Antwortqualität verbessern, indem sie eine gründlichere Analyse für komplexe Probleme ermöglichen. Eine Regel: Der Wert von max_tokens muss streng größer sein als der Wert von budget_tokens, damit Claude Platz hat, seine Antwort nach dem Denken zu schreiben.
Erweitertes Denken kann zusammen mit Tool-Nutzung verwendet werden, was Claude ermöglicht, die Werkzeugauswahl und die Verarbeitung von Ergebnissen zu durchdenken.
Wichtige Einschränkungen:
tool_choice: {"type": "auto"} (Standard) oder tool_choice: {"type": "none"}.thinking-Blöcke für die letzte Assistenten-Nachricht an die API zurückgeben.Erweitertes Denken mit Tool-Nutzung in Claude 4-Modellen unterstützt verschachteltes Denken, das Claude ermöglicht, zwischen Tool-Aufrufen zu denken. Um es auf Claude 4, 4.5 und Sonnet 4.6-Modellen zu aktivieren, fügen Sie den Beta-Header interleaved-thinking-2025-05-14 zu Ihrer API-Anfrage hinzu.
Mit verschachteltem Denken und NUR mit verschachteltem Denken (nicht mit regulärem erweitertem Denken) kann budget_tokens den Parameter max_tokens überschreiten, da budget_tokens in diesem Fall das Gesamtbudget über alle Denk-Blöcke innerhalb einer Assistenten-Runde darstellt.
Für Claude Opus 4.6 ist verschachteltes Denken automatisch aktiviert, wenn adaptives Denken (thinking: {type: "adaptive"}) verwendet wird. Kein Beta-Header ist erforderlich. Sonnet 4.6 unterstützt sowohl den Beta-Header interleaved-thinking-2025-05-14 mit manuellem erweitertem Denken als auch adaptives Denken.
Client-Tools werden im Parameter tools auf oberster Ebene der API-Anfrage angegeben. Jede Tool-Definition enthält:
| Parameter | Beschreibung |
|---|---|
name | Der Name des Tools. Muss dem Regex ^[a-zA-Z0-9_-]{1,64}$ entsprechen. |
description | Eine detaillierte Klartextbeschreibung, was das Tool tut, wann es verwendet werden sollte und wie es sich verhält. |
input_schema | Ein JSON Schema-Objekt, das die erwarteten Parameter für das Tool definiert. |
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "The unit of temperature, either 'celsius' or 'fahrenheit'"
}
},
"required": ["location"]
}
}Bieten Sie äußerst detaillierte Beschreibungen. Dies ist bei weitem der wichtigste Faktor für die Tool-Leistung. Ihre Beschreibungen sollten jedes Detail über das Tool erklären, einschließlich:
Erwägen Sie die Verwendung von input_examples für komplexe Tools. Für Tools mit verschachtelten Objekten, optionalen Parametern oder formatempfindlichen Eingaben können Sie konkrete Beispiele mit dem Feld input_examples (Beta) bereitstellen. Dies hilft Claude, erwartete Eingabemuster zu verstehen. Siehe Bereitstellung von Tool-Nutzungsbeispielen für Details.
Beispiel einer guten Tool-Beschreibung:
{
"name": "get_stock_price",
"description": "Retrieves the current stock price for a given ticker symbol. The ticker symbol must be a valid symbol for a publicly traded company on a major US stock exchange like NYSE or NASDAQ. The tool will return the latest trade price in USD. It should be used when the user asks about the current or most recent price of a specific stock. It will not provide any other information about the stock or company.",
"input_schema": {
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "The stock ticker symbol, e.g. AAPL for Apple Inc."
}
},
"required": ["ticker"]
}
}Sie können Claude zwingen, ein bestimmtes Tool zu verwenden, indem Sie das Tool im Feld tool_choice angeben:
tool_choice = {"type": "tool", "name": "get_weather"}Bei der Arbeit mit dem Parameter tool_choice gibt es vier mögliche Optionen:
auto ermöglicht Claude zu entscheiden, ob bereitgestellte Tools verwendet werden sollen oder nicht (Standard).any teilt Claude mit, dass es eines der bereitgestellten Tools verwenden muss.tool zwingt Claude, immer ein bestimmtes Tool zu verwenden.none verhindert, dass Claude Tools verwendet.Tools müssen nicht unbedingt Client-Funktionen sein. Sie können Tools jederzeit verwenden, wenn Sie möchten, dass das Modell JSON-Ausgabe zurückgibt, die einem bereitgestellten Schema entspricht.
Bei der Verwendung von Tools zeigt Claude oft seine "Gedankenkette", d. h. das schrittweise Denken, das es verwendet, um das Problem zu zerlegen und zu entscheiden, welche Tools verwendet werden sollen.
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "<thinking>To answer this question, I will: 1. Use the get_weather tool to get the current weather in San Francisco. 2. Use the get_time tool to get the current time in the America/Los_Angeles timezone, which covers San Francisco, CA.</thinking>"
},
{
"type": "tool_use",
"id": "toolu_01A09q90qw90lq917835lq9",
"name": "get_weather",
"input": { "location": "San Francisco, CA" }
}
]
}Standardmäßig kann Claude mehrere Tools verwenden, um eine Benutzeranfrage zu beantworten. Sie können dieses Verhalten deaktivieren, indem Sie disable_parallel_tool_use=true setzen.
Die Antwort hat einen stop_reason von tool_use und einen oder mehrere tool_use-Inhaltsblöcke, die Folgendes enthalten:
id: Ein eindeutiger Bezeichner für diesen bestimmten Tool-Nutzungsblock.name: Der Name des verwendeten Tools.input: Ein Objekt, das die an das Tool übergebene Eingabe enthält.Wenn Sie eine Tool-Nutzungsantwort erhalten, sollten Sie:
name, id und input aus dem tool_use-Block.tool_result senden:{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": "15 degrees"
}
]
}max_tokens-Stop-GrundWenn Claudes Antwort aufgrund des Erreichens des max_tokens-Limits während der Tool-Nutzung unterbrochen wird, wiederholen Sie die Anfrage mit einem höheren max_tokens-Wert.
pause_turn-Stop-GrundBei Verwendung von Server-Tools wie Web-Suche kann die API einen pause_turn-Stop-Grund zurückgeben. Setzen Sie das Gespräch fort, indem Sie die angehaltene Antwort unverändert in einer nachfolgenden Anfrage zurückgeben.
Wenn das Tool selbst während der Ausführung einen Fehler wirft, geben Sie die Fehlermeldung mit "is_error": true zurück:
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": "ConnectionError: the weather service API is not available (HTTP 500)",
"is_error": true
}
]
}Wenn Claudes versuchte Verwendung eines Tools ungültig ist (z. B. fehlende erforderliche Parameter), wiederholen Sie die Anfrage mit detaillierteren description-Werten in Ihren Tool-Definitionen.
Beim Erstellen einer Nachricht können Sie "stream": true setzen, um die Antwort inkrementell mit Server-Sent Events (SSE) zu streamen.
Jedes Server-Sent Event enthält einen benannten Ereignistyp und zugehörige JSON-Daten. Jeder Stream verwendet den folgenden Ereignisfluss:
message_start: enthält ein Message-Objekt mit leerem content.content_block_start, einem oder mehreren content_block_delta-Ereignissen und content_block_stop.message_delta-Ereignisse, die Änderungen auf oberster Ebene am endgültigen Message-Objekt anzeigen.message_stop-Ereignis.Warnung: Die Token-Anzahl, die im Feld usage des message_delta-Ereignisses angezeigt wird, ist kumulativ.
{
"type": "content_block_delta",
"index": 0,
"delta": { "type": "text_delta", "text": "Hello frien" }
}Für tool_use-Inhaltsblöcke sind Deltas partielle JSON-Strings:
{"type": "content_block_delta","index": 1,"delta": {"type": "input_json_delta","partial_json": "{\"location\": \"San Fra"}}Bei Verwendung von erweitertem Denken mit Streaming:
{
"type": "content_block_delta",
"index": 0,
"delta": {
"type": "thinking_delta",
"thinking": "Let me solve this step by step..."
}
}event: message_start
data: {"type": "message_start", "message": {"id": "msg_1nZdL29xx5MUA1yADyHTEsnR8uuvGzszyY", "type": "message", "role": "assistant", "content": [], "model": "claude-opus-4-7", "stop_reason": null, "stop_sequence": null, "usage": {"input_tokens": 25, "output_tokens": 1}}}
event: content_block_start
data: {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}}
event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "text_delta", "text": "Hello"}}
event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "text_delta", "text": "!"}}
event: content_block_stop
data: {"type": "content_block_stop", "index": 0}
event: message_delta
data: {"type": "message_delta", "delta": {"stop_reason": "end_turn", "stop_sequence":null}, "usage": {"output_tokens": 15}}
event: message_stop
data: {"type": "message_stop"}Was this page helpful?
import anthropic
import base64
import httpx
# Option 1: Base64-encoded image
image_url = "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg"
image_media_type = "image/jpeg"
image_data = base64.standard_b64encode(httpx.get(image_url).content).decode("utf-8")
message = anthropic.Anthropic().messages.create(
model="claude-opus-4-7",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": image_media_type,
"data": image_data,
},
},
{"type": "text", "text": "What is in the above image?"},
],
}
],
)
# Option 2: URL-referenced image
message_from_url = anthropic.Anthropic().messages.create(
model="claude-opus-4-7",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "url",
"url": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg",
},
},
{"type": "text", "text": "What is in the above image?"},
],
}
],
)import anthropic
client = anthropic.Anthropic()
weather_tool = {
"name": "get_weather",
"description": "Get the current weather for a location.",
"input_schema": {
"type": "object",
"properties": {"location": {"type": "string", "description": "The city name."}},
"required": ["location"],
},
}
weather_data = {"temperature": 72}
# First request - Claude responds with thinking and tool request
response = client.messages.create(
model="claude-opus-4-7",
max_tokens=16000,
thinking={"type": "adaptive", "display": "summarized"},
tools=[weather_tool],
messages=[{"role": "user", "content": "What's the weather in Paris?"}],
)
# Extract thinking block and tool use block
thinking_block = next(
(block for block in response.content if block.type == "thinking"), None
)
tool_use_block = next(
(block for block in response.content if block.type == "tool_use"), None
)
# Second request - Include thinking block and tool result
continuation = client.messages.create(
model="claude-opus-4-7",
max_tokens=16000,
thinking={"type": "adaptive", "display": "summarized"},
tools=[weather_tool],
messages=[
{"role": "user", "content": "What's the weather in Paris?"},
# Notice that the thinking_block is passed in as well as the tool_use_block
{"role": "assistant", "content": [thinking_block, tool_use_block]},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": tool_use_block.id,
"content": f"Current temperature: {weather_data['temperature']}°F",
}
],
},
],
)import anthropic
client = anthropic.Anthropic()
calculator_tool = {
"name": "calculator",
"description": "Perform arithmetic calculations.",
"input_schema": {
"type": "object",
"properties": {
"expression": {
"type": "string",
"description": "The math expression to evaluate.",
}
},
"required": ["expression"],
},
}
database_tool = {
"name": "database_query",
"description": "Query the product database.",
"input_schema": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "The database query."}
},
"required": ["query"],
},
}
response = client.beta.messages.create(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={"type": "enabled", "budget_tokens": 10000},
tools=[calculator_tool, database_tool],
messages=[
{
"role": "user",
"content": "What's the total revenue if we sold 150 units of product A at $50 each?",
}
],
betas=["interleaved-thinking-2025-05-14"],
)import anthropic
client = anthropic.Anthropic()
with client.messages.stream(
max_tokens=1024,
messages=[{"role": "user", "content": "Hello"}],
model="claude-opus-4-7",
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)