نظرة عامة على Gemini API

تتيح لك واجهة Gemini API الوصول إلى أحدث النماذج التوليدية من Google. بعد التعرّف على الميزات العامة المتاحة لك من خلال واجهة برمجة التطبيقات، جرِّب برنامجًا تعليميًا بلغتك لبدء تطويره.

النماذج

Gemini هو سلسلة من نماذج الذكاء الاصطناعي التوليدي المتعددة الوسائط التي طوّرتها Google. يمكن لنماذج Gemini قبول النصوص والصور في الطلبات، وذلك بناءً على صيغة النموذج التي يتم اختيارها والردود النصية التي يتم عرضها.

للحصول على معلومات أكثر تفصيلاً عن النموذج، يُرجى الانتقال إلى صفحة نماذج Gemini. يمكنك أيضًا استخدام طريقة list_models لسرد جميع النماذج المتاحة ثم استخدام الطريقة get_model للحصول على البيانات الوصفية لنموذج معيّن.

عرض البيانات والتصميم

تقبل نماذج Gemini معيّنة إدخال البيانات النصية وملفات الوسائط. تخلق هذه القدرة العديد من الاحتمالات الإضافية لإنشاء المحتوى وتحليل البيانات وحل المشكلات. هناك بعض القيود والمتطلبات التي يجب مراعاتها، بما في ذلك الحد العام للرمز المميز للإدخال للنموذج الذي تستخدمه. لمزيد من المعلومات حول حدود الرموز المميّزة لنماذج معيّنة، يُرجى الاطّلاع على نماذج Gemini.

يجب ألا يتجاوز حجم الطلبات التي تستخدم Gemini API 20 ميغابايت. توفّر واجهة Gemini API واجهة File API لتخزين ملفات الوسائط بشكل مؤقّت لاستخدامها في إرسال الطلبات، ما يتيح لك تقديم بيانات طلب تتجاوز الحد الأقصى المسموح به وهو 20 ميغابايت. لمزيد من المعلومات عن استخدام واجهة Files API وتنسيقات الملفات المتوافقة مع الطلبات، يمكنك الاطّلاع على تقديم الطلبات باستخدام ملفات الوسائط.

تصميم المطالبة وإدخال النص

يعد إنشاء المطالبات الفعالة أو هندسة الطلبات مزيجًا من الفن والعلوم. يمكنك الاطّلاع على مقدمة حول إعداد الطلبات للحصول على إرشادات حول كيفية التعامل مع الطلبات ودليل الطلب 101 للتعرّف على الأساليب المختلفة لتقديم الطلبات.

إنشاء محتوى

تتيح لك واجهة برمجة التطبيقات Gemini API استخدام بيانات النصوص والصور لإرسال الطلبات، وذلك بناءً على شكل النموذج الذي تستخدمه. على سبيل المثال، يمكنك إنشاء نص من طلبات نصيّة فقط أو طلبات متعدّدة الوسائط باستخدام نموذج Gemini 1.5. يقدم هذا القسم أمثلة تعليمية أساسية لكل منها. يُرجى الرجوع إلى مرجع واجهة برمجة التطبيقات generateContent للاطّلاع على مثال أكثر تفصيلاً يتناول جميع المَعلمات.

إدخال النصوص والصور

يمكنك إرسال طلب نصي يحتوي على صورة إلى نموذج Gemini 1.5 لتنفيذ مهمة متعلّقة بالرؤية. على سبيل المثال، إضافة ترجمة وشرح إلى صورة أو التعرّف على محتواها

توضّح أمثلة الرموز التالية تنفيذًا أساسيًا لمطالبة نصية وصورة لكل لغة متاحة:

Python

model = genai.GenerativeModel('gemini-1.5-flash')

cookie_picture = {
    'mime_type': 'image/png',
    'data': pathlib.Path('cookie.png').read_bytes()
}
prompt = "Do these look store-bought or homemade?"

response = model.generate_content(
    model="gemini-1.5-flash",
    content=[prompt, cookie_picture]
)
print(response.text)

راجع البرنامج التعليمي للغة Python للاطلاع على مقتطف الرمز الكامل.

البدء

vmodel := client.GenerativeModel("gemini-1.5-flash")

