-
Notifications
You must be signed in to change notification settings - Fork 0
Tutorial 3 Your First Agent Task ru
Цель: добавить совершенно новую команду в CLI — от начала до конца —
направляя своего агента. Мы добавим lockedin endorse: она подтверждает навыки
совершенно незнакомых людей в областях, которых у них почти наверняка нет. В духе
бренда.
Это сердце учебника. Вы отработаете настоящий цикл: спецификация → тесты → реализация → зелёный барьер → ревью.
← Назад: Урок 2 Как работает код · Далее: Урок 4 Промптинг и ревью
Прежде чем что-либо промптить, напишите спецификацию сами простым языком. Расплывчатые запросы дают расплывчатый код — от человека или от агента.
endorseпечатает 5–7 строк, каждая подтверждает случайно выбранного человека (переиспользуйте существующий пулNAMES) за случайно выбранный баззворд-навык (новый пул). Заканчивается сатирической однострочной репликой. Должна быть доступна какlockedin endorse, как внутрисессионный/endorse, и появляться вhelp. Вся случайность должна использовать помощникиpick/shuffleс seed, чтобы вывод оставался детерминированным.npm testдолжен оставаться зелёным, и должен быть новый тест, фиксирующий хотя бы один инвариант.
Этот абзац — то, что вы передадите агенту. Обратите внимание, он называет ограничения из Главы 2 (генератор с seed, тестовый барьер, привычка к инвариантам).
Начните с запроса плана. Это ваш шанс поймать плохой подход до того, как изменится хоть один файл.
«Я хочу добавить команду
endorseв LockedIn CLI. Вот спецификация: [paste your spec]. Прежде чем писать код, скажи, какие файлы ты изменишь и каков твой подход, чтобы я его одобрил. Следуй существующим паттернам для команды вродеconnect.»
Хороший план упоминает: новый пул SKILLS + renderEndorse() в
src/lockedin.js, его подключение в dispatch() и handleSlash(), добавление
строки в renderHelp(), экспорт новой функции/пула, и добавление тестов в оба
файла тестов. Если план упускает правило генератора с seed или тесты, скажите об
этом сейчас.
Попросите агента написать тесты до реализации. Тесты-сначала превращают вашу спецификацию в нечто исполняемое и держат агента честным.
«Отлично. Сначала добавь только падающие тесты: unit-тест, что
renderEndorse()возвращает текст, упоминающий известный навык и хотя бы 5 подтверждений, и тестcli.test.js, чтоlockedin endorseвыходит с 0 и печатает подтверждение. Используй фиксированный seed. Пока не реализуйrenderEndorse— давай сначала увидим, как тесты падают.»
Запустите их и посмотрите, как они падают по правильной причине (функции ещё нет):
npm testТеперь дайте зелёный свет реализации:
«Теперь реализуй это, чтобы эти тесты прошли, следуя паттерну
connect. Добавь пулSKILLSиз ~25 баззворд-навыков,renderEndorse(), возвращающую строку, подключиdispatchиhandleSlash, добавь строкуhelp, и экспортируй то, что добавил. Используй толькоpick/shuffleдля случайности.»
То, что производит агент, должно выглядеть очень похоже на остальной файл.
Например, пул SKILLS и рендерер:
const SKILLS = [
'Thought Leadership', 'Синергия', 'Сторителлинг', 'Вайбы',
'Стратегический сон', 'Выравнивание стейкхолдеров', 'Радикальная честность', /* ...~25 всего... */
];
function renderEndorse() {
const people = shuffle(NAMES).slice(0, 5 + Math.floor(rand() * 3)); // 5–7
const skills = shuffle(SKILLS);
const out = [''];
people.forEach((n, i) =>
out.push(' ✔ Подтверждён навык ' + skills[i % skills.length] + ' у ' + n));
out.push('', ' Вы подтвердили навыки 6 незнакомцев, которые не можете проверить. В течение часа они подтвердят ваши.');
return out.join('\n');
}…плюс по одной строке в dispatch() и handleSlash(), строка в renderHelp(),
и SKILLS, renderEndorse, добавленные в module.exports.
npm testЗелёный? Вы только что выкатили функцию с агентом, тесты-сначала. Не зелёный? Это нормально — перейдите к циклу итераций Главы 4 и скажите агенту точно, что упало.
Затем осмотрите глазами настоящую вещь (тесты проверяют текст, но вам всё равно стоит посмотреть):
node bin/lockedin.js endorse
LOCKEDIN_SEED=1 node bin/lockedin.js endorse # воспроизводимоНикогда не принимайте diff, который вы не прочитали. Пробегитесь конкретно по этому:
-
Следовал ли паттерну? Новая команда должна отражать
connect— никаких новых зависимостей, никакогоconsole.logвнутриsrc/. -
Только генератор с seed? Поищите в diff
Math.random. Его быть не должно. - Тронул ли что-то, что не должен? Изменение должно быть аддитивным; несвязанные строки не должны двигаться.
-
Осмысленный ли новый тест? Он должен падать, если кто-то позже сломает
функцию — а не просто утверждать
true.
Если что-то не так, попросите исправить (Глава 4). Если хорошо — вы закончили.
Проделайте весь цикл выше по-настоящему. Затем, для дополнительного зачёта, попросите агента расширить это:
- «Сделай, чтобы
endorseпринимал необязательное имя:lockedin endorse Adaдолжен подтверждать именно Ada. Добавь тест, держи барьер зелёным.»
Вы построили функцию от начала до конца. Последняя глава — о том, как делать это гладко — промптинг и ревью как ведущий инженер.
Далее: Урок 4 Промптинг и ревью
Tutorial
- 1 · Orientation
- 2 · How the Code Works
- 3 · Your First Agent Task
- 4 · Prompting & Reviewing
- 5 · Localization
Reference
Satire · Sátira · 風刺. Not affiliated with LinkedIn. GPL-3.0-or-later.