Перейти к содержанию

← Модели

Промпт-инжиниринг / Модели

Гайд по промпт-инжинирингу для Code Llama: как работать с моделью

Code Llama - это крупная языковая модель от Meta, созданная специально для задач, связанных с кодом. В отличие от универсальных моделей вроде ChatGPT, она заточена под понимание, генерацию, объяснение и отладку программ на популярных языках, таких как Python, C++, Java и других. Однако чтобы выжать из нее максимум, недостаточно просто написать «напиши код». Нужно понимать, как она «думает» и как с ней правильно общаться. Этот гайд - именно об этом: о принципах построения эффективных промптов для Code Llama.

Специальные токены и управление выводом

Языковые модели понимают не только слова, но и специальные служебные символы - токены. В Code Llama есть набор таких токенов, которые явно указывают модели, где начинается и заканчивается запрос, инструкция, код или ответ. Их использование делает общение с моделью более структурированным и предсказуемым.

Ключевые токены: * <PRE> (префикс): Ставится в начале всего промпта. Это сигнал для модели: «Внимание, сейчас начнется ввод». * <SUF> (суффикс): Обрамляет пользовательский ввод (например, ваш вопрос или описание задачи). Помогает модели отделить инструкцию от контекста. * <MID> (середина): Разделяет контекст (например, предоставленный вами код) и непосредственно задачу по его анализу или дополнению. * <EOT> (конец текста): Токен-стопер, указывающий модели, где закончить генерацию. Особенно полезен в режиме потоковой передачи.

Представьте, что вы даете задание коллеге. Без структуры это звучало бы как поток сознания. А с использованием токенов - как четкое техническое задание: «Вот общий контекст (<PRE>), вот конкретно что нужно сделать (<SUF>), а вот дополнительная информация (<MID>), и точка, хватит (<EOT>)». Это снижает количество «галлюцинаций» и нерелевантных ответов.

Форматы промптов для разных задач

В зависимости от того, что вам нужно - сгенерировать код с нуля, дополнить существующий или проанализировать его, - следует использовать разные шаблоны промптов.

Инструктивный промпт

Это самый простой и частый формат. Вы даете модели прямую инструкцию, что сделать. Подходит для генерации кода по описанию, рефакторинга, перевода между языками.

Промпт:

<PRE> Напиши функцию на Python, которая принимает список чисел и возвращает новый список, содержащий только четные числа. <SUF>
Ответ модели:
def filter_even_numbers(numbers):
    """
    Фильтрует список чисел, оставляя только четные.
    """
    return [num for num in numbers if num % 2 == 0]

Промпт с заполнением (Infilling)

Это одна из сильных сторон Code Llama. Вы предоставляете модели неполный фрагмент кода (например, с пропуском в середине), и она должна логически его дополнить. Идеально для автодополнения в IDE или доработки заготовок.

Промпт:

<PRE> def calculate_factorial(n):
    if n == 0:
        return 1
    else:
        <SUF> return n * calculate_factorial(n-1) <MID>
Ответ модели:
        return n * calculate_factorial(n-1)
(Модель корректно вставила недостающую строку рекурсивного вызова).

Промпт с чат-инструкцией

Некоторые версии Code Llama (например, CodeLlama-Instruct) обучены на диалогах. Для них используется формат, похожий на общение с ассистентом, с системным промптом и ролями пользователя/ассистента.

Промпт:

[INST] <<SYS>>
Ты - опытный программист-консультант. Отвечай подробно и давай объяснения к коду.
<</SYS>>

Объясни, что делает следующая функция на Python, и найди в ней потенциальную ошибку:
def process_data(data_list):
    result = 0
    for i in range(len(data_list)):
        result += data_list[i] / i
    return result
[/INST]
Ответ модели:
Эта функция пытается вычислить сумму элементов списка `data_list`, деленных на их индекс `i`. Потенциальная критическая ошибка возникает на первой итерации цикла, когда `i = 0`. Деление на ноль (`data_list[0] / 0`) вызовет исключение ZeroDivisionError в Python. Чтобы это исправить, нужно начать цикл с 1 или добавить проверку на ноль.

Контроль длины и формата ответа

Модель можно и нужно направлять не только по содержанию, но и по форме вывода. Это экономит время и вычислительные ресурсы.

  • Указание языка: Всегда явно указывайте язык программирования в запросе. «Напиши код» vs «Напиши функцию на C#» - это большая разница.
  • Ограничение длины: Используйте директивы вроде [Ответ должен быть не длиннее 20 строк] или Объясни в двух предложениях.
  • Структура ответа: Просите модель выводить ответ в определенном формате: «Сначала объясни принцип, затем приведи код, затем перечисли возможные ошибки».

Промпт:

<PRE> Напиши на JavaScript короткую функцию (максимум 5 строк) для проверки, является ли строка палиндромом. Выведи только код, без пояснений. <SUF>
Ответ модели:
function isPalindrome(str) {
    const cleaned = str.toLowerCase().replace(/[^a-z0-9]/g, '');
    return cleaned === cleaned.split('').reverse().join('');
}

Адаптация под российский контекст

Хотя Code Llama - зарубежная модель, принципы промпт-инжиниринга универсальны. Если вы работаете с доступными в РФ аналогами, например, с YandexGPT или GigaChat, которые также поддерживают генерацию кода, эти же приемы будут работать. Ключевые отличия: 1. Локализация: Русскоязычные модели могут лучше понимать инструкции, сформулированные на естественном русском языке, особенно если задача касается локальных спецификаций (например, работа с API ФНС или оформление по ГОСТ). 2. Контекст: В промпт для отечественной модели можно смело включать названия российских сервисов, библиотек или нормативных актов. 3. Инструкции: Форматы с <PRE>/<SUF> могут не поддерживаться. Вместо них используйте четкие словесные указания: «Вот исходный код: [код]. Дополни его следующим: [описание задачи]».

Главное - помнить золотое правило: чем конкретнее и структурированнее ваш запрос, тем качественнее и полезнее будет ответ модели, будь то Code Llama или ее локальный аналог. Начинайте с простых инструктивных промптов, экспериментируйте с заполнением и не забывайте явно задавать рамки для ответа.

Попробуйте ENGRAM на своих данных

Нейросеть на ваших встречах, документах и переписке: отвечает со ссылкой на источник. Это ваша вторая память на базе ИИ. Данные хранятся в России, старт бесплатный.

Зарегистрироваться бесплатно
Обучаем команды работе с нейросетями под ваши процессы. Узнать о корпоративном обучении