Промпты для работы с кодом

Gemini в первую очередь ориентирована на текстовые промпты, что также включает в себя запросы на написание кода. Давайте перейдем в Vertex AI Studio и протестируем примеры промптов для программирования.

Промпты для написания кода

Gemini может выступать в роли разработчика и помогать вам писать код на любом выбранном языке программирования. Для программиста это отличный способ ускорить процесс написания кода.

Представьте, что у вас на компьютере есть папка с сотнями файлов, которые нужно переименовать. Переименование каждого файла вручную заняло бы уйму времени. Вы немного знаете Bash и могли бы написать скрипт для автоматизации, но это тоже потребует времени. Давайте напишем промпт. Вы можете использовать общедоступный чат-бот Gemini или, если вас беспокоит конфиденциальность, воспользоваться Vertex AI Studio в вашем аккаунте Google Cloud. Преимущество Vertex AI Studio в том, что вы можете настраивать температуру и другие параметры.

Название: 1_bash_rename_files_in_folder

ЦельНаписать промпт для создания Bash-скрипта, переименовывающего файлы в папке.
Модельgemini-pro
Температура0.1Лимит токенов1024
Top-KN/ATop-P1
ПромптWrite a code snippet in Bash, which asks for a folder name. Then it takes the contents of the folder and renames all the files inside by prepending the name draft to the file name.

Вывод: ```bash #!/bin/bash

Запрос имени папки

echo “Enter the folder name: ” read folder_name

Проверка существования папки

if [ ! -d “$folder_name” ]; then echo “Folder does not exist.” exit 1 fi

Получение списка файлов в папке

files=( “$folder_name”/* )

Переименование каждого файла (префикс “draft_”)

for file in ”${files[@]}”; do new_file_name=“draft_$(basename “$file”)” mv “$file” “$new_file_name” done echo “Files renamed successfully.”


Таблица 16. Использование Gemini для написания кода.

Код выглядит неплохо — он даже снабжен комментариями! Однако поскольку LLM не умеют рассуждать логически и просто воспроизводят обучающие данные, крайне важно сначала прочитать и протестировать полученный код.

Тот самый момент, которого мы все ждали: работает ли это на самом деле?

Давайте проверим на тестовой папке с несколькими файлами, которые нужно переименовать из `filename.txt` в `draft_filename.txt`.

1. Скопируйте вывод из Таблицы 16 (без обертки \`\`\`**bash** \`\`\`) и вставьте его в новый файл с названием «**rename\_files.sh**».
2. Откройте терминал и введите: **. rename\_files.sh**. Скрипт попросит ввести имя папки, например **test**, после чего нажмите Enter.
3. Скрипт должен отработать корректно. Вы увидите сообщение: **Files renamed successfully.** Заглянув в папку test, вы заметите, что все файлы были успешно переименованы в **draft\_filename.txt**.

Работает!

## Промпты для объяснения кода

Разработчикам, работающим в команде, часто приходится читать чужой код. Gemini может помочь и в этом. Возьмем код из Таблицы 16, удалим комментарии и попросим модель объяснить, что в нем происходит (Таблица 17).

Название: 1\_bash\_explain\_the\_code 

| Цель | Написать промпт для объяснения Bash-кода | | |
| :---- | :---- | :---- | :---- |
| Модель | gemini-pro | | |
| Температура | 0.1 | Лимит токенов | 1024 |
| Top-K | N/A | Top-P | 1 |
| Промпт | `Explain to me the below Bash code:` <br> ```bash #!/bin/bash echo "Enter the folder name: " read folder_name if [ ! -d "$folder_name" ]; then echo "Folder does not exist." exit 1 fi files=( "$folder_name"/* ) for file in "${files[@]}"; do new_file_name="draft_$(basename "$file")" mv "$file" "$new_file_name" done echo "Files renamed successfully." ``` | | |

Вывод: Текст объяснения (основные пункты):
1. **Ввод пользователя**: Запрашивает имя папки с помощью `echo` и `read`.
2. **Проверка существования**: Проверяет наличие папки. Если ее нет — выводит ошибку и завершает работу.
3. **Список файлов**: Создает массив `files` со всеми файлами в папке.
4. **Переименование**: Проходит циклом по файлам, формирует новое имя с префиксом «draft_» и переименовывает через `mv`.
5. **Сообщение об успехе**: Уведомляет об окончании операции.

Таблица 17. Промпт для объяснения кода.

## Промпты для перевода кода

