Using files

تتيح Gemini API تحميل ملفات الوسائط بشكل منفصل عن إدخال الطلب، ما يسمح بإعادة استخدام الوسائط في طلبات متعددة وطلبات مختلفة. لمزيد من التفاصيل، يمكنك الاطّلاع على دليل تقديم الطلبات باستخدام الوسائط.

الطريقة: media.upload

تحميل البيانات إلى ragStore، ومعالجتها مسبقًا وتقسيمها إلى أجزاء قبل تخزينها في مستند RagStore

نقطة نهاية

  • عنوان URI للتحميل، لطلبات تحميل الوسائط:
post https://generativelanguage.googleapis.com/upload/v1beta/{ragStoreName=ragStores/*}:uploadToRagStore
  • معرّف الموارد المنتظم للبيانات الوصفية، للطلبات التي تتضمّن البيانات الوصفية فقط:
post https://generativelanguage.googleapis.com/v1beta/{ragStoreName=ragStores/*}:uploadToRagStore

مَعلمات المسار

ragStoreName string

الحقل مطلوب. غير قابل للتغيير اسم RagStore الذي سيتم تحميل الملف إليه. مثال: ragStores/my-rag-store-123 ويكون بالتنسيق التالي: ragStores/{ragstore}.

نص الطلب

يتضمن نص الطلب بيانات بالبنية التالية:

الحقول
displayName string

اختيارية: الاسم المعروض للمستند الذي تم إنشاؤه

customMetadata[] object (CustomMetadata)

بيانات التعريف المخصّصة التي سيتم ربطها بالبيانات

chunkingConfig object (ChunkingConfig)

اختيارية: إعدادات لتحديد كيفية تقسيم البيانات إلى أجزاء. في حال عدم توفيرها، ستستخدم الخدمة المَعلمات التلقائية.

mimeType string

اختيارية: نوع MIME للبيانات في حال عدم توفيرها، سيتم استنتاجها من المحتوى الذي تم تحميله.

نص الاستجابة

هذه نسخة من google.longrunning.Operation. علينا نسخها لأنّه للتفاعل مع Scotty، يجب إضافة حقل خاص بـ Scotty لا يمكن إضافته في Operation proto ذي المستوى الأعلى.

إذا كانت الاستجابة ناجحة، سيحتوي نص الاستجابة على بيانات بالبنية التالية:

الحقول
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

إعدادات خوارزمية تقسيم إلى أجزاء حسب المساحة البيضاء [مفصولة بمساحة بيضاء]

الحقول
maxTokensPerChunk integer

الحد الأقصى لعدد الرموز المميزة لكل جزء يتم تعريف الرموز المميزة على أنّها كلمات لهذه الخوارزمية. ملاحظة: نحن نعرّف الرموز المميزة بأنّها كلمات مفصولة بمسافة بيضاء، وليس كناتج لأداة تقسيم الرموز المميزة. تبلغ حاليًا قدرة الاستيعاب لأحدث نموذج تضمين من Gemini اعتبارًا من 17 أبريل 2025، ‏8,192 رمزًا مميزًا. نفترض أنّ متوسط عدد الأحرف في الكلمة هو 5 أحرف. لذلك، وضعنا الحدّ الأعلى عند 2**9، أي 512 كلمة أو 2560 رمزًا مميزًا، بافتراض أسوأ حالة وهي حرف واحد لكل رمز مميز. هذا تقدير متحفّظ يهدف إلى منع تجاوز قدرة الاستيعاب.

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

إذا كانت الاستجابة ناجحة، سيحتوي نص الاستجابة على بيانات بالبنية التالية:

الحقول
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: ملفات

المورد: ملف

ملف تم تحميله إلى واجهة برمجة التطبيقات المعرّف التالي: 15

الحقول
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

الحقول
videoDuration string (Duration format)

تمثّل هذه السمة مدة الفيديو.

مدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ "s". مثال: "3.5s"

تمثيل JSON
{
  "videoDuration": string
}

ولاية

حالات دورة حياة الملف

عمليات التعداد
STATE_UNSPECIFIED القيمة التلقائية يتم استخدام هذه القيمة في حال عدم تحديد الولاية.
PROCESSING تتم معالجة الملف ولا يمكن استخدامه للاستدلال بعد.
ACTIVE تتم معالجة الملف ويكون متاحًا للاستنتاج.
FAILED تعذّرت معالجة الملف.

المصدر

عمليات التعداد
SOURCE_UNSPECIFIED يتم استخدامها في حال عدم تحديد المصدر.
UPLOADED تشير إلى أنّ المستخدم حمّل الملف.
GENERATED يشير إلى أنّ الملف من إنشاء Google.
REGISTERED يشير إلى أنّ الملف مسجّل، أي أنّه ملف Google Cloud Storage.

الحالة

يحدّد نوع Status نموذجًا منطقيًا للتعامل مع الأخطاء، يناسب بيئات البرمجة المختلفة مثل REST API وRPC API. يتم استخدامه من خلال gRPC. تتكون رسالة Status من ثلاثة أجزاء من البيانات، هي رمز الخطأ ورسالته وتفاصيله.

يمكنك التعرّف على المزيد حول نموذج الخطأ هذا وكيفية التعامل معه في دليل تصميم واجهة برمجة التطبيقات.

الحقول
code integer

هو رمز الحالة، ويجب أن يكون قيمة محدّدة مسبقًا من google.rpc.Code.

message string

يشير إلى رسالة خطأ موجّهة للمطوّرين، ويجب أن تكون الرسالة بالإنجليزية. أما رسائل الخطأ الموجّهة للمستخدمين، فيجب ترجمتها وإرسالها في حقل google.rpc.Status.details أو ترجمتها من قِبل العميل.

details[] object

يشير إلى قائمة بالرسائل التي تتضمّن تفاصيل الخطأ. تتوفّر مجموعة شائعة من أنواع الرسائل التي يمكن لواجهات برمجة التطبيقات استخدامها.

هو كائن يحتوي على حقول من أي نوع، بالإضافة إلى حقل "@type" الذي يتضمّن معرف موارد منتظم (URI) يحدّد نوع الكائن، مثل { "id": 1234, "@type": "types.example.com/standard/id" }.

تمثيل JSON
{
  "code": integer,
  "message": string,
  "details": [
    {
      "@type": string,
      field1: ...,
      ...
    }
  ]
}