Using files

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

שיטה: media.upload

העלאת נתונים ל-ragStore, עיבוד מקדים וחלוקה לחלקים לפני אחסון ב-RagStore Document.

נקודת קצה

  • ‫URI להעלאה, לבקשות להעלאת מדיה:
post https://generativelanguage.googleapis.com/upload/v1beta/{ragStoreName=ragStores/*}:uploadToRagStore
  • ‫URI של מטא-נתונים, לבקשות של מטא-נתונים בלבד:
post https://generativelanguage.googleapis.com/v1beta/{ragStoreName=ragStores/*}:uploadToRagStore

פרמטרים של נתיב

ragStoreName string

חובה. אי אפשר לשנות אותו. השם של RagStore שאליו רוצים להעלות את הקובץ. דוגמה: ragStores/my-rag-store-123 התבנית היא ragStores/{ragstore}.

גוף הבקשה

גוף הבקשה מכיל נתונים במבנה הבא:

Fields
displayName string

אופציונלי. השם המוצג של המסמך שנוצר.

customMetadata[] object (CustomMetadata)

מטא-נתונים בהתאמה אישית שרוצים לשייך לנתונים.

chunkingConfig object (ChunkingConfig)

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

mimeType string

אופציונלי. סוג ה-MIME של הנתונים. אם לא תציינו את השפה, המערכת תסיק אותה מהתוכן שהועלה.

גוף התשובה

זהו עותק של google.longrunning.Operation. אנחנו צריכים להעתיק אותו כי כדי ליצור אינטראקציה עם scotty, אנחנו צריכים להוסיף שדה ספציפי ל-scotty שלא ניתן להוסיף אותו ל-proto של הפעולה ברמה העליונה.

אם הפעולה בוצעה ללא שגיאות, גוף התגובה יכיל נתונים במבנה הבא:

Fields
name string

השם שהוקצה על ידי השרת, שהוא ייחודי רק בתוך אותו שירות שהחזיר אותו במקור. אם משתמשים במיפוי HTTP שמוגדר כברירת מחדל, name צריך להיות שם משאב שמסתיים ב-operations/{unique_id}.

metadata object

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

אובייקט שמכיל שדות מסוג שרירותי. שדה נוסף "@type" מכיל URI שמזהה את הסוג. דוגמה: { "id": 1234, "@type": "types.example.com/standard/id" }.

done boolean

אם הערך הוא false, המשמעות היא שהפעולה עדיין מתבצעת. אם הערך הוא true, הפעולה הושלמה ואפשר להשתמש בערך error או response.

result Union type
תוצאת הפעולה, שיכולה להיות error או response חוקי. אם done == false, אף אחד מהערכים error או response לא מוגדר. אם done == true, אפשר להגדיר בדיוק אחד מהערכים error או response. יכול להיות שחלק מהשירותים לא יספקו את התוצאה. הערך result יכול להיות רק אחד מהבאים:
error object (Status)

תוצאת השגיאה של הפעולה במקרה של כשל או ביטול.

response object

התגובה הרגילה והמוצלחת של הפעולה. אם השיטה המקורית לא מחזירה נתונים במקרה של הצלחה, כמו Delete, התגובה היא google.protobuf.Empty. אם השיטה המקורית היא סטנדרטית Get/Create/Update, התגובה צריכה להיות המשאב. בשיטות אחרות, התשובה צריכה להיות מהסוג XxxResponse, כאשר Xxx הוא שם השיטה המקורי. לדוגמה, אם שם השיטה המקורי הוא TakeSnapshot(), סוג התגובה שמוסק הוא TakeSnapshotResponse.

אובייקט שמכיל שדות מסוג שרירותי. שדה נוסף "@type" מכיל URI שמזהה את הסוג. דוגמה: { "id": 1234, "@type": "types.example.com/standard/id" }.

ייצוג ב-JSON
{
  "name": string,
  "metadata": {
    "@type": string,
    field1: ...,
    ...
  },
  "done": boolean,

  // result
  "error": {
    object (Status)
  },
  "response": {
    "@type": string,
    field1: ...,
    ...
  }
  // Union type
}

ChunkingConfig

פרמטרים שמגדירים לשירות איך לחלק את הקובץ לחלקים. מבוסס על google3/cloud/ai/platform/extension/lib/retrieval/config/chunker_config.proto

