共用方式為


使用包含視覺功能的 GPT-4 Turbo

包含視覺功能的 GPT-4 Turbo 是由 OpenAI 開發的大型多模態模型 (LMM),可分析影像並針對影像問題提供文字回應。 它同時包含自然語言處理和視覺理解。

包含視覺功能的 GPT-4 Turbo 模型可回答影像中呈現的一般問題。

提示

若要使用包含視覺功能的 GPT-4 Turbo,請在已部署之包含視覺功能的 GPT-4 Turbo 模型上呼叫聊天完成 API。 如果您不熟悉聊天完成 API,請參閱 GPT-4 Turbo & GPT-4 操作指南

GPT-4 Turbo 模型升級

GPT-4 Turbo 的最新 GA 版本為:

  • gpt-4 版本:turbo-2024-04-09

這是下列預覽模型的取代:

  • gpt-4 版本:1106-Preview
  • gpt-4 版本:0125-Preview
  • gpt-4 版本:vision-preview

OpenAI 與 Azure OpenAI GPT-4 Turbo GA 模型之間的差異

  • OpenAI 的最新 0409 turbo 模型版本支援所有推斷要求的 JSON 模式和函式呼叫。
  • Azure OpenAI 的最新 turbo-2024-04-09 版本目前不支援以影像 (視覺) 輸入進行推斷要求時使用 JSON 模式和函式呼叫。 以文字為基礎的輸入要求 (沒有 image_url 和內嵌影像的要求) 支援 JSON 模式和函式呼叫。

GPT-4 視覺預覽的差異

  • Azure AI 特定的視覺增強功能與含有視覺功能的 GPT-4 Turbo 整合,不支援 gpt-4 版本: turbo-2024-04-09。 這包括光學字元辨識 (OCR)、物件基礎、影片提示,以及使用影像改善資料的處理。

重要

一旦將 gpt-4 版本: vision-preview 升級至 turbo-2024-04-09,則視覺增強預覽功能 (包括光學字元辨識 (OCR)、物件接地、影片提示) 即會淘汰且無法再使用。 如果您目前依賴上述任何預覽功能,此自動模型升級將會是重大變更。

GPT-4 Turbo 佈建的受控可用性

  • gpt-4 版本:turbo-2024-04-09 可用於標準和佈建的部署。 目前此模型的佈建版本不支援影像/視覺推斷要求。 此模型的佈建部署只接受文字輸入。 標準模型部署同時接受文字和影像/視覺推斷要求。

部署包含視覺功能的 GPT-4 Turbo GA

若要從 Studio UI 部署 GA 模型,請選取 [GPT-4],然後從下拉式功能表中選擇 turbo-2024-04-09 版本。 gpt-4-turbo-2024-04-09 模型的預設配額會與 GPT-4-Turbo 目前的配額相同。 請參閱區域配額限制。

呼叫聊天完成 API

下列命令顯示利用程式碼來使用包含視覺功能之 GPT-4 Turbo 模型的最基本方式。 如果這是您第一次以程式設計方式使用這些模型,建議您從包含視覺功能的 GPT-4 Turbo 快速入門開始。

請傳送 POST 要求至 https://{RESOURCE_NAME}.openai.azure.com/openai/deployments/{DEPLOYMENT_NAME}/chat/completions?api-version=2024-02-15-preview,其中

  • RESOURCE_NAME 是您 Azure OpenAI 資源的名稱
  • DEPLOYMENT_NAME 是包含視覺功能的 GPT-4 Turbo 模型的部署名稱

必要標頭:

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

本文: 下列是範例要求本文。 格式與 GPT-4 的聊天完成 API 相同,不同之處在於訊息內容可以是包含文字和影像的陣列 (不論是影像的有效 HTTP 或 HTTPS URL,或是 base-64 編碼的影像皆可)。

重要

請記得設定 "max_tokens" 值,否則傳回輸出會被切斷。

重要

上傳影像時,每個聊天要求以 10 個影像為限。

{
    "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 
} 

提示

使用本機影像

如果您想要使用本機影像,您可以使用下列 Python 程式碼將它轉換成 base64,以便將其傳遞至 API。 替代檔案轉換工具可在線上取得。

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)

當您的 base64 影像資料準備就緒時,您可以將它傳遞給要求本文中的 API,如下所示:

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

輸出

API 回應應該看起來如下所示。

{
    "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
    }
}

每個回應都包含 "finish_reason" 欄位。 可能有以下的值:

  • stop: API 傳回的完整模型輸出。
  • length: 因為 max_tokens 輸入參數或模型的權杖限制,所以模型輸出不完整。
  • content_filter: 由於內容篩選中的旗標而省略了內容。

影像處理中的詳細資料參數設定:低、高、自動

模型中的詳細資料參數提供三個選項: lowhighauto,以調整模型解譯和處理影像的方式。 預設設定為自動,其中模型會根據影像輸入的大小來決定低或高。

  • low 設定: 模型不會啟用「high res」模式,而是處理解析度較低的 512x512 版本,進而產生更快速的回應,並在詳細資料不重要的案例中降低權杖的使用量。
  • high 設定: 模型會啟動「high res」模式。 在此,模型一開始會檢視低解析度影像,然後從輸入影像產生詳細的 512x512 區段。 每個區段都會使用兩倍的權杖預算,以更詳細的解譯影像。

如需映像參數如何影響使用令牌和定價的詳細資訊,請參閱 - 什麼是 Azure OpenAI?映像令牌

輸出

您從模型收到的聊天回應現在應該包含影像的增強資訊,例如物件標籤和週框方塊,以及 OCR 結果。 API 回應應該看起來如下所示。

{
    "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
    }
}

每個回應都包含 "finish_reason" 欄位。 可能有以下的值:

  • stop: API 傳回的完整模型輸出。
  • length: 因為 max_tokens 輸入參數或模型的權杖限制,所以模型輸出不完整。
  • content_filter: 由於內容篩選中的旗標而省略了內容。

建立影片擷取索引

  1. 在與您所使用之 Azure OpenAI 資源相同的區域中取得 Azure AI 視覺資源。

  2. 建立索引來儲存和組織影片檔案及其中繼資料。 下列範例命令示範如何使用建立索引API 來建立名為 my-video-index 的索引。 將索引名稱儲存至暫存位置; 您將在後續步驟中用到它。

    提示

    如需建立影片索引的詳細指示,請參閱使用向量化進行影片擷取

    重要

    影片索引名稱長度最多可達 24 個字元,除非它是 GUID,則可為 36 個字元。

    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. 使用影片檔案相關聯的中繼資料將其新增至索引。 下列範例示範如何透過建立擷取 API 使用 SAS URL 將兩個影片檔案新增至索引。 將 SAS URL和 documentId 值儲存至暫存位置;您將在後續步驟中用到它們。

    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. 將影片檔案新增至索引後,擷取流程即啟動。 視檔案的大小和數目而定,這可能需要一些時間。 為了確保擷取在執行搜尋之前已完成,您可以使用取得擷取 API 來檢查狀態。 請等候此呼叫傳回 "state" = "Completed",再繼續進行下一個步驟。

    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>"
    

下一步