Freigeben über


Verwenden von GPT-4 Turbo mit Vision

GPT-4 Turbo mit Vision ist ein großes multimodales Modell (LMM), das von OpenAI entwickelt wurde, das Bilder analysieren und Textantworten auf Fragen zu ihnen liefern kann. Es umfasst sowohl die Verarbeitung natürlicher Sprache als auch das visuelle Verständnis.

Das Modell „GPT-4 Turbo mit Vision“ beantwortet allgemeine Fragen zum Inhalt von Bildern.

Tipp

Um GPT-4 Turbo mit Vision zu verwenden, rufen Sie die Chat Completion-API für ein GPT-4 Turbo mit Vision-Modell auf, das Sie bereitgestellt haben. Wenn Sie mit der Chatvervollständigungs-API nicht vertraut sind, lesen Sie die Schrittanleitungen für GPT-4 Turbo und GPT-4.

Upgrade des GPT-4 Turbo-Modells

Das neueste GA-Release (Allgemeine Verfügbarkeit) von GPT-4 Turbo ist:

  • gpt-4 Version: turbo-2024-04-09

Es ersetzt die folgenden Vorschaumodelle:

  • gpt-4 Version: 1106-Preview
  • gpt-4 Version: 0125-Preview
  • gpt-4 Version: vision-preview

Unterschiede zwischen den allgemein verfügbaren Modellen OpenAI und Azure OpenAI GPT-4 Turbo

  • Die Version des neuesten 0409 Turbo-Modells von OpenAI unterstützt den JSON-Modus und Funktionsaufrufe für alle Rückschlussanforderungen.
  • Die neueste turbo-2024-04-09 Version von Azure OpenAI unterstützt derzeit nicht die Verwendung des JSON-Modus und keine Funktionsaufrufe beim Durchführen von Rückschlussanforderungen mit Bildeingaben (Vision). Textbasierte Eingabeanforderungen (Anforderungen ohne image_url und Inlinebilder) unterstützen den JSON-Modus und Funktionsaufrufe.

Unterschiede zu gpt-4 vision-preview

  • Die Integration von Azure KI-spezifischen Vision-Erweiterungen mit GPT-4 Turbo mit Vision wird nicht unterstützt für gpt-4 Version: turbo-2024-04-09. Dazu gehören optische Zeichenerkennung (Optical Character Recognition, OCR), Objektgrounding, Videoprompts und eine verbesserte Verarbeitung Ihrer Daten mit Bildern.

Wichtig

Previewfunktionen für Vision-Verbesserungen, einschließlich optischer Zeichenerkennung (Optical Character Recognition, OCR), Objekterdung und Videoeingabeaufforderungen werden eingestellt werden und nicht mehr verfügbar sein, sobald für die gpt-4-Version vision-preview ein Upgrade auf turbo-2024-04-09 durchgeführt wird. Wenn Sie sich derzeit auf eine dieser Previewfunktionen verlassen, wird dieses automatische Modellupgrade ein Breaking Change sein.

GPT-4 Turbo bereitgestellte verwaltete Verfügbarkeit

  • gpt-4 Version: turbo-2024-04-09 ist sowohl für Standard- als auch für bereitgestellte Implementierungen verfügbar. Derzeit unterstützt die bereitgestellte Version dieses Modells keine Bild-/Vision-Anforderungen für Rückschlüsse. Bereitgestellte Implementierungen dieses Modells akzeptieren nur Texteingaben. Standardmodellimplementierungen akzeptieren sowohl Text- als auch Bild-/Vision-Anforderungen für Rückschlüsse.

Bereitstellen von GPT-4 Turbo mit Vision GA

Um das GA-Modell über die Studio-Benutzeroberfläche bereitzustellen, wählen Sie GPT-4 und dann die Version turbo-2024-04-09 im Dropdownmenü aus. Das Standardkontingent für das gpt-4-turbo-2024-04-09-Modell entspricht dem aktuellen Kontingent für GPT-4-Turbo. Weitere Informationen finden Sie in den regionalen Kontingentbeschränkungen.

