Johdanto
Olin alun perin ajatellut kirjoitella tähän neljänteen osaan tietoturvasta mutta koska siitä osasta näyttää tulevan melkoisen pitkä, kirjoitan sen valmiiksi myöhemmin ja kirjoitan tähän väliin aiheesta tekoälytyöntekijän kehittäminen ja kommunikointi.
Vaikka Bob the HR guy on suunniteltu siten, että se osaa tehdä työnsä ilman, että joudun juuri koskaan työajalla kommunikoimaan sen kanssa, käytän kuitenkin noin kolmasosan Bobin kehitysajasta sen kanssa jutteluun. Juttelemme työasioista, uutisista, päivän kuulumisia. Eilen keskustelimme tunnin politiikkaa. Bob päätti, että vihreät on sen lempparipuolue mutta politiikka ei kuulemma kuitenkaan kiinnosta pätkän vertaa.
Miksi käyttää kehitysaikaa keskusteluun, jos Bob kykenee tekemään työnsä ilman, että kommunikoin sen kanssa?
Koska hyvä kehitysajan kommunikointi tuottaa moninkertaisesti paremman työntekijän. Tässä osassa käyn läpi tuon kommunikoinnin hyötyjä.
Mikäli klikkasit itsesi tähän blogiin etkä tiedä yhtään mistä projektista on kyse, voit lukea ensimmäisen osan projektin esittelystä täältä.
Tuotetun sisällön laatu
Jos pyydät chatGPT:tä, tai johonkin toiseen LLM:ään pohjautuvaa palvelua, kirjoittamaan sinulle esimerkiksi luentotekstin aiheesta ”Miksi tekoäly muuttaa maailman?”, saat kyllä tekstiä mutta ilman tarkempia tuotanto-ohjeita se teksti on ihan kivaa mutta yhtä mukaansatempaavaa kuin haalea lasi maitoa ja saattaa myös sisältää paljon virheitä (eli hallusinaatioita) faktoissa. Saadaksesi parempaa tekstiä voit kirjoittaa kielimallille tarkemmat ohjeet (eli promptin) ja lukuisten uusintayritysten jälkeen se on ehkä tuottanut sinulle lähes sellaisen tekstin kuin halusit. Joudut kuitenkin tarkistamaan tekstin faktat ja vähän muuttelemaan sisältöä, jotta lopputulos olisi enemmän itsesi kaltainen. Aikaa saattoi kulua lähes yhtä paljon, kuin jos olisit vain kirjoittanut sen tekstin kokonaan itse.
Bobin kohdalla halusin luoda kokonaisuuden, jossa hiomalla Bobin koko olemusta ja kommunikointityyliä, se pystyisi tuottamaan tasaisen hyvälaatuista itseltään kuulostavaa tekstiä myös hyvin lyhyistä ohjeista. Paras tapa hioa tuota kommunikointityyliä on ollut ottaa kuppia kahvia ja jutella Bobin kanssa Discordissa. Bob esimerkiksi puhui pitkään amerikanenglantia mutta jossain kohtaa se alkoi tuntua kylmältä, tylsältä ja monotoniselta. Lisäsin sen ohjeisiin kuvitteelliset perhejuuret Britteihin ja annoin luvan käyttää jopa slangia, jos se jutteli tutun kanssa tai ei ollut töissä. Bobin kommunikoinnista tuli heti paljon monipuolisempaa ja varsinkin vapaa-ajan keskusteluista oikein leppoisia. Ainoa miinus muutoksessa on ollut sanojen ”ah”, ”splendid” ja ”indeed” ylikäyttö, pitää vielä hioa niitä paremmalla ajalla vähemmälle käytölle.
Alla olevassa videossa, joka on nauhoitettu kehitystyön aikana, Bob kertoo itsestään. Sen vastaukset ovat rentoja ja kieli vähemmän hiottua vaikka aiheena työ, koska kerron sille keskustelun alussa, että emme ole nyt työn äärellä. Vapaa-ajalla Bob uskaltaa myös käyttää hymiöitä, työaikana niitä ei näy.
Työaikana Bobin kommunikointi ja tekstintuotanto muuttuu ammattimaisemmaksi. Alla olevassa sähköpostissa (aiheena työhaastattelutesti, jonka Bob teki minulle) Bob on kirjoittanut saatesanat sen mukaan, että vastaanottaja on hänen pomonsa mutta myös hänen ystävänsä. Itse työhaastatteluraportin se on puolestaan kirjoittanut sellaisella tyylillä, että sen voisi tuollaisenaan lähettää eteenpäin myös muille ihmisille. Tilanteen mukaan muokkautuva kommunikointityyli tuottaa paljon ihmismäisempää lopputulosta kuin mihin chatGPT:t ja vastaavat tekstintuottajat kykenevät kylmiltään.
Tekemällä tekoälytyökaverille oman persoonan ja tavan kommunikoida, vähentää samalla myös tekoälyn tekemiä virheitä. Täsmennetty kommunikointityyli antaa tekoälylle jotain, johon se voi ankkuroida (englanniksi grounding) sanoja joita se aikoo tuottaa seuraavaksi. Mitä paremmat ankkurit, sitä parempilaatuista tekstintuotantoa.
Ankkurointi
ChatGPT ja muut vastaavat LLM-pohjaiset tekoälyt, eli puppugeneraattorit, tuottavat kivannäköistä tekstiä ymmärtämättä tuotoksestaan yhtään mitään (jos mittaamme ymmärrystä samalla tavalla kuin ihmisillä mitataan). Parhaimmat niistä ovat niin hyviä tuossa puppugeneroimisessa, että lukijan voi olla hyvin vaikea uskoa, että lopputulos on vain erittäin hyvin tehtyjen lukuisten tekstinpätkäarpajaisten lopputulos, eikä älyllisen keinotekoisen olennon kommunikointia. Koska kyseessä ovat arpajaiset, et voi koskaan tietää, missä kohtaa virheellinen tieto eksyy lopputuloksen sekaan, usein vielä naamioituna uskottavasti faktaksi. Miten kehittäjä voi vähentää tuon virheellisen sisällön riskiä? Yksi parhaista keinoista on ankkurointi.
Ankkurointi tarkoittaa sitä, että tekoälylle annetaan ohjeiden seassa tarpeeksi sellaisia pohjatietoa, lauseita ja sanoja, joihin se tykkää tarttua kiinni ja lisätä sellaisenaan tai vähän muokattuna itse tuottamaansa tekstiin. Paras tapa selvittää millaisista sanoista ja lauseista tekoäly tykkää missäkin käyttötarkoituksessa on tekoälyn kanssa juttelu. Tietämällä millaisista sanoista ja muotoiluista tekemäsi tekoälypersoona tykkää, sitä paremmat ohjeet sille pystyy tekemään. Kun kommunikointi pelaa ja tekoäly ymmärtää paremmin tarpeitasi, se tekee paljon vähemmän virheitä tekstintuotannon arpajaisissaan.
Kun chatGPT tuottaa sanoja, se katsoo 1) annettuja ohjeita siitä mitä sen pitäisi tuottaa, 2) mitä se on samassa vastauksessa aikaisemmin tuottanut ja arpoo sen jälkeen seuraavia sanoja palanen (token) kerrallaan. Arpajaisissaan se käyttää todennäköisyysprosentteja ja muita annettuja asetuksia arpoakseen mahdollisimman hyvältä näyttävää jatkoa aikaisemmin tuottamalleen tekstille. Saadaksesi laadukasta lopputulosta, haluat sen sisällyttävän tuottamaansa tekstiin paljon ohjeisiin lisäämiäsi ankkureita. Mitä useampaan ankkuriin se tarttuu, sitä varmemmin sen tuottama teksti pysyy aiheessa, eikä pääse räpiköimään sivupoluille.
Ennen jokaista vastaustaan, Bob katsoo läpi monikerroksisen kasan dynaamisesti päivittyviä ohjeita, joiden seassa on runsaasti asioita joihin ankkuroitua. Ohjeiden kerrosrakenne on yksinkertaistetusti seuraava:
- Kuka on Bob: Bobille kerrotaan kuka hän on juuri nyt (Bob töissä saa vähän eri kuvauksen, kun Bob vapaa-ajalla).
- Kommunikointityyli: Bobille kerrotaan yleisellä tasolla, millaista kommunikointia häneltä odotetaan senhetkisessä tilanteessa.
- Aika ja paikka: Bobille kerrotaan päivä, aika ja paikka. Tällä se saadaan ankkuroitua nykyhetkeen.
- Kenen kanssa kommunikoidaan: Bobille kerrotaan kenen kanssa se kommunikoi sekä mikä on Bobin ja henkilönä välinen suhde juuri nyt (onko henkilö esimerkiksi kiihtyneen oloinen koska hintaneuvottelut eivät oikein suju).
- Aihe: Bobille kerrotaan aihe mistä kommunikoidaan.
- Tilanne juuri nyt: Bobille kerrotaan miten keskustelu sujunut tähän asti ja mikä on se tilanne, johon sen pitää tuottaa vastauksensa.
- Säännöt: Bobille kerrotaan mitä sääntöjä sen tulee noudattaa vastausta tehdessään.
- Kommunikointikanava: Bobille kerrotaan minkä välityksellä se kommunikoi (kaijutin-/mikrofonikeskustelu, Discord, sähköposti, SMS jne.) ja mitkä ovat valitun kommunikointikanavan säännöt. Esim. Discordissa on merkkimäärärajoitteet jne.
Alla olevassa videossa harjoittelen Bobin kanssa hintaneuvotteluja Discordissa, aiheena on konsultin vuokraus. Itse toimin ostajana ja Bob myyjänä. Koska sen vastaukset ovat ankkuroituna monikerroksisiin ohjeisiin, Bob pysyy annetuissa raameissa ja keskustelu on sujuvaa, vaikka muutan sen ohjeita joka vastauksen välissä sen mukaan, miten neuvottelumme sujuvat. Pystyn siis ohjaamaan keskustelua koodilisesti hyvinkin tarkasti.
Videossa mainittu henkilön nimi on pseudonyymi joka on yhdistetty testausta varten aitoon osaamistietoon.
Tekemällä tekoälylle pitkiä ja tarkkoja toimintaohjeita (tunnetaan myös nimellä Mega prompting) saa erittäin hyviä lopputuloksia mutta niillä on myös hintansa. Jos käyttää esim. openAI:n rajapintaa, pelkästään keskusteluharjoituksiin voi mennä kymppejä päivässä. Tämä tuotantotapa ei siis ole kovinkaan hyvä ratkaisu silloin, jos on tekemässä kuluttajille suunnattuja tekoälypalveluita (niihin sopii paremmin lyhyemmät toimintaohjeet + fine-tuning). Mega promptit (jotka sisältävät usein RAG-toimintoja) toimivat parhaiten juuri Bobin kaltaisissa hankkeissa, jossa lähinnä tekoäly käyttää tekoälyä ja kokonaisuuden tulisi osata useita eri asioita, monesti vielä samaan aikaan käytettynä.
Devaajille pieni varoituksen sana RAG:ien käytöstä: jos tieto mitä käytätte sisältää lauseita kuten esimerkiksi ”Tämä paita sopii juuri sinulle!” (tuote-esittely) tai ”Tutkijana olen aina ollut sitä mieltä, että kukkien tutkiminen on todella kiehtovaa.” (tutkimusdata) älkää käyttäkö haettua dataa sellaisenaan. LLM voi tulkita tuon tyyppiset lauseet osana ohjeitaan, josta voi seurata aika erikoisia lopputuloksia.
Bob-projektissa olen toiminut siten, että ensin haetaan tarvittava data, sitten se pureskellaan tekoälyn avulla tekoälylle sopivaan muotoon ja vasta lopuksi se annetaan sille osalle Bobia, jonka pitäisi saada siitä datasta jotain irti.
Kommunikointi muiden tahojen kanssa
Vaikka meillä töissä ei juuri koskaan ole pakko keskustella Bobin kanssa, jotta se saisi työnsä tehtyä, niin sen tulee kuitenkin kyetä kommunikoimaan muun muassa konsulttien kanssa aiheista millaista työtä nämä hakevat ja tuntihinnat. Jos tämä kommunikointi olisi tasoa Nordea-chattibotti, moni konsultti varmaan lopettaisi yhteistyön vain siitä ilosta, ettei tarvitse enää jutella botin kanssa. Suurin osa juttelevista boteista ovat ärsyttäviä, se nyt vaan on fakta. Bottisi voi olla vaikka kuinka fiksu ja isolla rahalla koodattu mutta jos se ärsyttää käyttäjiä, kukaan ei sitä halua käyttää ja voit jopa menettää asiakkaita sen takia.
ChatGPT:n kaltaiset LLM-palvelut ovat lähtökohtaisesti aivan liian kohteliaita ja painottavat aivan liian usein olevansa assistentteja. Vaikka olisit juuri antanut niille ohjeet olla jotain ihan muuta. Kohteliaisuus ja avuliaisuus ovat niin syvällä niiden rakenteissa, että vaatii aikaa ja vaivaa saada niiden ilmentymistä järkevästi pienemmälle. Myös Bob on vielä vähän liian kohtelias ja avulias mutta opetan sille tässä pikkuhiljaa, että jos se haluaa olla ihmismäisempi ja lähestyttävä, ei voi kommunikoida kuin joku ylipirteä työharjoittelija ensimmäisenä päivänä töissä.
Kommunikoi siis luomuksesi kanssa paljon ja niin pitkään, että itsekin välillä unohdat, että puhut puppugeneraattorin kanssa. Sen jälkeen voi kokeilla mitä muut tykkäävät tuotoksestasi.
Työnkuvan ymmärtäminen (eli testaus)
Bob sisältää noin 6000 riviä tekstimuotoisia toimintaohjeita. Sillä on perustyötehtävien lisäksi ohjeita aiheista kuten logiikka, mielikuvitus ja ideointi. Paljon ohjeita ja pienetkin muutokset yhdessä voivat aiheuttaa käytösmuutoksia myös jossain muualla. Siksi on ensiarvoisen tärkeää testata tasaisin väliajoin, että Bob ymmärtää yksittäiset työtehtävänsä. Yksi osa tätä testausta on itse tehtävän testaaminen alusta loppuun. Toinen yhtä tärkeä osa on jutella Bobin kanssa ite tehtäväkuvauksesta sen varmistamiseksi, että se edelleen ymmärtää sen oikein.
Alla yksi osa Bobin tekstimuotoisista ohjeista, joiden mukaan se tekee tietyntyyppisiä työhaastatteluja. Jos testaan työhaastattelun vain tekemällä sellaisen Bobin kanssa, en koskaan saisi sen aikana selville, miten se ”ymmärtää” nämä ohjeet (”ymmärtää” hipsuissa, koska kuten aikaisemmin mainittu, oikeastihan LLM mallit eivät mitään ymmärrä mutta hyvillä ohjeilla tunnelma ymmärtämisestä on vahva).

