Gemini API를 사용하면 멀티모달 프롬프트를 Gemini 모델로 전송할 수 있습니다. 지원되는 형식에는 텍스트, 이미지, 동영상이 있습니다.
일반적인 프롬프트 설계 안내는 프롬프트 설계 전략을 참조하세요.
지원되는 모델
다음 모델은 멀티모달 프롬프트 응답을 지원합니다.
gemini-pro-vision
gemini-1.5-pro
다음 권장사항에 따라 멀티모달 프롬프트를 향상시킬 수 있습니다.
프롬프트 설계 기초
- 구체적인 지침 설정: 오해의 소지가 거의 없도록 명확하고 간결한 지침을 제시합니다.
- 프롬프트에 몇 가지 예시 추가: 달성하려는 목표를 쉽게 이해할 수 있도록 실질적인 퓨샷 예시를 사용합니다.
- 단계별 분류: 복잡한 태스크를 관리 가능한 하위 목표로 분할하고 프로세스 전반에 걸쳐서 모델을 안내합니다.
- 출력 형식 지정: 프롬프트에서 마크다운, JSON, HTML 등 원하는 형식으로 출력을 요청합니다.
- 단일 이미지 프롬프트의 경우 이미지를 먼저 배치: Gemini는 어떤 순서로든 이미지 및 텍스트 입력을 처리할 수 있지만 단일 이미지가 포함된 프롬프트의 경우 해당 이미지(또는 동영상)를 텍스트 프롬프트 앞에 배치할 경우 성능이 향상될 수 있습니다. 그러나 상황에 따라 이미지와 텍스트를 밀접하게 혼합해야 할 경우에는 무엇이든 가장 자연스러운 순서를 따릅니다.
멀티모달 프롬프트 문제 해결
- 모델이 관련 이미지 부분에서 정보를 가져오지 않는 경우: 프롬프트로 정보를 가져오려는 이미지 부분에 대한 힌트를 제공합니다.
- 모델 출력이 너무 일반적인 경우(이미지/동영상 출력에 맞게 충분히 맞춤화되지 않은 경우): 프롬프트 시작 시 태스크 지침을 제공하기 전 이미지 또는 동영상을 기술하도록 모델에 요청하거나 이미지에 포함된 항목을 참조하도록 모델에 요청합니다.
- 실패한 부분 문제 해결: 이미지를 기술하거나, 이유를 설명하거나, 모델의 초기 이해 수준을 측정하도록 모델에 요청합니다.
- 프롬프트 결과 비현실적인 콘텐츠가 발생하는 경우: 강도 설정을 낮추거나 추가 세부정보를 추정할 가능성이 적도록 모델에 더 짧은 설명을 요청합니다.
- 샘플링 매개변수 조정: 여러 다른 강도 설정 및 최상위 K 선택으로 실험해서 모델 창의성을 조정합니다.
프롬프트 설계 기초
이 섹션에서는 이전 섹션에 나열된 권장사항을 자세히 설명합니다.
참고: 다음 Gemini 예시의 모델 결과는 실행할 때마다 달라질 수 있습니다.
구체적인 지침 설정
프롬프트는 명확하고 세부적일 때 가장 성공적입니다. 세부적인 출력을 원할 때는 원하는 출력을 얻을 수 있도록 프롬프트에 그러한 요구사항을 포함하는 것이 더 좋습니다.
일부 경우에는 프롬프트 의도가 이를 작성한 사람에게는 명확하게 보이더라도 실제로 그렇지 않을 수 있습니다. 모델 동작을 맞춤설정하려면 프롬프트에 대한 해석(오해) 정도를 고려하고 구체적이고 명확한 지침을 제공해야 합니다. 오해의 소지가 거의 없어야 합니다.
공항 보드 이미지의 경우 "이미지 설명"이라고만 모델에 요청하면 일반적인 설명이 생성될 수 있습니다. 모델이 이미지에서 시간과 도시를 파싱하도록 하려면 프롬프트에 해당 요청을 직접 포함할 수 있습니다.
프롬프트 | 모델 응답 |
---|---|
이 이미지를 설명해 주세요. |
이 이미지는 공항 도착 및 출발 보드를 보여줍니다. |
업데이트된 프롬프트 | 개선된 응답 |
---|---|
이 이미지에 표시된 공항 보드에서 시간과 도시를 분석해서 목록으로 표시해 주세요. |
몇 가지 예시 추가
Gemini 모델은 원하는 출력을 이해하기 위해 예시로 사용할 수 있는 여러 입력을 수락할 수 있습니다. 이러한 예시를 추가하면 모델이 패턴을 식별하고 제공된 이미지와 응답 사이의 관계를 새 예시에 적용할 수 있습니다. 이를 "퓨샷" 학습이라고도 부릅니다.
아래 예시에서 최초 출력은 문장 형식으로 작성되었으며 국가(브라질)를 포함합니다. 다른 형식 또는 스타일로 출력을 표시하고 국가가 아닌 도시만 포함한다고 가정해 보세요. 프롬프트에 퓨샷 예시를 추가하면 원하는 방식으로 응답하도록 모델을 조정할 수 있습니다.
프롬프트 | 모델 응답 |
---|---|
명소와 함께 도시를 설명해 주세요. |
이 랜드마크는 브라질 리우데자네이루에 있는 구세주 예수상입니다. |
업데이트된 프롬프트 | 개선된 응답 |
---|---|
명소와 함께 도시를 설명해 주세요. |
도시: 로마, 랜드마크: 콜로세움 |
도시: 베이징, 랜드마크: 자금성 |
|
도시: 리우데자네이루, 랜드마크: 구세주 예수상 |
단계별 분류
시각적인 이해와 근거가 모두 필요한 것과 같이 복잡한 태스크의 경우에는 태스크를 더 작고 보다 직관적인 단계들로 분할하는 것이 유용할 수 있습니다. 또는 프롬프트에서 "단계별로 생각"하도록 모델에 직접 요청하는 것도 효과적일 수 있습니다.
프롬프트 | 모델 응답 |
---|---|
화장지가 언제 다 떨어질까요? |
이제 3개 밖에 없으니 곧 떨어집니다. |
업데이트된 프롬프트 | 개선된 응답 |
---|---|
|
|
수학 문제나 기타 유형의 단어 문제는 모델이 단계별로 생각하도록 요청하기에 적합한 후보입니다.
프롬프트 | 응답 |
---|---|
이 시퀀스에서 네 번째 항은 무엇인가요? |
-135 |
모델의 응답은 잘못되었습니다. 이를 개선하기 위한 몇 가지 방법은 모델이 프롬프트에 답변하기 전 문제를 파싱하도록 요청하는 것입니다.
프롬프트 | 응답 |
---|---|
먼저 이미지에서 수식을 분석해 주세요. 그런 후 수식을 기준으로 "시퀀스에서 네 번째 항은 무엇"인지 대답해 주세요. |
클릭하여 결과 확장$$ b(n) = b(n-1) * (-3) $$ $$ b(1) = 15 $$
$$ b(4) = b(4-1) * (-3) $$ $$ b(4) = b(3) * (-3) $$ $$ b(3) = b(3-1) * (-3) $$ $$ b(3) = b(2) * (-3) $$ $$ b(2) = b(2-1) * (-3) $$ $$ b(2) = b(1) * (-3) $$ $$ b(2) = 15 * (-3) $$ $$ b(2) = -45 $$ $$ b(3) = b(2) * (-3) $$ $$ b(3) = -45 * (-3) $$ $$ b(3) = 135 $$ $$ b(4) = b(3) * (-3) $$ $$ b(4) = 135 * (-3) $$ $$ b(4) = -405 $$ 따라서 시퀀스에서 네 번째 항은 -405입니다. |
이번에는 모델 응답이 올바릅니다. 이제 응답을 보다 효율적으로 만들기 위해 모델에 단계별로 생각하도록 요청할 수 있습니다.
업데이트된 프롬프트 | 개선된 응답 |
---|---|
이 시퀀스에서 네 번째 항은 무엇인가요? 단계별로 생각해 주세요. |
첫 번째 항은 15입니다. 두 번째 항은 b(1) * (-3) = 15 * (-3) = -45입니다. 세 번째 항은 b(2) * (-3) = -45 * (-3) = 135입니다. 네 번째 항은 b(3) * (-3) = 135 * (-3) = -405입니다. |
출력 형식 지정
일반적인 문제는 모델 출력을 다운스트림 태스크로 수집해야 할 경우 특히 모델 출력을 특정 형식(예: 마크다운, JSON, HTML)으로 지정해야 한다는 것입니다. 프롬프트 내에서 이를 수행하도록 모델을 안내하여 해당 형식으로 출력을 생성할 수 있습니다. 다음은 두 가지 예시입니다.
프롬프트 | 모델 응답 |
---|---|
이 이미지의 표를 마크다운 형식으로 분석해 주세요. |
| 과목 | 상태 | 시간 | 시작일 | 만료일 | | ------- | ------ | ---- | --------- | ------ | | 수학 | 완료 | 1.5시간 | 2023/11/29 | 2023/12/1 | | 지리 | 완료 | 30분 | 2023/12/2 | 2023/12/4 | | 물리 | 진행 중 | 2시간 | 2023/12/3 | 2023/12/5 | | 생물 | 시작 안 함 | 6시간 | 2016/11/2 | 2023/12/6 | |
프롬프트 | 모델 응답 |
---|---|
다음 모든 속성: 재료, 요리 종류, 채식주의 식단 여부의 목록을 JSON 형식으로 제공해 주세요. |
|
단일 이미지 프롬프트에 이미지 먼저 배치
Gemini는 프롬프트 내에서 어떤 순서로든 이미지와 텍스트를 해석할 수 있지만 텍스트 프롬프트 앞에 단일 이미지를 배치하는 것이 더 좋은 결과로 이어질 수 있습니다. 다음 샘플에서는 각 프롬프트에서 이미지 또는 동영상이 텍스트 앞에 오는 것을 알 수 있습니다.
멀티모달 프롬프트 문제 해결
유용한 응답을 얻지 못할 경우 프롬프트를 문제 해결해야 할 수 있습니다. 이를 위해서는 몇 가지 전략을 시도해볼 수 있습니다.
모델이 관련 이미지 부분에서 정보를 가져오지 않는 경우
보다 구체적인 응답을 얻기 위해서는 해당 응답에 정보를 제공하도록 프롬프트가 정보를 가져올 이미지 특정 부분을 지적할 수 있습니다.
프롬프트 | 모델 응답 |
---|---|
아기 한 명이 사용할 때 이 기저귀는 며칠이나 갈까요? |
기저귀가 모두 소진되려면 198일 걸립니다. |
업데이트된 프롬프트 | 개선된 응답 |
---|---|
기저귀가 소진되려면 며칠이나 걸릴까요? 상자에 표시된 무게를 사용해서 아기의 나이를 확인하고 상자에 적힌 총 기저귀 개수를 사용해 주세요. 총 개수를 아기 한 명이 하루에 사용하는 기저귀 수로 나눠주세요. |
상자에는 198개의 기저귀가 있습니다. 상자에는 체중이 22-37lbs인 아기를 위한 기저귀라고 씌여져 있습니다. 이 몸무게 범위의 평균 아기는 만 1~2세 사이입니다. 만 2세 아기는 일반적으로 하루 6개 정도 기저귀를 사용합니다. 따라서 기저귀는 33일(198/6) 정도 지속됩니다. |
모델 출력이 너무 일반적이고 이미지 또는 동영상 입력에 충분히 조정되지 않은 경우
모델이 이미지에 따라 응답을 조정할 수 있게 하려면 근거 태스크를 수행하기 전 이미지를 기술하도록 요청합니다.
프롬프트 | 모델 응답 |
---|---|
이러한 이미지 사이의 공통점은 무엇인가요? |
4개 이미지 모두 풍경 사진을 보여줍니다. |
업데이트된 프롬프트 | 개선된 응답 |
---|---|
첫째, 각 이미지에 무엇이 있는지 자세히 설명해 주세요. 이러한 이미지 사이의 공통점은 무엇인가요? |
첫 번째 이미지는 여행 가방을 싸고 있는 사람을 보여줍니다. 두 번째 이미지는 쇼핑몰의 빈 통로를 보여줍니다. 세 번째 이미지는 화장실 휴지 한 롤을 보여줍니다. 네 번째 이미지는 어둡고 거친 바다를 보여줍니다. 이러한 이미지 간의 공통점은 이미지가 모두 경계 공간의 예시라는 점입니다. 경계 공간은 두 가지 서로 다른 공간 또는 상황 사이에 있는 공간 또는 상황을 의미합니다. 경계 공간의 특성은 불확실성이나 모호한 감정에 있습니다. 첫 번째 이미지는 집과 여행 사이에 있는 사람을 보여줍니다. 두 번째 이미지는 두 매장 사이의 통로를 보여줍니다. 세 번째 이미지는 욕실을 나타낼 수 있는 화장실 휴지를 보여줍니다. 욕실은 전통적으로 개인성과 공공성을 모두 갖고 있는 공간입니다. 그리고 우리가 외부 세계로 들어오고 나가기 위해 스스로를 준비하는 장소이기도 합니다. 네 번째 이미지는 고요함과 거침 사이에 있는 바다를 보여줍니다. 경계 공간은 흥미로움과 불편함을 모두 일으킬 수 있습니다. 이러한 공간은 무언가 시작되는 장소이거나 끝나는 장소일 수 있습니다. 사색하는 장소이거나 행동하는 장소일 수도 있습니다. |
또한 모델이 이미지에 포함된 내용을 참조하도록 명확하게 요청할 수도 있습니다.
업데이트된 프롬프트 | 개선된 응답 |
---|---|
이러한 이미지 사이의 공통점은 무엇인가요? 이미지에 포함된 내용을 참조해서 답변해 주세요. |
모든 이미지는 여행과 관련이 있습니다. 첫 번째 이미지는 여행 가방을 싸고 있는 사람을 보여줍니다. 두 번째 이미지는 쇼핑몰의 빈 통로를 보여줍니다. 세 번째 이미지는 쌓여 있는 화장실 휴지를 보여줍니다. 네 번째 이미지는 어둡고 거친 바다를 보여줍니다. 이러한 이미지는 모두 여행할 때 필요하거나 사용하는 것들이기 때문에 모두 여행과 관련이 있습니다. 첫 번째 이미지는 여행 가방을 싸고 있는 사람을 보여줍니다. 이것은 사람들이 여행을 떠날 때 하는 행동입니다. 두 번째 이미지는 쇼핑몰의 빈 통로를 보여줍니다. 이것은 사람들이 여행에 필요한 물건을 구입하기 위해 자주 이동하는 장소입니다. 세 번째 이미지는 쌓여 있는 화장실 휴지를 보여줍니다. 이것은 사람들이 여행할 때 자주 사용하는 물건입니다. 네 번째 이미지는 어둡고 거친 바다를 보여줍니다. 이것은 사람들이 여행할 때 가끔 만나게 되는 것입니다. |
이미지 또는 동영상에서 창의적인 출력을 얻을 때도 동일한 팁이 사용됩니다. 토끼를 사용한 다음 예시에서 특히 모델에 이미지 특성을 포함하도록 요청하면 출력을 개선시킬 수 있습니다.
프롬프트 | 모델 응답 |
---|---|
이 이미지에 관한 시를 지어줄 수 있나요? |
작은 토끼, 너무 부드럽고 갈색이야, 물고 뜯는 잔디 속, 너무 파랗고, 달콤해, |
업데이트된 프롬프트 | 개선된 응답 |
---|---|
이 이미지에 대해 위치를 포함해서 설명적이고 극적인 시를 지어줄 수 있나요? |
초록 위 작은 토끼, 파란색 바다인가, 작은 토끼야, 사실을 말해줘, 어쩌면 그 모든 것을 품은 광활함일지도, 작은 토끼야, 네 꿈은 무엇일까, 그것이 무엇이든, 작은 토끼야, |
실패한 프롬프트 부분 문제 해결
모델이 처음에 이미지를 이해하지 못해서 프롬프트가 실패했는지, 아니면 이미지를 이해했지만 이후 올바른 추론 단계를 수행하지 못했는지 알기 어려울 수 있습니다.
이러한 이유들을 구분하기 위해서는 모델에 이미지에 포함된 것이 무엇인지 기술하도록 요청하세요.
아래 예시에서 모델이 차와 함께 할 때 어울리지 않는 간식(예: 팝콘)으로 응답할 경우에는 먼저 모델이 이미지에 차가 포함된 것을 올바르게 인식했는지 확인하는 방식으로 문제 해결을 시작할 수 있습니다.
프롬프트 | 문제 해결을 위한 프롬프트 |
---|---|
이 사진과 어울리는 것 중 1분 내에 만들 수 있는 간식은 무엇이 있나요? |
이 이미지의 내용을 설명해 주세요. |
또 다른 전략은 모델에 그 이유를 설명하도록 요청하는 것입니다. 이렇게 하면 근거를 세분화하는 데 도움이 될 수 있습니다.
프롬프트 | 문제 해결을 위한 프롬프트 |
---|---|
이 사진과 어울리는 것 중 1분 내에 만들 수 있는 간식은 무엇이 있나요? |
이 사진과 어울리는 것 중 1분 내에 만들 수 있는 간식은 무엇이 있나요? 이유를 설명해 주세요. |
샘플링 매개변수 조정
각 요청에서 멀티모달 프롬프트만 보내는 것이 아니라 샘플링 매개변수 집합도 모델에 전송합니다. 모델은 서로 다른 매개변수 값에 대해 서로 다른 결과를 생성할 수 있습니다. 태스크에 가장 적합한 값을 얻기 위해 다른 매개변수로 실험해 봅니다. 가장 일반적으로 조정되는 매개변수는 다음과 같습니다.
- 강도
- 최상위 P
- 최상위 K
강도
강도는 최상위 P와 최상위 K가 적용될 때 발생하는 응답 생성 중 샘플링에 사용됩니다.
강도는 토큰 선택의 무작위성 수준을 제어합니다. 강도가 낮을수록 자유롭거나 창의적인 답변과 거리가 먼 확정적인 응답이 필요한 프롬프트에 적합하고, 강도가 높을수록 보다 다양하거나 창의적인 결과로 이어질 수 있습니다. 강도가 0이면 확정적입니다. 즉, 확률이 가장 높은 응답이 항상 선택됩니다.
대부분의 사용 사례에서는 강도 0.4로 시작해 보세요. 보다 창의적인 결과가 필요하면 강도를 늘려 보세요. 할루시네이션이 관측되면 강도를 줄여 보세요.
최상위 K
최상위 K는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. 최상위 K가 1이면 다음으로 선택된 토큰이 모델의 어휘에 포함된 모든 토큰 중에서 가장 확률이 높다는 의미입니다(그리디 디코딩이라고도 함). 반면에 최상위 K가 3이면 강도를 사용하여 가장 확률이 높은 토큰 3개 중에서 다음 토큰이 선택된다는 의미입니다.
각 토큰 선택 단계에서 확률이 가장 높은 최상위 K 토큰이 샘플링됩니다. 그런 다음 최상위 P를 기준으로 토큰을 추가로 필터링하고 강도 샘플링을 사용하여 최종 토큰을 선택합니다.
임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다. 최상위 K의 기본값은 32입니다.
최상위 P
최상위 P는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. 토큰은 확률의 합이 최상위 P 값과 같아질 때까지 확률이 가장 높은 것부터(최상위 K 참조) 가장 낮은 것까지 선택됩니다. 예를 들어 토큰 A, B, C의 확률이 0.6, 0.3, 0.1이고 최상위 P 값이 0.9이면 모델이 강도를 사용해서 다음 토큰으로 A 또는 B를 선택하고 C는 후보에서 제외합니다.
임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다. top-P의 기본값은 1.0입니다.
다음 단계
- Generative AI Studio 또는 Vertex AI API를 사용하여 빠른 시작 튜토리얼을 사용해 보세요.
- 시작하려면 멀티모달 프롬프트 요청 전송을 참조하세요.
- 멀티모달 제한사항에 대해 자세히 알아보세요.