Aufrufen der Chat Completion-APIs

Der folgende Befehl stellt die einfachste Methode zur Verwendung des GPT-4 Turbo mit dem Vision-Modell einschließlich Code dar. Wenn Sie diese Modelle zum ersten Mal programmgesteuert verwenden, empfehlen wir Ihnen, mit unserem Schnellstart: GPT-4 Turbo mit Vision zu beginnen.

Senden Sie eine POST-Anforderung an https://{RESOURCE_NAME}.openai.azure.com/openai/deployments/{DEPLOYMENT_NAME}/chat/completions?api-version=2024-02-15-preview, wobei gilt:

  • RESOURCE_NAME ist der Name Ihrer Azure OpenAI-Ressource.
  • DEPLOYMENT_NAME ist der Name Ihrer GPT-4 Turbo mit Vision-Modellimplementierung.

Erforderliche Header:

  • Content-Type: application/json
  • api-key: {API_KEY}

Body: Es folgt ein Beispiel für den Anforderungstext. Das Format entspricht der Chat Completion API für GPT-4, mit der Ausnahme, dass der Nachrichteninhalt ein Array sein kann, das Text und Bilder enthält (entweder eine gültige HTTP- oder HTTPS-URL zu einem Bild oder ein base64-codiertes Bild).

Wichtig

Denken Sie daran, einen "max_tokens"-Wert festzulegen, sonst wird die Rückgabe abgeschnitten.

Wichtig

Beim Hochladen von Bildern gibt es eine Beschränkung von 10 Bildern pro Chatanfrage.

{
    "messages": [ 
        {
            "role": "system", 
            "content": "You are a helpful assistant." 
        },
        {
            "role": "user", 
            "content": [
	            {
	                "type": "text",
	                "text": "Describe this picture:"
	            },
	            {
	                "type": "image_url",
	                "image_url": {
                        "url": "<image URL>"
                    }
                } 
           ] 
        }
    ],
    "max_tokens": 100, 
    "stream": false 
} 

Tipp

Verwenden eines lokalen Image

Wenn Sie ein lokales Image verwenden möchten, können Sie dieses mit dem folgenden Python-Code zu Base64 konvertieren, damit es an die API übergeben werden kann. Alternative Konvertierungstools für Dateien sind online verfügbar.

import base64
from mimetypes import guess_type

# Function to encode a local image into data URL 
def local_image_to_data_url(image_path):
    # Guess the MIME type of the image based on the file extension
    mime_type, _ = guess_type(image_path)
    if mime_type is None:
        mime_type = 'application/octet-stream'  # Default MIME type if none is found

    # Read and encode the image file
    with open(image_path, "rb") as image_file:
        base64_encoded_data = base64.b64encode(image_file.read()).decode('utf-8')

    # Construct the data URL
    return f"data:{mime_type};base64,{base64_encoded_data}"

# Example usage
image_path = '<path_to_image>'
data_url = local_image_to_data_url(image_path)
print("Data URL:", data_url)

Wenn Ihre Base64-Image-Daten vorliegen, können Sie sie wie folgt an die API im Anforderungstext übergeben:

...
"type": "image_url",
"image_url": {
   "url": "data:image/jpeg;base64,<your_image_data>"
}
...

Output

Die API-Antwort sollte wie folgt aussehen.

