0Pricing
AI Agents · Lektion

Bild- und Textagenten mit Claude Vision und GPT-4V

Bilder in API-Aufrufen senden, visuelles Grounding und bildbewusste Tool-Nutzung.

Bild- und Textagenten mit Claude Vision und GPT-4V ist eine kostenlose AI Agents-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Agents-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Multimodale Agenten: Bilder + Text

Ein multimodaler Agent kann ebenso sehen wie lesen. Wenn Sie Bilder zusammen mit Text im selben API-Aufruf senden, kann der Agent Fragen zu Fotos beantworten, Diagramme analysieren, Screenshots lesen und Abbildungen beschreiben – alles innerhalb derselben Konversationsschleife.

Bilder mit der OpenAI API senden

Die Vision-Modelle von OpenAI (GPT-4o, GPT-4V) akzeptieren anstelle einer einfachen Zeichenfolge ein content-Array. Jedes Element ist entweder ein text-Objekt oder ein image_url-Objekt. Das Bild kann eine öffentliche URL oder eine base64-kodierte Data-URL sein.

from openai import OpenAI

client = OpenAI(api_key='YOUR_OPENAI_API_KEY')

# Using a public URL
response = client.chat.completions.create(
    model='gpt-4o',
    messages=[
        {
            'role': 'user',
            'content': [
                {
                    'type': 'image_url',
                    'image_url': {
                        'url': 'https://example.com/chart.png'
                    }
                },
                {
                    'type': 'text',
                    'text': 'What trend does this chart show?'
                }
            ]
        }
    ],
    max_tokens=512
)
print(response.choices[0].message.content)

Base64-Bildkodierung

Für Bilder, die nicht öffentlich zugänglich sind (lokale Dateien, Screenshots, Benutzer-Uploads), kodieren Sie sie als base64 und betten Sie sie mithilfe des URL-Schemas data:image/jpeg;base64,... direkt in den API-Aufruf ein.

import base64
from pathlib import Path

Path('screenshot.png').write_bytes(b'\x89PNG\r\n\x1a\n' + bytes(range(40)))

def encode_image_to_base64(image_path: str) -> str:
    with open(image_path, 'rb') as f:
        return base64.b64encode(f.read()).decode('utf-8')

def build_image_message(image_path: str, question: str, mime: str = 'jpeg') -> dict:
    b64 = encode_image_to_base64(image_path)
    data_url = f'data:image/{mime};base64,{b64}'
    return {
        'role': 'user',
        'content': [
            {'type': 'image_url', 'image_url': {'url': data_url}},
            {'type': 'text', 'text': question}
        ]
    }

message = build_image_message('screenshot.png', 'What error is shown?', mime='png')
print('Message built, image size:', len(message['content'][0]['image_url']['url']))

Claude Vision API

Die Claude-Modelle von Anthropic unterstützen ebenfalls Vision. Der Content-Block verwendet ein source-Feld mit type: base64 und media_type. Die Struktur unterscheidet sich geringfügig von der von OpenAI, ist aber ebenso leistungsfähig.

import anthropic
import base64

client = anthropic.Anthropic(api_key='YOUR_ANTHROPIC_API_KEY')

with open('diagram.png', 'rb') as f:
    image_data = base64.standard_b64encode(f.read()).decode('utf-8')

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=512,
    messages=[
        {
            'role': 'user',
            'content': [
                {
                    'type': 'image',
                    'source': {
                        'type': 'base64',
                        'media_type': 'image/png',
                        'data': image_data
                    }
                },
                {
                    'type': 'text',
                    'text': 'Describe the architecture shown in this diagram.'
                }
            ]
        }
    ]
)
print(response.content[0].text)

MIME-Typ anhand der Dateierweiterung erkennen

Verschiedene Bildformate (JPEG, PNG, GIF, WebP) verwenden unterschiedliche MIME-Typen. Ermitteln Sie den MIME-Typ automatisch anhand der Dateierweiterung, damit Sie ihn niemals fest in Ihrem Agenten-Code hinterlegen müssen.

import os
import base64

with open('photo.jpg', 'wb') as f:
    f.write(b'\xff\xd8\xff' + bytes(range(30)))

MIME_MAP = {
    '.jpg': 'image/jpeg',
    '.jpeg': 'image/jpeg',
    '.png': 'image/png',
    '.gif': 'image/gif',
    '.webp': 'image/webp'
}

def get_mime_type(image_path: str) -> str:
    ext = os.path.splitext(image_path)[1].lower()
    mime = MIME_MAP.get(ext)
    if not mime:
        raise ValueError(f'Unsupported image format: {ext}')
    return mime

