{"meta":{"title":"Bildeingabe","intro":"Bilder als Anhänge an Copilot-Sitzungen senden. Es gibt zwei Möglichkeiten zum Anfügen von Bildern:","product":"GitHub Copilot","breadcrumbs":[{"href":"/de/enterprise-cloud@latest/copilot","title":"GitHub Copilot"},{"href":"/de/enterprise-cloud@latest/copilot/how-tos","title":"Vorgehensweisen"},{"href":"/de/enterprise-cloud@latest/copilot/how-tos/copilot-sdk","title":"Copilot SDK"},{"href":"/de/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features","title":"Funktionen"},{"href":"/de/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/image-input","title":"Bildeingabe"}],"documentType":"article"},"body":"# Bildeingabe\n\nBilder als Anhänge an Copilot-Sitzungen senden. Es gibt zwei Möglichkeiten zum Anfügen von Bildern:\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n* **Dateianhang** (`type: \"file\"`): Geben Sie einen absoluten Pfad an; die Laufzeit liest die Datei von der Festplatte, konvertiert sie in Base64 und sendet sie an das LLM.\n* **Blob-Anhang** (`type: \"blob\"`): base64-kodierte Daten direkt bereitstellen; nützlich, wenn das Bild bereits im Speicher vorliegt (z. B. Screenshots, generierte Bilder oder Daten aus einer API).\n\n## Übersicht\n\n![Diagramm: Sequenzdiagramm mit dem beschriebenen Prozess.](/assets/images/help/copilot/copilot-sdk/features-image-input-diagram-0.png)\n\n| Konzept                         | Description                                                                                                             |\n| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |\n| **Dateianhang**                 | Einem Anhang mit `type: \"file\"` und einem absoluten `path` zu einem Image auf Datenträger                               |\n| **Blob-Anhang**                 | Ein Anhang mit `type: \"blob\"`, base64-kodiert `data` und einem `mimeType` - keine E/A auf dem Datenträger erforderlich  |\n| **Automatische Codierung**      | Bei Dateianhängen liest die Runtime das Image und konvertiert es automatisch in base64                                  |\n| **Automatische Größenänderung** | Die Laufzeit ändert automatisch die Größe oder qualitätsmindert Bilder, die modellspezifische Grenzwerte überschreiten. |\n| **Vision-Funktion**             | Das Modell muss `capabilities.supports.vision = true` haben, um Bilder zu verarbeiten.                                  |\n\n## Schnellstart—Dateianhang\n\nFügen Sie eine Bilddatei an eine beliebige Nachricht an, indem Sie den Dateianhangstyp verwenden. Der Pfad muss ein absoluter Pfad zu einem Image auf dem Datenträger sein.\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\nconst client = new CopilotClient();\nawait client.start();\n\nconst session = await client.createSession({\n    model: \"gpt-5.4\",\n    onPermissionRequest: async () => ({ kind: \"approve-once\" }),\n});\n\nawait session.send({\n    prompt: \"Describe what you see in this image\",\n    attachments: [\n        {\n            type: \"file\",\n            path: \"/absolute/path/to/screenshot.png\",\n        },\n    ],\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nfrom copilot import CopilotClient, PermissionDecisionApproveOnce\n\nclient = CopilotClient()\nawait client.start()\n\nsession = await client.create_session(\n    on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),\n    model=\"gpt-5.4\",\n)\n\nawait session.send(\n    \"Describe what you see in this image\",\n    attachments=[\n        {\n            \"type\": \"file\",\n            \"path\": \"/absolute/path/to/screenshot.png\",\n        },\n    ],\n)\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n```golang\nctx := context.Background()\nclient := copilot.NewClient(nil)\nclient.Start(ctx)\n\nsession, _ := client.CreateSession(ctx, &copilot.SessionConfig{\n    Model: \"gpt-5.4\",\n    OnPermissionRequest: func(req copilot.PermissionRequest, inv copilot.PermissionInvocation) (rpc.PermissionDecision, error) {\n        return &rpc.PermissionDecisionApproveOnce{}, nil\n    },\n})\n\npath := \"/absolute/path/to/screenshot.png\"\nsession.Send(ctx, copilot.MessageOptions{\n    Prompt: \"Describe what you see in this image\",\n    Attachments: []copilot.Attachment{\n        &copilot.AttachmentFile{\n            DisplayName: \"screenshot.png\",\n            Path:        path,\n        },\n    },\n})\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nusing GitHub.Copilot;\nusing GitHub.Copilot.Rpc;\n\nawait using var client = new CopilotClient();\nawait using var session = await client.CreateSessionAsync(new SessionConfig\n{\n    Model = \"gpt-5.4\",\n    OnPermissionRequest = (req, inv) =>\n        Task.FromResult(PermissionDecision.ApproveOnce()),\n});\n\nawait session.SendAsync(new MessageOptions\n{\n    Prompt = \"Describe what you see in this image\",\n    Attachments = new List<Attachment>\n    {\n        new AttachmentFile\n        {\n            Path = \"/absolute/path/to/screenshot.png\",\n            DisplayName = \"screenshot.png\",\n        },\n    },\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"java\" data-label=\"Java\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Java</div>\n\n```java\nimport com.github.copilot.CopilotClient;\nimport com.github.copilot.rpc.*;\nimport java.util.List;\n\ntry (var client = new CopilotClient()) {\n    client.start().get();\n\n    var session = client.createSession(\n        new SessionConfig()\n            .setModel(\"gpt-5.4\")\n            .setOnPermissionRequest(PermissionHandler.APPROVE_ALL)\n    ).get();\n\n    session.send(new MessageOptions()\n        .setPrompt(\"Describe what you see in this image\")\n        .setAttachments(List.of(\n            new Attachment(\"file\", \"/absolute/path/to/screenshot.png\", \"screenshot.png\")\n        ))\n    ).get();\n}\n```\n\n</div>\n\n</div>\n\n## Schnellstart – Blob-Anhang\n\nWenn Sie bereits Bilddaten im Arbeitsspeicher haben (z. B. einen Screenshot, der von Ihrer App erfasst wurde, oder ein Bild, das von einer API abgerufen wurde), verwenden Sie eine BLOB-Anlage, um sie direkt zu senden, ohne auf den Datenträger zu schreiben.\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\nconst client = new CopilotClient();\nawait client.start();\n\nconst session = await client.createSession({\n    model: \"gpt-5.4\",\n    onPermissionRequest: async () => ({ kind: \"approve-once\" }),\n});\n\nconst base64ImageData = \"...\"; // your base64-encoded image\nawait session.send({\n    prompt: \"Describe what you see in this image\",\n    attachments: [\n        {\n            type: \"blob\",\n            data: base64ImageData,\n            mimeType: \"image/png\",\n            displayName: \"screenshot.png\",\n        },\n    ],\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nfrom copilot import CopilotClient, PermissionDecisionApproveOnce\n\nclient = CopilotClient()\nawait client.start()\n\nsession = await client.create_session(\n    on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),\n    model=\"gpt-5.4\",\n)\n\nbase64_image_data = \"...\"  # your base64-encoded image\nawait session.send(\n    \"Describe what you see in this image\",\n    attachments=[\n        {\n            \"type\": \"blob\",\n            \"data\": base64_image_data,\n            \"mimeType\": \"image/png\",\n            \"displayName\": \"screenshot.png\",\n        },\n    ],\n)\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n```golang\nmimeType := \"image/png\"\ndisplayName := \"screenshot.png\"\nsession.Send(ctx, copilot.MessageOptions{\n    Prompt: \"Describe what you see in this image\",\n    Attachments: []copilot.Attachment{\n        &copilot.AttachmentBlob{\n            Data:        &base64ImageData, // base64-encoded string\n            MIMEType:    mimeType,\n            DisplayName: &displayName,\n        },\n    },\n})\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nawait session.SendAsync(new MessageOptions\n{\n    Prompt = \"Describe what you see in this image\",\n    Attachments = new List<Attachment>\n    {\n        new AttachmentBlob\n        {\n            Data = base64ImageData,\n            MimeType = \"image/png\",\n            DisplayName = \"screenshot.png\",\n        },\n    },\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"java\" data-label=\"Java\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Java</div>\n\n```java\nimport com.github.copilot.CopilotClient;\nimport com.github.copilot.rpc.*;\nimport java.util.List;\n\ntry (var client = new CopilotClient()) {\n    client.start().get();\n\n    var session = client.createSession(\n        new SessionConfig()\n            .setModel(\"gpt-5.4\")\n            .setOnPermissionRequest(PermissionHandler.APPROVE_ALL)\n    ).get();\n\n    var base64ImageData = \"...\"; // your base64-encoded image\n    session.send(new MessageOptions()\n        .setPrompt(\"Describe what you see in this image\")\n        .setAttachments(List.of(\n            new BlobAttachment()\n                .setData(base64ImageData)\n                .setMimeType(\"image/png\")\n                .setDisplayName(\"screenshot.png\")\n        ))\n    ).get();\n}\n```\n\n</div>\n\n</div>\n\n## Unterstützte Formate\n\nUnterstützte Bildformate umfassen JPG, PNG, GIF und andere gängige Bildtypen. Bei Dateianhängen liest die Laufzeitumgebung das Bild vom Datenträger und konvertiert es bei Bedarf. Für Blob-Anhänge stellen Sie die Base64-Daten und den MIME-Typ direkt bereit. Verwenden Sie PNG oder JPEG, um optimale Ergebnisse zu erzielen, da dies die am häufigsten unterstützten Formate sind.\n\nDas Feld des `capabilities.limits.vision.supported_media_types` Modells listet die genauen MIME-Typen auf, die es akzeptiert.\n\n## Automatische Verarbeitung\n\nDie Laufzeit verarbeitet automatisch Bilder, die in die Einschränkungen des Modells passen. Es ist keine manuelle Größenänderung erforderlich.\n\n* Bilder, die die Dimensionen oder Größenlimits des Modells überschreiten, werden automatisch in der Größe angepasst (unter Beibehaltung des Seitenverhältnisses) oder in der Qualität reduziert.\n* Wenn ein Bild nach der Verarbeitung nicht innerhalb von Grenzen gebracht werden kann, wird es übersprungen und nicht an die LLM gesendet.\n* Das Feld des `capabilities.limits.vision.max_prompt_image_size` Modells gibt die maximale Bildgröße in Bytes an.\n\nSie können diese Grenzwerte zur Laufzeit über das Modellfunktionen-Objekt überprüfen. Um optimale Ergebnisse zu erzielen, verwenden Sie PNG- oder JPEG-Bilder in angemessener Größe.\n\n## Vision-Modellfunktionen\n\nNicht alle Modelle unterstützen die Bildverarbeitung. Überprüfen Sie die Funktionen des Modells, bevor Sie Bilder senden.\n\n### Funktionsfelder\n\n| Feld                                               | Typ        | Description                                                                 |\n| -------------------------------------------------- | ---------- | --------------------------------------------------------------------------- |\n| `capabilities.supports.vision`                     | `boolean`  | Gibt an, ob das Modell Bildeingaben verarbeiten kann.                       |\n| `capabilities.limits.vision.supported_media_types` | `string[]` | MIME-Typen, die das Modell akzeptiert (z. B. `[\"image/png\", \"image/jpeg\"]`) |\n| `capabilities.limits.vision.max_prompt_images`     | `number`   | Maximale Anzahl von Bildern pro Eingabeaufforderung                         |\n| `capabilities.limits.vision.max_prompt_image_size` | `number`   | Maximale Bildgröße in Byte                                                  |\n\n### Typ der Vision-Grenzwerte\n\n```typescript\nvision?: {\n    supported_media_types: string[];\n    max_prompt_images: number;\n    max_prompt_image_size: number; // bytes\n};\n```\n\n## Empfangen von Bildergebnissen\n\nWenn Tools Bilder zurückgeben (z. B. Screenshots oder generierte Diagramme), enthält `\"image\"` das Ergebnis Inhaltsblöcke mit base64-codierten Daten.\n\n| Feld       | Typ       | Description                                 |\n| ---------- | --------- | ------------------------------------------- |\n| `type`     | `\"image\"` | Diskriminator für den Typ der Inhaltsblöcke |\n| `data`     | `string`  | Base64-codierte Bilddaten                   |\n| `mimeType` | `string`  | MIME-Typ (z. B. `\"image/png\"`)              |\n\nDiese Bildblöcke werden in `tool.execution_complete` Ereignisergebnissen angezeigt. Lesen Sie den [AUTOTITLE-Leitfaden](/de/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/streaming-events) für den vollständigen Ereignislebenszyklus.\n\n## Tipps und Einschränkungen\n\n| Tip                                                                     | Details                                                                                                         |\n| ----------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |\n| **Direktes Verwenden von PNG oder JPEG**                                | Vermeidung von Konvertierungsaufwand – diese werden unverändert an das LLM gesendet.                            |\n| **Halten Sie Bilder in angemessener Größe**                             | Große Bilder können qualitätsmindert sein, was wichtige Details verlieren kann                                  |\n| **Verwenden Sie absolute Pfade für Dateianhänge**                       | Die Laufzeit liest Dateien vom Datenträger, relative Pfade werden möglicherweise nicht ordnungsgemäß aufgelöst  |\n| **Verwendung von BLOB-Anhängen für im Arbeitsspeicher gehaltene Daten** | Wenn Sie bereits base64-Daten haben (z. B. Screenshots, API-Antworten), vermeidet BLOB unnötige Datenträger-E/A |\n| **Überprüfen der Sehunterstützung zuerst**                              | Das Senden von Bildern an ein nicht visuelles Modell verschwendet Token ohne visuelles Verständnis              |\n| **Mehrere Bilder werden unterstützt.**                                  | Mehrere Anhänge in einer Nachricht zuordnen, bis zum `max_prompt_images` Limit des Modells                      |\n| **SVG wird nicht unterstützt**                                          | SVG-Dateien sind textbasiert und von der Bildverarbeitung ausgeschlossen.                                       |\n\n## Siehe auch\n\n* [Ereignisse einer Streaming-Sitzung](/de/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/streaming-events): Lebenszyklus von Ereignissen einschließlich Inhaltsblöcken von Tool-Ergebnissen\n* [Steuerung und Warteschlangen](/de/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/steering-and-queueing): Senden von Nachverfolgungsnachrichten mit Anlagen"}