ביצוע קוד

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

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

סביבת ביצוע הקוד כוללת את הספריות הבאות: altair, chess, cv2, matplotlib, mpmath, numpy, pandas, pdfminer, reportlab, seaborn, sklearn, statsmodels, striprtf, sympy ו-tabulate. אי אפשר להתקין ספריות משלכם.

תחילת העבודה עם ביצוע קוד

יש גם מחברת לניהול הרצת הקוד:

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

הפעלת ביצוע קוד במודל

אפשר להפעיל את ביצוע הקוד במודל, כפי שמתואר כאן:

from google import genai
from google.genai import types

client = genai.Client(api_key="GEMINI_API_KEY")

response = client.models.generate_content(
  model='gemini-2.0-flash',
  contents='What is the sum of the first 50 prime numbers? '
           'Generate and run code for the calculation, and make sure you get all 50.',
  config=types.GenerateContentConfig(
    tools=[types.Tool(
      code_execution=types.ToolCodeExecution
    )]
  )
)

אפשר להציג את כל התוכן בפורמט Markdown באמצעות פונקציית העזרה הבאה:

def display_code_execution_result(response):
  for part in response.candidates[0].content.parts:
    if part.text is not None:
      display(Markdown(part.text))
    if part.executable_code is not None:
      code_html = f'<pre style="background-color: #BBBBEE;">{part.executable_code.code}</pre>' # Change code color
      display(HTML(code_html))
    if part.code_execution_result is not None:
      display(Markdown(part.code_execution_result.output))
    if part.inline_data is not None:
      display(Image(data=part.inline_data.data, format="png"))
    display(Markdown("---"))

display_code_execution_result(response)

הפלט עשוי להיראות כך:

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

```python
def is_prime(n):
  """Checks if a number is prime."""
  if n <= 1:
    return False
  for i in range(2, int(n**0.5) + 1):
    if n % i == 0:
      return False
  return True

def sum_of_primes(n):
  """Calculates the sum of the first n prime numbers."""
  primes = []
  i = 2
  while len(primes) < n:
    if is_prime(i):
      primes.append(i)
    i += 1
  return sum(primes)

# Calculate the sum of the first 50 prime numbers
sum_of_first_50_primes = sum_of_primes(50)

print(f"The sum of the first 50 prime numbers is: {sum_of_first_50_primes}")
```

**Output:**

```
The sum of the first 50 prime numbers is: 5117
```

איך משתמשים בהרצת קוד בצ'אט

אפשר גם להריץ קוד במהלך צ'אט.

from google import genai
from google.genai import types

client = genai.Client(api_key="GEMINI_API_KEY")

chat = client.chats.create(
    model='gemini-2.0-flash',
    config=types.GenerateContentConfig(
      tools=[types.Tool(
        code_execution=types.ToolCodeExecution
      )]
    )
)

response = chat.send_message("Can you run some code to bogo-sort this list of numbers?: [2,34,1,65,4]")
display_code_execution_result(response)

השיחה יכולה להמשיך כך:

אם הבנתי נכון, רצית שאבצע למחרת בוקר את הסדרת ה-bogo-sort של הרשימה [2, 34, 1, 65, 4]. Bogo-sort הוא אלגוריתם מיון לא יעיל במיוחד. המערכת מערבבת שוב ושוב את הרשימה עד שהיא ממוינת. בגלל הביצועים הגרועים במיוחד, לא מומלץ להשתמש בהם ברשימות גדולות.

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

response = chat.send_message("Yes, please create the code.")
display_code_execution_result(response)

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

קלט/פלט (I/O)

החל מ-Gemini 2.0 Flash, ביצוע הקוד תומך בקלט של קבצים ובפלט של גרפים. בעזרת יכולות הקלט והפלט החדשות האלה, תוכלו להעלות קובצי CSV וקובצי טקסט, לשאול שאלות על הקבצים וליצור תרשים Matplotlib כחלק מהתגובה.

תמחור של קלט/פלט

כשמשתמשים בקלט/פלט של ביצוע קוד, אתם מחויבים על אסימוני קלט ואסימוני פלט:

טוקני קלט:

  • הנחיה למשתמש

אסימוני פלט:

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

פרטי קלט/פלט

כשעובדים עם קלט/פלט של ביצוע קוד, חשוב לשים לב לפרטים הטכניים הבאים:

  • זמן הריצה המקסימלי של סביבת הקוד הוא 30 שניות.
  • אם סביבת הקוד יוצרת שגיאה, יכול להיות שהמודל יחליט ליצור מחדש את פלט הקוד. אפשר לעשות זאת עד 5 פעמים.
  • גודל הקלט המקסימלי של הקובץ מוגבל על ידי חלון אסימון המודל. ב-AI Studio, באמצעות Gemini Flash 2.0, גודל הקובץ המקסימלי של הקלט הוא מיליון טוקנים (כ-2MB לקובצי טקסט מסוגים נתמכים של קלט). אם תעלו קובץ גדול מדי, לא תוכלו לשלוח אותו ב-AI Studio.
פנייה אחת דו-כיווני (Multimodal Live API)
מודלים נתמכים כל הדגמים של Gemini 2.0 רק מודלים ניסיוניים של Flash
סוגי הקלט של קבצים שנתמכים ‎.png,‏ ‎.jpeg,‏ ‎.csv,‏ ‎.xml,‏ ‎.cpp,‏ ‎.java,‏ ‎.py,‏ ‎.js,‏ ‎.ts ‎.png,‏ ‎.jpeg,‏ ‎.csv,‏ ‎.xml,‏ ‎.cpp,‏ ‎.java,‏ ‎.py,‏ ‎.js,‏ ‎.ts
ספריות ליצירת תרשימים נתמכות Matplotlib Matplotlib
שימוש במכשיר רב-כלי לא כן

חיוב

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

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

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

מודל החיוב מוצג בתרשים הבא:

מודל חיוב על ביצוע קוד

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

מגבלות

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