ממשק API של קבצים

‫Gemini יכול לעבד בו-זמנית סוגים שונים של נתוני קלט, כולל טקסט, תמונות ואודיו.

במדריך הזה מוסבר איך לעבוד עם קובצי מדיה באמצעות Files API. הפעולות הבסיסיות זהות לקובצי אודיו, תמונות, סרטונים, מסמכים ולסוגי קבצים נתמכים אחרים.

בקטע מדריך לכתיבת פרומפטים בקבצים מוסבר איך להשתמש בהנחיות בקבצים.

העלאת קובץ

אתם יכולים להשתמש ב-Files API כדי להעלות קובץ מדיה. תמיד צריך להשתמש ב-Files API כשגודל הבקשה הכולל (כולל הקבצים, פרומפט טקסטואלי, הוראות המערכת וכו') גדול מ-100MB. לקובצי PDF, המגבלה היא 50 MB.

בדוגמת הקוד הבאה, קובץ מועלה ואז נעשה בו שימוש בקריאה ל-interactions.create.

Python

from google import genai

client = genai.Client()

myfile = client.files.upload(file="path/to/sample.mp3")

interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input=[
        {"type": "text", "text": "Describe this audio clip"},
        {"type": "audio", "uri": myfile.uri, "mime_type": myfile.mime_type}
    ]
)

print(interaction.output_text)

JavaScript

import { GoogleGenAI } from "@google/genai";

const client = new GoogleGenAI({});

async function main() {
  const myfile = await client.files.upload({
    file: "path/to/sample.mp3",
    config: { mime_type: "audio/mpeg" },
  });

  const interaction = await client.interactions.create({
    model: "gemini-3.8-flash",
    input: [
      { type: "text", text: "Describe this audio clip" },
      { type: "audio", uri: myfile.uri, mime_type: myfile.mimeType }
    ]
  });
  console.log(interaction.output_text);
}

await main();

Java

import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.AudioContent;
import com.google.genai.gaos.models.interactions.AudioContentMimeType;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.Model;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import com.google.genai.types.File;
import com.google.genai.types.UploadFileConfig;
import java.util.Arrays;
import java.util.List;

Client client = new Client();

File myFile =
    client.files.upload(
        new java.io.File("path/to/sample.mp3"),
        UploadFileConfig.builder().mimeType("audio/mp3").build());

Content textContent = TextContent.builder().text("Describe this audio clip").build();
Content audioContent =
    AudioContent.builder()
        .uri(myFile.uri().orElse(""))
        .mimeType(AudioContentMimeType.of(myFile.mimeType().orElse("audio/mp3")))
        .build();

List<Content> contents = Arrays.asList(textContent, audioContent);

CreateModelInteraction params =
    CreateModelInteraction.builder()
        .model(Model.of("gemini-3.8-flash"))
        .input(InteractionsInput.ofContent(contents))
        .build();

Interaction interaction =
    client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();

System.out.println(interaction.outputText().orElse(""));

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    myFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", &genai.UploadFileConfig{
        MIMEType: "audio/mp3",
    })
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.8-flash"),
            Input: interactions.NewInteractionsInput([]interactions.Content{
                interactions.NewContent(interactions.TextContent{
                    Text: "Describe this audio clip",
                }),
                interactions.NewContent(interactions.AudioContent{
                    URI:      genai.Ptr(myFile.URI),
                    MimeType: interactions.AudioContentMimeType(myFile.MIMEType).ToPointer(),
                }),
            }),
        }),
    })
    if err != nil {
        log.Fatal(err)
    }
    if res.Interaction.OutputText != nil {
        fmt.Println(*res.Interaction.OutputText)
    }
}

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: $GEMINI_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 create an interaction using the Interactions API
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
      "model": "gemini-3.8-flash",
      "input": [
        {"type": "text", "text": "Describe this audio clip"},
        {"type": "audio", "uri": '$file_uri', "mime_type": "'${MIME_TYPE}'"}
      ]
    }' 2> /dev/null > response.json