שדות
config Union type
הגדרת חלוקת הנתונים לחלקים שבה רוצים להשתמש. הערך config יכול להיות רק אחד מהבאים:
whiteSpaceConfig object (WhiteSpaceConfig)

הגדרת חלוקה לקטעים של רווחים לבנים.

ייצוג ב-JSON
{

  // config
  "whiteSpaceConfig": {
    object (WhiteSpaceConfig)
  }
  // Union type
}

WhiteSpaceConfig

הגדרה של אלגוריתם לחלוקה לקטעים של רווחים [מופרדים באמצעות רווחים].

Fields
maxTokensPerChunk integer

מספר האסימונים המקסימלי לכל נתח. האסימונים מוגדרים כמילים באלגוריתם הזה של חלוקה לחלקים. הערה: אנחנו מגדירים אסימונים כמילים שמפוצלות על ידי רווחים, ולא כפלט של רכיב להמרת טקסט לאסימונים. חלון ההקשר של מודל ה-embedding העדכני של Gemini נכון ל-2025-04-17 הוא 8,192 טוקנים. אנחנו מניחים שאורך מילה ממוצע הוא 5 תווים. לכן, הגדרנו את המגבלה העליונה ל-2**9, כלומר 512 מילים או 2, 560 טוקנים, בהנחה שבמקרה הגרוע ביותר יש תו אחד לכל טוקן. זו הערכה שמרנית שמטרתה למנוע הצפה של חלון ההקשר.

maxOverlapTokens integer

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

ייצוג ב-JSON
{
  "maxTokensPerChunk": integer,
  "maxOverlapTokens": integer
}

שיטה: files.get

הפונקציה מחזירה את המטא-נתונים של File שצוין.

נקודת קצה

get https://generativelanguage.googleapis.com/v1beta/{name=files/*}

פרמטרים של נתיב

name string

חובה. שם הFile שרוצים לאחזר. דוגמה: files/abc-123 התוצאה תהיה files/{file}.

גוף הבקשה

גוף הבקשה צריך להיות ריק.

דוגמה לבקשה

Python

from google import genai

client = genai.Client()
myfile = client.files.upload(file=media / "poem.txt")
file_name = myfile.name
print(file_name)  # "files/*"

myfile = client.files.get(name=file_name)
print(myfile)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const myfile = await ai.files.upload({
  file: path.join(media, "poem.txt"),
});
const fileName = myfile.name;
console.log(fileName);

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

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}
myfile, err := client.Files.UploadFromPath(
	ctx,
	filepath.Join(getMedia(), "poem.txt"), 
	&genai.UploadFileConfig{
		MIMEType: "text/plain",
	},
)
if err != nil {
	log.Fatal(err)
}
fileName := myfile.Name
fmt.Println(fileName)
file, err := client.Files.Get(ctx, fileName, nil)
if err != nil {
	log.Fatal(err)
}
fmt.Println(file)

קונכייה

name=$(jq ".file.name" file_info.json)
# Get the file of interest to check state
curl https://generativelanguage.googleapis.com/v1beta/files/$name > 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

גוף התשובה

אם הפעולה בוצעה ללא שגיאות, גוף התגובה יכיל מופע של File.

שיטה: files.list

מציג את המטא-נתונים של File שבבעלות הפרויקט ששולח את הבקשה.

נקודת קצה

get https://generativelanguage.googleapis.com/v1beta/files

פרמטרים של שאילתה

pageSize integer

אופציונלי. המספר המקסימלי של File שיוחזרו בכל דף. אם לא מציינים ערך, ברירת המחדל היא 10. הערך המקסימלי של pageSize הוא 100.

pageToken string

אופציונלי. טוקן של דף מקריאה קודמת של files.list.

גוף הבקשה

גוף הבקשה צריך להיות ריק.

דוגמה לבקשה

Python

from google import genai

client = genai.Client()
print("My files:")
for f in client.files.list():
    print("  ", f.name)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
console.log("My files:");
// Using the pager style to list files
const pager = await ai.files.list({ config: { pageSize: 10 } });
let page = pager.page;
const names = [];
while (true) {
  for (const f of page) {
    console.log("  ", f.name);
    names.push(f.name);
  }
  if (!pager.hasNextPage()) break;
  page = await pager.nextPage();
}

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}
fmt.Println("My files:")
page, err := client.Files.List(ctx, nil)
if err != nil {
	log.Fatal(err)
}
for _, f := range page.Items {
	fmt.Println("  ", f.Name)
}

קונכייה

echo "My files: "

