Оглавление
Автоматическое проектирование промптов (Automatic Prompt Engineering)
На этом этапе вы могли осознать, что написание промптов — это сложная задача. Было бы здорово автоматизировать этот процесс (написать промт для создания промптов)? Что ж, такой метод существует: Automatic Prompt Engineering (APE). Этот метод не только снижает необходимость ручного ввода, но и улучшает производительность модели в различных задачах.
Суть в следующем:
- Вы даете модели задание сгенерировать несколько промптов.
- Оцениваете их, возможно, корректируете лучшие варианты.
- Повторяете процесс.
Пример:
Допустим, мы хотим автоматизировать создание промптов для обучения чат-бота интернет-магазина мерча с футболками. Нам нужно собрать все возможные варианты, как клиенты могут сформулировать заказ на футболку с символикой группы.
Шаг 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-K | N/A |
Top-P | 1 |
Промпт | Напиши код на 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 не могут логически рассуждать и просто воспроизводят данные из обучения, важно протестировать код перед использованием.
Проверка:
- Скопируйте вывод из Таблицы 16 (без обертки
bash
) в файлrename_files.sh
. - В терминале выполните:
. rename_files.sh
. Введите имя папки (например,test
) и нажмите Enter. - Если скрипт работает корректно, вы увидите сообщение: «Файлы успешно переименованы.»
- Проверьте папку
test
: все файлы должны быть переименованы вdraft_имя_файла.txt
.
Проверь свои знания в наших бесплатных тестах по ИИ! Пройди тест и узнай, насколько хорошо ты разбираешься в технологиях искусственного интеллекта!
Результат: Скрипт сработал!
Промпты для объяснения кода
Когда разработчик работает в команде, ему часто приходится разбирать чужой код. Gemini может помочь и с этим. Давайте возьмем код из Таблицы 16, уберем комментарии и попросим языковую модель объяснить, что в нем происходит.
Название | 1_bash_explain_the_code |
Цель | Write a prompt to explain Bash code |
Модель | gemini-pro |
Температура | 0.1 |
Лимит токенов | 1024 |
Top-K | N/A |
Top-P | 1 |
Промпт | 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 errormessage (“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 pathsto 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 createdby 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-K | N/A |
Top-P | 1 |
Промпт | 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). Мультимодальные подсказки — это отдельная концепция, которая подразумевает использование нескольких форматов входных данных для взаимодействия с моделью, а не только текста.
Это может включать комбинации:
- Текста (инструкции, вопросы)
- Изображений (схемы, скриншоты кода, диаграммы)
- Аудио (голосовые команды, пояснения)
- Кода (фрагменты для анализа или доработки)
- Других данных (таблицы, графики, видео — в зависимости от возможностей модели)
Примеры применения:
- Генерация кода по схеме
- Вход: Изображение блок-схемы + текстовая инструкция.
- Выход: Готовый код на Python.
- Поиск ошибок по скриншоту
- Вход: Скриншот ошибки в терминале + описание ожидаемого поведения.
- Выход: Объяснение ошибки и исправленный код.
- Голосовое программирование
- Вход: Аудиозапись с описанием функции + текстовый пример использования.
- Выход: Реализация функции на выбранном языке.
Важно:
- Мультимодальность требует специализированных моделей (например, Gemini 1.5, GPT-4V), способных обрабатывать не только текст.
- Для задач, связанных исключительно с кодом, текстовых подсказок часто достаточно.