اجرای کد

Gemini API یک ابزار اجرای کد را فراهم می کند که مدل را قادر می سازد کد پایتون را تولید و اجرا کند. سپس مدل می تواند به طور مکرر از نتایج اجرای کد یاد بگیرد تا زمانی که به خروجی نهایی برسد. می‌توانید از اجرای کد برای ساخت برنامه‌هایی استفاده کنید که از استدلال مبتنی بر کد بهره می‌برند. به عنوان مثال، می توانید از اجرای کد برای حل معادلات یا پردازش متن استفاده کنید. همچنین می توانید از کتابخانه های موجود در محیط اجرای کد برای انجام کارهای تخصصی تر استفاده کنید.

Gemini فقط قادر به اجرای کد در پایتون است. همچنان می‌توانید از Gemini بخواهید کد به زبان دیگری تولید کند، اما مدل نمی‌تواند از ابزار اجرای کد برای اجرای آن استفاده کند.

اجرای کد را فعال کنید

برای فعال کردن اجرای کد، ابزار اجرای کد را روی مدل پیکربندی کنید. این به مدل اجازه می دهد تا کد تولید و اجرا کند.

پایتون

from google import genai
from google.genai import types

client = genai.Client()

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)]
    ),
)

for part in response.candidates[0].content.parts:
    if part.text is not None:
        print(part.text)
    if part.executable_code is not None:
        print(part.executable_code.code)
    if part.code_execution_result is not None:
        print(part.code_execution_result.output)

جاوا اسکریپت

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });

let response = await ai.models.generateContent({
  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: {
    tools: [{ codeExecution: {} }],
  },
});

const parts = response?.candidates?.[0]?.content?.parts || [];
parts.forEach((part) => {
  if (part.text) {
    console.log(part.text);
  }

  if (part.executableCode && part.executableCode.code) {
    console.log(part.executableCode.code);
  }

  if (part.codeExecutionResult && part.codeExecutionResult.output) {
    console.log(part.codeExecutionResult.output);
  }
});

برو

package main

import (
    "context"
    "fmt"
    "os"
    "google.golang.org/genai"
)

func main() {

    ctx := context.Background()
    client, _ := genai.NewClient(ctx, &genai.ClientConfig{
        APIKey:  os.Getenv("GOOGLE_API_KEY"),
        Backend: genai.BackendGeminiAPI,
    })

    config := &genai.GenerateContentConfig{
        Tools: []*genai.Tool{
            {CodeExecution: &genai.ToolCodeExecution{}},
        },
    }

    result, _ := client.Models.GenerateContent(
        ctx,
        "gemini-2.0-flash",
        genai.Text("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,
    )

    fmt.Println(result.Text())
    fmt.Println(result.ExecutableCode())
    fmt.Println(result.CodeExecutionResult())
}

استراحت

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-d ' {"tools": [{"code_execution": {}}],
    "contents": {
      "parts":
        {
            "text": "What is the sum of the first 50 prime numbers? Generate and run code for the calculation, and make sure you get all 50."
        }
    },
}'

خروجی ممکن است چیزی شبیه به شکل زیر باشد که برای خوانایی فرمت شده است:

Okay, I need to calculate the sum of the first 50 prime numbers. Here's how I'll
approach this:

1.  **Generate Prime Numbers:** I'll use an iterative method to find prime
    numbers. I'll start with 2 and check if each subsequent number is divisible
    by any number between 2 and its square root. If not, it's a prime.
2.  **Store Primes:** I'll store the prime numbers in a list until I have 50 of
    them.
3.  **Calculate the Sum:**  Finally, I'll sum the prime numbers in the list.

Here's the Python code to do this:

def is_prime(n):
  """Efficiently checks if a number is prime."""
  if n <= 1:
    return False
  if n <= 3:
    return True
  if n % 2 == 0 or n % 3 == 0:
    return False
  i = 5
  while i * i <= n:
    if n % i == 0 or n % (i + 2) == 0:
      return False
    i += 6
  return True