data, err := os.ReadFile(filepath.Join("path-to-image", imageFile))
if err != nil {
  log.Fatal(err)
}
resp, err := vmodel.GenerateContent(ctx, genai.Text("Do these look store-bought or homemade?"), genai.ImageData("jpeg", data))
if err != nil {
  log.Fatal(err)
}

للاطّلاع على مثال كامل، يُرجى الاطّلاع على الدليل التوجيهي حول Goggle.

Node.js

const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

const prompt = "Do these look store-bought or homemade?";
const image = {
  inlineData: {
    data: Buffer.from(fs.readFileSync("cookie.png")).toString("base64"),
    mimeType: "image/png",
  },
};

const result = await model.generateContent([prompt, image]);
console.log(result.response.text());

يمكنك الاطّلاع على البرنامج التعليمي Node.js للحصول على مثال كامل.

الويب

const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

const prompt = "Do these look store-bought or homemade?";
const image = {
  inlineData: {
    data: base64EncodedImage /* see JavaScript quickstart for details */,
    mimeType: "image/png",
  },
};

const result = await model.generateContent([prompt, image]);
console.log(result.response.text());

راجِع الدليل التعليمي على الويب للاطّلاع على مثال كامل.

لعبة رمي السهام (Flutter)

final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
final prompt = 'Do these look store-bought or homemade?';
final imageBytes = await File('cookie.png').readAsBytes();
final content = [
  Content.multi([
    TextPart(prompt),
    DataPart('image/png', imageBytes),
  ])
];

final response = await model.generateContent(content);
print(response.text);

للاطّلاع على مثال كامل، يُرجى الاطّلاع على الدليل التوجيهي حول لغة Dart (Flutter).

Swift

let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: "API_KEY")
let cookieImage = UIImage(...)
let prompt = "Do these look store-bought or homemade?"

let response = try await model.generateContent(prompt, cookieImage)

راجع برنامج Swift التعليمي للحصول على مثال كامل.

Android

val generativeModel = GenerativeModel(
    modelName = "gemini-1.5-flash",
    apiKey = BuildConfig.apiKey
)

val cookieImage: Bitmap = // ...
val inputContent = content() {
  image(cookieImage)
  text("Do these look store-bought or homemade?")
}

val response = generativeModel.generateContent(inputContent)
print(response.text)

يُرجى الاطّلاع على البرنامج التعليمي حول Android للحصول على مثال كامل.

cURL

curl https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key=${API_KEY} \
    -H 'Content-Type: application/json' \
    -X POST \
    -d @<(echo'{
          "contents":[
            { "parts":[
                {"text": "Do these look store-bought or homemade?"},
                { "inlineData": {
                    "mimeType": "image/png",
                    "data": "'$(base64 -w0 cookie.png)'"
                  }
                }
              ]
            }
          ]
         }')

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

إدخال النص فقط

يمكن لواجهة Gemini API أيضًا معالجة عمليات الإدخال النصي فقط. تتيح لك هذه الميزة تنفيذ مهام معالجة اللغة الطبيعية (NLP) مثل إكمال النص وتلخيصه.

توضّح أمثلة الرموز التالية تنفيذًا أساسيًا لطلب نصّي فقط لكل لغة متاحة:

Python

model = genai.GenerativeModel('gemini-1.5-flash')

prompt = "Write a story about a magic backpack."

response = model.generate_content(prompt)

اطّلع على البرنامج التعليمي حول Python للحصول على المثال الكامل.

البدء

ctx := context.Background()
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()

model := client.GenerativeModel("gemini-1.5-flash")
resp, err := model.GenerateContent(ctx, genai.Text("Write a story about a magic backpack."))
if err != nil {
  log.Fatal(err)
}

للاطّلاع على مثال كامل، يُرجى الاطّلاع على الدليل التوجيهي حول Goggle.

Node.js

const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = "Write a story about a magic backpack.";

const result = await model.generateContent(prompt);
console.log(result.response.text());

يمكنك الاطّلاع على البرنامج التعليمي Node.js للحصول على مثال كامل.

الويب

const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = "Write a story about a magic backpack.";

const result = await model.generateContent(prompt);
console.log(result.response.text());

