Промпт как часть приложения: шаблоны и переменные

В приложении промпт не пишут руками каждый раз — его собирают из шаблона и переменных, как HTML из компонентов.

Шаблон промпта — текст с плейсхолдерами, в который во время выполнения подставляются переменные (данные пользователя, контекст, параметры).

Зачем шаблоны

Когда промпт — часть продукта, его структура постоянна, а меняются только данные: имя пользователя, текст документа, выбранный тон. Разделение «постоянный шаблон» и «переменный контент» даёт: единый формат, лёгкие правки в одном месте, версионирование и тесты. Это та же идея, что параметризованные SQL-запросы вместо склейки строк.

Запускаемый пример: сборка промпта

Соберём промпт-шаблон из частей и подставим переменные. Код самодостаточный, печатает готовый промпт.

def build_prompt(role, task, data, fmt, constraints):
    template = (
        "Роль: {role}\n"
        "Задача: {task}\n"
        "Формат: {fmt}\n"
        "Ограничения: {constraints}\n\n"
        "Данные:\n\"\"\"\n{data}\n\"\"\""
    )
    return template.format(role=role, task=task, data=data,
                           fmt=fmt, constraints=constraints)

prompt = build_prompt(
    role="ты технический редактор",
    task="сделай заголовок к тексту",
    data="Сегодня вышла новая версия библиотеки с ускорением парсинга.",
    fmt="один заголовок, до 8 слов",
    constraints="без кликбейта, по фактам",
)

print(prompt)

Вывод:

Роль: ты технический редактор
Задача: сделай заголовок к тексту
Формат: один заголовок, до 8 слов
Ограничения: без кликбейта, по фактам

Данные:
"""
Сегодня вышла новая версия библиотеки с ускорением парсинга.
"""

Обратите внимание: данные пользователя подставлены в отдельный блок с делимитерами — это разделение шаблона и контента заодно защищает от инъекций.

Правила хороших шаблонов

  • Минимум логики в строке. Условные части собирайте в коде, а не одной огромной f-строкой с if-ами внутри текста.
  • Экранируйте/обрамляйте пользовательский ввод делимитерами, не вклеивайте его в инструкции.
  • Один источник правды. Шаблон лежит в коде/конфиге, а не размазан по проекту.
  • Параметры наружу. Тон, длину, язык делайте переменными, чтобы менять без правки шаблона.

Где хранить шаблоны

Маленький проект — константы в коде. Серьёзный — отдельные файлы или хранилище промптов с версиями, чтобы менять текст без передеплоя логики и откатывать при регрессе. Об этом — следующий урок.

Итог

  • В приложении промпт собирают из постоянного шаблона и переменных.
  • Разделение шаблона и данных даёт единый формат, правки в одном месте и защиту от инъекций.
  • Держите логику в коде, а пользовательский ввод — в делимитерах.
  • Параметризуйте тон/длину/язык и храните шаблоны как единый источник правды.
Проверьте себя
1. Почему в приложении промпт собирают из шаблона и переменных?
AТак требует модель
BСтруктура постоянна, меняются только данные; это даёт единый формат, правки в одном месте и версионирование
CЧтобы тратить больше токенов
DШаблоны замедляют работу
2. Куда в шаблоне правильно помещать пользовательский ввод?
AПрямо внутрь строки инструкции
BВ отдельный блок с делимитерами, отделённый от инструкций
CВ system prompt как правило
DНе помещать вовсе
3. Что лучше держать в коде, а не зашивать в текст шаблона?
AУсловную логику и сборку частей промпта
BБукву «ё»
CЗнаки препинания
DЗаголовки секций
Поддержать проект