Freigeben über


Verarbeiten von Bildern in prompt flow

Von Bedeutung

Die in diesem Artikel markierten Elemente (Vorschau) sind aktuell als öffentliche Vorschau verfügbar. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und sollte nicht für Produktionsworkloads verwendet werden. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.

Multimodale große Sprachmodelle (Large Language Models, LLMs), die verschiedene Formen von Dateneingaben verarbeiten und interpretieren können, stellen ein leistungsfähiges Tool dar, das die Fähigkeiten von reinen Sprachsystemen auf ein neues Level bringen kann. Bei den verschiedenen Datentypen sind Bilder für viele reale Anwendungen wichtig. Die Einbindung von Bilddaten in KI-Systeme sorgt für ein visuelles Grundverständnis.

In diesem Artikel wird Folgendes behandelt:

  • Verwenden von Bilddaten in prompt flow
  • Verwenden des integrierten GPT-4V-Tools zum Analysieren von Bildeingaben
  • Erstellen eines Chatbots, der Bild- und Texteingaben verarbeiten kann
  • Erstellen einer Batchausführung mithilfe von Bilddaten
  • Nutzen eines Onlineendpunkts mit Bilddaten

Bildtyp in prompt flow

prompt flow-Eingabe und -Ausgabe unterstützen Bilder als neuen Datentyp.