cat response.json
echo

jq ".outputs[] | select(.type == \"text\") | .text" response.json

אחזור מטא-נתונים של קובץ

כדי לוודא שה-API שמר בהצלחה את הקובץ שהועלה ולקבל את המטא-נתונים שלו, אפשר להפעיל את files.get.

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 client = new GoogleGenAI({});

async function main() {
  const myfile = await client.files.upload({
    file: "path/to/sample.mp3",
    config: { mime_type: "audio/mpeg" },
  });

  const fileName = myfile.name;
  const fetchedFile = await client.files.get({ name: fileName });
  console.log(fetchedFile);
}

await main();

Java

import com.google.genai.Client;
import com.google.genai.types.File;
import com.google.genai.types.UploadFileConfig;

Client client = new Client();

File myFile =
    client.files.upload(
        new java.io.File("path/to/sample.mp3"),
        UploadFileConfig.builder().mimeType("audio/mp3").build());

String fileName = myFile.name().orElse("");
File fileMetadata = client.files.get(fileName, null);
System.out.println(fileMetadata);

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    myFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", &genai.UploadFileConfig{
        MIMEType: "audio/mp3",
    })
    if err != nil {
        log.Fatal(err)
    }

    fileMetadata, err := client.Files.Get(ctx, myFile.Name, nil)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(fileMetadata)
}

REST

# file_info.json was created in the upload example
name=$(jq -r ".file.name" file_info.json)
# Get the file of interest to check state
curl https://generativelanguage.googleapis.com/v1beta/$name \
-H "x-goog-api-key: $GEMINI_API_KEY" > file_info.json
# Print some information about the file you got
name=$(jq -r ".name" file_info.json)
echo name=$name
file_uri=$(jq -r ".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 client = new GoogleGenAI({});

async function main() {
  const listResponse = await client.files.list({ config: { pageSize: 10 } });
  for await (const file of listResponse) {
    console.log(file.name);
  }
}

await main();

Java

import com.google.genai.Client;
import com.google.genai.types.File;

Client client = new Client();

System.out.println("My files:");
for (File f : client.files.list(null)) {
  System.out.println("  " + f.name().orElse(""));
}

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("My files:")
    for f, err := range client.Files.All(ctx) {
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(" ", f.Name)
    }
}

REST

echo "My files: "

curl "https://generativelanguage.googleapis.com/v1beta/files" \
  -H "x-goog-api-key: $GEMINI_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 client = new GoogleGenAI({});

async function main() {
  const myfile = await client.files.upload({
    file: "path/to/sample.mp3",
    config: { mime_type: "audio/mpeg" },
  });

  const fileName = myfile.name;
  await client.files.delete({ name: fileName });
}

await main();

Java

import com.google.genai.Client;
import com.google.genai.types.File;
import com.google.genai.types.UploadFileConfig;

Client client = new Client();

File myFile =
    client.files.upload(
        new java.io.File("path/to/sample.mp3"),
        UploadFileConfig.builder().mimeType("audio/mp3").build());

client.files.delete(myFile.name().orElse(""), null);

Go

package main

import (
    "context"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    myFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", &genai.UploadFileConfig{
        MIMEType: "audio/mp3",
    })
    if err != nil {
        log.Fatal(err)
    }

    if _, err := client.Files.Delete(ctx, myFile.Name, nil); err != nil {
        log.Fatal(err)
    }
}

REST

curl --request "DELETE" https://generativelanguage.googleapis.com/v1beta/$name \
  -H "x-goog-api-key: $GEMINI_API_KEY"

נתוני השימוש

אפשר להשתמש ב-Files API כדי להעלות קובצי מדיה ולבצע פעולות עליהם. ה-Files API מאפשר לאחסן עד 20 GB של קבצים לכל פרויקט, עם גודל מקסימלי של 2 GB לכל קובץ. הקבצים נשמרים למשך 48 שעות.