curl "https://generativelanguage.googleapis.com/v1beta/files?key=$GEMINI_API_KEY"

גוף התשובה

תשובה לשאילתה files.list.

אם הפעולה בוצעה ללא שגיאות, גוף התגובה יכיל נתונים במבנה הבא:

Fields
files[] object (File)

רשימה של File.

nextPageToken string

טוקן שאפשר לשלוח כ-pageToken בקריאה הבאה ל-files.list.

ייצוג ב-JSON
{
  "files": [
    {
      object (File)
    }
  ],
  "nextPageToken": string
}

שיטה: files.delete

מחיקת File.

נקודת קצה

delete https://generativelanguage.googleapis.com/v1beta/{name=files/*}

פרמטרים של נתיב

name string

חובה. השם של File שרוצים למחוק. דוגמה: files/abc-123 התוצאה תהיה files/{file}.

גוף הבקשה

גוף הבקשה צריך להיות ריק.

דוגמה לבקשה

Python

from google import genai

client = genai.Client()
myfile = client.files.upload(file=media / "poem.txt")

client.files.delete(name=myfile.name)

try:
    result = client.models.generate_content(
        model="gemini-2.0-flash", contents=[myfile, "Describe this file."]
    )
    print(result)
except genai.errors.ClientError:
    pass

Node.js

// The Gen AI SDK for TypeScript and JavaScript is in preview.
// Some features have not been implemented.

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}
myfile, err := client.Files.UploadFromPath(
	ctx, 
	filepath.Join(getMedia(), "poem.txt"), 
	&genai.UploadFileConfig{
		MIMEType: "text/plain",
	},
)
if err != nil {
	log.Fatal(err)
}
// Delete the file.
_, err = client.Files.Delete(ctx, myfile.Name, nil)
if err != nil {
	log.Fatal(err)
}
// Attempt to use the deleted file.
parts := []*genai.Part{
	genai.NewPartFromURI(myfile.URI, myfile.MIMEType,),
	genai.NewPartFromText("Describe this file."),
}

contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

_, err = client.Models.GenerateContent(ctx, "gemini-2.0-flash", contents, nil)
// Expect an error when using a deleted file.
if err != nil {
	return nil
}
return fmt.Errorf("expected an error when using deleted file")

קונכייה

curl --request "DELETE" https://generativelanguage.googleapis.com/v1beta/files/$name?key=$GEMINI_API_KEY

גוף התשובה

אם הפעולה בוצעה ללא שגיאות, גוף התגובה הוא אובייקט JSON ריק.

משאב REST: ‏ files

משאב: קובץ

קובץ הועלה ל-API. המזהה הבא: 15

Fields
name string

אי אפשר לשנות אותו. מזהה. שם המשאב File. המזהה (השם ללא הקידומת files/) יכול להכיל עד 40 תווים שהם אלפאנומריים באותיות קטנות או מקפים (-). המזהה לא יכול להתחיל או להסתיים במקף. אם השם ריק בזמן היצירה, ייווצר שם ייחודי. לדוגמה: files/123-456

displayName string

אופציונלי. השם המוצג של File שקריא לבני אדם. אורך השם המוצג מוגבל ל-512 תווים, כולל רווחים. דוגמה: "תמונת פתיחה"

mimeType string

פלט בלבד. סוג ה-MIME של הקובץ.

sizeBytes string (int64 format)

פלט בלבד. גודל הקובץ בבייטים.

createTime string (Timestamp format)

פלט בלבד. חותמת הזמן של מועד יצירת File.

הפונקציה משתמשת ב-RFC 3339, והפלט שנוצר תמיד יהיה מנורמל ל-Z וישתמש ב-0, 3, 6 או 9 ספרות חלקיות. אפשר להשתמש גם בהיסטים אחרים חוץ מ-Z. דוגמאות: "2014-10-02T15:01:23Z", ‏ "2014-10-02T15:01:23.045123456Z" או "2014-10-02T15:01:23+05:30".

updateTime string (Timestamp format)

פלט בלבד. חותמת הזמן של העדכון האחרון של File.

הפונקציה משתמשת ב-RFC 3339, והפלט שנוצר תמיד יהיה מנורמל ל-Z וישתמש ב-0, 3, 6 או 9 ספרות חלקיות. אפשר להשתמש גם בהיסטים אחרים חוץ מ-Z. דוגמאות: "2014-10-02T15:01:23Z", ‏ "2014-10-02T15:01:23.045123456Z" או "2014-10-02T15:01:23+05:30".