def load_image_as_base64(image_path: str) -> tuple:
    """Returns (base64_string, mime_type)"""
    mime = get_mime_type(image_path)
    with open(image_path, 'rb') as f:
        b64 = base64.b64encode(f.read()).decode('utf-8')
    return b64, mime

b64, mime = load_image_as_base64('photo.jpg')
print(f'MIME: {mime}, Size: {len(b64)} bytes base64')

Bildanalyse in einer Agentenschleife

In einer Agentenschleife ist die Bildanalyse ein Tool. Der Agent entscheidet, wann er es aufruft, genau wie bei jedem anderen Tool. Definieren Sie es im Tool-Schema und geben Sie strukturierte Daten (JSON) zurück, damit der Agent sie programmgesteuert verarbeiten kann.

def analyze_image_tool(image_path: str, query: str) -> dict:
    """
    Agent tool: analyse an image and return structured findings.
    """
    import anthropic, base64
    client = anthropic.Anthropic(api_key='YOUR_API_KEY')
    b64, mime = load_image_as_base64(image_path)

    structured_query = (
        query + '\n\nRespond with JSON only: '
        '{"description": str, "objects": [str], "text_found": str, "confidence": float}'
    )
    response = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=512,
        messages=[{
            'role': 'user',
            'content': [
                {'type': 'image', 'source': {'type': 'base64',
                  'media_type': mime, 'data': b64}},
                {'type': 'text', 'text': structured_query}
            ]
        }]
    )
    import json
    return json.loads(response.content[0].text)

Detailgrad der Bildanalyse steuern (OpenAI)

Die Vision API von OpenAI akzeptiert einen detail-Parameter: low (schnell, günstig, 85 Tokens), high (detailliert, unterteilt das Bild in Kacheln, bis zu 1105 Tokens) oder auto (das Modell entscheidet). Verwenden Sie low für einfache Ja/Nein-Fragen und high für detaillierte Analysen, etwa zum Lesen kleiner Texte.

def query_image_openai(
    image_path: str,
    question: str,
    detail: str = 'auto'  # 'low', 'high', or 'auto'
) -> str:
    import base64
    from openai import OpenAI
    client = OpenAI(api_key='YOUR_OPENAI_API_KEY')
    b64, mime = load_image_as_base64(image_path)
    data_url = f'data:{mime};base64,{b64}'

    response = client.chat.completions.create(
        model='gpt-4o',
        max_tokens=512,
        messages=[{
            'role': 'user',
            'content': [
                {
                    'type': 'image_url',
                    'image_url': {'url': data_url, 'detail': detail}
                },
                {'type': 'text', 'text': question}
            ]
        }]
    )
    return response.choices[0].message.content

Konversationen mit mehreren Bildern

Sie können mehrere Bilder in einer einzigen Nachricht oder über mehrere Gesprächsrunden hinweg senden. Dadurch werden Vergleichsaufgaben möglich: „Vergleichen Sie diese beiden Screenshots und beschreiben Sie, was sich geändert hat.“

def compare_two_images(
    image_path_1: str,
    image_path_2: str,
    comparison_question: str
) -> str:
    import anthropic, base64
    client = anthropic.Anthropic(api_key='YOUR_API_KEY')
    b64_1, mime_1 = load_image_as_base64(image_path_1)
    b64_2, mime_2 = load_image_as_base64(image_path_2)

    response = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=512,
        messages=[{
            'role': 'user',
            'content': [
                {'type': 'image', 'source': {'type': 'base64',
                  'media_type': mime_1, 'data': b64_1}},
                {'type': 'image', 'source': {'type': 'base64',
                  'media_type': mime_2, 'data': b64_2}},
                {'type': 'text', 'text': comparison_question}
            ]
        }]
    )
    return response.content[0].text

Bildagent: Screenshots auslesen

Ein praktischer Anwendungsfall ist ein Agent, der Anwendungsscreenshots liest, um Werte von Formularfeldern, Fehlermeldungen oder den UI-Zustand zu extrahieren. Das ist für Testautomatisierung und Monitoring-Pipelines nützlich.

SCREENSHOT_READER_PROMPT = (
    'You are a UI analyser. Given this application screenshot, extract:\n'
    '1. The current page/screen name\n'
    '2. Any error messages\n'
    '3. Key UI elements visible (buttons, form fields, text)\n'
    '4. The overall app state\n\n'
    'Return JSON: {"screen": str, "errors": [str], '
    '"elements": [str], "state": str}'
)

