Промпт Инженерия by Lee Boonstra (Часть 9)

Автоматическое проектирование промптов (Automatic Prompt Engineering)

На этом этапе вы могли осознать, что написание промптов — это сложная задача. Было бы здорово автоматизировать этот процесс (написать промт для создания промптов)? Что ж, такой метод существует: Automatic Prompt Engineering (APE). Этот метод не только снижает необходимость ручного ввода, но и улучшает производительность модели в различных задачах.

Суть в следующем:

  1. Вы даете модели задание сгенерировать несколько промптов.
  2. Оцениваете их, возможно, корректируете лучшие варианты.
  3. Повторяете процесс.

Пример:
Допустим, мы хотим автоматизировать создание промптов для обучения чат-бота интернет-магазина мерча с футболками. Нам нужно собрать все возможные варианты, как клиенты могут сформулировать заказ на футболку с символикой группы.

Шаг 1. Создаем промт, который сгенерирует варианты. В этом примере используется модель gemini-pro для создания 10 вариантов:

ПромптУ нас есть интернет-магазин мерча с футболками, и для обучения чат-бота нужны разные способы заказа: «Одна футболка Metallica размера S». Сгенерируй 10 вариантов с той же семантикой, но сохрани исходный смысл.
ВыводЯ хочу купить футболку Metallica размера small.
Можно заказать футболку Metallica размера S?
Я бы хотел приобрести одну футболку Metallica в размере small.
Одна футболка Metallica, размер S, пожалуйста.
Мне нужна одна футболка Metallica размера small.
Я хочу оформить заказ на одну футболку Metallica размера S.
Футболка Metallica, размер small, одна штука.
Ищу одну футболку Metallica размера S.
Можешь дать одну футболку Metallica размера small?
Одна футболка Metallica, small, пожалуйста.

Таблица 15. Использование LLM для генерации промптов

Шаг 2. Оцениваем все варианты инструкций, используя метрики (например, BLEU или ROUGE).
Шаг 3. Выбираем вариант с наивысшим баллом — это и будет финальным промптом для вашего приложения или чат-бота. При необходимости его можно доработать и перепроверить.

Генерация кода (Code Prompting)

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

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

Пример:
Представьте папку с сотнями файлов, которые нужно переименовать. Делать это вручную долго. Вы знаете немного Bash и могли бы написать скрипт, но это тоже займет время. Вместо этого создадим промпт.

Название 1_bash_rename_files_in_folder 
Цель Написать промпт для генерации кода на Bash, переименовывающего файлы в папке.
Модель gemini-pro
Температура 0.1
Лимит токенов1024 
Top-KN/A
Top-P1
Промпт Напиши код на Bash, который запрашивает имя папки, а затем переименовывает все файлы внутри, добавляя к их названиям префикс draft_.
Вывод#!/bin/bash
# Запрос имени папки
echo "Введите имя папки: "
read folder_name

# Проверка существования папки
if [ ! -d "$folder_name" ]; then
echo "Папка не существует."
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 "Файлы успешно переименованы."

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

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

Проверка:

  1. Скопируйте вывод из Таблицы 16 (без обертки bash ) в файл rename_files.sh.
  2. В терминале выполните: . rename_files.sh. Введите имя папки (например, test) и нажмите Enter.
  3. Если скрипт работает корректно, вы увидите сообщение: «Файлы успешно переименованы.»
  4. Проверьте папку test: все файлы должны быть переименованы в draft_имя_файла.txt.

Результат: Скрипт сработал!

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

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

Название1_bash_explain_the_code
ЦельWrite a prompt to explain Bash code
Модельgemini-pro
Температура0.1
Лимит токенов1024
Top-KN/A
Top-P1
ПромптExplain to me the below Bash code:
#!/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."
ВыводThis Bash script performs the following tasks:
User Input:
It prompts the user to enter a folder name using the echo and read
commands. The entered folder name is stored in the folder_name variable.
Folder Existence Check:
It checks if the folder with the specified name exists using the [ ! -d “$folder_name” ] condition. If the folder does not exist, it displays an error
message (“Folder does not exist.”) and exits the script with an exit code of 1.
File Listing:
It lists all the files inside the specified folder using the files=( “$folder_ name”/* ) command. This creates an array called files containing the paths
to all the files in the folder.
File Renaming:
It iterates through each file in the files array using a for loop.
For each file, it generates a new file name using the new_file_ name=”draft_$(basename “$file”)” command. This new file name is created
by prefixing the original file name with the string “draft_”.
It then renames the file using the mv “$file” “$new_file_name” command,
which moves the file to the new file name.
Success Message:
After renaming all the files, it displays a success message (“Files renamed
successfully.”) to indicate that the renaming operation was successful

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

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

Код bash из Таблицы 16, кажется, работает нормально. Однако этот скрипт мог бы быть действительно переиспользуемым, если бы запрашивал имена файлов у пользователя. В идеале он должен работать как отдельное приложение с пользовательским интерфейсом. В качестве отправной точки Python был бы более подходящим языком для (веб-)приложения, чем Bash.

LLM (языковые модели) могут помочь с переводом кода с одного языка на другой. См. пример в Таблице 18:

Название1_python_rename_files
ЦельWrite a prompt to explain Bash code
Модельgemini-pro
Температура0.1
Лимит токенов1024
Top-KN/A
Top-P1
ПромптTranslate the below Bash code to a Python snippet.
#!/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
#Get the folder name from the user
folder_name = input(«Enter the folder name: «)
#Check if the folder exists
if not os.path.isdir(folder_name):
print(«Folder does not exist.»)
exit(1)
#Get a list of all files in the folder
files = os.listdir(folder_name)
Iterate over the files
for file in files:
#Create a new file name with the prefix «draft_»
new_file_name = f»draft_{file}»
#Move the file to the new name
shutil.move(os.path.join(folder_name, file),
os.path.join(folder_name, new_file_name))
#Print a success message
print(«Files renamed successfully.»)

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

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

python file_renamer.py

Примечание: При запросе кода (на Python) в Language Studio в Vertex AI вам нужно нажать кнопку Markdown. В противном случае вы получите обычный текст без правильных отступов строк, которые важны для выполнения Python-кода.

Мультимодальные подсказки (Multimodal Prompting)

Запросы для генерации кода по-прежнему используют обычную языковую модель (LLM). Мультимодальные подсказки — это отдельная концепция, которая подразумевает использование нескольких форматов входных данных для взаимодействия с моделью, а не только текста.

Это может включать комбинации:

  • Текста (инструкции, вопросы)
  • Изображений (схемы, скриншоты кода, диаграммы)
  • Аудио (голосовые команды, пояснения)
  • Кода (фрагменты для анализа или доработки)
  • Других данных (таблицы, графики, видео — в зависимости от возможностей модели)

Примеры применения:

  1. Генерация кода по схеме
    • Вход: Изображение блок-схемы + текстовая инструкция.
    • Выход: Готовый код на Python.
  2. Поиск ошибок по скриншоту
    • Вход: Скриншот ошибки в терминале + описание ожидаемого поведения.
    • Выход: Объяснение ошибки и исправленный код.
  3. Голосовое программирование
    • Вход: Аудиозапись с описанием функции + текстовый пример использования.
    • Выход: Реализация функции на выбранном языке.

Важно:

  • Мультимодальность требует специализированных моделей (например, Gemini 1.5, GPT-4V), способных обрабатывать не только текст.
  • Для задач, связанных исключительно с кодом, текстовых подсказок часто достаточно.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

двенадцать + три =

Прокрутить вверх