{
    "id": "chatcmpl-8VAVx58veW9RCm5K1ttmxU6Cm4XDX",
    "object": "chat.completion",
    "created": 1702439277,
    "model": "gpt-4",
    "prompt_filter_results": [
        {
            "prompt_index": 0,
            "content_filter_results": {
                "hate": {
                    "filtered": false,
                    "severity": "safe"
                },
                "self_harm": {
                    "filtered": false,
                    "severity": "safe"
                },
                "sexual": {
                    "filtered": false,
                    "severity": "safe"
                },
                "violence": {
                    "filtered": false,
                    "severity": "safe"
                }
            }
        }
    ],
    "choices": [
        {
            "finish_reason":"stop",
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "The picture shows an individual dressed in formal attire, which includes a black tuxedo with a black bow tie. There is an American flag on the left lapel of the individual's jacket. The background is predominantly blue with white text that reads \"THE KENNEDY PROFILE IN COURAGE AWARD\" and there are also visible elements of the flag of the United States placed behind the individual."
            },
            "content_filter_results": {
                "hate": {
                    "filtered": false,
                    "severity": "safe"
                },
                "self_harm": {
                    "filtered": false,
                    "severity": "safe"
                },
                "sexual": {
                    "filtered": false,
                    "severity": "safe"
                },
                "violence": {
                    "filtered": false,
                    "severity": "safe"
                }
            }
        }
    ],
    "usage": {
        "prompt_tokens": 1156,
        "completion_tokens": 80,
        "total_tokens": 1236
    }
}

Jede Antwort enthält ein Feld "finish_reason". Folgende Werte sind möglich:

  • stop: Die API hat die vollständige Modellausgabe zurückgegeben.
  • length: Die Modellausgabe ist aufgrund des Eingabeparameters max_tokens oder des Tokenlimits des Modells unvollständig.
  • content_filter: Inhalte wurden aufgrund eines Flags aus unseren Inhaltsfiltern ausgelassen.

Detailparameter-Einstellungen in der Bildbearbeitung: Niedrig, Hoch, Auto

Der Parameter Detail im Modell bietet drei Optionen: low, high oder auto, um die Art und Weise anzupassen, wie das Modell Bilder interpretiert und verarbeitet. Die Standardeinstellung ist Auto, wobei das Modell basierend auf der Größe der Bildeingabe zwischen den Optionen „Niedrig“ oder „Hoch“ entscheidet.

  • low-Einstellung: Das Modell aktiviert nicht den Modus „Hohe Auflösung“, sondern verarbeitet eine niedrigere Auflösung von 512x512, was zu schnelleren Antworten und einer reduzierten Tokennutzung für Szenarien führt, in denen nähere Details nicht entscheidend sind.
  • high-Einstellung: Das Modell aktiviert den Modus „Hohe Auflösung“. Hier betrachtet das Modell zunächst das niedrig aufgelöste Bild und erzeugt dann detaillierte 512x512-Segmente aus dem Eingabebild. Jedes Segment verwendet das doppelte Token-Budget und ermöglicht so eine detailliertere Interpretation des Bildes.“

Ausführliche Informationen dazu, wie sich die verwendeten Bildparameter und die Preise auf Token auswirken, finden Sie unter: Was ist Azure OpenAI? Bildtoken

Output

Die Chatantworten, die Sie vom Modell erhalten, sollten nun erweiterte Informationen zum Bild enthalten, z. B. Objektbeschriftungen und Begrenzungsrahmen sowie OCR-Ergebnisse. Die API-Antwort sollte wie folgt aussehen.

{
    "id": "chatcmpl-8UyuhLfzwTj34zpevT3tWlVIgCpPg",
    "object": "chat.completion",
    "created": 1702394683,
    "model": "gpt-4",
    "choices":
    [
        {
            "finish_reason": {
                "type": "stop",
                "stop": "<|fim_suffix|>"
            },
            "index": 0,
            "message":
            {
                "role": "assistant",
                "content": "The image shows a close-up of an individual with dark hair and what appears to be a short haircut. The person has visible ears and a bit of their neckline. The background is a neutral light color, providing a contrast to the dark hair."
            }
        }
    ],
    "usage":
    {
        "prompt_tokens": 816,
        "completion_tokens": 49,
        "total_tokens": 865
    }
}

Jede Antwort enthält ein Feld "finish_reason". Folgende Werte sind möglich:

  • stop: Die API hat die vollständige Modellausgabe zurückgegeben.
  • length: Die Modellausgabe ist aufgrund des Eingabeparameters max_tokens oder des Tokenlimits des Modells unvollständig.
  • content_filter: Inhalte wurden aufgrund eines Flags aus unseren Inhaltsfiltern ausgelassen.

