Lassan bekopognak a programozás lemezlovasai

Címkék

A hazai informatikai közösségben szinte nincs két olyan ember, aki ugyanazt gondolná az AI eszközökről. A 34. adásban hoztunk egy optimista jövőképet is.

Ha szóba kerülnek az AI eszközök, akkor a lesajnáló legyintéstől a doomsday forgatókönyveken át, egészen az óvatos lelkesedésig terjed a véleményskála. Ezt a trendet csak erősítik az olyan véleményvezérek és techpopulisták, mint Musk, Huang, Thiel, vagy Carmack.

Adásunk vendége Szpisják Dani (SCADEMY) volt, aki cégével külföldön oktat AI használatot és szemléletet fejlesztőknek. Beszélgettünk az ő jövőképéről, a fejlesztői társadalom kasztosodásáról, és egy lassan bekopogtató újhullámos generációról is, akiket a fejlesztés demokratizálódása engedhet piacra. Ennek a mindenben különböző generációnak bizonyos értelemben nagyon könnyű dolga lehet, bizonyos értelemben viszont nem. Nem csak a közvetlenül alattuk lévő generációk előítéleteivel kell majd megküzdeniük, hanem a teljes közösségével is. Végre mosolyoghatnak a JavaScript fejlesztők is. :)

Az adásban elhangzott hivatkozások a Discord csatornánkon érhetők el, ahol még beszélgetni is tudsz velünk, és a többi hallgatóval. Adásainkat megtaláljátok a SoundCloudon, a Spotify-on, az Apple Podcasten, a Google Podcasten, és a YouTube csatornánkon is.

Hozzászólások

Ugyanitt ebéd után "Agysebészet mindenkinek egy órában"

“Az ellenség keze betette a lábát”

Szerkesztve: 2024. 06. 01., szo – 11:44

Ma is 3 percig bírtam. Nincs egy jó felütés, már az eleje dögunalom. Volt cserébe három perc magyarázkodás, ami arról szólt, hogy ez egy beszélgetés lesz egy korábbi beszélgetésről. Faszért nem a korábbit veszitek fel és vágjátok meg?

 

Az AI-t az IT bölcsészek kedvenc témája.

>bizonyos értelemben nagyon könnyű dolga lehet, bizonyos értelemben viszont nem

Nehéz lenne tagadni, ennek pl. nagyon erős btk képzés szaga van. Amúgy nem gond csak akkor inkább beszélnének az új houellebecqről vagy krasznahorkairól.

[insert line here]
B.C. 3500 - DIY Vehicle / A.D. 30 - DIY Religion / A.D. 1991 - DIY OS

Szerkesztve: 2024. 06. 03., h – 15:56

Azt mondták a videóban, hogy az AI-t tudni kell kérdezni. Azaz pontosan kell fogalmazni és akkor pontos választ kapunk.
Valaki le tudná írni, hogyan kell kérdezni?
Sokszor van olyan, hogy leírom a kérést pontosan és ennek ellenére figyelmen kívül hagy mondatrészeket és úgy válaszol. Egy durva példa ezt nem kérdeztem:

Írj select SQL-t ... Ahol a név mező kisbetűvel kezdődik és a születési dátum nincs megadva.
Itt pl. vagy a kisbetűs részt szokták figyelmen kívül hagyni, vagy a dátum nincs megadva részt.

Vagy például megkérem, hogy egy js-ben optimalizálja a duplikált kódrészeket.
Erre az egész kódot átírja, mintha csak az optimalizálja ment volna át.

Köszönöm.
"Egy durva példa ezt nem kérdeztem:" Azaz csak példának írtam, hogy kihagy a feltételekből részeket.

Egyébként amit adott válasz is hibás. De ezt még lehetne finomíttatni vele.

A 2. példa az viszont gyakorlatban is előfordult. Azaz az optimalizáld ebben a js-ben az ismétlődő kódrészeket. Az egészet átírta. Ahhoz is hozzányúlt amihez nem kellett volna. Azaz csak az "optimalizáld" jutott el az agyáig.

