Промпты для работы с кодом
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-K | N/A | Top-P | 1 |
| Промпт | 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-K | N/A | Top-P | 1 |
Промпт: 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-кода.
Отлично! Модель не только подсказала решение проблемы, но и нашла другие потенциальные баги и предложила способы улучшения кода в целом (например, сохранение расширений и обработку исключений).