במהלך התקופה הזו, אתם יכולים להשתמש ב-API כדי לקבל מטא-נתונים על הקבצים. עם זאת, אי אפשר להוריד קבצים שהמשתמשים העלו. אתם יכולים להוריד קבצים שנוצרו על ידי מודלים, כמו סרטונים, באמצעות השיטה files.download. אפשר להשתמש ב-Files API בחינם בכל האזורים שבהם Gemini API זמין.

שיטות להנדסת פרומפטים בקבצים

בקטע הזה מפורטות הנחיות ושיטות מומלצות לשימוש בקובצי מדיה בהנחיות ל-Gemini API.

היכולת להשתמש בסוגים שונים של נתונים בהנחיות מאפשרת לכם גמישות רבה יותר במשימות שאתם יכולים לבצע באמצעות Gemini API. לדוגמה, אתם יכולים לשלוח למודל תמונה של ארוחה טעימה ולבקש ממנו לכתוב פוסט קצר בבלוג על הארוחה.

הנחיה תשובה

תכתוב פוסט קצר ומעניין לבלוג על סמך התמונה הזו. הוא צריך לכלול תיאור של הארוחה שבתמונה ולספר על התהליך שלי בהכנת ארוחות.


קובצי Cookie

הכנת ארוחות מראש היא דרך מצוינת לחסוך זמן וכסף, והיא גם יכולה לעזור לכם לאכול בריא יותר. הארוחה הזו היא דוגמה מצוינת לארוחה בריאה וטעימה שאפשר להכין מראש.

ארוחה שכוללת אורז מלא, ירקות צלויים ועוף טריאקי. האורז המלא הוא פחמימה מורכבת ובריאה שתספק לכם אנרגיה לאורך זמן. הירקות הצלויים הם דרך מצוינת לקבל את המנה היומית של ויטמינים ומינרלים, והעוף בטריאקי הוא אפשרות טעימה ועשירה בחלבון.

גם קל להכין את הארוחה הזו. פשוט מבשלים את האורז המלא, צולים את הירקות ומבשלים את העוף ברוטב טריאקי. אחרי שהכול מוכן, מחלקים את האוכל לקופסאות ושומרים אותן במקרר. בבקרים עמוסים, פשוט לוקחים קופסה ויוצאים לדרך.

אם אתם מחפשים ארוחה בריאה וטעימה שאפשר להכין מראש, זו אפשרות מצוינת. הוא מלא בחומרי הזנה ובטעם, ובטוח ישביע אתכם.

שיהיה בהצלחה עם הכנת הארוחות הבריאות והטעימות!

אם אתם מתקשים לקבל את הפלט הרצוי מהנחיות שמשתמשות בקובצי מדיה, יש כמה אסטרטגיות שיכולות לעזור לכם לקבל את התוצאות הרצויות. בקטעים הבאים מפורטות גישות עיצוב וטיפים לפתרון בעיות, שיעזרו לכם לשפר הנחיות שכוללות קלט מולטי-מודאלי.

