Вступ: Коду байдужі ваші вібрації
Ось що потрібно знати про великі мовні моделі та код: вони надзвичайно впевнені та абсолютно байдужі до того, чи компілюється ваша програма. Claude Haiku 4.5 з радістю напише вам Python-скрипт, який вирішить вашу проблему, плюс ще дві, які він вигадав для розваги. Хитрість — єдина важлива хитрість — навчитися, як давати вказівки Claude Haiku 4.5 для точної генерації коду таким чином, щоб не залишати місця для вібрацій і максимально збільшити простір для істини. Вам не потрібна проза, яка звучить як код. Вам потрібен код, який діє як код. Є різниця.
Люди ставляться до промптів як до містичних заклинань — скажіть правильні слова, отримайте ідеальний додаток. Це карго-культ мислення. Код — це контракт. Якщо ви хочете точності від Claude Haiku, ви повинні написати контракт. «Створити веб-додаток» — це не контракт. «Згенерувати кінцеву точку FastAPI в Python 3.12, яка приймає JSON, перевіряє схему за допомогою Pydantic v2 і повертає 422 у разі помилок схеми з певним форматом корисного навантаження» — це контракт. Ось як давати вказівки Claude Haiku 4.5 для точної генерації коду: ви чітко визначаєте контракт.
Що це таке (і чим не є)
- Це посібник із отримання надійного коду, який можна протестувати, від Claude Haiku 4.5.
- Це не проповідь про те, що «ШІ замінює розробників». Інструменти не замінюють мислення.
- Він зосереджений на практичних промптах, структурі та запобіжниках: нудних частинах, які змушують магію працювати.
Якщо ви хочете, щоб код працював, вам потрібно дати Claude робоче визначення «працює». Якщо ви хочете точної генерації коду, вам потрібно визначити точність простими, тестованими термінами. У цьому вся суть.
Визначайте точність як юрист, а не як поет
«Точний» код — це не код, який «виглядає правдоподібно». Точність — це:
- Синтаксична валідність: він компілюється або запускається в інтерпретаторі.
- Семантична точність: він робить те, що зазначено в специфікації.
- Детермінована поведінка: ті самі вхідні дані, ті самі вихідні дані, в межах визначених меж похибки.
- Правильність версії: він використовує правильні SDK, версії API та функції мови.
Claude дасть вам те, що ви попросите. Якщо ви попросите «функцію, яка сортує список», ви, ймовірно, її отримаєте. Якщо ви попросите «стабільне сортування на місці з використанням семантики Timsort з O(1) додаткового простору», це інша обіцянка. «Як давати вказівки Claude Haiku 4.5 для точної генерації коду» починається з запису цих обіцянок у промпт.
Мінімальний життєздатний промпт, оновлений
Погано: «Напишіть Node API для задач».
Краще: «Напишіть Node 20 Express 4 API з маршрутом /tasks POST, який перевіряє поля {title: string, dueDate: ISO 8601} і відповідає 201 зі створеним об'єктом або 400 з деталями помилки».
Правильно: «Згенеруйте Node 20 Express 4 сервер з однією кінцевою точкою /tasks POST. Вимоги: 1) Перевірте тіло за допомогою [email protected]; 2) Поля: title (непорожній рядок, максимум 140), dueDate (дата ISO 8601 у майбутньому); 3) У разі успіху: 201 з {id: ULID, title, dueDate}; 4) У разі недійсності: 400 з {error: 'VALIDATION', details: array}; 5) Без бази даних; вбудована Map; 6) Включіть Jest 29 тестовий файл, що охоплює дійсні, недійсні (порожній заголовок, минула дата); 7) Надайте npm скрипти для test і dev; 8) Використовуйте ESM; 9) Не включайте сторонні коментарі.» Зверніть увагу на форму: версія мови, бібліотеки, обмеження, вихідні дані, помилки, тести та навіть структура пакета. Ви усунули неоднозначність. Завдання Claude — заповнити код, а не вимоги.
Шаблон каркасу: Система, Специфікація, Тести, Потім Код
Якщо ви хочете точної генерації коду від Claude Haiku 4.5, вам потрібно надати йому злітну смугу:
- Системне обрамлення (короткий повідок)
- Ви: «Ти пишеш високоякісний TypeScript для Node 20. Виводь лише блоки коду з іменами файлів і нічого іншого».
- Чому: Ви контролюєте тон і формат виводу. Не залишайте це на волю випадку.
- Вкажіть версії мови, вибір пакетів, семантику помилок, формати вводу/виводу, обмеження продуктивності та обмеження безпеки.
- Скажіть Claude спочатку написати юніт-тести. Тести визначають «точний» краще, ніж прикметники. Якщо рядок коду не обслуговує тест, він є декоративним.
- Лише після тестів. Так, це в основному TDD, але з роботом, якому ніколи не набридає писати шаблонний код.
- Інструкції для повторних запусків
- «Якщо тести не проходять або імпорти не збігаються, оновіть лише частини, що не вдаються. Не переписуйте весь проєкт».
Claude добре працює, коли має контекст і обмеження. Дайте йому обмеження.
Закріплення версії не є необов'язковим
Навчальні дані Claude містять багато старих і нових документів. Це ввічливий спосіб сказати, що він бачив багато суперечливих порад. «Використовуйте React Router» — це розпливчасто. «Використовуйте [email protected] з data routers» — це вказівка. Не довіряйте значенням за замовчуванням: - Мови: закріпіть Python 3.12, Node 20, Go 1.22, Java 21 — будь-що, що ви насправді запускаєте.
- Фреймворки: вкажіть точні основні версії та будь-які прапори, що змінюють поведінку.
- Cloud SDK: закріпіть версії; aws-sdk v2 проти v3 має значення.
- Лінтери/форматери: вкажіть правила, щоб уникнути переписувань «стиль пінг-понг».
Якщо ви не закріпите, ви отримаєте попурі найкращих хітів за п'ять років дописів у блогах. Точна генерація коду є алергічною до ностальгії.
Спочатку схема, завжди
Не просіть структури «профілю користувача». Визначте схеми в промпті та вимагайте перевірки:
- JSON Schema або типи Zod/Yup в JS/TS
- Protobuf або Avro для сервісів
Потім змусьте Claude застосовувати схеми на межах — вхідні дані API, записи в базу даних і черги повідомлень. Запитуйте явні корисні навантаження та коди помилок. Точність любить схеми. Неоднозначність — ні.
Зробіть це спостережуваним, або не вдавайте, що це реально
Скажіть Claude додати журнали, метрики та трасування там, де вони вам потрібні, і тримати їх тихими там, де вони вам не потрібні. Хороший промпт містить:
- Політика ведення журналів: рівні, редагування PII, структура (JSON-логи, будь ласка)
- Метрики: час на запит, кількість помилок
- Кінцеві точки перевірки працездатності: /healthz, що доводить, що залежності працюють
Claude додасть те, що ви попросите. Якщо ви не попросите, ви отримаєте оператори print — якщо вам пощастить.
Промпти «Спочатку тест» перемагають «Просто повірте мені»
Хороший спосіб дати вказівки Claude Haiku 4.5 для точної генерації коду — зробити тести джерелом істини. Приклад:
«Напишіть pytest тести для функції normalize_email(s), яка:
- переводить у нижній регістр локальну та доменну частини;
- видаляє крапки лише в локальній частині для gmail.com;
- видаляє підадреси (+tag) лише для gmail.com;
- відхиляє вхідні дані без одного символу @ або з пробілами;
- зберігає unicode домен punycode як є.
Охопіть крайні випадки. Після написання тестів реалізуйте функцію, щоб їх пройти.
Claude часто пише кращий код, коли змушений задовольняти описані вами тести. Якщо це не так, у вас є конкретний збій, а не аргумент вібрацій.
Без галюцинацій за конструкцією
Ви не можете усунути галюцинації, але ви можете їх обмежити:
- Запитуйте цитати або вихідні URL-адреси лише тоді, коли існують джерела. Для методів SDK вимагайте посилання на документи та вимагайте, щоб код відповідав цим документам.
- Для приватних API вставте специфікацію в промпт. Не очікуйте, що Claude знає ваші внутрішні кінцеві точки.
- Для бібліотек із заплутаними API включіть приклад фрагмента з офіційних документів і скажіть Claude дотримуватися його.
Точний код — це переважно точні посилання. Дайте Claude посилання.
Посібники зі стилю: найменш сексуальна, найкорисніша річ
Claude пише код у будь-якому стилі, який він робить висновок. Це рецепт плинності. Вставте свій посібник зі стилю. Вкажіть:
- Форматування (Prettier, Black, gofmt за замовчуванням)
Також вимагайте короткий коментар із обґрунтуванням для неочевидних варіантів. Майбутнє ви подякує вам, а поточний Claude створить менше PR «виправлень».
Довгі промпти, короткі вихідні дані
Інший спосіб думати про те, як давати вказівки Claude Haiku 4.5 для точної генерації коду: витрачайте свої слова на промпт, а не на вихідні дані. Ви хочете:
- Вичерпні обмеження в промпті
- Мінімальна кількість сторонніх оповідань у вихідних даних
Скажіть йому придушити пояснення та повертати лише блоки коду з іменами файлів і коротким README. Якщо ви хочете коментарі, запитуйте їх в окремому запуску. Перемішування прози та коду — це те, як помилки прокрадаються, одягнені в монокль і циліндр.
Уточнення: тісний цикл, який справді працює
Найшвидший шлях до надійного коду — це не «зробити все правильно з першої спроби». Це короткі, коригувальні цикли:
- Запустіть локально. Вставте вихідні дані тесту, що не вдається, і помилки компілятора назад у Claude дослівно.
- Інструктуйте: «Змініть лише мінімальну кількість необхідних рядків; не змінюйте сигнатури функцій, якщо цього не вимагають тести, що не вдаються».
- Повторюйте, доки не стане зеленою.
Claude чудово застосовує відмінності, коли ви точно кажете, що зламалося. Не перефразовуйте журнали помилок. Вставте їх. Журнали — це правда.
Безпека — це функція, а не післямова
Оскільки моделі навчаються на загальнодоступному коді (хорошому, поганому та проклятому), ви хочете зробити безпеку першокласною вимогою:
- Явно забороніть eval, shell=True і SQL з рядковим типом
- Вимагайте параметризовані запити, захист CSRF і обмеження швидкості
- Запитайте закріплення залежностей плюс файл блокування
- Вимагайте обробки секретів через змінні середовища або менеджер секретів
Безпечний за замовчуванням промпт дає безпечніший код. Промпт «ми виправимо це пізніше» дає заголовки.
Продуктивність: скажіть, що означає «швидко»
«Зробіть це швидко» перекладається як «робіть що завгодно». Натомість вкажіть метрики:
- Цільові показники затримки (p95 < 50 мс для вбудованої пам'яті, p95 < 300 мс для операцій з базою даних)
- Обмеження пам'яті (RSS < 150 МБ)
- Складність часу (має бути O(n log n), а не O(n^2))
Claude вибере алгоритми, щоб відповідати встановленому вами бюджету. Дайте йому бюджет.
Документація: достатньо, щоб залучити незнайомця
Запитайте Claude README, який включає:
- Інструкції з налаштування з точними версіями
- Команди для тестування, лінтування, перевірки типів, запуску
- Приклад запитів/відповідей
- Обмеження та відомі компроміси
«Точний код» включає точну документацію. Вони є частиною результату.
Конкретні шаблони промптів, які ви можете вкрасти
Шаблон: Кінцева точка внутрішнього інтерфейсу
Система: Ви ретельний інженер Python 3.12. Виводьте лише блоки коду з іменами файлів.
Користувач:
- Створіть програму FastAPI 0.111 з кінцевою точкою POST /convert.
- Запит: {amount: Decimal as string, from: 'USD'|'EUR', to: same}.
- Перевірте за допомогою pydantic v2; поверніть форму 422 у разі помилок схеми.
- Використовуйте чисту функцію convert(amount, from, to) з фіксованими тарифами {USD:1, EUR:1.1}.
- Поверніть {amount: string, currency: string} з 200.
- Включіть pytest тести, що охоплюють дійсні, недійсні (погане десяткове число, невідомий код) і крайні випадки (0).
- Надайте pyproject.toml із закріпленими залежностями; включіть конфігурації ruff і mypy.
- Без мережевих викликів, без коментарів.
Шаблон: Утиліта CLI
Система: Ви пишете Go 1.22. Виводьте лише блоки коду з іменами файлів.
Користувач:
- Створіть CLI з назвою slugify, який зчитує stdin і друкує безпечні для URL сліги.
- Правила: нижній регістр, лише ASCII, роздільники дефісом, згортання пробілів, видалення розділових знаків.
- Надайте main.go і slugify_test.go з табличними тестами.
- Використовуйте лише Go stdlib.
- Включіть Makefile з цілями test і build.
Шаблон: Компонент інтерфейсу
Система: Ви прагматичний інженер React, націлений на React 18 + TypeScript.
Користувач:
- Реалізуйте компонент <DebouncedInput>.
- Властивості: value: string, onChange(value): void, delay=300.
- Використовуйте useRef/useEffect; без сторонніх хуків.
- Включіть vitest тести з підробленими таймерами.
- Надайте мінімальну історію Storybook.
Ці шаблони демонструють, як давати вказівки Claude Haiku 4.5 для точної генерації коду, закріплюючи версії, визначаючи поведінку та вимагаючи тести.
Відмова від Clever: коли сказати «Не оптимізуйте»
Якщо ви не хочете передчасних мікрооптимізацій (а ви їх не хочете), скажіть про це:
- «Віддавайте перевагу читабельності над винахідливістю; без маніпулювання бітами, якщо цього не вимагають тести».
- «Без рекурсії, якщо ітерація зрозуміліша».
- «Без метапрограмування; явне > неявного».
Claude любить вражати. Не дозволяйте йому. Змусьте його пройти тести та бути читабельним. Цього достатньо, щоб вразити.
Sider.AI у робочому процесі, де це дійсно допомагає Я бачив, як люди жонглюють промптами у випадкових вкладках чату, ніби це ритуал продуктивності. Використовуйте робочий простір, який розуміє контекст коду. Sider.AI, наприклад, побудований навколо збереження вашої специфікації, коду, відмінностей і журналів тестування у полі зору, тому цикл «вставте помилку, виправте рядок» справді тісний. Це не магія; це нудне риштування, яке запобігає втраті сюжету. Якщо ваш інструмент зберігає контракт, тести та код в одній розмові — не набридаючи вам конфетті — використовуйте його. Sider робить це. Як налагоджувати з Claude як з товаришем по команді, а не як з оракулом
- Вставте вихідні дані тесту, що не вдається, точно як є. Не підсумовуйте.
- Запитайте різницю: «Відповідайте уніфікованою різницею лише для файлу X».
- Для помилок під час виконання додайте найменший відтворюваний фрагмент і вимагайте пояснення плюс патч.
- Для помилок бібліотеки вставте витяг із документа, який, на вашу думку, застосовується, і запитайте: «Чи це правильний API для версії X? Якщо ні, оновіть код і наведіть правильний витяг».
Мета полягає в тому, щоб змусити Claude сперечатися з доказами. Ви приносите докази.
Парад підводних каменів (і як їх уникнути)
- Пастка «останнього» API: Не кажіть «використовуйте останню». Скажіть «використовуйте версію X.Y» і дотримуйтеся її.
- Порожній тестовий файл: Якщо ви не вимагаєте тести, ви їх не отримаєте.
- Помилка одного кадру: Сплануйте два-три коротких удосконалення. Це швидше, ніж один роздутий промпт.
- Неоднозначна політика помилок: Визначте коди стану та корисні навантаження. «Повернути помилку» нічого не означає.
- Незалежна залежність: Якщо код залежить від служби, яку ви не можете контролювати, заглушіть її. Запитуйте підробки.
Ваш контрольний список промптів (приклейте це біля свого монітора)
- Закріплена версія мови та середовища виконання
- Закріплені версії бібліотек
- Визначена семантика помилок (коди, форми)
- Спочатку тести, потім код
- Зазначені бюджети продуктивності
- Вказано стиль і структуру
- Обмежений формат виводу (імена файлів, блоки коду, відмінності)
- Короткий цикл уточнення з вставленими журналами
Якщо ви досягнете всіх десяти, Claude Haiku 4.5 зазвичай створює точну генерацію коду, яка виживає вдень.
Працюючий приклад: від розпливчастого до перевіреного
Розпливчастий промпт: «Напишіть функцію для безпечного розбору CSV».
Результат: ймовірно, добре, можливо, неправильно, напевно, не перевірено.
Точний промпт:
«Ви пишете Python 3.12. Виводьте лише блоки коду з іменами файлів.
Створіть csvsafe/init.py і csvsafe/reader.py з функцією read_rows(path: Path) -> list[dict[str,str]]. Вимоги: використовуйте csv.DictReader з newline='' і encoding='utf-8'; забороніть нульові байти; відхиляйте файли >10 МБ; обмежте стовпці до 100; видаліть BOM; розглядайте порожні клітинки як порожні рядки; викликайте ValueError з кодами повідомлень {FILE_TOO_LARGE, NULL_BYTE, TOO_MANY_COLUMNS}. Включіть тести в tests/test_reader.py з pytest, що охоплюють щасливий шлях, нульовий байт, файл 11 МБ, 101 стовпець і обробку BOM. Надайте pyproject.toml із закріпленими залежностями та чорною конфігурацією.
Ви отримаєте код, тести та обробку крайніх випадків. Потім ви запускаєте тести, вставляєте помилки та повторюєте з мінімальними відмінностями. Це точна генерація коду на практиці.
Про «Креативність» та інші маркетингові слова
Мені не потрібен «креативний» код. Мені потрібен правильний код. Залиште креативність для називання свого кота. Під час подання запитів Claude, креативність є природним побічним продуктом міцних обмежень. Правильні тести та чіткі специфікації створюють елегантні рішення. Неправильний промпт створює «перевинайдений base64 з емодзі». Не спокушайте його.
Несекретний секрет
Спосіб давати вказівки Claude Haiku 4.5 для точної генерації коду нудний: запишіть, що вам потрібно, закріпіть версії, визначте схеми, вимагайте тести та повторюйте з фактичними збоями. Ось і все. Ніякого містицизму. Просто інженерна дисципліна, з моделлю, яка може дуже швидко друкувати і не проти писати п'ятнадцять майже ідентичних тестових випадків.
І в цьому вся суть: точність не є гламурною. Промпти, які працюють, читаються як контрольний список TSA. Код, який поставляється, читається так, ніби він був написаний людиною, якій було небайдуже. Ви отримуєте обидва, ставлячись до моделі як до молодшого інженера, який процвітає за чіткими вимогами та в'яне за розпливчастими вказівками. Дайте йому контракт. Змусьте його пройти тести. Тоді, можливо, ви зможете довіряти йому — з тією довірою, яку ви даєте інструменту, а не пророку.
Висновок: менше чаклунства, більше гарантії
Якщо ви хочете чаклунства, йдіть на магічне шоу. Якщо ви хочете програмне забезпечення, яке компілюється та поводиться, пишіть промпти, які функціонують як гарантії. Як давати вказівки Claude Haiku 4.5 для точної генерації коду — це не про квітчасті фрази чи секретні ключові слова. Йдеться про обмеження, тести, версії та цикли зворотного зв'язку. Зробіть ці чотири речі, і ви отримаєте код, який працює. Пропустіть їх, і ви отримаєте красиво відформатовану вигадку.
Коду байдужі ваші відчуття. На щастя, тестам теж.
FAQ (Часті запитання)
Q1: Який найпростіший спосіб спонукати Claude Haiku 4.5 до точної генерації коду?
Ставтеся до цього як до контракту: фіксуйте версії, визначайте схеми, вказуйте формати помилок і вимагайте спочатку тести. Чим чіткіші обмеження, тим точнішим буде код.
Q2: Як зменшити галюцинації, коли Claude пише код?
Вставте авторитетну документацію або специфікації та вимагайте дотримання саме цих API. Для приватних кінцевих точок додайте власну специфікацію — не очікуйте, що він буде гадати.
Q3: Чи варто просити Claude створити тести, чи писати їх самостійно?
Попросіть Claude спочатку згенерувати тести, а потім реалізуйте код, щоб їх задовольнити. Тести визначають точність краще, ніж прикметники, і підтримують чесність моделі.
Q4: Наскільки конкретним має бути закріплення версій у підказках?
Дуже конкретним: середовище виконання мови, основна/додаткова версія фреймворку та версії SDK. «Остання» запрошує суперечливі шаблони; точність залежить від стабільних цілей.
Q5: Яке місце займає Sider.AI у підказках для точного коду?
Використовуйте Sider.AI, щоб зберігати специфікації, код, відмінності та журнали тестування в одному циклі. Це не магія — це просто зберігає контекст, щоб виправлення Claude відстежували ваші фактичні помилки.