Упражнение: prefill
Чему научитесь
Видео 4:57
К концу упражнения вы сможете:
- подобрать prefill и stop sequence по тому, во что модель оборачивает ответ;
- использовать prefill не только для разметки, но и чтобы направить ответ.
На странице урока только видео. Ниже — его содержание по субтитрам.
Смотреть урок на Skilljar Structured data exercise · 4:57Задача
Быстрое упражнение, чтобы окончательно разобраться со стоп-последовательностями и prefill. В ячейке ноутбука знакомый код, а промпт такой: «Generate three different sample AWS CLI commands».
messages = [] add_user_message(messages, "Generate three different sample AWS CLI commands") text = chat(messages)
Если запустить его как есть, придёт примерно такой ответ: три разные команды, но вокруг много комментариев — заголовок и нумерация перед каждой командой.
Задание: используя только prefill и стоп-последовательности, получить все три команды в одном ответе, подряд, без комментариев, пояснений и чего-либо ещё. Промпт менять нельзя.
Подсказка автора: prefill не ограничен символами вроде обратных кавычек — туда можно положить любой текст ответа.
Здесь в ролике предлагают поставить видео на паузу и попробовать самим.
Решение по шагам
1. Смотрим на исходный ответ
Сначала стоит посмотреть ответ без prefill и стоп-последовательностей. Каждая из трёх команд обёрнута в три обратные кавычки. Значит, хорошее начало — prefill из трёх обратных кавычек (сразу переходи к командам, без вступления) и стоп-последовательность из трёх кавычек.
add_user_message(messages, "Generate three different sample AWS CLI commands") add_assistant_message(messages, "```") text = chat(messages, stop_sequences=["```"])
Результат уже неплох, но не идеален: три команды есть, но в самом начале появилось слово bash.
2. Откуда взялось «bash»
Три обратные кавычки означают начало блока кода в markdown. После них можно указать идентификатор языка — тогда при отображении содержимое блока подсветится синтаксисом этого языка. Claude решил подставить bash, чтобы команды подсвечивались как bash. Нам это слово не нужно, поэтому дописываем bash в prefill сами — так Claude сразу ясно, что он уже внутри блока кода с командами bash.
add_assistant_message(messages, "```bash")
Стало лучше.
3. Направляем ответ фразой в prefill
Осталось две возможные проблемы:
- иногда приходит одна команда — признак того, что Claude хочет написать три отдельных блока кода;
- раз блок теперь bash, Claude может вставить bash-комментарии вроде «This command does XYZ» — а комментарии по условию не нужны.
Тут и пригождается подсказка: prefill может не только задавать символы разметки, но и сильно направлять ответ. Добавляем фразу «Here are all three commands in a single block without any comments», затем двоеточие и перевод строки — чтобы markdown начинался со следующей строки:
add_user_message(messages, "Generate three different sample AWS CLI commands")
add_assistant_message(
messages,
"Here are all three commands in a single block without any comments:\n```bash"
)
text = chat(messages, stop_sequences=["```"])
Теперь результат гораздо надёжнее: сколько ни запускай, почти всегда получается именно то, что нужно.
Дальше
Блок пройден. В оригинале после этого урока идут опрос удовлетворённости и официальный квиз Skilljar — Quiz on accessing Claude with the API (8 вопросов, проходится на Skilljar). Опрос здесь пропущен: в нём нет учебного материала. Проверить себя можно и нашим пробным экзаменом по этому блоку.
Оригинал урока: Structured data exercise.