Erstellen eines Videoabrufindexes

  1. Rufen Sie eine Azure KI Vision-Ressource in derselben Region wie die Azure OpenAI-Ressource ab, die Sie verwenden.

  2. Erstellen Sie einen Index, um die Videodateien und deren Metadaten zu speichern und zu organisieren. Der Beispielbefehl unten veranschaulicht, wie Sie mit der Create Index-API einen Index mit dem Namen my-video-index erstellen. Speichern Sie den Indexnamen an einem temporären Speicherort. Sie benötigen ihn in späteren Schritten.

    Tipp

    Ausführlichere Anweisungen zum Erstellen eines Videoindex finden Sie unter Ausführen des Videoabrufs mithilfe von Vektorisierung.

    Wichtig

    Ein Videoindexname kann bis zu 24 Zeichen lang sein, es sei denn, es handelt sich um eine GUID, die 36 Zeichen lang sein kann.

    curl.exe -v -X PUT "https://<YOUR_ENDPOINT_URL>/computervision/retrieval/indexes/my-video-index?api-version=2023-05-01-preview" -H "Ocp-Apim-Subscription-Key: <YOUR_SUBSCRIPTION_KEY>" -H "Content-Type: application/json" --data-ascii "
    {
      'metadataSchema': {
        'fields': [
          {
            'name': 'cameraId',
            'searchable': false,
            'filterable': true,
            'type': 'string'
          },
          {
            'name': 'timestamp',
            'searchable': false,
            'filterable': true,
            'type': 'datetime'
          }
        ]
      },
      'features': [
        {
          'name': 'vision',
          'domain': 'surveillance'
        },
        {
          'name': 'speech'
        }
      ]
    }"
    
  3. Fügen Sie dem Index Videodateien mit den zugehörigen Metadaten hinzu. Im folgenden Beispiel wird erklärt, wie Sie mit der Create Ingestion-API dem Index zwei Videodateien mit SAS-URLs hinzufügen. Speichern Sie die SAS-URLs und documentId-Werte an einem temporären Speicherort. Sie benötigen sie in späteren Schritten.

    curl.exe -v -X PUT "https://<YOUR_ENDPOINT_URL>/computervision/retrieval/indexes/my-video-index/ingestions/my-ingestion?api-version=2023-05-01-preview" -H "Ocp-Apim-Subscription-Key: <YOUR_SUBSCRIPTION_KEY>" -H "Content-Type: application/json" --data-ascii "
    {
      'videos': [
        {
          'mode': 'add',
          'documentId': '02a504c9cd28296a8b74394ed7488045',
          'documentUrl': 'https://example.blob.core.windows.net/videos/02a504c9cd28296a8b74394ed7488045.mp4?sas_token_here',
          'metadata': {
            'cameraId': 'camera1',
            'timestamp': '2023-06-30 17:40:33'
          }
        },
        {
          'mode': 'add',
          'documentId': '043ad56daad86cdaa6e493aa11ebdab3',
          'documentUrl': '[https://example.blob.core.windows.net/videos/043ad56daad86cdaa6e493aa11ebdab3.mp4?sas_token_here',
          'metadata': {
            'cameraId': 'camera2'
          }
        }
      ]
    }"
    
  4. Nachdem Sie dem Index Videodateien hinzugefügt haben, wird der Erfassungsvorgang gestartet. Je nach Größe und Anzahl von Dateien kann es einige Zeit dauern. Um sicherzustellen, dass die Erfassung abgeschlossen ist, bevor Suchvorgänge ausgeführt werden, können Sie den Status mit der Get Ingestion-API überprüfen. Warten Sie, bis dieser Aufruf "state" = "Completed" zurückgibt, bevor Sie mit dem nächsten Schritt fortfahren.

    curl.exe -v -X GET "https://<YOUR_ENDPOINT_URL>/computervision/retrieval/indexes/my-video-index/ingestions?api-version=2023-05-01-preview&$top=20" -H "ocp-apim-subscription-key: <YOUR_SUBSCRIPTION_KEY>"
    

Nächste Schritte