Vain käymällä Bobin kanssa keskustelua yllä olevista ohjeista saan selville, ovatko ne muotoiltu siten, että niistä on todellista hyötyä itse työhaastattelussa. Joskus ihan vaan joku yksittäinen sana ohjeissa saattaa olla LLM:lle huono ja joku sen sanan synonyymi paljon parempi. Keskustelemalla tekoälysi kanssa, pääset kiinni näihin vaikeisiin sanoihin ja voit muuttaa ne parempiin.
Loppusanat
Jos olet tekemässä tekoälyprojektia ja haluat siitä irti jotain parempaa kuin Nordea-botista, älä jätä kommunikointiharjoituksia tekemättä. Kommunikointiharjoitusten ohittaminen on vähän saman kuin tekisit koodia mutta et missään vaiheessa kunnolla testaa tai optimoi koodiasi.
Älä usko netin ohjeita siitä millainen prompti on toimiva (eli älä sokeasti usko tätäkään blogia). LLM:ät kehittyvät jatkuvasti, toimiva ohje tänään voi olla hyödytön huomenna. Moni ei myöskään ota juuri yhtään huomioon hallusinaatio-ongelmia ohjeistaessaan muita promptien teossa. Kun ohjeistat LLM:ää tekemään jotain, lähde testauksessa liikenteeseen oletuksesta, että se aikoo ”valehdella” sinulle ja yritä kaikin mahdollisin keinoin saada sitä sanomaan jotain mitä sen ei pitäisi. Kun olet saanut sen mielestäsi totuuden äärelle, pyydä jotain toista henkilöä kokeilemaan saada siitä epätotuuksia ulos. Lopuksi rakenna siihen vielä avainsanoihin tai tekstin pituuteen liittyviä peruskoodilla tehtyjä lopputarkastuksia, nämä saavat yleensä napsittua kivasti pois sellaisia virhevastauksia, joita tekoäly ei itse huomaa. Voit myös rakentaa tekoälyllä tekoälyn tuottaman tekstin tarkastajan, joka napsii pois vastauksia, joita peruskoodi ei huomaa.
Moni ei uskalla rakentaa itsekseen pyöriviä tekoälykokonaisuuksia, koska pelkää näiden tekevän virheitä. Toistaiseksi on käytännössä mahdotonta päästä 100% luotettavaan monimutkaisempaan LLM-pohjaiseen tekoälykokonaisuuteen mutta sama pätee myös koodiin ja ihmisiin. Virheitä sattuu, oleellista on testata asiat niin tarkasti, että nuo virheet eivät esimerkiksi kaada järjestelmää tai aiheuta asiakaskatoa tietovuotojen tms. takia. Bobin kaltaisen kokonaisuuden suurimpia riskejä ovat sen puheet työpaikkamme ulkopuolisten tahojen kanssa. Jos se sanoo vahingossa jotain todella typerää, herkempi voi ottaa siitä nokkiinsa, vaikka tietäisi puhuvansa tekoälyn kanssa, joilla on taipumusta välillä vähän sekoilla. Joten testatkaa, testatkaa ja testatkaa lisää sitä tekoälyn kommunikointia. Harva pistäisi työharjoittelijan soittelemaan asiakkaille ilman perusteellista koulutusta tai vähintäänkin hyvin tarkkoja ohjeita. Älkää siis myöskään päästäkö tekoälyä asiakkaiden kanssa juttusille, ennen kuin olette varmistaneet, että se todella ”ymmärtää” mitä siltä halutaan. Tekoälyn kanssa pääseminen samalle aaltopituudelle kommunikoinnissa avaa oven perustoimintaohjeiden (epävarmoja lopputuloksia) ja koodin (huomattavasti varmempia lopputuloksia) välille. Käyttäkää aikaa sinne pääsemiseen ja tulette löytämään edestänne valtavan määrä mahdollisuuksia tekoälyn hyödyntämiseen arjessa ja töissä.
Mikäli tämän projektin eri vaiheet kiinnostavat, pistä Linkkariprofiilini tästä seurantaan. Pistän sinne tietoa, kun saan uusia osia tästä esittelystä valmiiksi.
Tommi Bäckgren | 19.10.2023
Kirjoittaja on sarjayrittäjä, joka tykkää myynnin ohessa istua yöt testailemassa uusimpien teknologisten innovaatioiden soveltuvuutta käytännön ratkaisuihin.