primes = []
num = 2
while len(primes) < 50:
  if is_prime(num):
    primes.append(num)
  num += 1

sum_of_primes = sum(primes)
print(f'{primes=}')
print(f'{sum_of_primes=}')

primes=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67,
71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229]
sum_of_primes=5117

The sum of the first 50 prime numbers is 5117.

این خروجی چندین قسمت محتوایی را که مدل هنگام استفاده از اجرای کد باز می گرداند ترکیب می کند:

  • text : متن درون خطی تولید شده توسط مدل
  • executableCode : کد تولید شده توسط مدلی که قرار است اجرا شود
  • codeExecutionResult : نتیجه کد اجرایی

قراردادهای نامگذاری این قسمت ها بر اساس زبان برنامه نویسی متفاوت است.

از اجرای کد در چت استفاده کنید

همچنین می توانید از اجرای کد به عنوان بخشی از چت استفاده کنید.

پایتون

from google import genai
from google.genai import types

client = genai.Client()

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

response = chat.send_message("I have a math question for you.")
print(response.text)

response = chat.send_message(
    "What is the sum of the first 50 prime numbers? "
    "Generate and run code for the calculation, and make sure you get all 50."
)

for part in response.candidates[0].content.parts:
    if part.text is not None:
        print(part.text)
    if part.executable_code is not None:
        print(part.executable_code.code)
    if part.code_execution_result is not None:
        print(part.code_execution_result.output)

جاوا اسکریپت

import {GoogleGenAI} from "@google/genai";

const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });

const chat = ai.chats.create({
  model: "gemini-2.0-flash",
  history: [
    {
      role: "user",
      parts: [{ text: "I have a math question for you:" }],
    },
    {
      role: "model",
      parts: [{ text: "Great! I'm ready for your math question. Please ask away." }],
    },
  ],
  config: {
    tools: [{codeExecution:{}}],
  }
});

const response = await chat.sendMessage({
  message: "What is the sum of the first 50 prime numbers? " +
            "Generate and run code for the calculation, and make sure you get all 50."
});
console.log("Chat response:", response.text);

برو

package main

import (
    "context"
    "fmt"
    "os"
    "google.golang.org/genai"
)

func main() {

    ctx := context.Background()
    client, _ := genai.NewClient(ctx, &genai.ClientConfig{
        APIKey:  os.Getenv("GOOGLE_API_KEY"),
        Backend: genai.BackendGeminiAPI,
    })

    config := &genai.GenerateContentConfig{
        Tools: []*genai.Tool{
            {CodeExecution: &genai.ToolCodeExecution{}},
        },
    }

    chat, _ := client.Chats.Create(
        ctx,
        "gemini-2.0-flash",
        config,
        nil,
    )

    result, _ := chat.SendMessage(
                    ctx,
                    genai.Part{Text: "What is the sum of the first 50 prime numbers? " +
                                          "Generate and run code for the calculation, and " +
                                          "make sure you get all 50.",
                              },
                )

    fmt.Println(result.Text())
    fmt.Println(result.ExecutableCode())
    fmt.Println(result.CodeExecutionResult())
}

استراحت

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"tools": [{"code_execution": {}}],
    "contents": [
        {
            "role": "user",
            "parts": [{
                "text": "Can you print \"Hello world!\"?"
            }]
        },{
            "role": "model",
            "parts": [
              {
                "text": ""
              },
              {
                "executable_code": {
                  "language": "PYTHON",
                  "code": "\nprint(\"hello world!\")\n"
                }
              },
              {
                "code_execution_result": {
                  "outcome": "OUTCOME_OK",
                  "output": "hello world!\n"
                }
              },
              {
                "text": "I have printed \"hello world!\" using the provided python code block. \n"
              }
            ],
        },{
            "role": "user",
            "parts": [{
                "text": "What is the sum of the first 50 prime numbers? Generate and run code for the calculation, and make sure you get all 50."
            }]
        }
    ]
}'

ورودی/خروجی (I/O)