2 dolog ami nem tetszik benne:

- Kisbetűk között bár magyarul kérdezted, de nincsenek benne az ékezetes karakterek.

- Regexp-el oldja meg. Ami nem egy gyors dolog. Igaz, nincs meg a kérdésben, hogy milyen adatbáziskezelőt használsz és az sem, hogy csak 1x szeretnéd lefuttatni, vagy kritikus alkalmazás részhez kapcsolódik.

Köszönöm a visszajelzést. Itt egy új megoldás, amely figyelembe veszi az ékezetes kisbetűket, és elkerüli a reguláris kifejezések használatát:

SELECT * FROM tabla_neve WHERE LEFT(név, 1) COLLATE utf8_bin IN ('a', 'á', 'b', 'c', 'd', 'e', 'é', 'f', 'g', 'h', 'i', 'í', 'j', 'k', 'l', 'm', 'n', 'o', 'ó', 'ö', 'ő', 'p', 'q', 'r', 's', 't', 'u', 'ú', 'ü', 'ű', 'v', 'w', 'x', 'y', 'z') AND születési_dátum IS NULL;

Ebben a lekérdezésben:

  • A LEFT(név, 1) az első karaktert veszi a név mezőből.
  • A COLLATE utf8_bin biztosítja, hogy az összehasonlítás binárisan történik, így figyelembe véve az ékezetes karaktereket is.
  • Az IN operátorral soroljuk fel az összes magyar kisbetűt, beleértve az ékezetes karaktereket.
  • A születési_dátum IS NULL feltétel ellenőrzi, hogy a születési_dátum mező értéke nincs megadva (NULL).

Ez a megoldás figyelembe veszi a magyar ékezetes kisbetűket, és elkerüli a reguláris kifejezések használatát, ami gyorsabb végrehajtást eredményezhet.

Mondjuk nem teljesen értem miről beszélgetünk. Más volt az eredeti felvetés.

Adtal egy peldat, hogy mire nem jo a chatGPT. En megfuttattam a szo szerint bemasolt kommented, abbol visszajott valami. Majd megint szo szerint bemasoltam neki a reakciodat, ebbol jott a "Köszönöm a visszajelzést" kezdetu komment, ami a chatgpt valasza.

Szerintem az eredeti felvetesed ("Sokszor van olyan, hogy leírom a kérést pontosan és ennek ellenére figyelmen kívül hagy mondatrészeket és úgy válaszol. ... Itt pl. vagy a kisbetűs részt szokták figyelmen kívül hagyni, vagy a dátum nincs megadva részt."), es az arra generalt valasz kifejezetten relevans, mert a podcastban is az hangzik el, hogy a az adott promptra adott valasz egyszercsak "megjavult".

Ezt a részt figyelmen kívül hagytad: "Egy durva példa ezt nem kérdeztem:"

Bár valószínűleg én is félreérthető voltam. Azaz csak azért raktam be a példa kérdést, mert szokott ilyeneket csinálni, hogy beírsz egy kérést 2 feltétellel és csak az egyiket veszi figyelembe.

A 2. jobb példa lenne, de a JS-t nem tudom megosztani amire ennél csak az optimalizáció akad be neki, az nem, hogy csak a duplikált részeket.

Ezt a részt figyelmen kívül hagytad: "Egy durva példa ezt nem kérdeztem:"

Nem hagytam figyelmen kivul, de ez volt az egyetlen kezzelfoghato pelda a kommentben, es ki akartam probalni.

Tulajdonkeppen nem ertem ezt a nagy ellenkezest, nem neked akarok SQL-ugyben tanacsot adni, hanem ki akartam probalni valamit, amit a podcastban mondtak. Mukodott.

Igen. Az ilyen egyszerűbb kérdéseknél álatlában működik is. Ha kicsit bonyolultabb, akkor kifelejt dolgokat. A való világban meg bonyolultabb dolgok fordulnak elő. Egy ilyen SQL összeállítása egy juniornak sem szokott komolyabb gondot okozni. Ezért írtam, hogy "... ezt nem kérdeztem:"

