# Esimerkkejä Kehotteista

Edellinen osio esitteli perusesimerkin siitä, kuinka kehotetta käytetään LLM:ien kanssa.

Tässä osiossa on lisää esimerkkejä siitä, kuinka kehotteita voidaan käyttää erilaisten tehtävien suorittamiseen ja esitellään samalla avainkäsitteitä. Usein paras tapa oppia käsitteitä on käydä läpi esimerkkejä. Alla olevat esimerkit havainnollistavat, kuinka hyvin laadittuja kehotteita voidaan käyttää erilaisten tehtävien suorittamiseen.

Topics:
- [Tekstin Tiivistäminen](#text-summarization)
- [Tiedonpoiminta](#information-extraction)
- [Kysymyksiin vastaaminen](#question-answering)
- [Tekstin luokittelu](#text-classification)
- [Keskustelu](#conversation)
- [Koodin generointi](#code-generation)
- [Päättely](#reasoning)

---

## Tekstin tiivistäminen
Yksi luonnollisen kielen generoinnin perustehtävistä on tekstin tiivistäminen. Tekstin tiivistäminen voi sisältää monenlaisia variaatioita ja aihealueita. Itse asiassa yksi lupaavimmista kielimalleihin perustuvista sovelluksista on artikkeleiden ja käsitteiden tiivistäminen nopeiksi ja helppolukuisiksi yhteenvetoiksi. Kokeillaan perustason tiivistämistehtävää kehotteiden avulla.

Sanotaan, että olet kiinnostunut oppimaan antibiooteista, voisit kokeilla tällaista kehotetta:

*Kehote:*
```
Selitä antibiootit

Vastaus:
```

*Tulos:*
```
Antibiootit ovat lääkeaineita, jotka on suunniteltu tappamaan tai hidastamaan bakteerien kasvua. Ne ovat tehokkaita bakteeri-infektioiden, kuten keuhkokuumeen, virtsatieinfektioiden ja streptokokki-infektioiden hoidossa. Antibiootit eivät kuitenkaan toimi viruksia, kuten flunssaa tai koronavirusta, vastaan.

Penisilliini on ensimmäinen tunnettu antibiootti, jonka Alexander Fleming löysi vuonna 1928. Tämän jälkeen on kehitetty monia erilaisia antibiootteja, jotka toimivat eri tavoin bakteereita vastaan. Jotkut antibiootit estävät bakteerien soluseinän muodostumista, kun taas toiset häiritsevät niiden proteiinisynteesiä tai DNA-replikaatiota.

```

"Vastaus:" on selkeä tapa muotoilla kehote niin että LLM ymmärtää vastata kysymykseen. Sen hyöty verrattuna sen pois jättämiseen ei ole tässä esimerkissä selvää, mutta voimme säilyttää sen myöhempää käyttöä varten. Voit pyytää mallia tiivistämään lauseen yhteen lauseeseen seuraavasti:

*Kehote:*
```
Antibiootit ovat lääkeaineita, jotka on suunniteltu tappamaan tai hidastamaan bakteerien kasvua. Ne ovat tehokkaita bakteeri-infektioiden, kuten keuhkokuumeen, virtsatieinfektioiden ja streptokokki-infektioiden hoidossa. Antibiootit eivät kuitenkaan toimi viruksia, kuten flunssaa tai koronavirusta, vastaan.

Penisilliini on ensimmäinen tunnettu antibiootti, jonka Alexander Fleming löysi vuonna 1928. Tämän jälkeen on kehitetty monia erilaisia antibiootteja, jotka toimivat eri tavoin bakteereita vastaan. Jotkut antibiootit estävät bakteerien soluseinän muodostumista, kun taas toiset häiritsevät niiden proteiinisynteesiä tai DNA-replikaatiota.

Selitä yllä oleva teksti yhdellä lausella:
```

*Tulos:*
```
Antibiootit ovat lääkkeitä, jotka on suunniteltu torjumaan bakteeri-infektioita eri toimintamekanismeilla, mutta ne eivät tehoa viruksiin, ja ensimmäinen tunnettu antibiootti, penisilliini, löydettiin vuonna 1928.

```

Ilman että kiinnitetään liikaa huomiota yllä olevan tuloksen tarkkuuteen, johon palaamme myöhemmässä oppaassa, malli yritti tiivistää kappaleen yhteen lauseeseen. Voit huoletta pysähtyä tässä vaiheessa ja kokeilla, saatko parempia tuloksia.

---
## Tiedonpoiminta
Vaikka kielimalleja koulutetaan suorittamaan luonnollisen kielen tuottamista ja siihen liittyviä tehtäviä, ne ovat myös erittäin kykeneviä suorittamaan luokittelua ja monia muita luonnollisen kielen käsittelyn (NLP) tehtäviä.

Tässä on esimerkki kehotteesta, joka erottaa tietoa annetusta kappaleesta.

*Kehote:*
```
Tekijöiden osuutta koskevissa tutkimusartikkeleissa tulisi selvästi ja erityisesti todeta, käyttivätkö tekijät tekoälyteknologioita, kuten ChatGPT:tä, tutkimusartikkelin valmistelussa ja analyysissä ja missä määrin. Siinä tulisi myös ilmoittaa, mitä suurten kielimallien (LLM) tuotteita käytettiin. Tämä varoittaa toimittajia ja arvioijia tarkastelemaan käsikirjoituksia huolellisemmin mahdollisten ennakkoluulojen, epätarkkuuksien ja virheellisen lähdeviittauksen varalta. Vastaavasti tieteellisten lehtien tulisi olla avoimia LLM:ien käytöstä, esimerkiksi lähetettyjen käsikirjoitusten valinnassa.

Nimeä  kappaleessa mainittu suureen kielimalliin perustuva tuote:
```

*Tulos:*
```
Kappaleessa yllä mainittu suureen kielimalliin perustuva tuote on ChatGPT.
```

Voit parantaa yllä olevia tuloksia monin eri tavoin, mutta tämä on jo erittäin hyödyllistä.

Nyt pitäisi olla selvää, että voit pyytää mallia suorittamaan erilaisia tehtäviä yksinkertaisesti ohjeistamalla mitä tehdä. Se on tehokas kyky, jota tekoälytuotekehittäjät käyttävät jo vaikuttavien tuotteiden ja kokemusten luomiseen.


Kappaleen lähde: [ChatGPT: five priorities for research](https://www.nature.com/articles/d41586-023-00288-7) 

---
## Kysymyksiin Vastaaminen

Yksi parhaista tavoista saada malli vastaamaan tiettyihin vastauksiin on parantaa kehotteen muotoa. Kuten aiemmin käsiteltiin, kehote voi yhdistää ohjeita, kontekstia, syötetietoa ja lopputuloksen haluttua muotoilua parannettujen tulosten saamiseksi. Vaikka näitä komponentteja ei vaadita, se on hyvä käytäntö, sillä mitä tarkempi olet ohjeiden kanssa, sitä parempia tuloksia saat. Alla on esimerkki siitä, miltä tämä näyttäisi seuraten rakenteellisempaa kehotetta.

*Kehote:*
```
Vastaa kysymykseen alla olevan kontekstin perusteella. Pidä vastaus lyhyenä ja ytimekkäänä. Vastaa "En varma vastauksesta", jos et ole varma vastauksesta.

Konteksti: Teplizumab juontaa juurensa New Jerseyn lääkeyrityksestä nimeltä Ortho Pharmaceutical. Siellä tutkijat kehittivät vasta-ainemolekyylin varhaisen version, jota kutsuttiin nimellä OKT3. Alun perin hiiristä saatua molekyyliä pystyttiin sitoutumaan T-solujen pinnalla oleviin reseptoreihin ja rajoittamaan niiden kykyä tappaa soluja. Vuonna 1986 se hyväksyttiin auttamaan elinsiirtojen jälkeisen hyljinnän estossa, mikä teki siitä ensimmäisen terapeuttisen vasta-aineen, joka oli sallittu ihmiskäyttöön.

Kysymys: Mistä OKT3 alun perin saatiin?

```

*Tulos:*
```
OKT3 oli alun perin peräisin hiiristä.
```

Konteksti otettu [Nature](https://www.nature.com/articles/d41586-023-00400-x)-julkaisusta.

---

## Tekstin Luokittelu

Tähän asti olet käyttänyt yksinkertaisia ohjeita tehtävien suorittamiseen. Kehotesuunnittelijana sinun on opittava antamaan parempia ohjeita. Tulet myös huomaamaan, että vaikeammissa käyttötarkoituksissa pelkkien ohjeiden antaminen ei riitä. Tässä kohtaa sinun on mietittävä enemmän kontekstia ja erilaisia elementtejä, joita voit käyttää kehotteessa. Muita elementtejä, kuten ´syötetiedot´ tai ´esimerkit´.

Yritetään havainnollistaa tätä antamalla esimerkki tekstiluokittelusta.

*Kehote:*
```
Luokittele teksti neutraaliksi, negatiiviseksi tai positiiviseksi. 

Teksti: Ruoka oli ihan OK. 
Luokitus:
```

*Tulos:*
```
Neutraali
```

Annoit ohjeen luokitella tekstin, ja malli vastasi `'Neutraali'`, mikä on oikein. Tässä ei ole mitään vikaa, mutta sanotaan, että haluat mallin antavan tunnisteen tarkalleen haluamassasi muodossa. Joten ´Neutraali´:n sijaan haluat sen palauttavan ´neutraali´. Miten tämä saavutetaan? Tähän on erilaisia tapoja. Tässä tapauksessa on tärkeää olla erityisen tarkka kehotteessa, sillä mitä enemmän tietoa voit antaa kehotteelle, sitä paremmat tulokset saat. Voit kokeilla antaa esimerkkejä oikean käyttäytymisen määrittämiseksi. Kokeillaan uudelleen:

*Kehote:*
```
Luokittele teksti neutraaliksi, negatiiviseksi tai positiiviseksi. 

Teksti: Lomamatka oli ihan OK. 
Luokitus: neutraali

Teksti: Ruoka oli ihan OK. 
Luokitus:
```

*Tulos:*
```
neutraali
```

Täydellistä! Tällä kertaa malli palautti `neutraali` joka on etsimäsi tarkka tunniste. Näyttää siltä, että kehotteessa annettu esimerkki auttoi mallia olemaan tarkempi tuloksissaan. 

Korostaaksemme, miksi joskus tarkkuus on tärkeää, tarkastele alla olevaa esimerkkiä ja löydä ongelma:

*Kehote:*
```
Luokittele teksti nutraaliksi, negatiiviseksi tai positiiviseksi.

Teksti: Lomamatka oli ihan OK.
Luokitus:
```

*Tulos:*
```
Neutraali
```

Huomaatko ongelman? Vihjeenä, keksitty `nutraali` -tunniste jätetään mallin toimesta täysin huomiotta. Sen sijaan malli tuottaa vastausen `Neutraali`, koska sillä on jonkin verran vinoumaa kohti kyseistä termiä. Mutta oletetaan, että haluat oikeasti saad vastaukseksi `nutraali`. Miten korjaisit tämän? Ehkä voit kokeilla lisätä tunnisteisiin kuvauksia tai lisätä kehotteeseen enemmän esimerkkejä? Jos et ole varma, keskustelemme muutamista ideoista tulevissa osioissa.

---

## Keskustelu
Ehkä mielenkiintoisimpia asioita, joita voit saavuttaa kehotesuunnittelulla, on LLM-järjestelmän ohjaaminen käyttäytymiseen, tarkoitukseen ja identiteettiin. Tämä on erityisen hyödyllistä, kun rakennat keskustelevia järjestelmiä, kuten asiakaspalvelun chatbotteja.

Esimerkiksi luodaan keskusteleva järjestelmä, joka pystyy tuottamaan teknisempiä ja tieteellisempiä vastauksia kysymyksiin. Huomaa, kuinka kerrot sille nimenomaisesti, miten sen tulee käyttäytyä ohjeen kautta. Tätä kutsutaan joskus *roolikehotteeksi*.

*Kehote:*
```
Seuraava on keskustelu tekoälytutkimusavustajan kanssa. Avustajan sävy on tekninen ja tieteellinen.

Ihminen: Hei, kuka sinä olet?
AI: Tervehdys! Olen tekoälytutkimusavustaja. Kuinka voin auttaa sinua tänään?
Ihminen: Voitko kertoa minulle mustien aukkojen synnystä?
AI:
```

*Tulos:*
```
Totta kai, mustien aukkojen synnystä on monia teorioita, mutta yleisesti hyväksytty käsitys on, että ne syntyvät massiivisten tähtien lopullisessa vaiheessa. Kun tähden polttoaine loppuu, ytimen paine alkaa laskea, ja tähden ulommat kerrokset romahtavat ytimen päälle. Jos tähti on tarpeeksi massiivinen, romahtava aine keskittyy pienelle alueelle, jolloin syntyy musta aukko. Tämä on seurausta painovoiman voimakkaasta vaikutuksesta, joka on tarpeeksi voimakas estämään valon pakenemisen aukon läheisyydestä.
```

Tutkimusavustajamme kuulostaa hieman liian tekniseltä, eikö? Muutetaan tämä käyttäytyminen ja ohjeistetaan järjestelmää antamaan helpommin ymmärrettäviä vastauksia. 

*Kehote:*
```
Seuraava on keskustelu tekoälytutkimusavustajan kanssa. Avustajan vastauksien tulisi olla helppoja ymmärtää myös alakoululaisille.

Ihminen: Hei, kuka sinä olet?
AI: Tervehdys! Olen tekoälytutkimusavustaja. Kuinka voin auttaa sinua tänään?
Ihminen: Voitko kertoa minulle mustien aukkojen synnystä?
AI:
```

*Tulos:*
```
Totta kai! Mustat aukot syntyvät silloin, kun todella suuri tähti kuolee. Tämä tähti on niin iso, että sen painovoima on todella voimakas. Kun tähti loppuu, sen keskusta romahtaa yhteen pisteeseen ja syntyy musta aukko. Musta aukko on niin voimakas, että mikään ei pääse sieltä pois, ei edes valo.
```

Huomaatko edistymisen? Voit jatkaa kehotteen parantamista. Jos lisäät enemmän esimerkkejä, saatat saada vielä parempia tuloksia.

---

## Koodin Generointi
Yksi sovellus, jossa LLM:t ovat melko tehokkaita, on koodin generointi. Copilot on tästä hyvä esimerkki. Voit suorittaa lukuisia koodin generointitehtäviä älykkäiden kehotteiden avulla. Katsotaan muutamia esimerkkejä alla.

Aloitetaan yksinkertaisella ohjelmalla, joka tervehtii käyttäjää.

*Kehote:*
```
/*
Kysy käyttäjän nimeä ja sano "Hei!"
*/
```

*Tulos:*
```
Tässä on esimerkkikoodi, joka kysyy käyttäjän nimeä ja tulostaa "Hei!" yhdessä käyttäjän antaman nimen kanssa:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Kirjoita nimesi: ");
        String nimi = input.nextLine();
        System.out.println("Hei " + nimi + "!");
    }
}
Tämä ohjelma pyytää käyttäjää kirjoittamaan nimensä, tallentaa sen muuttujaan nimi ja sitten tulostaa "Hei" yhdessä käyttäjän antaman nimen kanssa. Huomaa, että käytämme Scanner -luokkaa käyttäjän syötteen lukemiseen ja String -luokkaa käyttäjän nimen tallentamiseen.
```

Huomaa, että sinun ei edes tarvinnut määrittää käytettävää kieltä.

Kokeillaan toista esimerkkiä. Alla oleva esimerkki näyttää, kuinka tehokkaita LLM:t voivat olla, kun käytetään hieman enemmän vaivaa kehotteen suunnittelussa.

*Kehote:*
```
"""
Table departments, columns = [DepartmentId, DepartmentName]
Table students, columns = [DepartmentId, StudentId, StudentName]
Create a MySQL query for all students in the Computer Science Department
"""
```

*Tulos:*
```
Voit luoda MySQL-kyselyn, joka hakee kaikki tietojenkäsittelytieteen osastolla olevat opiskelijat, sinun on käytettävä JOIN-lausetta yhdistämään tietoja molemmista taulukoista DepartmentId:n perusteella. Etsi ensin tietojenkäsittelytieteen osaston DepartmentId ja käytä sitten tätä arvoa suodattamaan tuloksia opiskelijataulusta.

Tässä on kysely, joka saavuttaa tämän:

SELECT s.StudentId, s.StudentName
FROM students s
JOIN departments d ON s.DepartmentId = d.DepartmentId
WHERE d.DepartmentName = 'tietojenkäsittelytiede';

Tämä kysely palauttaa kaikkien tietojenkäsittelytieteen osastolla olevien opiskelijoiden StudentId:n ja StudentName:n.
```

Tämä on erittäin vaikuttavaa. Tässä tapauksessa annoit tietoja tietokantaskeemasta ja pyysit luomaan kelvollisen MySQL-kyselyn.

---

## Päättely
Ehkä yksi vaikeimmista tehtävistä LLM:lle tänä päivänä on sellainen, joka vaatii jonkinlaista päättelyä. Päättely on mielenkiintoisimpia alueita monimutkaisten sovellusten vuoksi, jotka voivat syntyä LLM:istä.

Matemaattisia kykyjä vaativissa tehtävissä on tapahtunut joitakin parannuksia. Tästä huolimatta on tärkeää huomata, että nykyiset LLM:t kamppailevat päättelytehtävien kanssa, joten tämä vaatii entistä kehittyneempiä kehotesuunnittelutekniikoita. Käsittelemme näitä kehittyneitä tekniikoita seuraavassa oppaassa. Tässä vaiheessa käymme läpi muutamia perusesimerkkejä aritmeettisten kykyjen osoittamiseksi.

*Kehote:*
```
Paljonko on 9,000 * 9,000?
```

*Tulos:*
```
9,000 kertaa 9,000 on 81,000,000.
```

Kokeillaan hieman hankalampaa laskua.

*Kehote:*
```
Parittomat numerot tässä ryhmässä summattuna muodostavat parillisen luvun: 15, 32, 5, 13, 82, 7, 1.

A: 
```

*Tulos*
```
Parittomat numerot tässä ryhmässä ovat 15, 5, 13 ja 7. Niiden summa on 15 + 5 + 13 + 7 = 40.

Parilliset numerot ovat 32 ja 82. Niiden summa on 32 + 82 = 114.

Kun nämä kaksi summaa lasketaan yhteen, saadaan:

40 + 114 = 154

Tämä on parillinen luku, joten vastaus on parillinen.
```

Vastaus on väärä! Yritetään uudelleen parantamalla kehotetta.

*Kehote:*
```
Tässä ryhmässä parittomat numerot summattuna muodostavat parillisen luvun: 15, 32, 5, 13, 82, 7, 1.

Ratkaise ongelma jakamalla se vaiheisiin. Ensin, tunnista parittomat numerot, lisää ne yhteen ja kerro, onko tulos pariton vai parillinen. 
```

*Tulos:*
```
Vaihe 1: Tunnista parittomat numerot.
Tarkastelemme ryhmässä olevia lukuja ja tunnistamme parittomat numerot:
15, 5, 13, 7, 1

Vaihe 2: Laske parittomien numeroiden summa.
Seuraavaksi lisäämme parittomat numerot yhteen:
15 + 5 + 13 + 7 + 1 = 41

Vaihe 3: Tarkista, onko tulos pariton vai parillinen.
Lopuksi tarkistamme, onko saatu summa pariton vai parillinen. Koska 41 on jaollinen vain 1:llä ja itsellään (41), se on pariton luku.
```

Paljon parempi, eikö? Kokeilin tätä muutaman kerran, ja järjestelmä epäonnistuu joskus. Jos annat parempia ohjeita yhdistettynä esimerkkeihin, se saattaa auttaa saamaan tarkempia tuloksia.

Tulemme lisäämään esimerkkejä tähän osioon tulevaisuudessa.

Tulevassa osiossa käsittelemme entistä kehittyneempiä kehotesuunnittelun käsitteitä ja tekniikoita, joiden avulla parannetaan suorituskykyä kaikissa näissä ja vaikeammissa tehtävissä.
