Пример сильнее прилагательного
Вы узнаете
Почему один пример с нужным результатом задаёт правило точнее прилагательного и зачем добавлять второй пример.
Прилагательное вроде больше или короче подходит ко многим правилам, поэтому агент выбирает одно из них, и не всегда твоё. Пример входа с нужным выходом подходит к гораздо меньшему числу правил. В prompt_example.t27 ты имеешь в виду правило прибавить 3, а примеры такие: из 1 получить 4, из 2 получить 5 и из 5 получить 8. Начальный пример подходит двум правилам, прибавить 3 и умножить на 3 и прибавить 1, поэтому выбрать между ними он не может. Второй пример, из 2 получить 5, отсекает другое правило, потому что оно дало бы 7. В уроке подкладывается одна ошибка: замени шаг с 3 на 2, и примеры не проходят.
Попробуйте
Открой таблицу и найди строку, где правило B перестаёт совпадать; затем в спецификации замени A_STEP на 2 и сосчитай упавшие тесты.
One example input and output fits two rules; a second example drops one. Why an agent follows an example better than the word bigger. Vibecoding from zero, Prompting.
specs/vibecoding/prompt_example.t27
// SPDX-License-Identifier: Apache-2.0
; Vibecoding, module Prompting, lesson 2: an example beats an adjective.
; "Make it bigger" fits a hundred rules. An example input and the output you want fits few.
; Here the wanted rule is "add 3". One example fits two rules; a second example drops one of them.
module vibecoding_prompt_example;
; The examples you give the agent: inputs and the outputs you want back.
pub const EX_IN : [3]u8 = [1, 2, 5];
pub const EX_OUT : [3]u8 = [4, 5, 8];
; Rule A is the one you meant: add 3. Rule B is another rule an agent could read from one example.
pub const A_STEP : u8 = 3;
pub const B_MUL : u8 = 3;
pub const B_ADD : u8 = 1;
pub fn rule_a(x: u8) -> u8 {
return x + A_STEP;
}
pub fn rule_b(x: u8) -> u8 {
return x * B_MUL + B_ADD;
}
; How many examples a rule must match before it is the rule you meant.
pub const EXAMPLES_GIVEN : u8 = 3;
test the_first_example_fits_both_rules {
assert EX_OUT[0] == EX_IN[0] + A_STEP;
assert EX_OUT[0] == EX_IN[0] * B_MUL + B_ADD;
}
test the_second_example_rules_out_b {
assert EX_OUT[1] == EX_IN[1] + A_STEP;
assert EX_OUT[1] != EX_IN[1] * B_MUL + B_ADD;
}
test every_example_fits_rule_a {
assert EX_OUT[0] == EX_IN[0] + A_STEP;
assert EX_OUT[1] == EX_IN[1] + A_STEP;
assert EX_OUT[2] == EX_IN[2] + A_STEP;
}
test the_last_example_is_read {
assert EX_IN[EXAMPLES_GIVEN - 1] == 5;
assert EX_OUT[EXAMPLES_GIVEN - 1] == 8;
}
Все уроки
Модуль 1 · Что такое вайбкодинг
Вы описываете, агент пишет, вы запускаете и проверяете. Что такое программа, и пять мифов, проверенных тестом.
Модуль 2 · Ваш рабочий стол
Редактор с агентом рядом, десять команд терминала и чтение сообщения об ошибке.
Модуль 3 · Точки сохранения в git
Коммит это точка сохранения, ветка это безопасная проба, а ключ это пара, одна половина которой остаётся приватной.
Модуль 4 · Промптинг
Части промпта, пример вместо прилагательного и один маленький шаг за раз.
Модуль 5 · Рабочий цикл
Четыре фазы от идеи до выпуска, цикл из четырёх шагов и что делать, когда вы застряли.
Модуль 6 · Тест как судья
Тест говорит да или нет, подложенная ошибка показывает, что тест работает, а дифф читают до того, как принять.
Модуль 7 · Из чего состоит агент
Чем агент отвечает, что он умеет делать с инструментами и что хранит между сообщениями.
Модуль 8 · Начальный бот
Бот это цикл сообщений, бот строится из спеки, а секрет остаётся вне репозитория и промпта.
Модуль 9 · Ваш собственный проект
Спека для вашей идеи, одна величина, измеренная после запуска, и честный план на следующий месяц.