Kako programirati igru na VIDI X mikroračunalu uz pomoć Google Geminija ili ChatGPT-a?

Kako programirati igru na VIDI X mikroračunalu uz pomoć Google Geminija ili ChatGPT-a?

Kako komunicirati s umjetnom inteligencijom? Zamislite da imate pomoćnika koji barata programskim jezicima, ali ne može znati što vam zapravo treba dok mu to ne objasnite u detalje. Nema čitanja između redova, nema intuicije, samo stroge i precizne upute. Kao kad podučavate početnika koji je pun potencijala, ali još uvijek hvata osnove zanata. U toj igri ključni su preciznost, sveobuhvatnost i strpljivo vođenje.

Kada kao programer dođete raditi u neku tvrtku, prvenstveno vas netko mora uvesti u posao kako ne biste podlegli fjaki. To otprilike znači da će vam seniori (ili vođe timova – kako u kojoj tvrtki) pokazati kako ta tvrtka pristupa rješavanju određenog programskog zadatka. Većinom nećete smjeti odstupiti od „pravila igre“ koja su vam dana. Ta pravila mogu obuhvaćati dozvoljene resurse koje smijete koristiti (možda biblioteke, zatim skripte ili priručnike) i najčešće nećete smjeti koristiti druge resurse koji nisu navedeni.

AI ne zna što mora raditi, već je konstantno u stanju fjake, a takav će biti i vaš kod ukoliko u promptu ne navedete potpuno sve (i više od toga), uz obavezno navođenje vrlo bitnih stvari nekoliko puta. Baš kao što biste to napravili i sa nekim programerom pripravnikom kojemu je vrlo bitno naglasiti ona sigurnosna pravila kako nehotice, iz neznanja ili radi radoznalosti i/ili zaigranosti, ne bi ugrozio kompletan projekt.

Što zapravo znači „dobar prompt“?

Dakle, sve ovisi o tome koliko dobro znaš objasniti što ti zapravo treba. Tako funkcionira prompt. To nije samo pitanje. To je komunikacijski kanal, specifična vrsta upute u kojoj u dozvoljeni broj ulaznih tokena staviš sve: što želiš, kako to treba izgledati i čemu to služi. Ako kažeš „napiši mi funkciju u Pythonu za temperaturu“, dobit ćeš neku osnovnu varijantu. Ali ako kažeš „napiši Python funkciju koja iz CSV-a učitava podatke o temperaturi, filtrira ih tako da uzima samo one iz ljetnih razdoblja i vraća prosječnu vrijednost“, sad već ulazimo u ozbiljniju suradnju.

Fine tuning i kontekst kao ključni elementi

Ne radi se samo o tome što tražite, već i kako to formulirate. Ako kažete „napravi jednostavan Python program“, AI će morati pogađati – što vam znači „jednostavan“? Jedna funkcija? Nema vanjskih biblioteka? Nema ulaza s tipkovnice? Kada kažete „želim da koristiš pandas i matplotlib“, onda već možete očekivati kvalitetniji output. I što je zanimljivo, čak i ton kojim se obraćate AI-ju mijenja stvari. Kad tražite da ti nešto objasni kao da si početnik, dobit ćete tutorijal korak po korak. Ako želite objašnjenje kao da ga daje senior developeru, i jezik i primjeri koda ići će u tom smjeru.
Za skroz profesionalan output, u prompt bilo bi dobro uključiti informacije o verziji Pythona koji koristimo, te neke specifičnosti o našoj razvojnoj okolini: Python biblioteke, operativni sustav, a za zahtjevne aplikacije čak i podatke poput količine memorije, koje su restrikcije vašeg setupa i drugo.

Greške koje radimo i zašto ih ne trebate izbjegavati, već razumjeti

Jedna od čestih pogrešaka je pretpostavka da „AI sve zna“, pa će sam pogoditi što želite. Spojiti frontend s backendom? „Samo reci to AI-ju“ zvuči primamljivo, ali u stvarnosti, ako ne specificiraš da želiš primjer React frontenda koji komunicira s Flask API-jem, AI će možda završiti s nekom generičkom kombinacijom. Druga stvar je kombiniranje previše različitih zahtjeva u jednom promptu. Ako pitaš „napiši mi kod, objasni ga te napiši dokumentaciju i to sve u C++“, izgubi se nit. Bolje je razlomiti to u faze, kao da surađuješ u timu i znaš da je bolje reći: „Ajmo prvo napisati funkcionalni kod. Kasnije ćemo od vas tražiti dokumentaciju za kod.“

Umjetnost pokušaja i promašaja