expirationTime string (Timestamp format)

פלט בלבד. חותמת הזמן שבה File יימחק. ההגדרה הזו מוגדרת רק אם תוקף ה-File אמור לפוג.

הפונקציה משתמשת ב-RFC 3339, והפלט שנוצר תמיד יהיה מנורמל ל-Z וישתמש ב-0, 3, 6 או 9 ספרות חלקיות. אפשר להשתמש גם בהיסטים אחרים חוץ מ-Z. דוגמאות: "2014-10-02T15:01:23Z", ‏ "2014-10-02T15:01:23.045123456Z" או "2014-10-02T15:01:23+05:30".

sha256Hash string (bytes format)

פלט בלבד. גיבוב SHA-256 של הבייטים שהועלו.

מחרוזת בקידוד Base64.

uri string

פלט בלבד. ה-URI של File.

downloadUri string

פלט בלבד. ‫URI של ההורדה של File.

state enum (State)

פלט בלבד. סטטוס העיבוד של הקובץ.

source enum (Source)

מקור הקובץ.

error object (Status)

פלט בלבד. סטטוס השגיאה אם עיבוד הקובץ נכשל.

metadata Union type
מטא-נתונים של הקובץ. הערך metadata יכול להיות רק אחד מהבאים:
videoMetadata object (VideoFileMetadata)

פלט בלבד. מטא-נתונים של סרטון.

ייצוג ב-JSON
{
  "name": string,
  "displayName": string,
  "mimeType": string,
  "sizeBytes": string,
  "createTime": string,
  "updateTime": string,
  "expirationTime": string,
  "sha256Hash": string,
  "uri": string,
  "downloadUri": string,
  "state": enum (State),
  "source": enum (Source),
  "error": {
    object (Status)
  },

  // metadata
  "videoMetadata": {
    object (VideoFileMetadata)
  }
  // Union type
}

VideoFileMetadata

מטא-נתונים של סרטון File.

Fields
videoDuration string (Duration format)

משך הסרטון.

משך זמן בשניות עם עד תשע ספרות אחרי הנקודה העשרונית, שמסתיים ב-'s'. דוגמה: "3.5s".

ייצוג ב-JSON
{
  "videoDuration": string
}

מדינה

מצבים של מחזור החיים של קובץ.

טיפוסים בני מנייה (enum)
STATE_UNSPECIFIED ערך ברירת המחדל. הערך הזה משמש אם לא מציינים את המצב.
PROCESSING הקובץ נמצא בתהליך עיבוד ועדיין אי אפשר להשתמש בו להסקת מסקנות.
ACTIVE הקובץ עובר עיבוד וזמין להסקת מסקנות.
FAILED עיבוד הקובץ נכשל.

מקור

טיפוסים בני מנייה (enum)
SOURCE_UNSPECIFIED המאפיין הזה משמש אם לא צוין מקור.
UPLOADED מציין שהקובץ הועלה על ידי המשתמש.
GENERATED מציין שהקובץ נוצר על ידי Google.
REGISTERED מציין שהקובץ רשום, כלומר קובץ Google Cloud Storage.

סטטוס

הסוג Status מגדיר מודל שגיאות לוגי שמתאים לסביבות תכנות שונות, כולל ממשקי API ל-REST ול-RPC. היא משמשת את gRPC. כל הודעת Status מכילה שלושה חלקי נתונים: קוד שגיאה, הודעת שגיאה ופרטי שגיאה.

מידע נוסף על מודל השגיאות הזה ועל אופן השימוש בו זמין ב-API Design Guide.

Fields
code integer

קוד הסטטוס, שצריך להיות ערך enum של google.rpc.Code.

message string

הודעת שגיאה שמוצגת למפתח, שצריכה להיות באנגלית. כל הודעת שגיאה שמוצגת למשתמש צריכה להיות מותאמת לשפה המקומית ולהישלח בשדה google.rpc.Status.details, או להיות מותאמת לשפה המקומית על ידי הלקוח.

details[] object

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

אובייקט שמכיל שדות מסוג שרירותי. שדה נוסף "@type" מכיל URI שמזהה את הסוג. דוגמה: { "id": 1234, "@type": "types.example.com/standard/id" }.

ייצוג ב-JSON
{
  "code": integer,
  "message": string,
  "details": [
    {
      "@type": string,
      field1: ...,
      ...
    }
  ]
}