Anti-slop v češtině není blacklist
Proč seznam zakázaných frází v češtině selže a co jsem postavil místo něj: plugin pis-cesky do Claude Code a korektura agentem, který nezná zadání.
Nechal jsem si vygenerovat článek o spotových cenách elektřiny a v nadpisu stálo: "Duck curve: profil dne, který slunce překreslilo". Gramaticky bez chyby. Jenže to není česká věta, to je anglická věta poskládaná z českých slov.
Štve mě to dlouho, tak jsem si na to napsal plugin do Claude Code. Jmenuje se pis-cesky.
Proč seznam zakázaných frází v češtině nefunguje
Anti-slop skillů je na GitHubu plno a skoro všechny stojí na blacklistu: "delve into", "in today's fast-paced world", "it's important to note". V angličtině to dává smysl. Člověk takové fráze píše zřídka, model je chrlí, takže je stačí vyškrtnout.
Česká verze takového seznamu (většinou strojově přeložená z té anglické) narazí na tři věci.
Zaprvé: "hraje klíčovou roli" nebo "v neposlední řadě" existovaly v češtině dávno před ChatGPT a ve výroční zprávě jsou přesně na svém místě. Signálem není přítomnost fráze, ale způsob jejího užití.
Druhá věc: klišé použité s odstupem není slop. Když někdo napíše "lze směle označit za game changer" a ví přitom, co dělá, je to styl. Blacklist to shodí neprávem.
A do třetice, pro angličtinu někdo spočítal, co model píše jinak než člověk - Buffer analyzoval 52 milionů příspěvků, Wikipedie vede přehled typických znaků generovaného textu. Pro češtinu takový rozbor nikdo neudělal a české repozitáře jen opisují jeden od druhého.
Nezakazuju slova, určuju pozici pisatele
Skill proto neříká, která slova nepoužívat. Určuje, kdo text píše a odkud - jestli za větou někdo stojí, nebo se jen skládá vata. K tomu hlídá mechaniku české věty.
V praxi je to pár pravidel, u kterých se dá ověřit, jestli je model dodržel. Věta stojí na slovese, ne na podstatných jménech - sloveso si samo řekne o pády, předložky i slovosled. Nová informace patří na konec ("Reverb umí databázový driver", ne "Databázový driver je novinkou Reverbu"). V textu musí být aspoň jeden údaj, který nejde vygooglit, jen zažít. A text nekončí shrnutím: ani v jednom ze 74 technických textů, ze kterých jsem pravidla vyvodil, není závěrečná rekapitulace.
Zdroje jsou lidské texty publikované před listopadem 2022, tedy dřív, než se generovaným textem začalo běžně psát. Technický styl stojí na blog.nette.org, blog.root.cz a nettech.cz - 74 článků, asi 79 tisíc slov. Úřední na rozhodnutích NSS, nálezech Ústavního soudu, odpovědích úřadů podle stošestky a metodikách ministerstev - 68 dokumentů, kolem 180 tisíc slov.
Korektura, která nezná zadání
Nejužitečnější část skillu přišla až později. Text napsaný napoprvé má vždycky chyby a autor je ve vlastním textu nevidí, protože zná svůj záměr. Skill si proto umí zavolat korektora: samostatného agenta, který dostane jenom text. Žádné zadání, žádnou konverzaci. Čte to tak, jak to bude číst čtenář.
Chytá i věci, které bych od jazykové kontroly nečekal. V testovací sadě našel, že tvrzení "soukromý klíč passkey nikdy neopustí zařízení" si protiřečí s pasáží o synchronizaci přes cloud. Jinde odhalil, že dva procentní údaje z téhož průzkumu stojí na nesourodém základu - jeden počítá spotřebitele, druhý všechny dotázané včetně firem.
Stojí to zhruba 30 tisíc tokenů na jeden text, takže na poznámky a commit zprávy to nepouštěj. Aby cena nerostla zbytečně, mechanika jde mimo model: pomlčky, párové závorky a mezery u interpunkce projede nastroje/mechanika.py deterministicky za nula tokenů a do jazykových dat smí korektor sáhnout nejvýš třikrát.
Ta data jsou volitelná - VALLEX 4.5 s valenčními rámci 2 772 sloves a frekvenční databáze spojení, kterou jsem si sám postavil z české Wikipedie. Zaberou asi 250 MB, stavějí se lokálně a leží mimo instalaci pluginu, takže je aktualizace nezahodí. Bez nich to funguje dál, jen korektor nemá kde ověřit, jestli se dané spojení vůbec říká.
Co to není
Není to korektor tvého textu. Když mu dáš hotový článek, pravidla použije, ale nemá určené hranice, kam až smí sáhnout - text, který je celý vata, ti přepíše k nepoznání. Není to překladač: překlad nesmí ztratit žádné tvrzení, ani špatně napsané, kdežto skill vatu škrtá. A není to detektor, nepozná, jestli text psal člověk, nebo model.
Instalace je na dva příkazy:
/plugin marketplace add rajtik76/pis-cesky
/plugin install pis-cesky@pis-cesky
Dvě věci zatím vyřešené nemám. Pravidlo o klišé s odstupem model odkývá, ale použít ho neumí - "vím, že tuhle frázi píšu" je pro něj instrukce bez obsahu. A nevím, jak výsledek pořádně změřit. Detektorem AI textu ne, cílem není projít jako člověk, ale být čitelný. Zatím to měřím tím, kolikrát mi při čtení ruka sjede ke klávesnici.
Kdo chce vidět rozdíl bez instalace, ve složce priklady/ leží tři témata zpracovaná dvakrát - jednou se skillem, jednou bez něj, stejné zadání, stejný model.
Závěrem
Přiznám se: celý tento článek je vygenerovaný pomocí Claude Code a mým novým skillem /pis-cesky.
Celé to stálo 165k tokenů (110k článek napsaný v Opus a 2 průchody Opus a Sonnet = 55k).
Jako podklad sloužil můj Github repozitář a zadání o čem článek má být.
A víš co, nemusel jsem v článku provést ani jednu ruční opravu po korektuře kvůli češtině! Takže jsem se skillem zatím spokojený, ale jsem teprve na začátku cesty. Pro ty z vás, kteří mají pocit, že jsem vás o něco obral tím, že je článek generovaný AI, tak jsem ho celý několikrát přečetl a tento poslední odstavec napsal sám.