סקירה כללית על Gemini API

בעזרת Gemini API אפשר להשתמש במודלים הגנרטיביים העדכניים ביותר של Google. אחרי שתכירו את התכונות הכלליות שזמינות לכם דרך ה-API, תוכלו להתחיל לפתח מדריך לפי השפה שבחרתם.

דגמים

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

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

נתונים ועיצוב של הנחיות

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

גודל של הנחיות שמשתמשות ב-Gemini API לא יכול לחרוג מ-20MB. Gemini API מספק File API לאחסון זמני של קובצי מדיה ליצירת הנחיות, שמאפשר לספק נתוני הנחיות מעבר למגבלה של 20MB. למידע נוסף על השימוש ב-Files API ובפורמטים של קבצים שנתמכים ליצירת הנחיות, ראו הצגת הנחיות עם קובצי מדיה.

עיצוב הנחיות וקלט טקסט

כדי ליצור הנחיות יעילות, או הנדסת הנחיות, הן שילוב של אומנות ומדע. במבוא להנחיות מוסבר איך לגשת להנחיות, ובמדריך הנחיה 101 מוסבר על גישות שונות של הנחיות.

יצירת תוכן

בעזרת Gemini API אפשר להשתמש גם בנתונים של טקסט וגם בנתונים של תמונה כדי ליצור הנחיות, בהתאם לווריאציית המודל שבה משתמשים. לדוגמה, בעזרת המודל Gemini 1.5 אפשר ליצור טקסט מהנחיות טקסט בלבד או מהנחיות מרובות מצבים. בקטע הזה מוצגות דוגמאות בסיסיות לקוד של כל אחת מהן. דוגמה מפורטת יותר לגבי כל הפרמטרים אפשר למצוא בחומר העזר בנושא API 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.

Go

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)
}

דוגמה מלאה זמינה במדריך Go.

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)'"
                  }
                }
              ]
            }
          ]
         }')

לפרטים נוספים, ראו מדריך בנושא API ל-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.

Go

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)
}

דוגמה מלאה זמינה במדריך Go.

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"}]}
    ]
}'

לפרטים נוספים, ראו מדריך בנושא API ל-REST.

שיחות עם מספר פניות (צ'אט)

אפשר להשתמש ב-Gemini API כדי ליצור חוויות צ'אט אינטראקטיביות למשתמשים. תכונת הצ'אט ב-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)

לדוגמה המלאה, ראו את ההדגמה של Chat במדריך Python.

Go

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)
}

לדוגמה המלאה, תוכלו לראות את ההדגמה המלאה של Chat במדריך של 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!"

לפרטים נוספים, ראו מדריך בנושא API ל-REST.

תשובות בסטרימינג

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

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

Python

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

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

כדי לראות את קטע הקוד המלא, עיינו במדריך Python.

Go

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
}

דוגמה מלאה זמינה במדריך Go.

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

לפרטים נוספים, ראו מדריך בנושא API ל-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 יוצר הטמעות מתקדמות למילים, לביטויים ולמשפטים. לאחר מכן אפשר להשתמש בהטמעות שנוצרות למשימות של NLP כמו חיפוש סמנטי, סיווג טקסטים וקיבוץ לאשכולות, ועוד. במדריך ההטמעה מוסבר מהן הטמעות, וכמה תרחישי שימוש מרכזיים בשירות ההטמעה, שיעזרו לכם להתחיל.

השלבים הבאים