중요합니다
이 문서에 표시된 항목(미리 보기)은 현재 퍼블릭 미리 보기에서 확인할 수 있습니다. 이 미리 보기는 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.
다양한 형태의 데이터 입력을 처리하고 해석할 수 있는 LLM(다중 모달 대규모 언어 모델)은 언어 전용 시스템의 기능을 새로운 차원으로 끌어올릴 수 있는 강력한 도구를 제공합니다. 다양한 데이터 형식 중 이미지는 많은 실제 애플리케이션에 중요합니다. 이미지 데이터를 AI 시스템에 통합하면 필수적인 시각적 이해 계층이 제공됩니다.
이 문서에서는 다음에 대해 알아봅니다.
- 프롬프트 흐름에서 이미지 데이터를 사용하는 방법
- 기본 제공 GPT-4V 도구를 사용하여 이미지 입력을 분석하는 방법
- 이미지 및 텍스트 입력을 처리할 수 있는 챗봇을 빌드하는 방법
- 이미지 데이터를 사용하여 일괄 실행을 만드는 방법
- 이미지 데이터와 온라인 엔드포인트를 함께 사용하는 방법
프롬프트 흐름의 이미지 유형
프롬프트 흐름 입력 및 출력은 이미지를 새 데이터 형식으로 지원합니다.
프롬프트 흐름 작성 페이지에서 이미지 데이터를 사용하려면 다음을 수행합니다.
흐름 입력을 추가하고 데이터 형식으로 이미지로 선택합니다. 이미지 파일을 업로드하거나, 끌어서 놓거나, 클립보드에서 이미지를 붙여넣거나, 흐름 폴더에 이미지 URL 또는 상대 이미지 경로를 지정할 수 있습니다.
LLM에 이미지를 공급하기 전에 Python 도구를 사용하여 이미지를 전처리할 수 있습니다. 예를 들어, 이미지의 크기를 조정하거나 더 작은 크기로 자를 수 있습니다.
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 개체를 반환합니다. 이미지 출력을 선택하여 이미지를 미리 봅니다.
Python 노드의 Image 개체가 흐름 출력으로 설정된 경우 흐름 출력 페이지에서도 이미지를 미리 볼 수 있습니다.
GPT-4V 도구 사용
Azure OpenAI GPT-4 Turbo with Vision 도구 및 OpenAI GPT-4V는 OpenAI GPT-4V 모델을 사용하여 입력 이미지를 기반으로 질문에 답할 수 있는 프롬프트 흐름에 기본 제공된 도구입니다. 흐름 작성 페이지에서 + 추가 도구를 선택하여 도구를 찾을 수 있습니다.
흐름에 Azure OpenAI GPT-4 Turbo with Vision 도구를 추가합니다. GPT-4 비전 미리 보기 모델을 사용할 수 있는 Azure OpenAI 연결이 있는지 확인합니다.
GPT-4V 도구에서 프롬프트를 작성하기 위한 Jinja 템플릿은 LLM 도구의 채팅 API와 유사한 구조를 따릅니다. 프롬프트 내에서 이미지 입력을 나타내려면 
구문을 사용할 수 있습니다. 이미지 입력은 user
, system
및 assistant
메시지에 전달될 수 있습니다.
프롬프트를 작성했으면 입력 유효성 검사 및 구문 분석 단추를 선택하여 입력 자리 표시자를 구문 분석합니다.

