{"meta":{"title":"画像入力","intro":"添付ファイルとしてCopilotセッションに画像を送信します。 画像を添付するには、次の 2 つの方法があります。","product":"GitHub Copilot","breadcrumbs":[{"href":"/ja/copilot","title":"GitHub Copilot"},{"href":"/ja/copilot/how-tos","title":"方法"},{"href":"/ja/copilot/how-tos/copilot-sdk","title":"Copilot SDK"},{"href":"/ja/copilot/how-tos/copilot-sdk/features","title":"機能"},{"href":"/ja/copilot/how-tos/copilot-sdk/features/image-input","title":"画像入力"}],"documentType":"article"},"body":"# 画像入力\n\n添付ファイルとしてCopilotセッションに画像を送信します。 画像を添付するには、次の 2 つの方法があります。\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n* **添付ファイル** (`type: \"file\"`): 絶対パスを指定します。ランタイムはファイルをディスクから読み取り、base64 に変換して LLM に送信します。\n* **BLOB 添付ファイル** (`type: \"blob\"`): base64 でエンコードされたデータを直接提供します。画像が既にメモリ内にある場合に便利です (スクリーンショット、生成された画像、API からのデータなど)。\n\n## Overview\n\n![図: 説明されたプロセスを示すシーケンス図。](/assets/images/help/copilot/copilot-sdk/features-image-input-diagram-0.png)\n\n| 概念                                                                              | Description                                                    |\n| ------------------------------------------------------------------------------- | -------------------------------------------------------------- |\n| **添付ファイル**                                                                      |                                                                |\n| `type: \"file\"`とディスク上のイメージへの絶対`path`を含む添付ファイル                                    |                                                                |\n| **BLOB の添付ファイル**                                                                |                                                                |\n| `type: \"blob\"`、base64 でエンコードされた`data`、および`mimeType`を含む添付ファイル 。ディスク I/O は必要ありません |                                                                |\n| **自動エンコード**                                                                     | 添付ファイルの場合、ランタイムはイメージを読み取り、base64 に自動的に変換します                    |\n| **自動サイズ変更**                                                                     | ランタイムは、モデル固有の制限を超えるイメージのサイズを自動的に変更または品質を下げます                   |\n| **ビジョン機能**                                                                      | モデルには、イメージを処理するための `capabilities.supports.vision = true` が必要です |\n\n## クイック スタート - 添付ファイル\n\n添付ファイルの種類を使用して、画像ファイルを任意のメッセージに添付します。 パスは、ディスク上のイメージへの絶対パスである必要があります。\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## クイック スタート — Blob 添付ファイル\n\n既にメモリ内に画像データがある場合 (アプリによってキャプチャされたスクリーンショットや API からフェッチされたイメージなど)、BLOB 添付ファイルを使用して、ディスクに書き込まずに直接送信します。\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## サポートされるフォーマット\n\nサポートされている画像形式には、JPG、PNG、GIF、およびその他の一般的な画像の種類があります。 添付ファイルの場合、ランタイムはディスクからイメージを読み取り、必要に応じて変換します。 BLOB 添付ファイルの場合は、base64 データと MIME の種類を直接指定します。 最も広くサポートされている形式のため、最適な結果を得るには PNG または JPEG を使用します。\n\nモデルの `capabilities.limits.vision.supported_media_types` フィールドには、受け入れられる正確な MIME の種類が一覧表示されます。\n\n## 自動処理\n\nランタイムは、モデルの制約内に収まるようにイメージを自動的に処理します。 手動によるサイズ変更は必要ありません。\n\n* モデルの寸法またはサイズの制限を超える画像は、自動的にサイズ変更 (縦横比を維持) または品質が低下します。\n* 処理後に制限内にイメージを取り込むことができない場合、イメージはスキップされ、LLM に送信されません。\n* モデルの `capabilities.limits.vision.max_prompt_image_size` フィールドは、最大イメージ サイズをバイト単位で示します。\n\nこれらの制限は、実行時にモデル機能オブジェクトを使用して確認できます。 最適なエクスペリエンスを実現するために、合理的なサイズの PNG または JPEG 画像を使用します。\n\n## ビジョン モデルの機能\n\nすべてのモデルがビジョンをサポートしているわけではありません。 画像を送信する前に、モデルの機能を確認します。\n\n### 機能フィールド\n\n| フィールド                                              | タイプ        | Description                                           |\n| -------------------------------------------------- | ---------- | ----------------------------------------------------- |\n| `capabilities.supports.vision`                     | `boolean`  | モデルが画像入力を処理できるかどうか                                    |\n| `capabilities.limits.vision.supported_media_types` | `string[]` | モデルが受け入れる MIME の種類 (例: `[\"image/png\", \"image/jpeg\"]`) |\n| `capabilities.limits.vision.max_prompt_images`     | `number`   | プロンプトあたりのイメージの最大数                                     |\n| `capabilities.limits.vision.max_prompt_image_size` | `number`   | 最大イメージ サイズ (バイト単位)                                    |\n\n### ビジョンの制限の種類\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## 画像の結果を受け取る\n\nツールが画像 (スクリーンショットや生成されたグラフなど) を返すと、結果には base64 でエンコードされたデータを含む `\"image\"` コンテンツ ブロックが含まれます。\n\n| フィールド      | タイプ       | Description                 |\n| ---------- | --------- | --------------------------- |\n| `type`     | `\"image\"` | コンテンツブロックタイプ判別子             |\n| `data`     | `string`  | Base64 でエンコードされた画像データ       |\n| `mimeType` | `string`  | MIME の種類 (例: `\"image/png\"`) |\n\nこれらのイメージ ブロックは、`tool.execution_complete` イベント結果に現れます。 イベントのライフサイクル全体については、 [ストリーミング セッション イベント](/ja/copilot/how-tos/copilot-sdk/features/streaming-events) ガイドを参照してください。\n\n## ヒントと制限事項\n\n| Tip                             | 詳細情報                                                             |\n| ------------------------------- | ---------------------------------------------------------------- |\n| **PNG または JPEG を直接使用する**        | 変換のオーバーヘッドを回避します。これらは LLM as-is に送信されます                          |\n| **画像のサイズを適度に維持する**              | 大きな画像は品質が低下する可能性があり、重要な詳細が失われる可能性があります                           |\n| **添付ファイルに絶対パスを使用する**            | ランタイムはディスクからファイルを読み取ります。相対パスが正しく解決されない可能性がある                     |\n| **インメモリ データに BLOB 添付ファイルを使用する** | base64 データ (スクリーンショット、API 応答など) が既にある場合、BLOB は不要なディスク I/O を回避します |\n| **最初に視覚サポートを確認する**              | 非ビジョン モデルに画像を送信すると、視覚的な理解なしにトークンが無駄になります                         |\n| **複数のイメージがサポートされています**          | モデルの `max_prompt_images` 制限まで、複数の添付ファイルを 1 つのメッセージに添付する          |\n| **SVG はサポートされていません**            | SVG ファイルはテキストベースであり、画像処理から除外されます                                 |\n\n## こちらも参照ください\n\n* [ストリーミング セッション イベント](/ja/copilot/how-tos/copilot-sdk/features/streaming-events): ツールの結果コンテンツ ブロックを含むイベント ライフサイクル\n* [ステアリングとキューイング](/ja/copilot/how-tos/copilot-sdk/features/steering-and-queueing): 添付ファイルを含むフォローアップ メッセージの送信"}