Ekzekutimi i kodit

Gemini API ofron një mjet për ekzekutimin e kodit që i mundëson modelit të gjenerojë dhe ekzekutojë kodin Python. Modeli më pas mund të mësojë në mënyrë të përsëritur nga rezultatet e ekzekutimit të kodit derisa të arrijë në një dalje përfundimtare. Ju mund të përdorni ekzekutimin e kodit për të ndërtuar aplikacione që përfitojnë nga arsyetimi i bazuar në kod. Për shembull, mund të përdorni ekzekutimin e kodit për të zgjidhur ekuacionet ose për të përpunuar tekstin. Ju gjithashtu mund të përdorni bibliotekat e përfshira në mjedisin e ekzekutimit të kodit për të kryer detyra më të specializuara.

Binjakët janë në gjendje të ekzekutojnë kodin vetëm në Python. Ju ende mund t'i kërkoni Binjakëve të gjenerojë kodin në një gjuhë tjetër, por modeli nuk mund të përdorë mjetin e ekzekutimit të kodit për ta ekzekutuar atë.

Aktivizo ekzekutimin e kodit

Për të aktivizuar ekzekutimin e kodit, konfiguroni mjetin e ekzekutimit të kodit në model. Kjo i lejon modelit të gjenerojë dhe ekzekutojë kodin.

Python

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)

JavaScript

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

Shkoni

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

PUSHIMI

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."
        }
    },
}'

Dalja mund të duket diçka si më poshtë, e cila është formatuar për lexueshmëri:

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.

Ky dalje kombinon disa pjesë të përmbajtjes që modeli i kthen kur përdor ekzekutimin e kodit:

  • text : Teksti inline i krijuar nga modeli
  • executableCode : Kodi i krijuar nga modeli që është menduar të ekzekutohet
  • codeExecutionResult : Rezultati i kodit të ekzekutueshëm

Konventat e emërtimit për këto pjesë ndryshojnë sipas gjuhës së programimit.

Përdorni ekzekutimin e kodit në chat

Ju gjithashtu mund të përdorni ekzekutimin e kodit si pjesë e një bisede.

Python

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)

JavaScript

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

Shkoni

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

PUSHIMI

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

Hyrja/dalja (I/O)

Duke filluar me Gemini 2.0 Flash , ekzekutimi i kodit mbështet hyrjen e skedarit dhe daljen e grafikut. Duke përdorur këto aftësi hyrëse dhe dalëse, mund të ngarkoni skedarë CSV dhe tekst, të bëni pyetje rreth skedarëve dhe të krijoni grafikët Matplotlib si pjesë e përgjigjes. Skedarët e daljes kthehen si imazhe inline në përgjigje.

Çmimi I/O

Kur përdorni I/O të ekzekutimit të kodit, ju tarifoheni për shenjat hyrëse dhe ato dalëse:

Shenjat hyrëse:

  • Kërkesa e përdoruesit

Shenjat e daljes:

  • Kodi i krijuar nga modeli
  • Prodhimi i ekzekutimit të kodit në mjedisin e kodit
  • Përmbledhja e krijuar nga modeli

Detajet I/O

Kur jeni duke punuar me ekzekutimin e kodit I/O, kini parasysh detajet teknike të mëposhtme:

  • Koha maksimale e funksionimit të mjedisit të kodit është 30 sekonda.
  • Nëse mjedisi i kodit gjeneron një gabim, modeli mund të vendosë të rigjenerojë daljen e kodit. Kjo mund të ndodhë deri në 5 herë.
  • Madhësia maksimale e hyrjes së skedarit është e kufizuar nga dritarja e modelit të shenjës. Në AI Studio, duke përdorur Gemini Flash 2.0, madhësia maksimale e skedarit hyrës është 1 milion argumente (afërsisht 2 MB për skedarët e tekstit të llojeve të dhëna të mbështetura). Nëse ngarkoni një skedar që është shumë i madh, AI Studio nuk do t'ju lejojë ta dërgoni atë.
  • Ekzekutimi i kodit funksionon më së miri me tekst dhe skedarë CSV.
  • Skedari hyrës mund të kalohet në part.inlineData ose part.fileData (i ngarkuar nëpërmjet Files API ) dhe skedari i daljes kthehet gjithmonë si part.inlineData .