로 표시되는 이미지 입력은 입력 이름을 INPUT NAME으로 사용하여 이미지 형식으로 구문 분석됩니다.
다음 방법을 통해 이미지 입력에 값을 할당할 수 있습니다.
- 이미지 형식의 흐름 입력에서 참조합니다.
- 이미지 형식의 다른 노드 출력에서 참조합니다.
- 이미지를 업로드하거나, 끌거나, 붙여넣거나, 이미지 URL 또는 상대 이미지 경로를 지정합니다.
이미지를 처리하는 챗봇 빌드
이 섹션에서는 이미지 및 텍스트 입력을 처리할 수 있는 챗봇을 빌드하는 방법을 알아봅니다.
이미지와 텍스트에 대한 질문에 대답할 수 있는 챗봇을 빌드한다고 가정합니다. 이 섹션의 단계에 따라 이 작업을 수행할 수 있습니다.
채팅 흐름을 만듭니다.
입력에서 데이터 형식을 "목록"으로 선택합니다. 채팅 상자에서 사용자는 텍스트와 이미지의 혼합 시퀀스를 입력할 수 있으며 프롬프트 흐름 서비스는 이를 목록으로 변환합니다.
GPT-4V 도구를 흐름에 추가합니다. 기본 LLM 도구 채팅에서 프롬프트를 복사하여 GPT 4V 도구에 붙여넣을 수 있습니다. 그런 다음 흐름에서 기본 LLM 도구 채팅을 삭제합니다.
이 예제에서
{{question}}
은 텍스트 및 이미지 목록인 채팅 입력을 참조합니다.출력에서 "answer" 값을 비전 도구 출력의 이름으로 변경합니다( 예: )
${gpt_vision.output}
.(선택 사항) 흐름에 사용자 지정 논리를 추가하여 GPT-4V 출력을 처리할 수 있습니다. 예를 들어 Guardrails & 컨트롤 도구를 추가하여 답변에 부적절한 콘텐츠가 포함되어 있는지 감지하고 최종 답변을 사용자에게 반환할 수 있습니다.
이제 챗봇을 테스트할 수 있습니다. 채팅 창을 열고 이미지와 함께 질문을 입력합니다. 챗봇은 이미지 및 텍스트 입력에 따라 질문에 답변합니다. 채팅 입력 값은 채팅 창의 입력에서 자동으로 백필됩니다. 텍스트 및 이미지 목록으로 변환되는 채팅 상자에서 이미지가 있는 텍스트를 찾을 수 있습니다.
비고
챗봇이 서식 있는 텍스트 및 이미지로 응답할 수 있도록 하려면 채팅 출력을 list
유형으로 만듭니다. 목록은 문자열(텍스트) 및 프롬프트 흐름 이미지 개체(이미지)를 사용자 지정 순서로 구성해야 합니다.
이미지 데이터를 사용하여 일괄 처리 실행 만들기
일괄 처리를 사용하면 광범위한 데이터 세트를 사용하여 흐름을 테스트할 수 있습니다. 이미지 데이터를 나타내는 세 가지 방법은 이미지 파일, 퍼블릭 이미지 URL 또는 Base64 문자열을 사용하는 것입니다.
-
이미지 파일: 이미지 파일을 일괄 실행으로 테스트하려면 데이터 폴더를 준비해야 합니다. 이 폴더에는 동일한 폴더 또는 하위 폴더에 저장된 모든 이미지 파일과 함께 루트 디렉터리에 있는
jsonl
형식의 일괄 실행 항목 파일이 포함되어야 합니다.항목 파일에서 형식
{"data:<mime type>;path": "<image relative path>"}
를 사용하여 각 이미지 파일을 참조합니다. 예:{"data:image/png;path": "./images/1.png"}
. -
퍼블릭 이미지 URL: 형식
{"data:<mime type>;url": "<image URL>"}
을 사용하여 항목 파일에서 이미지 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
참조합니다.
일괄 처리 실행 만들기
흐름 작성 페이지에서 평가->사용자 지정 평가 단추를 선택하여 일괄 처리 실행을 시작합니다. 일괄 처리 실행 설정에서 폴더(항목 파일 및 이미지 파일 포함) 또는 파일(항목 파일만 포함)일 수 있는 데이터 세트를 선택합니다. 입력 파일을 미리 볼 수 있으며 입력 매핑을 수행하여 입력 파일의 열을 흐름 입력에 맞출 수 있습니다.
일괄 처리 실행 결과 보기
실행 세부 정보 페이지에서 일괄 처리 실행 출력을 확인할 수 있습니다. 출력 테이블에서 이미지 개체를 선택하여 이미지를 쉽게 미리 봅니다.
일괄 실행 출력에 이미지가 포함된 경우 출력 jsonl 파일 및 출력 이미지를 사용하여 flow_outputs 데이터 세트를 확인할 수 있습니다.
이미지 데이터와 함께 온라인 엔드포인트 사용
실시간 유추를 위해 온라인 엔드포인트에 흐름을 배포할 수 있습니다.
현재 배포 세부 정보 페이지의 테스트 탭은 이미지 입력 또는 출력을 지원하지 않습니다.
지금은 이미지 입력을 포함한 요청을 보내 엔드포인트를 테스트할 수 있습니다.
이미지 입력과 함께 온라인 엔드포인트를 사용하려면 형식 {"data:<mime type>;<representation>": "<value>"}
를 사용하여 이미지를 나타내야 합니다. 이 경우 <representation>
은 url
또는 base64
일 수 있습니다.
흐름에서 이미지 출력을 생성하는 경우 형식(예: base64
)으로 {"data:<mime type>;base64": "<base64 string>"}
반환됩니다.