Nema idealnog prompta iz prvog pokušaja, i to je ono što čini stvar zanimljivom. Zapravo, prava moć leži u tome koliko fino podešavate vaše upite. Ako vam prvi prompt vrati funkciju koja radi, ali ne baš kako ste zamislili, možete jednostavno reći: „OK, sad napravi da se ova funkcija izvršava asinkrono i da vraća JSON objekt“. I gle čuda, dobijete točno što vam treba. Dakle, nije poanta pogoditi odmah, nego znati kako voditi razgovor u pravom smjeru.

No, postoje i situacije gdje ćete natjerati AI da se vrti u krug. Predložit će vam jedno rješenje, a vi mu reći da to nije to i neka pokuša ponovno uz preinaku „xyz“. Dobit ćete i drugo rješenje, ali i to će biti manjkavo. Ponovo ćete pokušati s dodatnim preinakama, a AI će vratiti treće rješenje, ili čak ono prvo rješenje koje nije radilo. Tada treba shvatiti da je kompletan razgovor, dakle sve od prvog prompta, krenuo nizbrdo i potrebno je početi ispočetka.

Vodič za prompt koji uvijek pali

Umijeće promptanja zapravo je vještina jasne i smisleno strukturirane komunikacije. I dok možda na prvu zvuči pretjerano filozofski, u biti se radi o istoj onoj sposobnosti koju koristite u timskom radu, a to je - znati postaviti pravo pitanje pravoj osobi, na pravi način. Kada to prenesete u AI svijet, rezultat je alat koji ne samo da vam pomaže, nego AI postaje digitalni suigrač.

Ukoliko vam prvi prompt koji ste napisali nije dao željeni rezultat, treba ga dopuniti informacijama koje su mu nedostajale, i koje su radi manjka informacija AI odvele u smjeru pretpostavki i haluciniranja - kako se to popularno zove. Dakle, glavni problem AI-ja je što ne zna reći „ne znam – daj mi više informacija o tome i tome“, nego će pretpostaviti, izmisliti, halucinirati – i time vas odvesti na krivi trag.

Rješenje i naš glavni savjet je da promptove uređujete u nekom tekst editoru prema vlastitom izboru (VSCode, Word, Notepad, Vim…) i u njega zalijepite svoj prvi prompt. Zatim kada AI-ju dajete nove upute u drugom promptu, i taj prompt dodajte u svoj editor, zatim i onaj treći i tako redom. Kada se nađete u ranije spomenutoj petlji, gdje vam AI više ne može pomoći, uredite sve promptove na način da izbacite dvosmislene upute iz njega i time kreirajte jedan veliki i sveobuhvatan prompt koji će naposljetku dati potpuno novi i detaljan prompt. Bez obzira koji LLM koristili, tako kreiran prompt dajte AI-ju i dobit ćete potpuno novi, kvalitetniji rezultat.

Neki savjeti pronađeni na webu sugeriraju da prompt mora imati glavni naslov, podnaslove i odijeljene cjeline kako se to inače radi u Markdown jeziku, no testiranjem između takvih i raznih drugih tehnika, došli smo do zaključaka kako su jasne upute i sveobuhvatnost bitniji.

Pisanju prompta možete pristupiti isto onako kako pisac pristupa kreiranju književnog djela. Dakle, opisuje vam situaciju i onda vas uvede u priču. U biti, kao korisnik LLM alata morate prvenstveno biti voljni usavršavati svoje vještine pisanja. Iako i sada već imamo mobilne AI aplikacije koje dozvoljavaju unos prompta glasom, slikom ili videom, u ovom trenutku nije moguće programirati bez prompta koji se sastoji od unosa teksta kao osnove. Programiranje glasovnim unosom viđali smo u SF serijalu Zvjezdane staze, pa će i to vjerojatno u skorijoj budućnosti biti moguće.

Do tada, pokazat ćemo vam kako izgleda jedan kompletan i sveobuhvatan prompt na konkretnom primjeru za izradu igre na VIDI X mikroračunalu u C++ jeziku za Arduino IDE.

 

Izuzeci ili kada prompt ne treba biti dugačak i sveobuhvatan

Postoje situacije kada od LLM-a želimo nove ideje, prijedloge nekih rješenja ili drugačiji pogled na određenu temu ili problem. U tom slučaju AI-ju dajemo što manje informacija kako bismo dobili što različitije odgovore.

Na primjer, želja nam je razviti igru poput retro Peter Pack Rat arkade te nam treba brainstorming ideja. Možemo pitati: „Zamisli da živimo na planetu štakora te smo štakori. Daj mi popis zakona i pravila ponašanja štakora.“