راجِع الدليل التعليمي على الويب للاطّلاع على مثال كامل.

لعبة رمي السهام (Flutter)

final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
final prompt = 'Write a story about a magic backpack.';
final content = [Content.text(prompt)];
final response = await model.generateContent(content);
print(response.text);

للاطّلاع على مثال كامل، يُرجى الاطّلاع على الدليل التوجيهي حول لغة Dart (Flutter).

Swift

let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: "API_KEY")
let prompt = "Write a story about a magic backpack."

let response = try await model.generateContent(prompt)

راجع برنامج Swift التعليمي للحصول على مثال كامل.

Android

val generativeModel = GenerativeModel(
    modelName = "gemini-1.5-flash",
    apiKey = BuildConfig.apiKey
)

val prompt = "Write a story about a magic backpack."
val response = generativeModel.generateContent(prompt)
print(response.text)

يُرجى الاطّلاع على البرنامج التعليمي حول Android للحصول على مثال كامل.

cURL

curl https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key=$API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{ "contents":[
      { "parts":[{"text": "Write a story about a magic backpack"}]}
    ]
}'

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

المحادثات المتعددة الأدوار (الدردشة)

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

توضح أمثلة التعليمات البرمجية التالية التنفيذ الأساسي لتفاعل الدردشة لكل لغة مدعومة:

Python

  model = genai.GenerativeModel('gemini-1.5-flash')
  chat = model.start_chat(history=[])

  response = chat.send_message(
      "Pretend you\'re a snowman and stay in character for each response.")
  print(response.text)

  response = chat.send_message(
      "What\'s your favorite season of the year?")
  print(response.text)

للحصول على مثال كامل، يمكنك الاطّلاع على العرض التوضيحي الخاص بالمحادثة في البرنامج التعليمي حول Python.

البدء

model := client.GenerativeModel("gemini-1.5-flash")
cs := model.StartChat()
cs.History = []*genai.Content{
  &genai.Content{
    Parts: []genai.Part{
      genai.Text("Pretend you're a snowman and stay in character for each response."),
    },
    Role: "user",
  },
  &genai.Content{
    Parts: []genai.Part{
      genai.Text("Hello! It's cold! Isn't that great?"),
    },
    Role: "model",
  },
}

resp, err := cs.SendMessage(ctx, genai.Text("What's your favorite season of the year?"))
if err != nil {
  log.Fatal(err)
}

للحصول على مثال كامل، يمكنك الاطّلاع على العرض التوضيحي الخاص بالمحادثة في البرنامج التعليمي Go.

Node.js

const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});

const chat = model.startChat({
  history: [
    {
      role: "user",
      parts: "Pretend you're a snowman and stay in character for each response.",
    },
    {
      role: "model",
      parts: "Hello! It's cold! Isn't that great?",
    },
  ],
  generationConfig: {
    maxOutputTokens: 100,
  },
});

const msg = "What's your favorite season of the year?";
const result = await chat.sendMessage(msg);
console.log(result.response.text());

للحصول على مثال كامل، يمكنك الاطّلاع على العرض التوضيحي الخاص بالمحادثة في البرنامج التعليمي Node.js.

الويب

const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash"});

const chat = model.startChat({
  history: [
    {
      role: "user",
      parts: "Pretend you're a snowman and stay in character for each response.",
    },
    {
      role: "model",
      parts: "Hello! It's so cold! Isn't that great?",
    },
  ],
  generationConfig: {
    maxOutputTokens: 100,
  },
});

const msg = "What's your favorite season of the year?";
const result = await chat.sendMessage(msg);
console.log(result.response.text());

للحصول على مثال كامل، يُرجى الاطّلاع على العرض التوضيحي الخاص بالمحادثة في البرنامج التعليمي على الويب.

لعبة رمي السهام (Flutter)

final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
final chat = model.startChat(history: [
  Content.text(
      "Pretend you're a snowman and stay in character for each response."),
  Content.model([TextPart("Hello! It's cold! Isn't that great?")]),
]);
final content = Content.text("What's your favorite season of the year?");
final response = await chat.sendMessage(content);
print(response.text);

للحصول على مثال كامل، يمكنك الاطّلاع على العرض التوضيحي الخاص بالمحادثة في البرنامج التعليميDart (Flutter).