def read_screenshot(screenshot_path: str) -> dict:
    import anthropic, base64, json
    client = anthropic.Anthropic(api_key='YOUR_API_KEY')
    b64, mime = load_image_as_base64(screenshot_path)
    response = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=512,
        messages=[{
            'role': 'user',
            'content': [
                {'type': 'image', 'source': {'type': 'base64',
                  'media_type': mime, 'data': b64}},
                {'type': 'text', 'text': SCREENSHOT_READER_PROMPT}
            ]
        }]
    )
    return json.loads(response.content[0].text)

Kostenoptimierung für Vision-Aufrufe

Vision-API-Aufrufe sind deutlich teurer als reine Textaufrufe. Optimieren Sie die Kosten, indem Sie Bilder vor der Kodierung in ihrer Größe anpassen (die meisten Modelle akzeptieren 512×512–2048×2048), für einfache Aufgaben detail=low verwenden, Analyseergebnisse für unveränderte Bilder zwischenspeichern und mehrere Fragen in einem Aufruf bündeln.

from PIL import Image
import io, base64

def resize_and_encode(
    image_path: str,
    max_dim: int = 1024
) -> tuple:
    img = Image.open(image_path)
    # Resize maintaining aspect ratio
    ratio = min(max_dim / img.width, max_dim / img.height)
    if ratio < 1.0:
        new_w = int(img.width * ratio)
        new_h = int(img.height * ratio)
        img = img.resize((new_w, new_h), Image.LANCZOS)
        print(f'Resized to {new_w}x{new_h} (from {img.width}x{img.height})')

    # Convert to JPEG for smaller size
    buf = io.BytesIO()
    img.save(buf, format='JPEG', quality=85)
    b64 = base64.b64encode(buf.getvalue()).decode('utf-8')
    return b64, 'image/jpeg'

Einschränkungen von Vision-Modellen und Fallbacks

Vision-Modelle haben Einschränkungen: Sie können sehr kleine Texte nicht zuverlässig lesen, haben Schwierigkeiten mit stark komprimierten Bildern und erfinden möglicherweise Details. Validieren Sie wichtige extrahierte Daten (z. B. Zahlen aus Diagrammen) immer mit einem Fallback-Prompt, der nach Konfidenzwerten fragt.

def analyze_with_confidence(
    image_path: str,
    question: str,
    confidence_threshold: float = 0.7
) -> dict:
    import anthropic, json
    client = anthropic.Anthropic(api_key='YOUR_API_KEY')
    b64, mime = load_image_as_base64(image_path)

    prompt = (
        question + '\n\nAlso rate your confidence (0.0-1.0) in the answer.\n'
        'Return JSON: {"answer": str, "confidence": float, '
        '"uncertainty_reason": str}'
    )
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=256,
        messages=[{'role': 'user', 'content': [
            {'type': 'image', 'source': {'type': 'base64',
              'media_type': mime, 'data': b64}},
            {'type': 'text', 'text': prompt}
        ]}]
    )
    result = json.loads(response.content[0].text)
    if result['confidence'] < confidence_threshold:
        result['action'] = 'human_review_needed'
    return result

Wissensüberprüfung

Welcher Parameter steuert den Detailgrad und die Kosten der Bildanalyse in der OpenAI Vision API?

Zusammenfassung: Bild-Text-Agenten

Gute Arbeit! Das haben Sie gelernt:

  • OpenAI Vision: Content-Array mit image_url- und text-Objekten; unterstützt URL und base64
  • Claude Vision: source.type: base64 mit media_type
  • Base64-Kodierung: Datei lesen → als base64 kodieren → als Data-URL einbetten
  • Detailgrad: low für schnelle und günstige, high für detaillierte Analysen verwenden
  • Kostenoptimierung: Bilder in der Größe anpassen, Fragen bündeln, Ergebnisse zwischenspeichern

Als Nächstes: Audio-Text-Agenten-Workflows mit Whisper-Transkription und TTS-Antworten.

Häufig gestellte Fragen

Ist die Lektion „Bild- und Textagenten mit Claude Vision und GPT-4V“ kostenlos?

Ja — der vollständige Text von „Bild- und Textagenten mit Claude Vision und GPT-4V“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Agents-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Bild- und Textagenten mit Claude Vision und GPT-4V“?

Bilder in API-Aufrufen senden, visuelles Grounding und bildbewusste Tool-Nutzung. Du übst AI Agents mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Agents zu starten?

Keine Vorkenntnisse erforderlich. AI Agents auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Bild- und Textagenten mit Claude Vision und GPT-4V“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Agents-Lektion Code schreiben und ausführen?

Ja. Jede AI Agents-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Bild- und Textagenten mit Claude Vision und GPT-4V
  2. Agenten-Workflows für Audio und Text
  3. Videoverständnis in Agenten
  4. Muster für multimodales Reasoning
← Zurück zu AI Agents