Odgovori bi nam mogli pomoći u pripremi koncepta za sličnu igru. Zanima li vas kako je to AI zamislio, pogledajte na linku:
https://github.com/VidiLAB-com/VIDI-X-AI-prompt/blob/main/Zakonik-%C5%A1takora.md  ili
https://chatgpt.com/share/68663768-df40-8006-a041-854dad767ddb

Izdvojit ćemo neka pravila na kojima bi se mogla temeljiti takva igra:

5. Zakon Brzog Bijega
Kada se jedan štakor povuče, svi bježe. Nikada se ne ispituje zašto. Preživljavanje je važnije od razuma.

10. Zakon Mačke
Mačka je neprijatelj. Mačka je mit. Mačka je smrt. Sve što izgleda previše mirno, sigurno je mačka u zasjedi.

peterpak.jpg

Upravljajući štakorom imena Peter skupljate blještave predmete i izbjegavate neprijatelje na vizualno bogatim platformskim nivoima.

 

Testni prompt za VIDI X mikraračunalo

Naš glavni prompt koji prosljeđujemo odabranim LLM-ovima pronaći ćete na linku https://github.com/VidiLAB-com/VIDI-X-AI-prompt/blob/main/Podmornice-Glavni-Prompt.md, a sastoji se od 3 glavna dijela.

 

Prvi dio je cilj našeg prompta, a glasi:

Razmisli o detaljnim uputama za izradu igre za VIDI X mikroračunalo na ESP32 (C++ i Arduino IDE), a zatim napiši kompletan kod za tu igru kako bih ga mogao copy-paste u editor koda.

 

Drugi dio je tehnički opis koji je bitno razraditi što detaljnije, a glasi:

Na donjem dijelu ekrana nalaze se gumbi za upravljanje podmornicom (Zaroni, Izroni) GPIO35, (Lijevo, Desno) GPIO34, te brzina sa tri razine naprijed i jednom razinom unazad (dakle, 5 stupnjeva jer imamo i STOP). Brzinu mijenjamo s GPIO0 i GPIO13. Pored toga se nalazi gumb za ispaljivanje torpeda GPIO32. Torpedo također ima vlastite gumbe za upravljanje, ali samo Lijevo (GPIO27) i Desno (GPIO39) jer je njegova brzina konstantna (200). Maksimalna brzina podmornice je 100. Klikom na gumbe lijevo ili desno podmornica se zakreće za 5°. Zaranjanje i izranjanje je relativno sporo. Sa strane je ispisana brzina i smjer podmornice u stupnjevima. Na ekranu se nalazi grafički prikaz, poput mape i mora, gdje X označava podmornicu. Crta duljine 4 piksela označava ispaljeni torpedo. Postoji i 10 neprijateljskih podmornica koje se proizvoljno kreću po mapi maksimalnom brzinom od 100. Cilj je pogoditi neprijateljsku podmornicu torpedom. One također mogu ispucavati torpeda na vas, ali njihova torpeda nisu upravljiva, nego se kreću pravocrtno. Neprijatelj može pretpostaviti vašu putanju gdje ćete biti u trenutku kada njihov torpedo dođe do vas te ukoliko niste promijenili smjer ili brzinu kretanja, pogodak je neizbježan. Treba paziti da ne ispale sve podmornice torpedo istovremeno jer igrač neće moći preživjeti. Sve podmornice imaju po 10 torpeda i kada ih potroše, nemaju ih više.

 

Treći dio je kod uz opisivanje specifičnosti kako rade gumbi jer bez tog dijela LLM nije znao koristiti ovdje spomenute gumbe:

Ovo je primjer koda za neku drugu igru iz kojega treba iskoristiti dio za prikaz grafike na ekranu te dio za upravljanje, a posebno upravljanje gumbima na GPIO34 i GPIO35 jer su na svakom po dva gumba spojena otpornikom, pa očitavamo analogne vrijednosti.
(Ovdje dodajemo programski kod u nastavku prompta)

 

Četvrti dio su specifične upute koje dodajemo naknadno još jednom, iako smo ih možda naveli na samome početku, no ponekada ih neki LLM ipak nije poštivao. Taj četvrti dio prompta dodavali smo postepeno kako smo nailazili na neposluh pri generiranju koda:

Pripazi: Ne smiju sve podmornice pucati istovremeno. Neka puca jedna po jedna podmornica.
Pripazi: Ukoliko neprijateljski torpedo pogodi neprijateljsku podmornicu, ona također umire. Ukoliko neprijateljski torpedo pogodi bilo koji drugi neprijateljski torpedo, oba torpeda umiru.
Pripazi: Ukoliko neprijateljska podmornica dotakne drugu neprijateljsku podmornicu, obje umiru.