Bash-скрипт из Таблицы 16 работает, но было бы удобнее сделать его переиспользуемым, возможно, в виде отдельного приложения с интерфейсом. Для веб-приложений Python подходит гораздо лучше, чем Bash. LLM могут помочь с переводом кода с одного языка на другой. Пример в Таблице 18.

Название: 1\_python\_rename\_files 

| Цель | Написать промпт для перевода Bash-кода на Python | | |
| :---- | :---- | :---- | :---- |
| Модель | gemini-pro | | |
| Температура | 0.1 | Лимит токенов | 1024 |
| Top-K | N/A | Top-P | 1 |
| Промпт | `Translate the below Bash code to a Python snippet.` <br> ```bash #!/bin/bash echo "Enter the folder name: " read folder_name if [ ! -d "$folder_name" ]; then echo "Folder does not exist." exit 1 fi files=( "$folder_name"/* ) for file in "${files[@]}"; do new_file_name="draft_$(basename "$file")" mv "$file" "$new_file_name" done echo "Files renamed successfully." ``` | | |

Вывод: ```python
import os
import shutil
# Получение имени папки от пользователя
folder_name = input("Enter the folder name: ")
# Проверка существования папки
if not os.path.isdir(folder_name):
  print("Folder does not exist.")
  exit(1)
# Получение списка всех файлов в папке
files = os.listdir(folder_name)
# Итерация по файлам
for file in files:
  # Создание нового имени с префиксом "draft_"
  new_file_name = f"draft_{file}"
  # Переименование (перемещение) файла
  shutil.move(os.path.join(folder_name, file),
  os.path.join(folder_name, new_file_name))
# Сообщение об успехе
print("Files renamed successfully.")

Таблица 18. Промпт для перевода кода с Bash на Python.

Проверьте полученный код. Скопируйте его в новый файл file_renamer.py и протестируйте командой python file_renamer.py.

ПРИМЕЧАНИЕ: При запросе кода (например, на Python) в Vertex AI Studio обязательно нажимайте кнопку ‘Markdown’. В противном случае вы получите обычный текст без правильных отступов, которые критически важны для Python.

Промпты для отладки и ревью кода

Давайте внесем правки в код из Таблицы 18 вручную. Пусть он запрашивает префикс у пользователя и переводит его в верхний регистр. См. пример в Snippet 3. Но вот незадача — теперь возникают ошибки!

Python

import os
import shutil
folder_name = input("Enter the folder name: ")
prefix = input("Enter the string to prepend to the filename: ") 
text = toUpperCase(prefix)
if not os.path.isdir(folder_name):
  print("Folder does not exist.")
  exit(1)
files = os.listdir(folder_name)
for file in files:
  new_filename = f"{text}_{file}"
  shutil.move(os.path.join(folder_name, file),
  os.path.join(folder_name, new_file_name))
print("Files renamed successfully.")

Snippet 3. Сломанный Python-скрипт.

Ой, баг:

The below Python code gives an error: Traceback (most recent call last): File "rename_files.py", line 7, in <module> text = toUpperCase(prefix) NameError: name 'toUpperCase' is not defined

Snippet 4. Я сломал Python-код.

Давайте попросим LLM отладить и проверить код (Таблица 19).

Название: 1_python_debug_code

ЦельНаписать промпт для отладки и ревью Python-кода.
Модельgemini-pro
Температура0.1Лимит токенов1024
Top-KN/ATop-P1

Промпт: The below Python code gives an error: NameError: name 'toUpperCase' is not defined. Debug what's wrong and explain how I can improve the code. (копируем код из Snippet 3).

Вывод: Код вызывает функцию toUpperCase, но она не определена в Python. Для перевода в верхний регистр используйте метод .upper().

Исправленный и улучшенный код:

import os
import shutil

folder_name = input("Enter the folder name: ")
prefix = input("Enter the string to prepend to the filename: ")

if not os.path.isdir(folder_name):
    print("Folder does not exist.")
    exit(1)

files = os.listdir(folder_name)

for file in files:
    ext = os.path.splitext(file)[1]
    new_filename = f"{prefix.upper()}_{os.path.splitext(file)[0]}{ext}"
    
    old_path = os.path.join(folder_name, file)
    new_path = os.path.join(folder_name, new_filename)
    
    try:
        shutil.move(old_path, new_path)
    except Exception as e:
        print(f"An error occurred while moving file {file}: {e}")

print("Files renamed successfully.")

Таблица 19. Промпт для отладки и ревью Python-кода.

Отлично! Модель не только подсказала решение проблемы, но и нашла другие потенциальные баги и предложила способы улучшения кода в целом (например, сохранение расширений и обработку исключений).