Swift

let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: "API_KEY")
let chat = model.startChat()

var message = "Pretend you're a snowman and stay in character for each response."
var response = try await chat.sendMessage(message)

message = "What\'s your favorite season of the year?"
response = try await chat.sendMessage(message)

للحصول على مثال كامل، يمكنك الاطّلاع على العرض التوضيحي الخاص بالمحادثة في برنامج Swift التعليمي.

Android

val generativeModel = GenerativeModel(
    modelName = "gemini-1.5-flash",
    apiKey = BuildConfig.apiKey
)

val chat = generativeModel.startChat()
val response = chat.sendMessage("Pretend you're a snowman and stay in
        character for each response.")
print(response.text)

يُرجى الاطّلاع على البرنامج التعليمي حول Android للحصول على مثال كامل.

cURL

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [
        {"role":"user",
         "parts":[{
           "text": "Pretend you're a snowman and stay in character for each
        {"role": "model",
            response."}]},
         "parts":[{
           "text": "Hello! It's so cold! Isn't that great?"}]},
        {"role": "user",
         "parts":[{
           "text": "What\'s your favorite season of the year?"}]},
       ]
    }' 2> /dev/null | grep "text"
# response example:
"text": "Winter, of course!"

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

عرض الردود تدريجيًا

توفّر واجهة Gemini API طريقة إضافية لتلقّي الردود من خلال نماذج الذكاء الاصطناعي التوليدي، كمصدر بيانات. ترسل الاستجابة المتدفقة أجزاءً متزايدة من البيانات إلى تطبيقك حيث يتم إنشاؤها بواسطة النموذج. تتيح لك هذه الميزة الاستجابة بسرعة لطلب المستخدم لإظهار التقدم وإنشاء تجربة أكثر تفاعلاً.

الردود التي يتم بثها مباشرةً هي خيار للطلبات الحرة والمحادثات مع نماذج Gemini. توضّح أمثلة الرموز التالية كيفية طلب ردّ مباشر لطلب لكل لغة متاحة:

Python

prompt = "Write a story about a magic backpack."

response = genai.stream_generate_content(
    model="models/gemini-1.5-flash",
    prompt=prompt
)

راجع البرنامج التعليمي للغة Python للاطلاع على مقتطف الرمز الكامل.

البدء

ctx := context.Background()
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()

model := client.GenerativeModel("gemini-1.5-flash")

iter := model.GenerateContentStream(ctx, genai.Text("Write a story about a magic backpack."))
for {
  resp, err := iter.Next()
  if err == iterator.Done {
    break
  }
  if err != nil {
    log.Fatal(err)
  }

  // print resp
}

للاطّلاع على مثال كامل، يُرجى الاطّلاع على الدليل التوجيهي حول Goggle.

Node.js

const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = "Write a story about a magic backpack.";

const result = await model.generateContentStream([prompt]);
// print text as it comes in
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  console.log(chunkText);
}

يمكنك الاطّلاع على البرنامج التعليمي Node.js للحصول على مثال كامل.

الويب

const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = "Write a story about a magic backpack.";

const result = await model.generateContentStream([prompt]);
// print text as it comes in
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  console.log(chunkText);
}

راجِع الدليل التعليمي على الويب للاطّلاع على مثال كامل.

لعبة رمي السهام (Flutter)

final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
final prompt = 'Write a story about a magic backpack.';
final content = [Content.text(prompt)];
final response = model.generateContentStream(content);
await for (final chunk in response) {
  print(chunk.text);
}

للاطّلاع على مثال كامل، يُرجى الاطّلاع على الدليل التوجيهي حول لغة Dart (Flutter).

Swift

let model = GenerativeModel(name: "gemini-1.5-flash", apiKey: "API_KEY")
let prompt = "Write a story about a magic backpack."

let stream = model.generateContentStream(prompt)
for try await chunk in stream {
  print(chunk.text ?? "No content")
}

راجع برنامج Swift التعليمي للحصول على مثال كامل.

Android

val generativeModel = GenerativeModel(
    modelName = "gemini-1.5-flash",
    apiKey = BuildConfig.apiKey
)

val inputContent = content {
  text("Write a story about a magic backpack.")
}

var fullResponse = ""
generativeModel.generateContentStream(inputContent).collect { chunk ->
  print(chunk.text)
  fullResponse += chunk.text
}

يُرجى الاطّلاع على البرنامج التعليمي حول Android للحصول على مثال كامل.

cURL

curl https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:streamGenerateContent?key=${API_KEY} \
    -H 'Content-Type: application/json' \
    --no-buffer \
    -d '{ "contents":[
            {"role": "user",
              "parts":[{"text": "Write a story about a magic backpack."}]
            }
          ]
        }' > response.json

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