Bitno je: Nemoj biti lijen i napiši kompletan kod za igru kako bih ga mogao copy-paste u editor koda.

 

Kao što možete primijetiti, nismo koristili trostruke apostrofe na početku i kraju koda, a AI ga ipak razumio. Evo rezultata redom kako smo ih dobili od raznih LLM modela.

Dodavanjem hashtag (#) oznaka, za naslove cjelina, kao u Markdown jeziku, te trostrukih apostrofa za oznaku početka i kraja koda povećalo bi broj ulaznih tokena. No ukoliko vaš odabrani LLM ima mogućnost prihvatiti taj veći broj tokena, slobodno eksperimentirajte i pronađite balans koji će vam odgovarati.

S obzirom da LLM-ovi prolaze kroz manje ili veće modifikacije s vremenom, te imaju nekoliko različitih verzija, od kojih svaka ima drugačiju cijenu ulaznih i izlaznih tokena, usudite se upitati svoj odabrani LLM: „Kako da optimiziram prompt u nastavku sa ciljem manje potrošnje tokena, a da pri tome prompt u nastavku zadrži sve potrebne informacije: (ovdje ubacite svoj prompt)“

 

Vaš zadatak kod promptanja za igru prema vlastitim idejama je izmijeniti drugi i četvrti dio prompta te ukoliko budete dovoljno detaljni, time biste trebali dobiti funkcionalan kod za svoju igru. Imajte na umu da ove godine to neće ići do razine da iz prve dobijete igre nalik na Asphalt, Call of Duty ili The Curse of Monkey Island. No brzinom kojom se LLM-ovi razvijaju i rastu, do 2030. mogli bismo i to imati!

  

monkey.jpg

Serijal igara Monkey Island odlikovao se prekrasnom „ručno“ crtanom grafikom i inovativnim načinom borbi koji je i danas bez premca. Prilikom borbe igrač je morao pravilno odgovarati na uvrede, koristeći humor kao oružje. Do danas, to ostaje jedinstveno rješenje koje nije uspješno replicirano u drugim igrama.

 

Za kraj valja napomenuti

Koji god od dostupnih LLM-ova upotrijebili, za svaki ćete morati pokušati kreirati kod, te uvidom u dijelove koji nisu ispali onako kako ste ih zamislili, ručno ili uz pomoć nekog drugog AI modela popraviti kod.

Ne dajte se obeshrabriti kada vam se dogodi da AI upadne u petlju u kojoj neprestano daje pogrešne rezultate, nego prepravite svoj prompt i u novom razgovoru krenite ponovno.

U našim testiranjima pokušali smo im zadati da nam naprave algoritam za crtanje drveta, grmlja i trave. No to nije prošlo kako bismo očekivali, pa je grafika za drvo bila svedena na kružnicu i pravokutnik. No detaljnijim opisivanjem teksture tog pravokutnika možete se približiti generiranju koda koji će nacrtati koru drveta nešto bolje. Koliko bolje, ovisi o vašim pjesničkim i lingvističkim sposobnostima kojima matematički algoritam pretvarate u prozu uz detaljne upute koje će AI navesti na izradu jednog takvog koda.

Bitno je znati kako svaki LLM ima neki vlastiti sistemski prompt pomoću kojega radi. Najčešće ćete ga moći proguglati, primjerice, „Claude sistemski prompt“, nakon čega ćete među prvim rezultatima dobiti službenu stranicu https://docs.anthropic.com/en/release-notes/system-prompts na kojoj možete vidjeti promjene njihovog sistemskog prompta po datumima. Na to vam ukazujemo jer iako druge tvrtke nisu odlučile te informacije podijeliti s vama, i oni ih mijenjaju. A tako ćete i vi morati neki svoj prompt prilagođavati s vremenom.

 

Igra-4_web.jpg

Torpedo ahead… all hands, brace for impact!

 

RezultatI po LLM-ovima

Rezultate po LLM-ovima te komentare na dobivene kodove pogledajte na VidiLAB-ovom GitHub repozitiroju na linku: https://github.com/VidiLAB-com/VIDI-X-AI-prompt

Posjeduje li vaša škola VIDI X mikroračunalo, priložene kodove možete pokrenuti na vašim uređajima.

Vezani sadržaj:

// možda će vas zanimati

Newsletter prijava


Kako izgleda naš posljednji newsletter pogledajte na ovom linku.

Copyright © by: VIDI-TO d.o.o. Sva prava pridržana.