כדי לשפר את ההנחיות המולטי-מודאליות, כדאי לפעול לפי השיטות המומלצות הבאות:

  • מידע בסיסי על עיצוב פרומפטים

    • הוראות ספציפיות: חשוב לנסח הוראות ברורות ותמציתיות, שלא משאירות מקום לפרשנות מוטעית.
    • הוסיפו כמה דוגמאות להנחיה: השתמשו בדוגמאות מציאותיות כדי להמחיש מה אתם רוצים להשיג.
    • פירוט שלב אחר שלב: חלוקת משימות מורכבות למטרות משנה שקל יותר לנהל, והנחיית המודל בתהליך.
    • ציינו את פורמט הפלט: בהנחיה, בקשו שהפלט יהיה בפורמט הרצוי, כמו Markdown, ‏ JSON, ‏ HTML ועוד.
    • בפרומפטים עם תמונה אחת, שימו את התמונה בהתחלה: Gemini יכול לעבד קלט של תמונות וטקסט בכל סדר, אבל בפרומפטים עם תמונה אחת, יכול להיות שהוא יפעל טוב יותר אם התמונה (או הסרטון) תופיע לפני הפרומפט הטקסטואלי. עם זאת, בהנחיות שבהן צריך לשלב תמונות עם טקסטים כדי שההנחיה תהיה הגיונית, כדאי להשתמש בסדר הכי טבעי.
  • פתרון בעיות בפרומפט מולטי-מודאלי

    • אם המודל לא שואב מידע מהחלק הרלוונטי בתמונה: תנו רמזים לגבי ההיבטים של התמונה שאתם רוצים שההנחיה תשאב מהם מידע.
    • אם הפלט מהמודל גנרי מדי (לא מותאם מספיק לקלט של התמונה או הסרטון): בתחילת הפרומפט, כדאי לבקש מהמודל לתאר את התמונות או הסרטון לפני שמספקים את הוראות המשימה, או לבקש מהמודל להתייחס למה שמופיע בתמונה.
    • כדי לפתור בעיות בחלק מסוים: מבקשים מהמודל לתאר את התמונה או להסביר את ההיגיון שלו, כדי להבין את התפיסה הראשונית של המודל.
    • אם ההנחיה שלכם גורמת להזיות בתוכן: נסו להוריד את הגדרת הטמפרטורה או לבקש מהמודל תיאורים קצרים יותר, כדי להקטין את הסיכוי שהוא יסיק פרטים נוספים.
    • כוונון הפרמטרים של הדגימה: נסו הגדרות טמפרטורה שונות ובחירות של Top-K כדי לשנות את רמת היצירתיות של המודל.

הוראות ספציפיות

ההנחיות הכי מוצלחות הן הנחיות ברורות ומפורטות. אם אתם רוצים לקבל פלט מסוים, כדאי לכלול את הדרישה הזו בהנחיה כדי להבטיח שתקבלו את הפלט הרצוי.

אם תבקשו מהמודל "לתאר את התמונה" של לוח הטיסות בשדה התעופה, יכול להיות שתקבלו תיאור כללי. אם אתם רוצים שהמודל ינתח את השעה והעיר מהתמונה, אתם יכולים לכלול את הבקשה הזו ישירות בהנחיה.

פרומפט תשובה מהמודל

מה מופיע בתמונה?

תמונה של לוח טיסות נכנסות ויוצאות בשדה תעופה.

פרומפט מעודכן תשובה משופרת
לוח זמנים לנסיעות