استجابات تنسيق JSON

استنادًا إلى تطبيقك، قد تحتاج إلى عرض الرد على الطلب بتنسيق بيانات منظَّمة، لا سيما إذا كنت تستخدم الردود لملء واجهات البرمجة. توفّر واجهة برمجة التطبيقات Gemini API مَعلمة إعداد لطلب ردّ بتنسيق JSON.

يمكنك الحصول على ملف JSON لإخراج النموذج من خلال ضبط خيار ضبط response_mime_type على application/json وفي رسالة الطلب، وصف تنسيق JSON الذي تريده للاستجابة:

Python

model = genai.GenerativeModel('gemini-1.5-flash',
                              generation_config={"response_mime_type": "application/json"})

prompt = """
  List 5 popular cookie recipes.

  Using this JSON schema:

    Recipe = {"recipe_name": str}

  Return a `list[Recipe]`
  """

response = model.generate_content(prompt)
print(response.text)

cURL

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [
        {
          "parts": [
            {
              "text": "\nList 5 popular cookie recipes.\n\nUsing this JSON schema:\n\n  Recipe = {\"recipe_name\": str}\n\nReturn a `list[Recipe]`\n      "
            }
          ]
        }
      ]
      "generationConfig": {
            "response_mime_type": "application/json",
      }
    }'

علمًا أنّ نماذج Gemini 1.5 Flash تقبل فقط وصفًا نصيًا لمخطط JSON الذي تريد عرضه، تتيح لك نماذج Gemini 1.5 Pro تمرير أحد عناصر المخطط (أو أي نوع مكافئ من Python)، وستتّبع نتائج النموذج هذا المخطط تمامًا. يُعرف هذا أيضًا باسم الإنشاء الخاضع للرقابة أو فك الترميز المقيّد.

على سبيل المثال، للحصول على قائمة بكائنات Recipe، مرِّر list[Recipe] إلى الحقل response_schema في الوسيطة generation_config:

Python

import typing_extensions as typing

class Recipe(typing.TypedDict):
  recipe_name: str

model = genai.GenerativeModel(model_name="models/gemini-1.5-pro")

result = model.generate_content(
  "List 5 popular cookie recipes",
  generation_config=genai.GenerationConfig(response_mime_type="application/json",
                                           response_schema = list[Recipe]))

print(result.text)

cURL

  curl https://generativelanguage.googleapis.com/v1beta/models/models/gemini-1.5-pro:generateContent?
      -H 'Content-Type: application/json'
      -X POST \
      -d '{
        "contents": [
          {
            "parts": [
              {
                "text": "List 5 popular cookie recipes"
              }
            ]
          }
        ],
        "generationConfig": {
          "responseMimeType": "application/json",
          "responseSchema": {
            "type": "ARRAY",
            "items": {
              "type": "OBJECT",
              "properties": {
                "recipe_name": {
                  "type": "STRING"
                }
              }
            }
          }
        }
      }'
  ```

لمزيد من المعلومات، راجِع البدء السريع لوضع JSON في دليل الطبخ في Gemini API.

التضمينات

تعمل خدمة التضمين في Gemini API على إنشاء تضمينات حديثة للكلمات والعبارات والجمل. ويمكن بعد ذلك استخدام التضمينات الناتجة في مهام معالجة اللغات الطبيعية مثل البحث الدلالي وتصنيف النص والتجميع العنقودي، إلى جانب العديد من المهام الأخرى. اطّلِع على دليل التضمين لمعرفة معنى التضمينات وبعض حالات الاستخدام الرئيسية لخدمة التضمين لمساعدتك في البدء.

الخطوات التالية