So verwenden Sie Bilddaten auf der Seite für die prompt flow-Erstellung

  1. Fügen Sie eine Floweingabe hinzu, und wählen Sie den Datentyp Bild aus. Sie können eine Bilddatei hochladen oder ziehen und ablegen, ein Bild aus der Zwischenablage einfügen oder eine Bild-URL oder den relativen Bildpfad im Flowordner angeben. Screenshot der Seite

  2. Zeigen Sie eine Vorschau des Bilds an. Wenn das Bild nicht ordnungsgemäß angezeigt wird, löschen Sie das Bild, und fügen Sie es erneut hinzu. Screenshot der Seite

  3. Möglicherweise möchten Sie das Bild mithilfe des Python-Tools vorverarbeitet, bevor Sie es an die LLM übergeben. Sie können beispielsweise die Größe des Bilds ändern oder es auf eine kleinere Größe zuschneiden. Screenshot der Verwendung des Python-Tools zur Vorverarbeitung von Images

    from promptflow import tool
    from promptflow.contracts.multimedia import Image as PFImage 
    from PIL import Image as Image 
    import io
    
    @tool
    def process_image(input_image: PFImage) -> PFImage:
        # convert the input image data to a BytesIO object
        data_byteIO = io.BytesIO(input_image)
    
        # Open the image data as a PIL Image object
        image = Image.open(data_byteIO)
    
        # crop image
        cropped_image = image.crop((100, 100, 900, 900))
    
        # Convert the cropped image back to BytesIO
        byte_arr = io.BytesIO()
        cropped_image.save(byte_arr, format = 'JPEG')
    
        # Create a new prompt flow Image object with the cropped image data
        # This image is now ready to be returned
        cropped_PF_image = PFImage(byte_arr.getvalue(), mime_type = "image/jpeg")
    
        return cropped_PF_image
       ```
    
    > [!IMPORTANT]
    > To process images using a Python function, you need to use the `Image` class that you import from the `promptflow.contracts.multimedia` package. The `Image` class is used to represent an `Image` type within prompt flow. It is designed to work with image data in byte format, which is convenient when you need to handle or manipulate the image data directly.
    >
    > To return the processed image data, you need to use the `Image` class to wrap the image data. Create an `Image` object by providing the image data in bytes and the [MIME type](https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types) `mime_type`. The MIME type lets the system understand the format of the image data, or it can be `*` for unknown type.
    
    
  4. Führen Sie den Python-Knoten aus, und überprüfen Sie die Ausgabe. In diesem Beispiel gibt die Python-Funktion das verarbeitete Bildobjekt zurück. Wählen Sie die Bildausgabe aus, um eine Vorschau des Bilds anzuzeigen. Screenshot der Imageausgabe des Python-Knotens

    Wenn das Imageobjekt vom Python-Knoten als Flowausgabe festgelegt ist, können Sie auch eine Vorschau des Images auf der Flowausgabeseite anzeigen.

Verwenden des GPT-4V-Tools

Das Tool „Azure OpenAI GPT-4 Turbo with Vision und „OpenAI GPT-4V“ sind integrierte Tools in prompt flow, die das OpenAI GPT-4V-Modell verwenden können, um Fragen basierend auf Eingabebildern zu beantworten. Sie finden das Tool, indem Sie auf der Flowerstellungsseite die Option + Weitere Tools auswählen.

Fügen Sie das Tool „Azure OpenAI GPT-4 Turbo with Vision“ dem Flow hinzu. Stellen Sie sicher, dass Sie über eine Azure OpenAI-Verbindung verfügen und Modelle vom Typ „GPT-4 Vision-preview“ verfügbar sind.

Screenshot des GPT-4V-Tools

Die Jinja-Vorlage zum Verfassen von Prompts im GPT-4V-Tool folgt einer ähnlichen Struktur wie die Chat-API im LLM-Tool. Um eine Bildeingabe in Ihrem Prompt darzustellen, können Sie die Syntax ![image]({{INPUT NAME}}) verwenden. Bildeingaben können in user-, system- und assistant-Nachrichten übergeben werden.

Nachdem Sie den Prompt verfasst haben, wählen Sie die Schaltfläche Eingabe überprüfen und analysieren aus, um die Eingabeplatzhalter zu analysieren. Die durch ![image]({{INPUT NAME}}) dargestellte Bildeingabe wird als Bildtyp mit dem Eingabenamen INPUT NAME analysiert.

Sie können der Bildeingabe einen Wert auf folgende Weise zuweisen:

  • Verweisen aus der Floweingabe des Bildtyps
  • Verweisen aus den Bildtypausgaben eines anderen Knotens
  • Hochladen, Ziehen und Einfügen eines Bilds oder Angeben einer Bild-URL oder des relativen Bildpfads

Erstellen eines Chatbots zum Verarbeiten von Bildern

In diesem Abschnitt erfahren Sie, wie Sie einen Chatbot erstellen, der Bild- und Texteingaben verarbeiten kann

Angenommen, Sie möchten einen Chatbot erstellen, der Fragen zu Bild und Text zusammen beantworten kann. Sie können dies erreichen, indem Sie die Schritte in diesem Abschnitt befolgen.

  1. Erstellen Sie einen Chatflow.

  2. Wählen Sie in Eingaben den Datentyp als „Liste“aus. Im Chatfeld können Benutzer*innen eine gemischte Abfolge von Texten und Bildern eingeben, und der prompt flow-Dienst wandelt diese in eine Liste um. Screenshot der Konfiguration des Chateingabetyps

  3. Fügen Sie das Tool GPT-4V zum Flow hinzu. Sie können die Prompts aus dem standardmäßigen LLM-Toolchat kopieren und in das GPT 4V-Tool einfügen. Anschließend löschen Sie den standardmäßigen LLM-Toolchat aus dem Flow.  Screenshot des GPT-4V-Tools im Chatflow

    In diesem Beispiel bezieht sich {{question}} auf die Chateingabe, bei der es sich um eine Liste von Texten und Bildern handelt.

  4. Ändern Sie in Ausgaben den Wert der „Antwort“ in den Namen der Ausgabe Ihres Visionstools, z. B. ${gpt_vision.output}. Screenshot der Konfiguration des Chatausgabetyps.

  5. (Optional) Sie können dem Flow eine beliebige benutzerdefinierte Logik hinzufügen, um die GPT-4V-Ausgabe zu verarbeiten. Sie können beispielsweise das Tool "Guardrails & Controls" hinzufügen, um festzustellen, ob die Antwort unangemessenen Inhalt enthält, und dem Benutzer eine endgültige Antwort zu geben. Screenshot der Verarbeitung der gpt-4v-Ausgabe mit dem Tool für Integritätsschutz und -steuerung

  6. Jetzt können Sie den Chatbot testen. Öffnen Sie das Chatfenster, und geben Sie alle Fragen mit Bildern ein. Der Chatbot beantwortet die Fragen basierend auf Bild- und Texteingaben. Der Chateingabewert wird automatisch mit der Eingabe aus dem Chatfenster abgeglichen. Sie finden die Texte mit Bildern im Chatfeld, das in eine Liste von Texten und Bildern übersetzt wird. Screenshot der Chatbotinteraktion mit Images

Hinweis

Um es Ihrem Chatbot zu ermöglichen, mit Rich-Text und Bildern zu reagieren, legen Sie die Chatausgabe auf den Typ list fest. Die Liste sollte aus Zeichenfolgen (für Text) und prompt flow-Bildobjekten (für Bilder) in benutzerdefinierter Reihenfolge bestehen. Screenshot des Chatbots, der mit Rich-Text und Images antwortet

Erstellen einer Batchausführung mithilfe von Bilddaten

Mit einer Batchausführung können Sie den Flow mit einem umfangreichen Dataset testen. Es gibt drei Methoden zum Darstellen von Bilddaten: über eine Bilddatei, eine öffentliche Bild-URL oder eine Base64-Zeichenfolge.

  • Bilddatei: Zum Testen mit Bilddateien in der Batchausführung müssen Sie einen Datenordner vorbereiten. Dieser Ordner muss eine Batchausführungs-Eingabedatei im Format jsonl enthalten, die sich im Stammverzeichnis befindet, zusammen mit allen Bilddateien, die im selben Ordner oder denselben Unterordnern gespeichert sind. Screenshot der Beispieldaten für die Batchausführung mit Images In der Eingabedatei sollten Sie das Format {"data:<mime type>;path": "<image relative path>"} verwenden, um auf die einzelnen Bilddateien zu verweisen. Beispiel: {"data:image/png;path": "./images/1.png"}.
  • Öffentliche Bild-URL: Sie können auch mithilfe des folgenden Formats auf die Bild-URL in der Eingabedatei verweisen: {"data:<mime type>;url": "<image URL>"}. Beispiel: {"data:image/png;url": "https://www.example.com/images/1.png"}.
  • Base64-Zeichenfolge: Auf eine Base64-Zeichenfolge kann in der Eingabedatei mithilfe des folgenden Formats verwiesen werden: {"data:<mime type>;base64": "<base64 string>"}. Beispiel: {"data:image/png;base64": "iVBORw0KGgoAAAANSUhEUgAAAGQAAABLAQMAAAC81rD0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABlBMVEUAAP7////DYP5JAAAAAWJLR0QB/wIt3gAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB+QIGBcKN7/nP/UAAAASSURBVDjLY2AYBaNgFIwCdAAABBoAAaNglfsAAAAZdEVYdGNvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVDnr0DLAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIwLTA4LTI0VDIzOjEwOjU1KzAzOjAwkHdeuQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMC0wOC0yNFQyMzoxMDo1NSswMzowMOEq5gUAAAAASUVORK5CYII="}.

Zusammenfassend lässt sich sagen, dass prompt flow ein eindeutiges Wörterbuchformat verwendet, um ein Bild darzustellen: {"data:<mime type>;<representation>": "<value>"}. Hier bezieht sich <mime type> auf MIME-Imagetypen des HTML-Standards, und <representation> bezieht sich auf die unterstützten Imagedarstellungen: path, url und base64.

Erstellen einer Batchausführung

Wählen Sie auf der Flowerstellungsseite Auswerten > Benutzerdefinierte Auswertung aus, um eine Batchausführung zu initiieren. Wählen Sie in den Batchausführungseinstellungen ein Dataset aus, das entweder ein Ordner (mit der Eingabedatei und Bilddateien) oder eine Datei (die nur die Eingabedatei enthält) sein kann. Sie können eine Vorschau der Eingabedatei anzeigen und eine Eingabezuordnung durchführen, um die Spalten in der Eingabedatei auf die Floweingaben abzustimmen. Screenshot der Auswahl von Batchausführungsdaten

Anzeigen von Batchausführungsergebnissen

Sie können die Ausgaben der Batchausführung auf der Seite mit den Ausführungsdetails überprüfen. Wählen Sie das Bildobjekt in der Ausgabetabelle aus, um auf einfache Weise eine Vorschau des Bilds anzuzeigen.

Screenshot der Ausgabe der Batchausführung

Wenn die Batchausführungsausgaben Bilder enthalten, können Sie das flow_outputs-Dataset mit der JSON-Ausgabedatei und den Ausgabebildern überprüfen.

Screenshot der Ausgabe des Batchausführungsflow

Nutzen eines Onlineendpunkts mit Bilddaten

Sie können einen Flow für einen Onlineendpunkt für Rückschlüsse in Echtzeit bereitstellen.

Derzeit unterstützt die Registerkarte Test auf der Detailseite der Bereitstellung keine Bildeingaben oder -ausgaben.

Vorerst können Sie den Endpunkt testen, indem Sie eine Anforderung senden, die Bildeingaben enthält.

Um den Onlineendpunkt mit Bildeingabe zu nutzen, sollten Sie das Bild mithilfe des Formats {"data:<mime type>;<representation>": "<value>"} darstellen. In diesem Fall kann <representation> entweder url oder base64 sein.

Wenn der Flow eine Bildausgabe generiert, wird sie im Format base64 zurückgegeben, z. B. {"data:<mime type>;base64": "<base64 string>"}.

Nächste Schritte