Kahdestoista arvo ei ollut koko lainkaan
Kirjoitin ohjeeseen yksitoista sallittua arvoa, ja oikeassa valikossa oli kaksitoista. Näin merkitset ohjeeseesi, mikä arvolista on täysi ja mikä vain omasta datasta luettu.

Olin kirjoittanut ohjeeseen yksitoista sallittua kokoa. Kun lopulta katsoin itse valikkoa, josta asiakas valitsee koon, siinä oli kaksitoista.
Puuttuva arvo ei ollut harvinainen erikoiskoko, vaan yksi tavallisimmista. Ja se kahdestoista ei ollut koko lainkaan, vaan rivi nimeltä "valitsen myöhemmin".
Jokaisessa ohjeessa on lista, jota kukaan ei ole kirjoittanut
Tämä ei ole kokojen erikoisuus. Melkein joka kerta, kun mallille annetaan ohje oikeasta työstä, ohjeeseen päätyy lista sallittuja arvoja: Tilauksen tilat, laskutyypit, tuoteryhmät, osastot, maakoodit, syyt joilla sopimus päättyy. Harvoin sellainen lista on missään valmiina. Tavallisin tapa saada se on katsoa omaa dataa ja kirjoittaa ylös ne arvot, jotka siellä näkyvät.
Tapa on järkevä, ja siinä on yksi ansa: Datasta luettu lista kertoo, mitä arvoja on käytetty. Se ei kerro, mitä arvoja on olemassa.
Otos näytti täydeltä
Rakensin verkkokaupan kampanjaan tuotteiden massatuontia, ja koko tarvittiin osaksi tuotekoodia. Otin arvot edellisen kampanjan tuotteista. Niissä koot olivat siististi täytettyinä, ei yhtään tyhjää solua eikä yhtään outoa arvoa, ja juuri siksi en epäillyt listaa.
Ne yksitoista arvoa olivat kuitenkin noiden tuotteiden ominaisuus, eivät valikoiman. Edellisessä kampanjassa ei ollut mukana yhtään tuotetta, jolle se kahdestoista olisi kuulunut. Otos oli täysi ja silti vajaa. Mikään tarkistus ei huomaa sitä, koska puuttuvasta arvosta ei jää dataan jälkeä.
Kun kävin saman kentän läpi kaupan koko varannosta, noin kymmenestätuhannesta variantista, sama kenttä esiintyi neljällä eri kirjoitusasulla. Isolla ja pienellä alkukirjaimella, lyhyenä ja pitkänä muotona. Datasta lukemalla ei siis saa vain vajaata arvolistaa, vaan myös useamman nimen sille samalle kentälle.
Mitä se muutti
Puuttuva arvo jätti tuotekoodin kesken, ja koodi on se, jolla varasto ja kassa löytävät tuotteen. Korjauksen jälkeen jokaisella 394 variantilla oli koodi, ei yhtään tyhjää.
Tärkeämpi muutos oli ohjeessa. Kirjoitin siihen rajan, jota ei ollut ennen kirjoitettu: Koodin runko tulee aina hinnastosta sellaisena kuin se siellä on, sitä ei johdeta. Vain kokoa vastaava pääte johdetaan, ja vasta sitten, kun runko on tarkistettu. Malli ei ollut ylittänyt mitään rajaa. Rajaa ei ollut kerrottu sille. Saman olen huomannut muussakin tekoälyn käyttöönotossa: Ohjeesta puuttuu harvoin sanoja, useammin siitä puuttuu tieto siitä, mihin ohjeen oma tieto perustuu.
Yksi asia, jonka voi tehdä tällä viikolla
Avaa se ohje, jonka olet mallille kirjoittanut, ja etsi sieltä jokainen lista sallittuja arvoja. Merkitse jokaisen perään, mistä se on kotoisin. Kaksi merkintää riittää:
- Suljettu lista. Arvot ovat virallisesta lähteestä, esimerkiksi järjestelmän omasta asetuksesta tai hinnastosta. Lista on täysi, ja kone saa hylätä kaiken, mikä ei ole sillä.
- Havaittu lista. Arvot on luettu omasta datasta. Lista on vähimmäismäärä, ei koko totuus. Kone ei saa valita lähintä arvoa, vaan sen on pysähdyttävä ja kysyttävä.
Ero on pieni kirjoittaa ja iso käytössä. Ilman sitä malli tekee juuri sen, mitä ihminen tekee kiireessä: Valitsee lähimmän arvon, koska mikään ohjeessa ei sano, ettei lähin kelpaa. Se valinta on niitä, joita kukaan ei huomaa jälkikäteen, koska lopputulos näyttää täydeltä.