Разум: ответ с формой
Вы узнаете
Почему программа просит у агента ответ с фиксированной формой и как она отклоняет ответ с неверной формой.
Когда вы говорите с агентом, вы читаете свободный текст. Когда ответ читает программа, свободный текст мешает: она не отличит фразу от просьбы что-то запустить. Поэтому у агента просят ответ с формой: вид и столько аргументов, сколько нужно этому виду. В этой спецификации 3 вида: 0 сказать, 1 спросить и 2 вызвать инструмент. Фразе аргумент не нужен; вопросу и вызову инструмента нужен хотя бы 1. Программа сначала проверяет форму и действует, только если она подходит. Вызов инструмента без имени файла отклоняется до того, как что-либо запустится. Отрицательный контроль вносит ошибку в одном месте: поставьте NEEDS_CALL равным 0, и тест the_bad_reply_is_refused покраснеет, потому что ответ без аргументов больше не считается слишком коротким.
Попробуйте
Откройте виджет и найдите, какому виду аргумент не нужен; затем запустите спецификацию, поставьте NEEDS_CALL равным 0 и прочитайте, какой тест падает и почему. Верните строку и запустите снова.
Three kinds of agent reply, how many arguments each needs, and the check a program runs before it acts on one. Lesson 19 of the Vibecoding from zero course.
specs/vibecoding/agent_mind.t27
// SPDX-License-Identifier: Apache-2.0
; specs/vibecoding/agent_mind.t27 -- vibecoding lesson 19: the mind of an agent, an answer with a shape.
; When a program has to read an agent's answer, free text is not enough: the agent hands back a
; reply with a fixed shape, a kind plus the arguments that kind needs. A program refuses a reply
; whose shape is wrong before it acts on it. Kinds: 0 say, 1 ask, 2 call a tool.
; A sentence needs no argument; a question needs one; a tool call needs at least one.
; Run the tests, then plant the bug named at the bottom and watch one test turn red.
module vibecoding_agent_mind;
pub const KIND_SAY : u8 = 0;
pub const KIND_ASK : u8 = 1;
pub const KIND_CALL : u8 = 2;
pub const KIND_COUNT : u8 = 3;
; Arguments each kind needs at least.
pub const NEEDS_SAY : u8 = 0;
pub const NEEDS_ASK : u8 = 1;
pub const NEEDS_CALL : u8 = 1;
; A good reply: a tool call that carries one argument (the file to read).
pub const GOOD_KIND : u8 = 2;
pub const GOOD_ARGS : u8 = 1;
; A bad reply: a tool call that names no file.
pub const BAD_KIND : u8 = 2;
pub const BAD_ARGS : u8 = 0;
; A reply of a kind that does not exist.
pub const ODD_KIND : u8 = 3;
test the_three_kinds_are_numbered_in_a_row {
assert KIND_SAY == 0;
assert KIND_ASK == 1;
assert KIND_CALL == 2;
assert KIND_COUNT == KIND_CALL + 1;
}
test a_sentence_needs_no_argument {
assert NEEDS_SAY == 0;
}
test the_good_reply_has_enough_arguments {
assert GOOD_KIND == KIND_CALL;
assert GOOD_ARGS >= NEEDS_CALL;
}
; The negative control. The bad reply carries no argument and must be refused: it has fewer
; arguments than a call needs. Plant the bug by setting NEEDS_CALL to 0: this test turns red.
test the_bad_reply_is_refused {
assert BAD_KIND == KIND_CALL;
assert BAD_ARGS < NEEDS_CALL;
}
test an_unknown_kind_is_refused {
assert ODD_KIND >= KIND_COUNT;
}
Все уроки
Модуль 1 · Что такое вайбкодинг
Вы описываете, агент пишет, вы запускаете и проверяете. Что такое программа, и пять мифов, проверенных тестом.
Модуль 2 · Ваш рабочий стол
Редактор с агентом рядом, десять команд терминала и чтение сообщения об ошибке.
Модуль 3 · Точки сохранения в git
Коммит это точка сохранения, ветка это безопасная проба, а ключ это пара, одна половина которой остаётся приватной.
Модуль 4 · Промптинг
Части промпта, пример вместо прилагательного и один маленький шаг за раз.
Модуль 5 · Рабочий цикл
Четыре фазы от идеи до выпуска, цикл из четырёх шагов и что делать, когда вы застряли.
Модуль 6 · Тест как судья
Тест говорит да или нет, подложенная ошибка показывает, что тест работает, а дифф читают до того, как принять.
Модуль 7 · Из чего состоит агент
Чем агент отвечает, что он умеет делать с инструментами и что хранит между сообщениями.
Модуль 8 · Начальный бот
Бот это цикл сообщений, бот строится из спеки, а секрет остаётся вне репозитория и промпта.
Модуль 9 · Ваш собственный проект
Спека для вашей идеи, одна величина, измеренная после запуска, и честный план на следующий месяц.