با شروع Gemini 2.0 Flash ، اجرای کد از ورودی فایل و خروجی نمودار پشتیبانی می کند. با استفاده از این قابلیت‌های ورودی و خروجی، می‌توانید فایل‌های CSV و متنی را آپلود کنید، درباره فایل‌ها سؤال بپرسید و نمودارهای Matplotlib را به عنوان بخشی از پاسخ تولید کنید. فایل های خروجی به صورت تصاویر درون خطی در پاسخ برگردانده می شوند.

قیمت گذاری ورودی/خروجی

هنگام استفاده از اجرای کد ورودی/خروجی، برای نشانه‌های ورودی و نشانه‌های خروجی هزینه دریافت می‌کنید:

نشانه های ورودی:

  • درخواست کاربر

نشانه های خروجی:

  • کد تولید شده توسط مدل
  • خروجی اجرای کد در محیط کد
  • خلاصه تولید شده توسط مدل

جزئیات ورودی/خروجی

هنگامی که با اجرای کد ورودی/خروجی کار می کنید، از جزئیات فنی زیر آگاه باشید:

  • حداکثر زمان اجرای محیط کد 30 ثانیه است.
  • اگر محیط کد خطایی ایجاد کند، مدل ممکن است تصمیم بگیرد خروجی کد را دوباره تولید کند. این می تواند تا 5 بار اتفاق بیفتد.
  • حداکثر اندازه ورودی فایل توسط پنجره نشانه مدل محدود شده است. در AI Studio، با استفاده از Gemini Flash 2.0، حداکثر اندازه فایل ورودی 1 میلیون توکن است (تقریباً 2 مگابایت برای فایل های متنی از انواع ورودی پشتیبانی شده). اگر فایلی را بارگذاری کنید که خیلی بزرگ است، AI Studio به شما اجازه ارسال آن را نمی دهد.
  • اجرای کد با متن و فایل های CSV بهترین کار را دارد.
  • فایل ورودی را می توان در part.inlineData یا part.fileData ارسال کرد (از طریق Files API آپلود می شود)، و فایل خروجی همیشه به عنوان part.inlineData برگردانده می شود.
یک دور دو جهته (Multimodal Live API)
مدل های پشتیبانی شده تمامی مدل های Gemini 2.0 فقط مدل های آزمایشی فلش
انواع ورودی فایل پشتیبانی می شود 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 است، بنابراین می‌دانید که چرا نشانه‌های ورودی اضافی فراتر از درخواست اولیه خود دریافت می‌کنید.

محدودیت ها

  • مدل فقط می تواند کد تولید و اجرا کند. نمی تواند مصنوعات دیگر مانند فایل های رسانه ای را برگرداند.
  • در برخی موارد، فعال کردن اجرای کد می‌تواند منجر به رگرسیون در سایر حوزه‌های خروجی مدل شود (مثلاً نوشتن یک داستان).
  • تفاوت هایی در توانایی مدل های مختلف برای استفاده موفقیت آمیز از اجرای کد وجود دارد.

کتابخانه های پشتیبانی شده

محیط اجرای کد شامل کتابخانه های زیر است:

  • attrs
  • شطرنج
  • کانتورپی
  • fpdf
  • ژئوپاندها
  • imageio
  • jinja2
  • joblib
  • jsonschema
  • مشخصات jsonschema
  • lxml
  • matplotlib
  • mpmath
  • ناتوان
  • opencv-python
  • openpyxl
  • بسته بندی
  • پانداها
  • بالش
  • پروتوباف
  • پیلاتکس
  • pyparsing
  • PyPDF2
  • python-dateutil
  • python-docx
  • python-pptx
  • گزارش آزمایشگاه
  • scikit-یادگیری
  • تند
  • متولد دریا
  • شش
  • striptf
  • دلسوز
  • جدول بندی
  • تنسورفلو
  • toolz
  • xlrd

شما نمی توانید کتابخانه های خود را نصب کنید.

بعدش چی