멀티모달 프롬프트는 텍스트, 이미지, 오디오, 동영상, 문서 등 두 가지 이상의 모달리티를 포함하는 모델 입력을 의미합니다.
이 가이드에서는 API를 사용하여 Gemini에 다음 멀티모달 요청을 보내고 모델 응답을 확인합니다.
- 프롬프트와 버킷에 저장된 이미지의 URL
- 프롬프트와 오디오 트랙이 인라인으로 표시됨
동영상 및 문서가 포함된 프롬프트를 비롯한 기타 Gemini 멀티모달 기능 알아보기
로컬 환경에서 Python용 클라이언트 라이브러리를 사용하거나 REST API에 명령줄 요청을 전송하여 이 가이드를 완료할 수 있습니다.
프롬프트를 보낼 수 있는 Gemini 지원 언어에 대해 알아보세요.
시작하기 전에
Gemini가 텍스트를 생성하도록 멀티모달 프롬프트를 전송하려면 Gemini API가 사용 설정된 프로젝트가 있어야 하며 적절한 역할과 사용자 인증 정보가 있어야 합니다. gdcloud CLI를 설치하고 초기화하고 인증해야 하며 Python용 클라이언트 라이브러리를 설치해야 합니다.
자세한 내용은 시작하기를 참고하세요.
프롬프트와 이미지 URL 전송
다음 코드를 사용하여 텍스트와 이미지가 포함된 프롬프트를 Gemini API에 보냅니다. GDC 스토리지 버킷 (s3://file-bucket/image.jpg)의 URL을 나타내는 JPG 이미지를 제공합니다. 이 샘플은 제공된 이미지의 설명을 반환합니다.
명령줄에서, IDE를 사용하여 또는 애플리케이션에 코드를 포함하여 코드를 실행할 수 있습니다.
Python
다음 단계에 따라 프롬프트와 이미지를 전송하고 Python 스크립트에서 텍스트를 생성합니다.
필수 Python 라이브러리를 설치합니다.
pip install openai pip install absl-py pip install typing pip install protobufGDC 스토리지 버킷에 이미지를 업로드합니다. 이 예에서 버킷의 이미지 경로는
s3://file-bucket/image.jpg입니다.API 요청을
request.json라는 JSON 파일에 저장합니다. 파일은 다음 예시와 같아야 합니다.{ "messages": [ { "role": "user", "content": "What's in this image?" }, { "role": "user", "content": [ { "type": "image_url", "image_url": { "url": "s3://file-bucket/image.jpg" } } ] } ] }요청 본문 세부정보는 API 요청 형식 지정을 참고하세요.
요청에서 매개변수를 실험해 볼 수 있습니다. 자세한 내용은 기능을 참고하세요.
API 요청을 인증합니다.
만든 Python 스크립트에 다음 코드를 추가합니다.
import json import os from absl import app from absl import flags from openai import OpenAI, OpenAIError from google.protobuf import json_format from google.protobuf.struct_pb2 import Value from typing import Sequence _INPUT = flags.DEFINE_string("input", None, "input", required=True) _HOST = flags.DEFINE_string("host", None, "Chat Completion endpoint", required=True) _TOKEN = flags.DEFINE_string("token", None, "STS token", required=True) def chat_completion_client(host): return OpenAI( api_key="None", base_url="https://" + host + "/v1/projects/PROJECT_ID/locations/PROJECT_ID" ) def chat_completion(client, messages, token): try: response = client.chat.completions.create( model="MODEL_ID", messages=messages, extra_headers={"Authorization" : "Bearer " + token, "Content-Type": "application/json"} ) print("response:", response) except Exception as e: print("Got exception:", e) def main(argv: Sequence[str]): del argv # Unused. with open(_INPUT.value) as json_file: data = json.load(json_file) print("Request: ", data) client = chat_completion_client(_HOST.value,) chat_completion(client=client, messages=data["messages"], token=_TOKEN.value) if __name__=="__main__": app.run(main)다음을 바꿉니다.
PROJECT_ID: 프로젝트 ID입니다.MODEL_ID: 응답을 생성하려는 모델 엔드포인트 ID입니다.
Python 스크립트를 저장합니다.
Chat Completions 인터페이스를 사용하여 Gemini에 요청을 보냅니다.
python SCRIPT_NAME --input=request.json --host=ENDPOINT --token=TOKEN다음을 바꿉니다.
SCRIPT_NAME: Python 스크립트에 지정한 이름입니다(예:client.py).ENDPOINT: 조직에서 사용하는 Gemini 엔드포인트입니다. 자세한 내용은 서비스 상태 및 엔드포인트 보기를 참고하세요.TOKEN: 획득한 인증 토큰입니다.
다음과 비슷한 응답을 받아야 합니다.
ChatCompletion(id='', choices=[Choice(finish_reason='', index=0, logprobs=0, message=ChatCompletionMessage(content="Here\'s what\'s in the image: Several freshly baked blueberry scones are arranged on parchment paper.\n", refusal=None, role='assistant', function_call=None, tool_calls=None))], created=0, model='', object='', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=0, prompt_tokens=0, total_tokens=0))
curl
다음 단계에 따라 프롬프트와 이미지를 보내고 REST API에 대한 curl 요청을 통해 텍스트를 생성합니다.
GDC 스토리지 버킷에 이미지를 업로드합니다. 이 예에서 버킷의 이미지 경로는
s3://file-bucket/image.jpg입니다.API 요청을
request.json라는 JSON 파일에 저장합니다. 파일은 다음 예시와 같아야 합니다.{ "messages": [ { "role": "user", "content": "What's in this image?" }, { "role": "user", "content": [ { "type": "image_url", "image_url": { "url": "s3://file-bucket/image.jpg" } } ] } ] }요청 본문 세부정보는 API 요청 형식 지정을 참고하세요.
요청에서 매개변수를 실험해 볼 수 있습니다. 자세한 내용은 기능을 참고하세요.
API 요청을 인증합니다.
요청을 합니다.
curl \ -H "Authorization: Bearer TOKEN" \ -H "Content-Type: application/json; charset=utf-8" \ -X POST https://ENDPOINT:443/v1/projects/PROJECT_ID/locations/PROJECT_ID/chat/completions -d @./request.json다음을 바꿉니다.
TOKEN: 획득한 인증 토큰입니다.ENDPOINT: 조직에서 사용하는 Gemini 엔드포인트입니다. 자세한 내용은 서비스 상태 및 엔드포인트 보기를 참고하세요.PROJECT_ID: 프로젝트 ID입니다.MODEL_ID: 응답을 생성하려는 모델 엔드포인트 ID입니다.
다음과 비슷한 응답을 받아야 합니다.
ChatCompletion(id='', choices=[Choice(finish_reason='', index=0, logprobs=0, message=ChatCompletionMessage(content="Here\'s what\'s in the image: Several freshly baked blueberry scones are arranged on parchment paper.\n", refusal=None, role='assistant', function_call=None, tool_calls=None))], created=0, model='', object='', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=0, prompt_tokens=0, total_tokens=0))
프롬프트와 오디오를 인라인으로 전송
다음 코드를 사용하여 텍스트와 오디오가 포함된 프롬프트를 Gemini API에 보냅니다. MP3 오디오 파일을 base64 인코딩 데이터로 인라인으로 제공합니다. 이 샘플은 제공된 노래의 가사를 반환합니다.
명령줄에서, IDE를 사용하여 또는 애플리케이션에 코드를 포함하여 코드를 실행할 수 있습니다.
Python
다음 단계에 따라 프롬프트와 오디오를 전송하여 Python 스크립트에서 텍스트를 생성합니다.
필수 Python 라이브러리를 설치합니다.
pip install openai pip install absl-py pip install typing pip install protobufbase64명령줄 도구를 사용하여 파일을 인코딩합니다.-w 0플래그를 사용하여 줄바꿈을 방지해야 합니다.base64 AUDIO_FILE -w 0 > OUTPUT_FILEAPI 요청을
request.json라는 JSON 파일에 저장합니다. 파일은 다음 예시와 같아야 합니다.{ "messages": [ { "role": "user", "content": "Show me the lyrics of this song." }, { "role": "user", "content": [ { "type": "input_audio", "input_audio": { "data": "BASE64_ENCODED_DATA", "format": "mp3" } } ] } ] }요청 본문 세부정보는 API 요청 형식 지정을 참고하세요.
요청에서 매개변수를 실험해 볼 수 있습니다. 자세한 내용은 기능을 참고하세요.
API 요청을 인증합니다.
만든 Python 스크립트에 다음 코드를 추가합니다.
import json import os from absl import app from absl import flags from openai import OpenAI, OpenAIError from google.protobuf import json_format from google.protobuf.struct_pb2 import Value from typing import Sequence _INPUT = flags.DEFINE_string("input", None, "input", required=True) _HOST = flags.DEFINE_string("host", None, "Chat Completion endpoint", required=True) _TOKEN = flags.DEFINE_string("token", None, "STS token", required=True) def chat_completion_client(host): return OpenAI( api_key="None", base_url="https://" + host + "/v1/projects/PROJECT_ID/locations/PROJECT_ID" ) def chat_completion(client, messages, token): try: response = client.chat.completions.create( model="MODEL_ID", messages=messages, extra_headers={"Authorization" : "Bearer " + token, "Content-Type": "application/json"} ) print("response:", response) except Exception as e: print("Got exception:", e) def main(argv: Sequence[str]): del argv # Unused. with open(_INPUT.value) as json_file: data = json.load(json_file) print("Request: ", data) client = chat_completion_client(_HOST.value,) chat_completion(client=client, messages=data["messages"], token=_TOKEN.value) if __name__=="__main__": app.run(main)다음을 바꿉니다.
PROJECT_ID: 프로젝트 ID입니다.MODEL_ID: 응답을 생성하려는 모델 엔드포인트 ID입니다.
Python 스크립트를 저장합니다.
Chat Completions 인터페이스를 사용하여 Gemini에 요청을 보냅니다.
python SCRIPT_NAME --input=request.json --host=ENDPOINT --token=TOKEN다음을 바꿉니다.
SCRIPT_NAME: Python 스크립트에 지정한 이름입니다(예:client.py).ENDPOINT: 조직에서 사용하는 Gemini 엔드포인트입니다. 자세한 내용은 서비스 상태 및 엔드포인트 보기를 참고하세요.TOKEN: 획득한 인증 토큰입니다.
다음과 비슷한 응답을 받아야 합니다.
ChatCompletion(id='', choices=[Choice(finish_reason='', index=0, logprobs=0, message=ChatCompletionMessage(content="Here\'s the lyrics of the song: There are places I remember all my life, though some have changed...", refusal=None, role='assistant', function_call=None, tool_calls=None))], created=0, model='', object='', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=0, prompt_tokens=0, total_tokens=0))
curl
다음 단계에 따라 프롬프트와 오디오를 전송하여 REST API에 대한 curl 요청을 통해 텍스트를 생성합니다.
base64명령줄 도구를 사용하여 파일을 인코딩합니다.-w 0플래그를 사용하여 줄바꿈을 방지해야 합니다.base64 AUDIO_FILE -w 0 > OUTPUT_FILEAPI 요청을
request.json라는 JSON 파일에 저장합니다. 파일은 다음 예시와 같아야 합니다.{ "messages": [ { "role": "user", "content": "Show me the lyrics of this song." }, { "role": "user", "content": [ { "type": "input_audio", "input_audio": { "data": "BASE64_ENCODED_DATA", "format": "mp3" } } ] } ] }요청 본문 세부정보는 API 요청 형식 지정을 참고하세요.
요청에서 매개변수를 실험해 볼 수 있습니다. 자세한 내용은 기능을 참고하세요.
API 요청을 인증합니다.
요청을 합니다.
curl \ -H "Authorization: Bearer TOKEN" \ -H "Content-Type: application/json; charset=utf-8" \ -X POST https://ENDPOINT:443/v1/projects/PROJECT_ID/locations/PROJECT_ID/chat/completions -d @./request.json다음을 바꿉니다.
TOKEN: 획득한 인증 토큰입니다.ENDPOINT: 조직에서 사용하는 Gemini 엔드포인트입니다. 자세한 내용은 서비스 상태 및 엔드포인트 보기를 참고하세요.PROJECT_ID: 프로젝트 ID입니다.MODEL_ID: 응답을 생성하려는 모델 엔드포인트 ID입니다.
다음과 비슷한 응답을 받아야 합니다.
ChatCompletion(id='', choices=[Choice(finish_reason='', index=0, logprobs=0, message=ChatCompletionMessage(content="Here\'s the lyrics of the song: There are places I remember all my life, though some have changed...", refusal=None, role='assistant', function_call=None, tool_calls=None))], created=0, model='', object='', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=0, prompt_tokens=0, total_tokens=0))