Parse the time and city from the airport board shown in this image into a list.

  • ‫10:50 מוסקבה
  • ‫11:05 אדינבורו
  • ‫11:05 לונדון
  • ‫11:10 בוקרשט
  • ‫11:30 קייב
  • ‫11:35 דבלין
  • ‫11:45 איסט מידלנדס
  • ‫12:15 סופיה
  • ‫12:30 לונדון
  • ‫12:30 ניוקאסל
  • ‫12:40 סנט פטרסבורג
  • ‫12:40 לונדון
  • ‫12:45 מנצ'סטר
  • הוספת כמה דוגמאות

    מודל Gemini יכול לקבל כמה קלטים, ולהשתמש בהם כדוגמאות כדי להבין את הפלט שאתם רוצים. הוספת הדוגמאות האלה יכולה לעזור למודל לזהות את הדפוסים ולהחיל את הקשר בין התמונות והתשובות שסופקו על הדוגמה החדשה. השיטה הזו נקראת גם "למידה עם מעט דוגמאות" (few-shot).

    בדוגמה הבאה, הפלט הראשוני כתוב בצורת משפט, וכולל גם את המדינה (ברזיל). נניח שאתם רוצים שהפלט יהיה בפורמט או בסגנון אחר, ושהוא יכלול רק את העיר ולא את המדינה. הוספה של דוגמאות פרומפט עם כמה דוגמאות (few-shot) יכולה לעזור למודל להגיב בצורה הרצויה.

    פרומפט תשובה מהמודל
    לוח זמנים לנסיעות

    צריך לציין את העיר שבה נמצא ציון הדרך.

    האתר הוא פסל ישו הגואל בריו דה ז'ניירו, ברזיל.

    הנחיה מעודכנת תשובה משופרת

    לזהות את העיר שבה נמצא ציון הדרך.

    קולוסיאום

    עיר: רומא, אתר: הקולוסיאום.

    העיר האסורה

    city: Beijing, landmark: Forbidden City

    forbidden-city

    עיר: ריו דה ז'ניירו, אתר: פסל ישו הגואל

    הסבר מפורט שלב אחר שלב

    במשימות מורכבות, כמו כאלה שדורשות גם הבנה חזותית וגם הסקת מסקנות, כדאי לפצל את המשימה לשלבים קטנים ופשוטים יותר. לחלופין, אפשר גם לבקש מהמודל ישירות "לחשוב צעד אחר צעד" בהנחיה.

    פרומפט תשובה מהמודל

    מתי ייגמר לי נייר הטואלט?

    בקרוב, נשארו לך רק 3 הטלות.

    הנחיה מעודכנת תשובה משופרת
    1. קודם כל, תספור כמה גלילי נייר טואלט יש בתמונה הזו.
    2. לאחר מכן, קובעים כמה נייר טואלט אדם ממוצע משתמש ביום.
    3. חשבו כמה זמן יספיקו גלילי נייר הטואלט האלה.
    1. בתמונה הזו יש 3 גלילים של נייר טואלט.
    2. אדם ממוצע משתמש בכ-20 דפים של נייר טואלט ביום.
    3. אם כל גליל מכיל 200 דפים, כל גליל יספיק לכ-10 ימים. לכן, 3 הגלילות יספיקו בערך לחודש.

    בעיות מתמטיות או סוגים אחרים של בעיות מילוליות הן דוגמאות מצוינות למקרים שבהם כדאי לבקש מהמודל לחשוב שלב אחר שלב.

    פרומפט תשובה

    מהו האיבר הרביעי בסדרה?

    -135

    התשובה מהמודל שגויה. כדי לשפר את זה, אפשר לבקש מהמודל לנתח את הבעיה לפני שהוא עונה על ההנחיה.

    פרומפט תשובה

    קודם צריך לנתח את הנוסחה בתמונה.

    ואז, על סמך הנוסחה, ענה על השאלה "מהו האיבר הרביעי בסדרה?".

    לוחצים כדי להרחיב את התוצאה

    $$ b(n) = b(n-1) * (-3) $$

    $$ b(1) = 15 $$

    1. מציבים n = 4 בנוסחה:

      $$ b(4) = b(4-1) * (-3) $$

      $$ b(4) = b(3) * (-3) $$

    2. אנחנו לא יודעים מה הערך של b(3), אז נציב n = 3 בנוסחה:

      $$ b(3) = b(3-1) * (-3) $$

      $$ b(3) = b(2) * (-3) $$

    3. אנחנו לא יודעים את הערך של b(2), לכן נציב n = 2 בנוסחה:

      $$ b(2) = b(2-1) * (-3) $$

      $$ b(2) = b(1) * (-3) $$

    4. אנחנו יודעים שהערך של b(1) הוא 15, אז נציב אותו בנוסחה:

      $$ b(2) = 15 * (-3) $$

      $$ b(2) = -45 $$

    5. עכשיו, כשאנחנו יודעים את הערך של b(2), נציב אותו בנוסחה של b(3):

      $$ b(3) = b(2) * (-3) $$

      $$ b(3) = -45 * (-3) $$

      $$ b(3) = 135 $$

    6. עכשיו, כשאנחנו יודעים את הערך של b(3), נציב אותו בנוסחה של b(4):

      $$ 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.

    מציינים את פורמט הפלט

    בעיה נפוצה היא הצורך שהמידע שמתקבל מהמודל יהיה בפורמט מסוים (למשל, Markdown,‏ JSON,‏ HTML), במיוחד אם המידע שמתקבל מהמודל צריך להיות מוזן למשימה בהמשך. כדי לנסות ליצור פלט בפורמט הזה, אתם יכולים להורות למודל לעשות זאת בהנחיה. הנה שתי דוגמאות:

    פרומפט תשובה מהמודל

    תנתח את הטבלה בתמונה הזו ותמיר אותה לפורמט Markdown

    ```none | 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 חיתולים. על הקופסה מצוין שהחיתולים מיועדים לילדים במשקל 10-17 ק"ג.

    הגיל הממוצע של ילדים בטווח המשקל הזה הוא בין שנה לשנתיים.

    ילד בן שנתיים משתמש בדרך כלל ב-6 חיתולים ביום, ולכן החיתולים יספיקו לכ-33 ימים (198/6).

    אם הפלט מהמודל גנרי מדי ולא מותאם מספיק לתמונה שהוזנה

    כדי לעזור למודל להתאים את התשובה שלו לתמונות, נסו לבקש ממנו לתאר את התמונות לפני שהוא מבצע את משימת החשיבה.

    פרומפט תשובה מהמודל

    מה המשותף לתמונות האלה?

    כל ארבע התמונות הן דוגמאות לצילום נוף.

    הנחיה מעודכנת תשובה משופרת

    קודם, תאר בפירוט מה רואים בכל תמונה. מה משותף לתמונות האלה?

    בתמונה הראשונה רואים אדם שאורז מזוודה. בתמונה השנייה רואים מסדרון ריק בקניון. בתמונה השלישית מוצג גליל של נייר טואלט. בתמונה הרביעית מוצג ים סוער וכהה.

    המשותף לתמונות האלה הוא שכולן דוגמאות למרחבים לימינליים. מרחבים לימינליים הם מקומות או מצבים שנמצאים בין שני מקומות או שני מצבים אחרים. לרוב מאפיינת אותן תחושה של חוסר ודאות או עמימות.

    בתמונה הראשונה רואים את האדם בין שהייה בבית לבין נסיעה. בתמונה השנייה רואים את המסדרון בין שתי החנויות. התמונה השלישית היא של נייר טואלט, שיכול לייצג חדר אמבטיה. חדר אמבטיה הוא מרחב מעבר בין תחום פרטי לתחום ציבורי. זה מקום שבו אנחנו מתכוננים להיכנס לעולם החיצון או לצאת ממנו.

    בתמונה הרביעית רואים את הים במצב ביניים בין רגוע לסוער.

    מרחבים לימינליים יכולים להיות מרגשים ומטרידים בו-זמנית. הם יכולים להיות מקום של התחלות חדשות או מקום של סיומים. הם יכולים להיות מקום של הרהור או מקום של פעולה.

    אתם יכולים גם לנסות לבקש מהמודל באופן מפורש להתייחס למה שמופיע בתמונה.

    הנחיה מעודכנת תשובה משופרת

    מה המשותף לתמונות האלה? התייחסו למה שמופיע בתמונות בתשובה שלכם.

    כל התמונות קשורות לנסיעות. התמונה הראשונה מראה אדם אורז מזוודה, התמונה השנייה מראה מסדרון ריק בקניון, התמונה השלישית מראה ערימה של נייר טואלט והתמונה הרביעית מראה ים סוער וחשוך.

    כל התמונות האלה קשורות לנסיעות כי הן מציגות דברים שאנשים צריכים או משתמשים בהם כשהם נוסעים. התמונה הראשונה מציגה אדם אורז מזוודה, שזה משהו שאנשים עושים כשהם נוסעים לטיול. בתמונה השנייה מוצג מסדרון ריק בקניון, שהוא מקום שאנשים לרוב הולכים אליו כדי לקנות דברים לנסיעות שלהם. בתמונה השלישית רואים ערימה של נייר טואלט, פריט שאנשים משתמשים בו לעיתים קרובות כשהם בנסיעות. בתמונה הרביעית רואים ים סוער וקודר, שזה משהו שאנשים נתקלים בו לפעמים כשהם מטיילים.

    אותם טיפים רלוונטיים גם ליצירת תוכן יצירתי מתמונות. בדוגמה הבאה עם הארנב, בקשה מפורשת מהמודל לכלול היבטים מהתמונה יכולה לשפר את הפלט.

    פרומפט תשובה מהמודל

    תכתוב שיר על התמונה הזו?

    ארנב קטן, רך וחום,
    מקפץ בשדה, למעלה ולמטה.
    האוזניים שלך כל כך ארוכות, הזנב שלך כל כך קטן,
    אתה היצור הכי חמוד מכולם.

    אתה מנשנש את הדשא, כל כך ירוק ומתוק,
    ומקפץ כשאתה רואה אותי.
    אבל תמיד אהיה חבר שלך,
    ארנב קטן, עד הסוף.

    הנחיה מעודכנת תגובה משופרת

    תכתוב לי שיר תיאורי ודרמטי על התמונה הזו, ותציין בו את המיקום.

    ארנב קטן על הדשא,
    אוזניים ארוכות, כל כך חדות.
    מה אתה רואה שם,
    במרחק, לאן אתה בוהה?

    האם זה כחול האוקיינוס,
    שמנצנץ בגוון השמש?
    או הגלים שמתנפצים ורועשים,
    קצב שאתם אוהבים?

    ארנב קטן, תגיד לי את האמת,
    מה כל כך מושך את תשומת הלב שלך?
    האם זה הבריזה המלוחה,
    או קריאות השחפים שמשמחות?

    אולי זה הגודל של הכול,
    עולם כל כך גדול וקטן.
    מקום שבו חלומות יכולים להתגשם,
    ושבו אפשר לצאת להרפתקאות.

    ארנבון קטן, מעניין על מה אתה חולם,
    כשאתה יושב על הדשא, כל כך רגוע.
    האם אתם רוצים לחקור את המעמקים,
    או להישאר על היבשה, שבה אפשר לקפוץ?

    לא משנה מה זה, ארנב קטן,
    חשוב לשמור על ניצוץ התמיהה הזה.
    כי בחלומות ובתקוות שלך,
    יש עולם שמחכה ליצירה שלך.

    פתרון בעיות שקשורות לחלקים בפרומפט שנכשלו

    לפעמים קשה לדעת אם הנחיה נכשלה כי המודל לא הבין את התמונה מלכתחילה, או שהוא הבין את התמונה אבל לא ביצע את שלבי החשיבה הנכונים לאחר מכן. כדי להבין מה הסיבה, בקשו מהמודל לתאר מה יש בתמונה.

    בדוגמה הבאה, אם המודל מציע חטיף שנראה מפתיע בשילוב עם תה (למשל, פופקורן), קודם כל אפשר לפתור את הבעיה כדי לקבוע אם המודל זיהה נכון שהתמונה מכילה תה.

    פרומפט פרומפט לפתרון בעיות

    איזה חטיף אפשר להכין בדקה אחת שיתאים לזה?

    תאר מה מופיע בתמונה הזו.

    אסטרטגיה נוספת היא לבקש מהמודל להסביר את הנימוקים שלו. כך תוכלו לצמצם את האפשרויות ולגלות איזה חלק בתהליך החשיבה לא עבד, אם בכלל.

    פרומפט פרומפט לפתרון בעיות

    איזה חטיף אפשר להכין בדקה אחת שיתאים לזה?

    איזה חטיף אפשר להכין בדקה אחת שיתאים לזה? נשמח לשמוע למה.

    המאמרים הבאים

    • נסו לכתוב פרומפטים מולטי-מודאליים משלכם באמצעות Google AI Studio.
    • במדריכים בנושא Vision, אודיו ועיבוד מסמכים מוסבר איך להשתמש ב-Gemini Files API כדי להעלות קובצי מדיה ולכלול אותם בהנחיות.
    • במאמר אסטרטגיות להנחיות מוסבר איך לעצב הנחיות, למשל איך לשנות את הפרמטרים של הדגימה.