파일 API(Files API)
파일 API(Files API)
Gemini는 텍스트, 이미지, 오디오를 포함한 다양한 유형의 입력 데이터를 동시에 처리할 수 있어요.
이 가이드는 Files API로 미디어 파일을 다루는 방법을 보여줘요. 오디오 파일, 이미지, 비디오, 문서, 기타 지원되는 파일 유형 모두에서 기본 작업은 같아요.
파일 프롬프팅 지침은 파일 프롬프트 가이드 섹션을 참고하세요.
출처: 원문
본문
파일 업로드
Files API를 사용해 미디어 파일을 업로드할 수 있어요. 전체 요청 크기(파일, 텍스트 프롬프트, 시스템 지침 등 포함)가 100MB보다 크면 항상 Files API를 사용하세요. PDF 파일의 경우 한도는 50MB예요.
다음 코드는 파일을 업로드한 다음 generateContent 호출에서 그 파일을 사용해요.
Python
from google import genai
client = genai.Client()
myfile = client.files.upload(file="path/to/sample.mp3")
response = client.models.generate_content(
model="gemini-3.8-flash", contents=["Describe this audio clip", myfile]
)
print(response.text)
JavaScript
import {
GoogleGenAI,
createUserContent,
createPartFromUri,
} from "@google/genai";
const ai = new GoogleGenAI({});
async function main() {
const myfile = await ai.files.upload({
file: "path/to/sample.mp3",
config: { mimeType: "audio/mpeg" },
});
const response = await ai.models.generateContent({
model: "gemini-3.8-flash",
contents: createUserContent([
createPartFromUri(myfile.uri, myfile.mimeType),
"Describe this audio clip",
]),
});
console.log(response.text);
}
await main();
Go
file, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
if err != nil {
log.Fatal(err)
}
defer client.Files.Delete(ctx, file.Name)
resp, err := client.Models.GenerateContent(ctx, "gemini-3.8-flash", []*genai.Content{
{
Parts: []*genai.Part{
genai.NewPartFromFile(*file),
genai.NewPartFromText("Describe this audio clip"),
},
},
}, nil)
if err != nil {
log.Fatal(err)
}
printResponse(resp)
REST
AUDIO_PATH="path/to/sample.mp3"
MIME_TYPE=$(file -b --mime-type "${AUDIO_PATH}")
NUM_BYTES=$(wc -c < "${AUDIO_PATH}")
DISPLAY_NAME=AUDIO
tmp_header_file=upload-header.tmp
# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files" \
-H "x-goog-api-key: *** \
-D "${tmp_header_file}" \
-H "X-Goog-Upload-Protocol: resumable" \
-H "X-Goog-Upload-Command: start" \
-H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
-H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
-H "Content-Type: application/json" \
-d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null
upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"
# Upload the actual bytes.
curl "${upload_url}" \
-H "Content-Length: ${NUM_BYTES}" \
-H "X-Goog-Upload-Offset: 0" \
-H "X-Goog-Upload-Command: upload, finalize" \
--data-binary "@${AUDIO_PATH}" 2> /dev/null > file_info.json
file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri
# Now generate content using that file
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent" \
-H "x-goog-api-key: *** \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts":[
{"text": "Describe this audio clip"},
{"file_data":{"mime_type": "${MIME_TYPE}", "file_uri": '$file_uri'}}]
}]
}' 2> /dev/null > response.json
cat response.json
echo
jq ".candidates[].content.parts[].text" response.json
파일 메타데이터 가져오기
files.get을 호출해 API가 업로드된 파일을 성공적으로 저장했는지 확인하고 그 메타데이터를 가져올 수 있어요.
Python
from google import genai
client = genai.Client()
myfile = client.files.upload(file='path/to/sample.mp3')
file_name = myfile.name
myfile = client.files.get(name=file_name)
print(myfile)
JavaScript
import {
GoogleGenAI,
} from "@google/genai";
const ai = new GoogleGenAI({});
async function main() {
const myfile = await ai.files.upload({
file: "path/to/sample.mp3",
config: { mimeType: "audio/mpeg" },
});
const fileName = myfile.name;
const fetchedFile = await ai.files.get({ name: fileName });
console.log(fetchedFile);
}
await main();
Go
file, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
if err != nil {
log.Fatal(err)
}
gotFile, err := client.Files.Get(ctx, file.Name)
if err != nil {
log.Fatal(err)
}
fmt.Println("Got file:", gotFile.Name)
REST
# file_info.json was created in the upload example
name=$(jq ".file.name" file_info.json)
# Get the file of interest to check state
curl https://generativelanguage.googleapis.com/v1beta/files/$name \
-H "x-goog-api-key: *** > file_info.json
# Print some information about the file you got
name=$(jq ".file.name" file_info.json)
echo name=$name
file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri
업로드된 파일 나열
다음 코드는 업로드된 모든 파일 목록을 가져와요:
Python
from google import genai
client = genai.Client()
print('My files:')
for f in client.files.list():
print(' ', f.name)
JavaScript
import {
GoogleGenAI,
} from "@google/genai";
const ai = new GoogleGenAI({});
async function main() {
const listResponse = await ai.files.list({ config: { pageSize: 10 } });
for await (const file of listResponse) {
console.log(file.name);
}
}
await main();
Go
for file, err := range client.Files.All(ctx) {
if err != nil {
log.Fatal(err)
}
fmt.Println(file.Name)
}
REST
echo "My files: "
curl "https://generativelanguage.googleapis.com/v1beta/files" \
-H "x-goog-api-key: ***"
업로드된 파일 삭제
파일은 48시간 후에 자동으로 삭제돼요. 업로드된 파일을 수동으로 삭제할 수도 있어요:
Python
from google import genai
client = genai.Client()
myfile = client.files.upload(file='path/to/sample.mp3')
client.files.delete(name=myfile.name)
JavaScript
import {
GoogleGenAI,
} from "@google/genai";
const ai = new GoogleGenAI({});
async function main() {
const myfile = await ai.files.upload({
file: "path/to/sample.mp3",
config: { mimeType: "audio/mpeg" },
});
const fileName = myfile.name;
await ai.files.delete({ name: fileName });
}
await main();
Go
file, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
if err != nil {
log.Fatal(err)
}
client.Files.Delete(ctx, file.Name)
REST
curl --request "DELETE" https://generativelanguage.googleapis.com/v1beta/files/$name \
-H "x-goog-api-key: ***"
사용 정보(Usage information)
Files API를 사용해 미디어 파일을 업로드하고 상호작용할 수 있어요. Files API는 프로젝트당 최대 20GB의 파일을 저장할 수 있게 해주며, 파일당 최대 크기는 2GB예요. 파일은 48시간 동안 저장돼요.
그 시간 동안 API를 사용해 파일에 대한 메타데이터를 가져올 수 있어요. 그러나 사용자가 업로드한 파일은 다운로드할 수 없어요. 비디오 같은 모델이 생성한 파일은 files.download 메서드를 사용해 다운로드할 수 있어요. Files API는 Gemini API를 사용할 수 있는 모든 리전에서 무료로 제공돼요.
파일 프롬프팅 전략(File prompting strategies)
이 섹션은 Gemini API용 프롬프트에서 미디어 파일을 사용하기 위한 지침과 모범 사례를 제공해요.
프롬프트에서 다양한 유형의 데이터를 사용할 수 있게 되면 Gemini API로 해결할 수 있는 작업의 유연성이 커져요. 예를 들어 맛있는 식사의 사진을 모델에 보내고 그 식사에 대한 짧은 블로그를 써 달라고 할 수 있어요.
| 프롬프트 | 응답 |
|---|---|
| 이 사진을 바탕으로 짧고 매력적인 블로그 게시물을 작성해 줘. 사진 속 식사에 대한 설명을 포함하고, 내 밀프렙 여정에 대해 이야기해 줘. | 밀프렙은 시간과 돈을 절약하는 좋은 방법이며 더 건강하게 먹는 데도 도움이 돼요. 이 식사는 미리 준비하기 쉬운 건강하고 맛있는 식사의 좋은 예예요. 이 식사는 현미, 구운 채소, 치킨 데리야키로 구성돼 있어요. 현미는 꾸준한 에너지를 주는 건강하고 복합적인 탄수화물이에요. 구운 채소는 하루 비타민과 미네랄 섭취에 좋고, 치킨 데리야키는 맛있고 단백질이 풍부한 선택이에요. 이 식사는 준비도 매우 쉬워요. 현미를 짓고, 채소를 굽고, 치킨 데리야키를 요리하기만 하면 돼요. 모든 것이 조리되면 밀프렙 용기에 나눠 담고 냉장고에 보관하면 돼요. 그런 다음 바쁜 아침에 용기를 집어 들고 나가면 돼요! 미리 준비하기 쉬운 건강하고 맛있는 식사를 찾고 있다면 이 식사가 좋은 선택이에요. 영양소와 풍미가 가득하고, 포만감을 주면서 만족스럽게 유지해 줄 거예요. 건강하고 맛있는 밀프렙을 위해! |
미디어 파일을 사용하는 프롬프트에서 원하는 출력을 얻는 데 어려움이 있다면 도움이 되는 몇 가지 전략이 있어요. 다음 섹션들은 멀티모달 입력을 사용하는 프롬프트를 개선하기 위한 설계 접근 방식과 문제 해결 팁을 제공해요.
다음 모범 사례를 따라 멀티모달 프롬프트를 개선할 수 있어요:
지침을 구체적으로 작성하세요: 오해의 여지가 최소화되도록 명확하고 간결한 지침을 작성하세요.
프롬프트에 몇 가지 예시를 추가하세요: 달성하고자 하는 것을 보여주는 현실적인 퓨샷(few-shot) 예시를 사용하세요.
단계별로 나누세요: 복잡한 작업을 관리 가능한 하위 목표로 나누어 모델을 과정 안내하세요.
출력 형식 지정: 프롬프트에서 마크다운, JSON, HTML 등 원하는 형식으로 출력하도록 요청하세요.
단일 이미지 프롬프트에는 이미지를 먼저 넣으세요: Gemini는 이미지와 텍스트 입력을 어떤 순서로든 처리할 수 있지만, 단일 이미지를 포함하는 프롬프트에서는 그 이미지(또는 비디오)를 텍스트 프롬프트 앞에 두는 것이 더 잘 동작할 수 있어요. 그러나 이미지가 텍스트와 고도로 인터리브되어야 의미가 있는 프롬프트의 경우 가장 자연스러운 순서를 사용하세요.
모델이 이미지의 관련 부분에서 정보를 끌어오지 않는다면: 프롬프트가 어떤 이미지 측면에서 정보를 끌어오길 원하는지 힌트를 주세요.
모델 출력이 너무 일반적(이미지/비디오 입력에 충분히 맞춰지지 않음)이라면: 프롬프트 시작 부분에서 작업 지침을 제공하기 전에 모델이 이미지나 비디오를 설명하도록 요청하거나, 이미지에 있는 것을 참조하도록 요청해 보세요.
어느 부분이 실패했는지 문제 해결하려면: 모델의 초기 이해를 측정하기 위해 이미지를 설명하라고 하거나 추론을 설명하라고 요청하세요.
프롬프트가 환각된 콘텐츠를 만들면: temperature 설정을 낮추거나 모델에게 더 짧은 설명을 요청해 추가 세부 사항을 억측할 가능성을 줄여 보세요.
샘플링 파라미터 조정: 다양한 temperature 설정과 top-k 선택을 실험해 모델의 창의성을 조정하세요.
지침을 구체적으로 작성
프롬프트는 명확하고 상세할 때 가장 성공적이에요. 특정 출력을 염두에 두고 있다면 그 요구 사항을 프롬프트에 포함해 원하는 출력을 얻는 것이 좋아요.
이 공항 게시판 이미지에 대해 모델에 그냥 "이 이미지를 설명하세요"라고 요청하면 일반적인 설명이 생성될 수 있어요. 이미지에서 시간과 도시를 파싱해야 한다면 그 요청을 프롬프트에 직접 포함할 수 있어요.
| 프롬프트 | 모델 응답 |
|---|---|
| 이 이미지를 설명하세요. | 이미지는 공항 도착 및 출발 게시판을 보여줘요. |
업데이트된 프롬프트 — 개선된 응답
이 이미지에 표시된 공항 게시판에서 시간과 도시를 목록으로 파싱하세요.
10:50 Moscow
11:05 Edinburgh
11:05 London
11:10 Bucharest
11:30 Kiev
11:35 Dublin
11:45 East Midlands
12:15 Sofia
12:30 London
12:30 Newcastle
12:40 St Petersburg
12:40 London
12:45 Manchester
몇 가지 예시 추가하기
Gemini 모델은 여러 입력을 받아 원하는 출력을 이해하기 위한 예시로 사용할 수 있어요. 예시를 추가하면 모델이 패턴을 식별하고 주어진 이미지와 응답 사이의 관계를 새 예시에 적용하는 데 도움이 돼요. 이를 "퓨샷(few-shot)" 러닝이라고도 해요.
아래 예시에서 초기 출력은 문장 형식으로 작성되었고 국가(Brazil)도 포함돼 있어요. 출력을 다른 형식이나 스타일로, 국가가 아닌 도시만 원한다고 가정해 보세요. 프롬프트에 퓨샷 예시를 추가하면 모델이 원하는 방식으로 응답하도록 유도할 수 있어요.
프롬프트 — 모델 응답: 도시와 랜드마크를 결정하세요. 랜드마크는 브라질 리우데자네이루의 그리스도상이에요.
| 업데이트된 프롬프트 | 개선된 응답 |
|---|---|
| 도시와 랜드마크를 결정하세요. | city: Rome, landmark: the Colosseum. |
| city: Beijing, landmark: Forbidden City | |
| city: Rio de Janeiro, landmark: Christ the Redeemer statue |
단계별로 나누기
시각적 이해와 추론이 모두 필요한 작업 같은 복잡한 작업의 경우 작업을 더 작고 단순한 단계로 나누는 것이 도움이 될 수 있어요. 또는 프롬프트에서 모델에게 "단계별로 생각하라"고 직접 요청하는 것도 효과적일 수 있어요.
| 프롬프트 | 모델 응답 |
|---|---|
| 화장지가 언제 떨어질까? | 곧, 3롤밖에 없어. |
| 업데이트된 프롬프트 | 개선된 응답 |
|---|---|
| 1. 먼저 이 사진에 화장지가 몇 롤인지 셀 것. 2. 그런 다음 일반인이 하루에 화장지를 얼마나 쓰는지 결정할 것. 3. 이 화장지 롤이 얼마나 오래 갈지 계산할 것. | 1. 이 사진에는 화장지가 3롤 있어. 2. 일반인은 하루에 약 20장을 써. 3. 각 롤에 200장이 들어 있다면 각 롤은 약 10일 동안 갈 거야. 따라서 3롤은 약 한 달 동안 갈 거야. |
수학 문제나 다른 유형의 단어 문제는 모델에게 단계별로 생각하게 하기에 좋은 후보다.
| 프롬프트 | 응답 |
|---|---|
| 수열의 4번째 항은? | -135 |
모델의 응답은 정확하지 않아요. 개선 방법 중 하나는 답변하기 전에 모델에게 문제를 파싱하라고 요청하는 거예요.
| 프롬프트 | 응답 |
|---|---|
| 먼저 이미지의 공식을 파싱하세요. 그런 다음 공식을 바탕으로 "수열의 4번째 항은?"에 답하세요. | (결과 펼치기를 클릭) |
| $$ b(n) = b(n-1) * (-3) $$ | |
| $$ b(1) = 15 $$ |
공식에 n = 4를 대입: $$ b(4) = b(4-1) * (-3) $$ $$ b(4) = b(3) * (-3) $$ b(3)의 값을 모르므로 공식에 n = 3을 대입: $$ b(3) = b(3-1) * (-3) $$ $$ b(3) = b(2) * (-3) $$ b(2)의 값을 모르므로 공식에 n = 2를 대입: $$ b(2) = b(2-1) * (-3) $$ $$ b(2) = b(1) * (-3) $$ b(1)의 값이 15임을 알고 있으므로 공식에 대입: $$ b(2) = 15 * (-3) $$ $$ b(2) = -45 $$ 이제 b(2)의 값을 알았으므로 b(3)의 공식에 대입: $$ b(3) = b(2) * (-3) $$ $$ b(3) = -45 * (-3) $$ $$ b(3) = 135 $$ 이제 b(3)의 값을 알았으므로 b(4)의 공식에 대입: $$ b(4) = b(3) * (-3) $$ $$ b(4) = 135 * (-3) $$ $$ b(4) = -405 $$
따라서 수열의 4번째 항은 -405예요. |
이 모델 응답은 정확해요 — 이제 응답을 더 간결하게 하려면 모델에게 단계별로 생각하라고 요청할 수 있어요.
업데이트된 프롬프트 — 개선된 응답: 수열의 4번째 항은? 단계별로 생각하세요.
첫 번째 항은 15예요. 두 번째 항은 b(1) * (-3) = 15 * (-3) = -45예요. 세 번째 항은 b(2) * (-3) = -45 * (-3) = 135예요. 네 번째 항은 b(3) * (-3) = 135 * (-3) = -405예요.
출력 형식 지정
일반적인 문제는 모델 출력이 특정 형식(예: markdown, JSON, HTML)이어야 하는 경우, 특히 모델 출력을 하위 작업이 처리해야 하는 경우예요. 프롬프트 안에서 모델에 지시해 그 형식으로 출력을 만들 수 있어요. 다음은 두 가지 예시예요:
| 프롬프트 | 모델 응답 |
|---|---|
| 이 이미지의 표를 markdown 형식으로 파싱하세요 | | Subject | Status | Time | Start date | Due on | |
| | ------- | ------ | ---- | ---------- | ------ | | |
| | Math | Done | 1.5 hrs | 11/29/2023 | 12/1/2023 | | |
| | Geography | Done | 30 min | 12/2/2023 | 12/4/2023 | | |
| | Physics | In progress | 2 hrs | 12/3/2023 | 12/5/2023 | | |
| | Biology | Not started | 6 hrs | 11/2/2016 | 12/6/2023 | |
| 프롬프트 | 모델 응답 |
|---|---|
| 다음 속성 목록을 제공하세요: 재료, 요리 유형, 채식 여부를 JSON 형식으로 | ```json |
| { | |
| "ingredients": [ |
"rice", "shrimp", "clams", "mussels", "peas", "tomatoes", "onions", "garlic",
"olive oil", "paprika", "salt", "pepper"
], "type of cuisine": "Spanish", "vegetarian": false }
|
#### 단일 이미지 프롬프트에는 이미지를 먼저
Gemini는 프롬프트 안에서 이미지와 텍스트를 어떤 순서로든 해석할 수 있지만, 단일 이미지를 텍스트 프롬프트 앞에 두면 더 나은 결과를 얻을 수 있어요. 다음 샘플에서 각 프롬프트는 텍스트보다 이미지가 먼저 오는 것을 볼 수 있어요.
#### 멀티모달 프롬프트 문제 해결
도움이 되는 응답을 얻지 못한다면 프롬프트를 문제 해결해야 할 수 있어요. 시도할 수 있는 몇 가지 전략이 있어요.
##### 모델이 이미지의 관련 부분에서 정보를 끌어오지 않는 경우
더 구체적인 응답을 얻으려면 프롬프트가 응답에 정보를 끌어오길 원하는 이미지 측면을 지적할 수 있어요.
| 프롬프트 | 모델 응답 |
|---|---|
| 이 기저귀는 아기에게 며칠이나 쓸 수 있을까? | 기저귀는 떨어질 때까지 198일간 쓸 수 있어. |
| **업데이트된 프롬프트** | **개선된 응답** |
|---|---|
| 이 기저귀는 떨어질 때까지 얼마나 오래 쓸 수 있을까? 상자에 표시된 무게로 아이의 나이를 결정하고, 상자의 총 기저귀 수를 사용하세요. 총 수를 아이가 하루에 쓰는 기저귀 수로 나누세요. | 상자에는 기저귀 198개가 들어 있어. 상자에는 이 기저귀가 22-37파운드 아이용이라고 적혀 있어. 이 무게 범위의 평균 아이는 보통 1-2세야. 2세 아이는 보통 하루에 기저귀 6개를 써. 따라서 기저귀는 약 33일(198/6) 동안 갈 거야. |
##### 모델 출력이 너무 일반적이고 이미지 입력에 충분히 맞춰지지 않는 경우
모델이 응답을 이미지에 맞추도록 돕기 위해 추론 작업을 수행하기 전에 이미지를 설명해 달라고 요청해 보세요.
| 프롬프트 | 모델 응답 |
|---|---|
| 이 이미지들의 공통점은? | 네 이미지 모두 풍경 사진의 예시야. |
| **업데이트된 프롬프트** | **개선된 응답** |
|---|---|
| 먼저 각 이미지에 무엇이 있는지 자세히 설명하세요. 이 이미지들의 공통점은? | 첫 이미지는 사람이 여행 가방을 싸는 모습을 보여줘. 두 번째 이미지는 쇼핑몰의 빈 복도를 보여줘. 세 번째 이미지는 화장지 롤을 보여줘. 네 번째 이미지는 어둡고 폭풍우 치는 바다를 보여줘. 이 이미지들의 공통점은 모두 리미널 스페이스(liminal spaces)의 예시라는 거야... |
또한 이미지에 있는 것을 참조하도록 모델에게 명시적으로 요청할 수도 있어요.
| **업데이트된 프롬프트** | **개선된 응답** |
|---|---|
| 이 이미지들의 공통점은? 응답에서 이미지에 있는 것을 참조하세요. | 모든 이미지는 여행과 관련돼 있어. 첫 번째 이미지는 사람이 여행 가방을 싸는 모습, 두 번째는 쇼핑몰의 빈 복도, 세 번째는 화장지 더미, 네 번째는 어둡고 폭풍우 치는 바다를 보여줘... |
같은 팁이 이미지의 창의적 출력에도 적용돼요. 토끼의 다음 예시에서 이미지의 측면을 포함하도록 명시적으로 요청하면 출력이 개선될 수 있어요.
| 프롬프트 | 모델 응답 |
|---|---|
| 이 이미지에 대해 시를 써 줄 수 있어? | 작고 갈색인 아기 토끼, 들판을 위아래로 뛰어다니네. 귀는 길고 꼬리는 작아, 너는 모두 중에서 가장 귀여운 생물이야. 풀을 갉아먹고, 나를 보면 도망가. 하지만 나는 항상 네 친구일 거야, 작은 토끼야, 마지막까지. |
**업데이트된 프롬프트 — 개선된 응답**: 이 이미지에 대해 설명적이고 극적인 시를 써 줄 수 있고 위치도 포함해 줄 수 있어?
푸른 잔디 위의 작은 토끼, 귀는 길고 뾰족하네. 저 멀리 무엇을 바라보고 있을까? 푸른 바다일까, 태양 아래 반짝이는 물결일까, 아니면 부딪히고 포효하는 파도일까... 작은 토끼야, 너의 꿈이 무엇인지 궁금하구나.
##### 프롬프트의 어떤 부분이 실패했는지 문제 해결
프롬프트가 모델이 처음에 **이미지를 이해하지 못해서** 실패했는지, 아니면 이미지를 이해했지만 이후에 올바른 **추론 단계**를 수행하지 않아서 실패했는지 알기 어려울 수 있어요. 이 두 이유를 구분하려면 모델에게 이미지에 무엇이 있는지 설명하라고 요청하세요.
다음 예시에서 모델이 차와 어울리기 어색한 스낵(예: 팝콘)으로 응답한다면, 먼저 문제를 조사해 모델이 이미지에 차가 들어 있다는 것을 올바르게 인식했는지 판단할 수 있어요.
| 프롬프트 | 문제 해결용 프롬프트 |
|---|---|
| 1분 안에 만들고 이것과 잘 어울리는 스낵은? | 이 이미지에 무엇이 있는지 설명하세요. |
또 다른 전략은 모델에게 추론을 설명하라고 요청하는 거예요. 이는 추론 중 어떤 부분이 무너졌는지(있을 경우) 좁히는 데 도움이 될 수 있어요.
| 프롬프트 | 문제 해결용 프롬프트 |
|---|---|
| 1분 안에 만들고 이것과 잘 어울리는 스낵은? | 1분 안에 만들고 이것과 잘 어울리는 스낵은? 왜 그런지 설명해 줘. |
## 더 알아보기 (Learn more)
- [Google AI Studio](http://aistudio.google.com)를 사용해 나만의 멀티모달 프롬프트를 작성해 보세요.
- 미디어 파일 업로드와 프롬프트 포함을 위한 Gemini Files API 사용에 대한 자세한 내용은 [Vision](/gemini-api/docs/vision), [Audio](/gemini-api/docs/audio), [문서 처리](/gemini-api/docs/document-processing) 가이드를 참고하세요.
- 샘플링 파라미터 튜닝 같은 프롬프트 설계에 대한 더 많은 지침은 [프롬프트 전략](/gemini-api/docs/prompting-strategies) 페이지를 참고하세요.