멀티모달 프롬프트 보내기

멀티모달 프롬프트는 텍스트, 이미지, 오디오, 동영상, 문서 등 두 가지 이상의 모달리티를 포함하는 모델 입력을 의미합니다.

이 가이드에서는 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 스크립트에서 텍스트를 생성합니다.

  1. 필수 Python 라이브러리를 설치합니다.

    pip install openai
    pip install absl-py
    pip install typing
    pip install protobuf
    
  2. GDC 스토리지 버킷에 이미지를 업로드합니다. 이 예에서 버킷의 이미지 경로는 s3://file-bucket/image.jpg입니다.

  3. 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 요청 형식 지정을 참고하세요.

    요청에서 매개변수를 실험해 볼 수 있습니다. 자세한 내용은 기능을 참고하세요.

  4. Python 스크립트에서 필수 환경 변수를 설정합니다.

  5. API 요청을 인증합니다.

  6. 만든 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)
    

    다음을 바꿉니다.

  7. Python 스크립트를 저장합니다.

  8. Chat Completions 인터페이스를 사용하여 Gemini에 요청을 보냅니다.

    python SCRIPT_NAME --input=request.json --host=ENDPOINT --token=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 요청을 통해 텍스트를 생성합니다.

  1. GDC 스토리지 버킷에 이미지를 업로드합니다. 이 예에서 버킷의 이미지 경로는 s3://file-bucket/image.jpg입니다.

  2. 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 요청 형식 지정을 참고하세요.

    요청에서 매개변수를 실험해 볼 수 있습니다. 자세한 내용은 기능을 참고하세요.

  3. API 요청을 인증합니다.

  4. 요청을 합니다.

    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
    

    다음을 바꿉니다.

다음과 비슷한 응답을 받아야 합니다.

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 스크립트에서 텍스트를 생성합니다.

  1. 필수 Python 라이브러리를 설치합니다.

    pip install openai
    pip install absl-py
    pip install typing
    pip install protobuf
    
  2. base64 명령줄 도구를 사용하여 파일을 인코딩합니다. -w 0 플래그를 사용하여 줄바꿈을 방지해야 합니다.

    base64 AUDIO_FILE -w 0 > OUTPUT_FILE
    
  3. API 요청을 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 요청 형식 지정을 참고하세요.

    요청에서 매개변수를 실험해 볼 수 있습니다. 자세한 내용은 기능을 참고하세요.

  4. Python 스크립트에서 필수 환경 변수를 설정합니다.

  5. API 요청을 인증합니다.

  6. 만든 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)
    

    다음을 바꿉니다.

  7. Python 스크립트를 저장합니다.

  8. Chat Completions 인터페이스를 사용하여 Gemini에 요청을 보냅니다.

    python SCRIPT_NAME --input=request.json --host=ENDPOINT --token=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 요청을 통해 텍스트를 생성합니다.

  1. base64 명령줄 도구를 사용하여 파일을 인코딩합니다. -w 0 플래그를 사용하여 줄바꿈을 방지해야 합니다.

    base64 AUDIO_FILE -w 0 > OUTPUT_FILE
    
  2. API 요청을 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 요청 형식 지정을 참고하세요.

    요청에서 매개변수를 실험해 볼 수 있습니다. 자세한 내용은 기능을 참고하세요.

  3. API 요청을 인증합니다.

  4. 요청을 합니다.

    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
    

    다음을 바꿉니다.

다음과 비슷한 응답을 받아야 합니다.

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

다음 단계