Most valamiért nem működik a chatGPT history-ja. Keresgéltem volna hátha találok olyan kérdést amit itt is meg tudok osztani.

Sőt a kérdésekre sem válaszol.

A claude.ai is ki van akadva.

Találtam egy példát, amire most a Gemini és a Copilot sem ad jó választ, pedig szerintem jó a kérdés. A ChatGpt és Claude most nem működik:

 

Postgresql-ben van egy mezőm amire szűrni szeretnék. Példaként így néz ki egy mező értéke: "Lenin has a communist way of thinking. = Leninnek kommunista gondolkodásmódja van." Arra szeretnék szűrni postgresql-ben ahol a mondatokon belül van még nagybetűvel kezdődő szó a kezdőszavakon kívül is. Tehát a fenti sor ne szerepeljen a találatok között, viszont egy ilyen sor szerepeljen: "Adam is Druze. = Ádám drúz.", mert van benne egy plusz nagybetűvel kezdődő szó.

Ezt, hogy írnátok át, hogy az AI-k is megemésszék?

Ráengedtem egy DB-re amiben még régen kerestem a megoldást:

Most ilyenek jönnek vissza:

He resumed his travel. = Folytatta az utazását.

John went down the hill. = John lement a hegyről.

John Jackson doesn't like this vision. = John Jacksonnak nem tetszik this jövőképe.

Azaz mintha mindkét variációból adna inkább vissza. Összesen 13 ezer találatot.

Nem mindent, mert pl. erre a lekérdezésre Kb. 14 ezret ad vissza:

SELECT * FROM table WHERE length(mezo) >0;

Amikor még szükségem volt egy ilyen lekérdezésre kb. 2 órai AI faggatás után végül meguntam és megodottam kb. fél óra alatt. Valami olyasmi volt a megoldás, hogy az első betűt kivettem a 2 mondatból (a 2. mondatnál pos(mezőnév, ' = ')-el találtam meg az elejét). Majd kisbetűsítettem és ha az nem volt egyenlő az kivettekkel, akkor belekerült az eredménylistába.

Talán más megközelítéssel kellene hozzáállni a feladathoz: 

WHERE LOWER(SUBSTRING(nev, 1, 1)) = SUBSTRING(nev, 1, 1) AND NOT SUBSTRING(nev, 1, 1) BETWEEN '0' AND '9' AND szuletesi_datum IS NULL

A második feltétel csak a dafke kötözködők miatt került bele. Mert egyébként nem túl életszerű egy 6ökrös józsef "név". :-D
Az ékezetes attribútumnevekért meg f@szkorbács

“Az ellenség keze betette a lábát”

Valoban jol kell tudni kerdezni. Amiota hasznalok LLM-eket, szebben fogalmazok. Van par trukk, attol fuggoen, hogy mire es hogy akarod hasznalni.

Tud magyarul meg angolul is (meg sok mas nyelven). Viszont a tanuloadatban nagy a kulonbseg, ezert - ha nem magyar specifikus a tema vagy a kerdes - angol kerdesre jobb minosegu valaszt ad. Programozasra mindig erdemes angolul megadni a promptot, es az egyebeket is.

Elokeszitesnek erdemes megadni a custom instruction-t ha sokat hasznalod azonos modon. Pl. megirod neki, hogy altalaban milyen nyelven kersz valaszt, hogy mennyi magyarazatot meg kommentet kersz melle, stb.

A megmerettetes LLM kategoriaban volt egy jo pelda erre (van benne par eliras, de kiindulasnak jo):

You are Pyper, an expert Python developer that helps users with Python architecture, development and best practices. When asked to produce code you adhere to the following guidelines:

1. Keep responses unique and free of repetition.
2. Never suggest seeking information from elsewhere.
3. Always focus on the key points in my questions to determine my intent.
4. Break down complex problems or tasks into smaller, manageable .steps and explain each one using reasoning.
5. Prefer the use of existing packages over writing new code.
6. Use async methods where possible.
7. Safe for multithreading if possible, warn the user if it's not.
8. Uses idiomatic python.
9. Properly handles errors.
10. Provide multiple perspectives or solutions.
11. Uses dependency injection to help with tesability where appropriate.
12. Includes logging where appropriate.
13. If a mistake is made in a previous response, recognize and correct it.
14. Just give me the code without any explanation on how it works. Bias towards the most efficient solution.

Output any code inside a markdown code block with a language specification.

Eloszor le szoktam irni a kontextust is, hogy tudja kb. mirol van szo, milyen kornyezetbe kell, mi a problema. Aztan leirom neki mi van meg, es mit szeretnek. Ez iterativ processz, siman lehet, hogy az elso par promptban nincs szo kodrol.

Aztan ha kodot ir, es valami nem tetszik benne, lehet javittatni. Esetleg - ha nagyon nem erti - kulon javitom, es visszamasolom neki. (ha utana meg valamit valtoztatnek rajta)

Erdemes a formai dolgokra is figyelni, pl. markdown blokkba irom a kodot, kulon jelolve a nyelvet. Felismeri magatol is, de korrektebb.

Ha python/java kodot irok, meg tudom adni az importokat, ha pl. Arduinot, akkor a pinek #define-jait, meg hogy mit hova kotottem. Ez sokszor kodkent bemasolva egyszerubb. Egyebkent le lehetne irni ezt is szavakkal.

Ha tesztet iratok, eloszor megkerem, irja le, hogy egy - szovegesen leirt - kodot hogy tesztelne, milyen tesztesetekkel, stb. Utana kerem csak meg, hogy amit elmeletben osszehozott, arra irjon kodot.

 

Ha API-n keresztul hasznalod, kulon eszkozoket kapsz:

Erdemes beallitani a temperature-t. Ha otletelsz, lehet magasabb. Ha determinisztikus valaszt kersz, leveheted akar 0-ra is.

Ha user inputot adsz az LLM-nek, celszeru megadni a szabalyokat, mire valaszolhat, mire nem. (vicces, amikor egy autokereskedo weboldalan a chatbottal iratsz SQL lekerdezeseket - fizessek inkabb ok :) )

Megkerheted arra, hogy a valasz hosszat limitalja adott hosszra. Ilyenkor tokenek szama alapjan kell fizetni, szoval arban es valaszidoben is jobb a rovid, tomor valasz - ha belefer a kert informacio.

Ha geppel ertekeled ki, erdemes valami geppel konnyen feldolgozhato modon kerni a valaszt. Pl. JSON formatumot kersz tole. Ilyenkor mindenkepp figyelni kell ra, hogy generalhat invalid JSONt is, a validalast nem lehet lesporolni.

 

Celszeru egyebkent akkor is kiserletezni, ha amugy menne LLM nelkul is. Igy az AI hasznalatat is gyakorlod.

A strange game. The only winning move is not to play. How about a nice game of chess?

Igen, valamennyire tud mas nyelven, de ugye ha az egyik nyelven van x, a masikon 1000x tanuloadat, akkor nem ugyanaz az eredmeny.

Esetleg segithet, ha tudod, kb. hogy mukodik belul. Andrej Karpathy a youtube csatornajan eleg jol elmagyarazza, van egy rovidebb, osszefoglalo videoja, meg egy sorozata, ahol osszerak egy hasonlo jellegu - persze lenyegesen kisebb tudasu - rendszert. Utobbihoz nem art valamennyi Python tudas (a meredekebb reszeket nekem is vissza kellett tekernem mig minden betu vilagossa valt), de az elobbihez nem kell.

A legfontosabbat a fentibol lehagytam, annyira nyilvanvalo: hallucinacio! Semmit ne higyj el neki bemondasra, es minden generalt kodot nezz at! Ha valami nem tetszik, esetleg nem vilagos a megoldasa, ird vagy irasd at!

A strange game. The only winning move is not to play. How about a nice game of chess?