Čtyři zásady, díky kterým fungují všechny prompty níže
Než se pustíme do promptů, tady jsou pravidla, která mají všechny společná. Jejich doplnění do libovolného promptu na programování zlepší výstup víc než změna modelu.
Uveďte svou verzi. Trénovací data se přiklánějí k té hlavní verzi, o které se toho napsalo nejvíc, a to často není verze, kterou používáte. Používáme [framework] [verze], [jazyk] [verze] zabrání většině zastaralých odpovědí.
Omezte rozsah změn (diff). Když požádáte o opravu, často dostanete refaktoring. Změň co nejméně, zachovej stávající strukturu a názvy a u každého upraveného řádku uveď jednořádkový důvod je nejužitečnější věta v celém tomto dokumentu.
Žádejte hypotézy před řešeními. Model, kterého se zeptáte, co je špatně, vám dá odhad podaný jako závěr. Model, kterého poprosíte o seřazené příčiny a levné kontroly, vám dá plán na debugging.
Vyžadujte popis možného dopadu. Co by to mohlo rozbít a řeší to příčinu, nebo jen příznak? zachytí nejnákladnější typ pomoci od AI: změnu, po které příznak zmizí, ale chyba zůstane.
Debugging
1. Seřazené hypotézy
Tady je chyba, relevantní kód a to, co jsem už vyloučil. Ještě mi nedávej opravu. Vypiš čtyři nejpravděpodobnější příčiny seřazené podle pravděpodobnosti a u každé nejlevnější kontrolu, která by ji potvrdila nebo vyloučila. Chyba: [vlož]. Kód: [vlož]. Už vyloučeno: [seznam]. Stack: [jazyk, framework, verze].
2. Přerušovaná chyba
Tohle selhává nepravidelně, přibližně [frekvence], za podmínek [podmínky]. Vypiš kategorie přerušovaných chyb, které by mohly způsobit tento konkrétní příznak: časování, pořadí, vyčerpání zdrojů, externí závislost, stav prosakující mezi běhy, hodiny nebo časová zóna, cachování. U každé napiš, co v kódu podporuje nebo vyvrací tuto možnost, a co přesně bych měl logovat, abych je odlišil. Kód: [vlož].
3. Lokálně to funguje
Tohle funguje lokálně a selhává v [prostředí]. Vypiš všechny kategorie rozdílů prostředí, které by mohly způsobit tento konkrétní příznak: konfigurace, proměnné prostředí, verze, souborový systém a citlivost na velikost písmen, časová zóna a lokalizace, síť a DNS, oprávnění, limity zdrojů a rozdíly v buildu nebo bundlování. Seřaď podle pravděpodobnosti vzhledem k příznaku a u každé mi dej diagnostický příkaz.
4. Vysvětli opravu, než ji použiju
Vysvětli, proč tato oprava funguje, co neopravuje a co by mohla rozbít. Pokud je skutečná příčina jinde a jde jen o záplatu na příznak, řekni to přímo.
Code review
5. Zkontroluj diff
Zkontroluj tento diff jako náročný reviewer. Kategorie v pořadí podle priority: chyby ve správnosti, bezpečnostní problémy, neošetřené selhání, race conditions a pak styl. U každého nálezu uveď závažnost, konkrétní řádek a proč je to důležité v tomto konkrétním kódu, ne obecně. Nekomentuj formátování. Pokud je diff v pořádku, řekni to, místo abys vymýšlel nálezy. Konvence: [popis]. Diff: [vlož].
6. Bezpečnostní kontrola
Zkontroluj tento kód konkrétně na bezpečnostní problémy: injection, mezery v autentizaci a autorizaci, nebezpečnou deserializaci, tajné klíče v kódu nebo logách, nevalidovaný vstup, který se dostane k citlivé operaci, a rizika závislostí. U každého uveď konkrétní útočnou cestu, ne jen název kategorie. Jasně napiš, co nejsi schopen posoudit bez [nasazení, vrstva autentizace, citlivost dat].
7. Audit možných selhání
U každého externího volání v tomto kódu popiš, co se stane, když je pomalé, když selže, když vrátí neočekávaná data a když uspěje jen částečně. Které z toho je aktuálně neošetřené a které by proběhlo tiše?
Ten poslední najde víc reálných problémů z produkce než obecná revize, protože se ptá na cesty, na které nikdo nenapsal test.
Refaktoring a architektura
8. Plán refaktoringu
Navrhni postupný plán, jak refaktorovat [popis]. Omezení: veřejné API [x] se nemůže změnit, nasazujeme kontinuálně, takže každý krok musí být samostatně nasaditelný, a po každém kroku musí testy procházet. U každého kroku uveď změnu, riziko, jak ji ověřit a jak ji vrátit zpět. Seřaď podle rizika, od nejnižšího. Kód ještě nepiš.
9. Obhaj druhou stranu
Vybírám [přístup A] před [přístup B] pro [kontext a omezení]. Předlož nejsilnější argumenty pro B. Co by musela splňovat naše omezení, aby bylo B správně, a platí u nás něco z toho? Nedocházej k závěru, že jsou obě varianty stejně dobré.
10. Pochop, co jsi zdědil
Tady jsou hlavní zdrojové soubory. Vytvoř: vstupní body, tok dat od požadavku k odpovědi, stav, který je sdílený, a kde se mění, externí závislosti a co se stane, když každá z nich není dostupná, a tři oblasti, kde nejpravděpodobněji jsou chyby na základě složitosti a provázanosti. Výslovně napiš, co nejsi schopen určit z toho, co jsem poskytl.
Ta poslední instrukce je důležitá. Modely popíšou chování souboru, který jste nevložili, jen odhadem z jeho názvu. Vynucený výslovný seznam nejasností vám řekne, co si máte přečíst.
Testy
11. Testy, které byste nenapsali
Napiš testovací případy pro tuto funkci se zaměřením na vstupy, které jsem pravděpodobně nezvážil: hraniční hodnoty, prázdné a null hodnoty, unicode, velmi velké hodnoty, souběžná volání a jakékoli implicitní předpoklady v implementaci. U každého testu napiš, jaký předpoklad ověřuje. Funkce: [vlož].
12. Prověř testovací sadu
Tady je funkce a její stávající testy. Jaké chování není pokryté? Konkrétně: chybové cesty, hraniční hodnoty, interakce mezi parametry a cokoli, co implementace dělá, ale žádný test to neověřuje. Stávající testy nepřepisuj.
Ten druhý prompt má vyšší hodnotu, a přitom se používá zřídka. Procenta pokrytí vám řeknou, které řádky se vykonaly, ne které chování je skutečně ošetřené, a přesně v tomto rozdílu žijí regrese.
Postup druhého názoru
Nejúčinnější zvyk z celého tohoto balíčku, a jediný, který vyžaduje víc než jeden model.
Získejte odpověď od jednoho modelu. Pak přepněte a předejte ji dál:
Jiný vývojář navrhl toto řešení tohoto problému. Najdi, co na něm je špatně: správnost v hraničních případech, souběžnost, zpracování chyb, výkon při [rozsah], nebo jednodušší přístup, který byl přehlédnut. Pokud je opravdu v pořádku, řekni to jasně, místo abys vymýšlel výhrady. Problém: [vlož]. Navrhované řešení: [vlož].
Existují dva výsledky a oba jsou užitečné. Buď druhý model najde skutečnou trhlinu, o které teď víte ještě před sloučením, nebo souhlasí i přesto, že byl vyzván k nesouhlasu, což je smysluplné potvrzení. Iterování se stejným modelem vám nedá ani jedno, protože model, který posuzuje svůj vlastní výstup, s ním většinou souhlasí.
Použijte to na rozhodnutí, u kterých by byla chyba nákladná: změna schématu, oprava souběžnosti, cokoli, co se týká autentizace nebo peněz. Ne na běžnou práci. Celý postup na jednom místě najdete v porovnání modelů vedle sebe, přepínání modelů uprostřed konverzace a psaní a debugování kódu s více modely.
Na co si dát pozor
Vymyšlená API. Sebevědomě znějící názvy metod, parametrů a konfiguračních klíčů, které neexistují, obzvlášť u knihoven, které se nedávno změnily. Signatura bude vypadat správně. Než na něčem neznámém začnete stavět, ověřte to v reálné dokumentaci.
Žádný signál jistoty. Správná oprava a jemně chybná oprava přijdou se stejnou jistotou v tónu. Tón vám nic neřekne.
Tichý rozšiřující se rozsah. Přesně na to existuje druhá zásada.
Bezpečnostní divadlo. Vyjmenování kategorií zranitelností ve vašem kódu je užitečný první průchod. Není to audit, a model nezná váš model hrozeb, nasazení ani citlivost dat.
Prompty, které používáte každý týden, mějte uložené někde, odkud je můžete zkopírovat, a trvalá omezení vložte do instrukcí projektu, aby platila automaticky pro každý chat v tomto projektu.
- V každém promptu na programování uveďte jazyk, framework a verzi
- Do každého promptu, který generuje kód, doplňte větu omezující rozsah změn
- Než požádáte o opravu, vyžádejte si seřazené hypotézy a levné kontroly
- Vždy se zeptejte, co by oprava mohla rozbít a jestli řeší jen příznak
- Postup druhého názoru použijte na vše, u čeho by byla chyba nákladná
- Ptejte se, co stávající testovací sada nepokrývá, nejen o další testy
- Neznámá API si ověřte v reálné dokumentaci
- Prompty, které používáte každý týden, mějte uložené tam, odkud je zkopírujete
Časté dotazy
Fungují tyto prompty jen s Claude?
Ne. Jsou napsané pro styl dlouhého kontextu a pečlivého uvažování, ve kterém vyniká Claude, ale fungují přímo i s GPT a Gemini. Několik z nich je dokonce lepší používat napříč modely: prompt na druhý názor vyžaduje dva modely a prompt "obhaj druhou stranu" je užitečnější, když argumentující model nedělal původní rozhodnutí.
Který model použít pro který prompt?
Jako výchozí bod: Claude na jemné uvažování, neznámou architekturu a vysvětlení, proč se něco chová tak, jak se chová; GPT na rychlou implementaci na dobře prošlapaném terénu a striktní strukturovaný výstup; model s velkým kontextem, když otázka zabírá víc kódu, než se pohodlně vejde do běžného promptu. Pak si to týden ověřujte na vlastních srovnáních, protože správná odpověď závisí víc na vašem stacku než na jakémkoli benchmarku.
Nahrazuje to agentní nástroj na programování?
Ne, řeší jiné problémy. Agent žije ve vašem repozitáři a upravuje soubory. Tyto prompty jsou pro vrstvu uvažování: pochopení chyby, revizi diffu, plánování refaktoringu, obhajobu přístupu. Většina vývojářů používá obojí a výběr modelu tady hraje větší roli, protože posuzujete uvažování, ne výsledný diff.
Jak zabráním tomu, aby se přepisoval kód, o který jsem neprosil?
Do promptu doplňte: změň co nejméně, zachovej stávající strukturu a názvy a u každého upraveného řádku uveď jednořádkový důvod. Nevyžádaný refaktoring je hlavní důvod, proč se návrhy od AI stávají nepřehlednými k posouzení, a omezení rozsahu změn je rozdíl mezi změnou, kterou dokážete posoudit, a tou, kterou musíte číst znovu od začátku.
Můžu vložit proprietární kód?
Whizi se na vašich konverzacích netrénuje a zásady zpracování dat každého poskytovatele si můžete prohlédnout dřív, než daný model povolíte, ale závaznou hranicí je zásada vašeho zaměstnavatele, a ta se hodně liší. Kde platí omezení, obvykle je povolené, a navíc lepší, reprodukovat problém jako minimální příklad, který zachovává strukturu, ale vynechává business logiku, protože tím odstraníte detaily, které odváděly pozornost.