Wykonanie kodu

Funkcja wykonywania kodu interfejsu Gemini API umożliwia modelowi generowanie i uruchamianie kodu Pythona oraz iteracyjne uczenie się na podstawie wyników, aż do uzyskania ostatecznego wyniku. Możesz użyć tej funkcji do tworzenia aplikacji, które korzystają z rozpoznawania tekstu opartego na kodzie i generują tekst. Możesz na przykład użyć wykonania kodu w aplikacji, która rozwiązuje równania lub przetwarza tekst.

Wykonywanie kodu jest dostępne zarówno w AI Studio, jak i w Gemini API. W AI Studio możesz włączyć wykonywanie kodu w panelu po prawej stronie w sekcji Narzędzia. Gemini API zapewnia wykonywanie kodu jako narzędzie, podobnie jak wywoływanie funkcji. Po dodaniu wykonywania kodu jako narzędzia model sam decyduje, kiedy ma go użyć.

Środowisko wykonywania kodu zawiera te biblioteki: altair, chess, cv2, matplotlib, mpmath, numpy, pandas, pdfminer, reportlab, seaborn, sklearn, statsmodels, striprtf, sympy i tabulate. Nie możesz instalować własnych bibliotek.

Pierwsze kroki z wykonywaniem kodu

Dostępny jest też notebook z wynikiem wykonania kodu:

W tej sekcji zakładamy, że masz już za sobą czynności związane z konfiguracją i ustawianiem, które omówiono w krótkim wprowadzeniu.

Włączanie wykonywania kodu na modelu

Możesz włączyć wykonywanie kodu w modelu w ten sposób:

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

W notatniku możesz wyświetlać wszystko w formacie Markdown za pomocą tej funkcji pomocniczej:

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)

Dane wyjściowe mogą wyglądać tak:

Muszę obliczyć sumę pierwszych 50 liczb pierwszych. Użyję skryptu Pythona do wygenerowania pierwszych 50 liczb pierwszych, a potem je zsumuję.

```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
```

Wykonywanie kodu na czacie

Możesz też użyć wykonania kodu w ramach czatu.

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)

Rozmowa może wyglądać tak:

Rozumiem, że chcesz posortować listę [2, 34, 1, 65, 4] metodą Bogo. Bogosort to znany z nieefektywności algorytm sortowania. Polega ono na wielokrotnym losowaniu elementów z listy, aż zostaną posortowane. Ze względu na bardzo niską skuteczność nie jest ona praktyczna w przypadku list o dużej objętości.

Jednak na potrzeby demonstracji mogę uruchomić uproszczoną wersję dla bardzo ograniczonej liczby iteracji, aby pokazać proces. Czy mam kontynuować?

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

OK, wykonam funkcję, która losuje listę i sprawdza, czy jest posortowana. Uruchomię go maksymalnie 10 razy. …

Wejście/wyjście (I/O)

Począwszy od Gemini 2.0 Flash, wykonywanie kodu obsługuje dane wejściowe w pliku i dane wyjściowe w postaci wykresu. Dzięki tym nowym funkcjom wejścia i wyjścia możesz przesyłać pliki CSV i pliki tekstowe, zadawać pytania dotyczące tych plików oraz generować wykresy Matplotlib w ramach odpowiedzi.

Ceny operacji wejścia/wyjścia

Gdy używasz funkcji I/O w ramach wykonywania kodu, płacisz za tokeny wejściowe i tokeny wyjściowe:

Tokeny wejściowe:

  • Prośba do użytkownika

Tokeny wyjściowe:

  • Kod wygenerowany przez model
  • Wynik działania kodu w środowisku kodu
  • Podsumowanie wygenerowane przez model

Szczegóły operacji wejścia/wyjścia

Podczas pracy z wejściami/wyjściami w ramach wykonywania kodu należy wziąć pod uwagę te szczegóły techniczne:

  • Maksymalny czas działania środowiska kodu to 30 sekund.
  • Jeśli środowisko kodu wygeneruje błąd, model może zdecydować się na ponowne wygenerowanie danych wyjściowych kodu. Może się to zdarzyć do 5 razy.
  • Maksymalny rozmiar pliku wejściowego jest ograniczony przez okno tokenu modelu. W AI Studio, przy użyciu Gemini Flash 2.0, maksymalny rozmiar pliku wejściowego to 1 mln tokenów (około 2 MB w przypadku plików tekstowych obsługiwanych typów danych wejściowych). Jeśli przesyłasz plik, który jest za duży, AI Studio nie pozwoli Ci go wysłać.
Jeden etap Dwukierunkowy (API rozmowy multimodalnej na żywo)
Obsługiwane modele Wszystkie modele Gemini 2.0 Tylko modele eksperymentalne Flasha
Obsługiwane typy danych wejściowych .png, .jpeg, .csv, .xml, .cpp, .java, .py, .js, .ts .png, .jpeg, .csv, .xml, .cpp, .java, .py, .js, .ts
Obsługiwane biblioteki do wykresów Matplotlib Matplotlib
Używanie narzędzia wielofunkcyjnego Nie Tak

Płatności

Włączenie wykonywania kodu z interfejsu Gemini API nie wiąże się z dodatkowymi opłatami. Będziesz rozliczany według bieżącej stawki tokenów wejściowych i wyjściowych na podstawie używanego modelu Gemini.

Oto kilka innych informacji o płatnościach za wykonywanie kodu:

  • Będziesz obciążany(-a) tylko raz za tokeny wejściowe przekazywane do modelu oraz za ostateczne tokeny wyjściowe zwracane przez model.
  • Tokeny reprezentujące wygenerowany kod są zliczane jako tokeny wyjściowe. Wygenerowany kod może zawierać tekst i dane multimodalne, takie jak obrazy.
  • Wyniki wykonania kodu są również liczone jako tokeny wyjściowe.

Model rozliczeniowy przedstawiono na poniższym diagramie:

model rozliczeniowy wykonania kodu;

  • Opłaty są naliczane według bieżącej stawki tokenów wejściowych i wyjściowych na podstawie używanego modelu Gemini.
  • Jeśli Gemini używa do generowania odpowiedzi wykonania kodu, oryginalny prompt, wygenerowany kod i wynik wykonanego kodu są oznaczone jako tokeny pośrednie i obliczane jako tokeny wejściowe.
  • Następnie Gemini generuje podsumowanie i zwraca wygenerowany kod, wynik wykonanego kodu oraz podsumowanie końcowe. Są one rozliczane jako tokeny wyjściowe.
  • Interfejs Gemini API zawiera w swojej odpowiedzi liczbę tokenów pośrednich, dzięki czemu wiesz, dlaczego otrzymujesz dodatkowe tokeny wejściowe poza początkowym promptem.

Ograniczenia

  • Model może tylko generować i wykonywać kod. Nie może zwracać innych artefaktów, takich jak pliki multimedialne.
  • W niektórych przypadkach włączenie wykonywania kodu może spowodować regresję w innych obszarach danych wyjściowych modelu (np. w pisaniu historii).
  • Różne modele mają nieco inne możliwości korzystania z wykonywania kodu.