本文中標示為 (預覽) 的項目目前處於公開預覽狀態。 此預覽版本沒有服務等級協定,不建議將其用於生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱
Microsoft Azure 預覽版增補使用條款
。
多模態大型語言模型 (LLM),可以處理和解譯各種形式的資料輸入,提供強大的工具,可將純語言系統的功能提升到新的高度。 在各種資料類型中,影像對於許多真實世界應用程式都很重要。 將影像資料併入 AI 系統可提供基本的視覺理解層。
在本文章中,您將了解:
如何在提示流程中使用影像資料
如何使用內建 GPT-4V 工具分析影像輸入。
如何建置聊天機器人處理影像和文字輸入。
如何使用影像資料建立批次執行。
如何使用影像資料取用線上端點。
您必須針對這項功能使用
中樞型專案
。 不支援
Azure AI Foundry 專案
。 請參閱
如何知道我所擁有的項目類型?
和
建立中樞型專案
。
提示流程中的影像類型
提示流程輸入和輸出支援 Image 作為新的資料類型。
在提示流程製作頁面中使用影像資料:
新增流程輸入,針對資料類型選取 [Image]
。 您可以上傳、拖放影像檔案、從剪貼簿貼上影像,或者指定影像 URL 或流程資料夾中的相對影像路徑。
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.
執行 Python 節點並檢查輸出。 在此範例中,Python 函式會傳回已處理的 Image 物件。 選取影像輸出以預覽影像。
Azure OpenAI GPT-4 Turbo with Vision 工具和 OpenAI GPT-4V 均為提示流程中的內建工具,可使用 OpenAI GPT-4V 模型,根據輸入影像回答問題。 您可以在流程製作頁面中選取 [+ 更多工具] 來尋找此工具。
將 Azure OpenAI GPT-4 Turbo with Vision 工具新增至流程。 確定您有 Azure OpenAI 連線,並具備 GPT-4 視覺預覽模型的可用性。
在 GPT-4V 工具中撰寫提示的 Jinja 範本會遵循 LLM 工具中聊天 API 的類似結構。 若要在提示中代表影像輸入,您可以使用語法 。 影像輸入可以在 user、system 和 assistant 訊息中傳遞。
撰寫提示之後,選取 [驗證並剖析輸入] 按鈕來剖析輸入預留位置。
 所代表的影像輸入將剖析為輸入名稱為 INPUT NAME 的影像類型。
您可以透過下列方式將值指派給影像輸入:
來自 Image 類型流程輸入的參考。
來自 Image 類型其他節點輸出的參考。
上傳、拖曳、貼上影像,或指定影像 URL 或相對影像路徑。
建置聊天機器人以處理影像
在本節中,您會了解如何建置聊天機器人,以處理影像和文字輸入。
假設您想要建置聊天機器人,以同時回答任何有關影像和文字的問題。 您可以遵循本節中的步驟來達成此目的。
建立聊天流程。
在 [輸入] 中,選取數據類型為 “list”。 在聊天方塊中,使用者可以輸入文字和影像的混合序列,而提示流程服務會將該序列轉換成清單。
在項目檔案中,您應該使用格式:{"data:<mime type>;path": "<image relative path>"} 來參考每個影像檔案。 例如: {"data:image/png;path": "./images/1.png"} 。
公用影像 URL:您也可以使用下列格式來參考項目檔案中的影像 URL:{"data:<mime type>;url": "<image URL>"}。 例如: {"data:image/png;url": "https://www.example.com/images/1.png"} 。
Base64 字串:
您可以使用下列格式來參考項目檔案中的 Base64 字串:
{"data:<mime type>;base64": "<base64 string>"}
。 例如:
{"data:image/png;base64": "iVBORw0KGgoAAAANSUhEUgAAAGQAAABLAQMAAAC81rD0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABlBMVEUAAP7////DYP5JAAAAAWJLR0QB/wIt3gAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB+QIGBcKN7/nP/UAAAASSURBVDjLY2AYBaNgFIwCdAAABBoAAaNglfsAAAAZdEVYdGNvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVDnr0DLAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIwLTA4LTI0VDIzOjEwOjU1KzAzOjAwkHdeuQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMC0wOC0yNFQyMzoxMDo1NSswMzowMOEq5gUAAAAASUVORK5CYII="}
。
總之,提示流程會使用唯一的字典格式來表示影像,也就是
{"data:<mime type>;<representation>": "<value>"}
。 在這裡,
<mime type>
是指 HTML 標準
MIME
影像類型,並
<representation>
參考支援的影像表示法:
path
、
url
和
base64
。
建立批次執行
在流程製作頁面中,選取 [評估] ->[自訂評估]
按鈕以起始批次執行。 在 [批次執行設定] 中,選取資料集,其可以是資料夾 (包含項目檔案和影像檔案) 或檔案 (只包含項目檔案)。 您可以預覽項目檔案並執行輸入對應,以將項目檔案中的資料行與流程輸入對齊。
目前部署詳細資料頁面中的 [測試]
索引標籤不支援影像輸入或輸出。
現在,您可以傳送包含影像輸入的要求來測試端點。
若要使用影像輸入取用線上端點,您應該使用格式
{"data:<mime type>;<representation>": "<value>"}
來代表影像。 在此案例中,
<representation>
可以是
url
或
base64
。
如果流程產生影像輸出,則會以
base64
格式傳回,例如
{"data:<mime type>;base64": "<base64 string>"}
。
使用變體微調提示來逐一查看並最佳化流程