Kthesë e vetme Dydrejtimëshe (Multimodal Live API)
Modelet e mbështetura Të gjitha modelet Gemini 2.0 Vetëm modelet eksperimentale Flash
Llojet e hyrjes së skedarëve të mbështetur .png, .jpeg, .csv, .xml, .cpp, .java, .py, .js, .ts .png, .jpeg, .csv, .xml, .cpp, .java, .py, .js, .ts
Komplotimi i bibliotekave mbështetet Matplotlib Matplotlib
Përdorimi me shumë mjete Nr po

Faturimi

Nuk ka asnjë tarifë shtesë për aktivizimin e ekzekutimit të kodit nga Gemini API. Do të faturoheni me normën aktuale të kodeve hyrëse dhe dalëse bazuar në modelin Gemini që po përdorni.

Këtu janë disa gjëra të tjera për të ditur rreth faturimit për ekzekutimin e kodit:

  • Ju faturoheni vetëm një herë për shenjat hyrëse që i kaloni modelit dhe faturoheni për shenjat përfundimtare të daljes që ju janë kthyer nga modeli.
  • Shenjat që përfaqësojnë kodin e gjeneruar numërohen si shenja dalëse. Kodi i gjeneruar mund të përfshijë tekst dhe dalje multimodale si imazhe.
  • Rezultatet e ekzekutimit të kodit llogariten gjithashtu si shenja dalëse.

Modeli i faturimit është paraqitur në diagramin e mëposhtëm:

modeli i faturimit të ekzekutimit të kodit

  • Faturoheni me normën aktuale të kodeve hyrëse dhe dalëse bazuar në modelin Gemini që po përdorni.
  • Nëse Binjakët përdor ekzekutimin e kodit kur gjeneron përgjigjen tuaj, kërkesa origjinale, kodi i gjeneruar dhe rezultati i kodit të ekzekutuar etiketohen si shenja të ndërmjetme dhe faturohen si shenja hyrëse .
  • Binjakët më pas gjenerojnë një përmbledhje dhe kthen kodin e gjeneruar, rezultatin e kodit të ekzekutuar dhe përmbledhjen përfundimtare. Këto faturohen si shenja dalëse .
  • API Gemini përfshin një numërim të ndërmjetëm të shenjave në përgjigjen e API-së, kështu që ju e dini pse po merrni argumente shtesë hyrëse përtej kërkesës suaj fillestare.

Kufizimet

  • Modeli mund të gjenerojë dhe ekzekutojë vetëm kod. Nuk mund të kthejë objekte të tjera si skedarët e medias.
  • Në disa raste, aktivizimi i ekzekutimit të kodit mund të çojë në regresione në fusha të tjera të prodhimit të modelit (për shembull, shkrimi i një historie).
  • Ka disa ndryshime në aftësinë e modeleve të ndryshme për të përdorur me sukses ekzekutimin e kodit.

Bibliotekat e mbështetura

Mjedisi i ekzekutimit të kodit përfshin bibliotekat e mëposhtme:

  • attrs
  • shahu
  • konturpi
  • fpdf
  • gjeopandat
  • imageio
  • xhinja2
  • joblib
  • jsonschema
  • jsonschema-specifikimet
  • lxml
  • matplotlib
  • mpmath
  • i mpirë
  • opencv-python
  • openpyxl
  • ambalazhimi
  • pandat
  • jastëk
  • protobuf
  • pylatex
  • pyparsing
  • PyPDF2
  • python-dateutil
  • python-docx
  • python-pptx
  • laboratori i raporteve
  • scikit-mësoj
  • scipy
  • të lindur në det
  • gjashtë
  • striprtf
  • simpatike
  • tabela
  • tensorflow
  • mjetz
  • xlrd

Ju nuk mund të instaloni bibliotekat tuaja.

Çfarë është më pas