mirror of
https://github.com/dair-ai/Prompt-Engineering-Guide
synced 2024-11-19 21:25:35 +00:00
330 lines
16 KiB
Plaintext
330 lines
16 KiB
Plaintext
# Esimerkkejä Kehotteista
|
||
|
||
Edellisessä osiossa esiteltiin perusesimerkki siitä, kuinka kehotetta käytetään LLM:ien kanssa.
|
||
|
||
Tässä osiossa esitellään lisää esimerkkejä siitä, kuinka kehotteita voidaan käyttää erilaisten tehtävien suorittamiseen, samalla kun avainkäsitteitä esitellään. 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.
|
||
|
||
Aiheet:
|
||
- [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ämiseen voi sisältyä 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.
|
||
|
||
Jos olet kiinnostunut oppimaan antibiooteista, voisit kokeilla seuraavaa 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ä kiinnitämme 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 ensisijaisesti luonnollisen kielen tuottamiseen ja siihen liittyviin tehtäviin, 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 poimii 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 ne ovat jo nyt erittäin hyödyllisiä.
|
||
|
||
Nyt pitäisi olla selvää, että voit ohjeistaa mallia suorittamaan erilaisia tehtäviä yksinkertaisesti kertomalla, 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 antamaan tiettyjä vastauksia on parantaa kehotteen muotoa. Kuten aiemmin käsiteltiin, kehote voi yhdistää ohjeita, kontekstia, syötetietoa ja lopputuloksen haluttua muotoilua parantaakseen tuloksia. 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ä voisi näyttää, kun käytetään 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 olemme käyttäneet yksinkertaisia ohjeita tehtävien suorittamiseen. Kehotesuunnittelijana sinun on opittava antamaan parempia ohjeita. Huomaat myös, että vaikeammissa käyttötarkoituksissa pelkkien ohjeiden antaminen ei riitä. Tässä kohtaa sinun pitää ottaa huomioon enemmän kontekstia ja erilaisia elementtejä, joita voit käyttää kehotteessa. Näitä elementtejä ovat mm. ´syötetiedot´ ja ´esimerkit´.
|
||
|
||
Havainnollistetaan 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? On olemassa useita 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.
|
||
|
||
orostaaksemme, miksi joskus tarkkuus on tärkeää, tarkastellaan seuraavaa esimerkkiä ja yritetään löytää 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 kehotesuunnittelulla voi saavuttaa, on LLM-järjestelmän ohjaaminen käyttäytymään tietyn tarkoituksen mukaisesti ja luomaan tietty identiteetti. 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 saattaa 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 edistystä? Voit jatkaa kehotteen parantamista lisäämällä enemmän esimerkkejä, jolloin saatat saada vielä parempia tuloksia.
|
||
|
||
---
|
||
|
||
## Koodin Generointi
|
||
Yksi sovellusalue, 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ää ohjelmointikieltä.
|
||
|
||
Kokeillaan toista esimerkkiä. Seuraava esimerkki havainnollistaa, kuinka tehokkaita LLM:t voivat olla, kun kehotteen suunnitteluun käytetään hieman enemmän vaivaa.
|
||
|
||
*Kehote:*
|
||
```
|
||
"""
|
||
Table departments, columns = [DepartmentId, DepartmentName]
|
||
Table students, columns = [DepartmentId, StudentId, StudentName]
|
||
Luo MySQL kysely joka palauttaa kaikki tietojenkäsittelytieteen opiskelijat
|
||
"""
|
||
```
|
||
|
||
*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 vaikuttava esimerkki. Tässä tapauksessa annoit tiedot tietokantaskeemasta ja pyysit LLM:ää 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 yksi mielenkiintoisimmista alueista sen monimutkaisten sovellusmahdollisuuksien vuoksi, jotka voivat syntyä LLM:ien kanssa.
|
||
|
||
Matemaattisia kykyjä vaativiin tehtäviin on saatu joitakin parannuksia. On kuitenkin tärkeää huomata, että nykyiset LLM:t kamppailevat edelleen päättelytehtävien kanssa, mikä vaatii entistä kehittyneempiä kehotesuunnittelutekniikoita. Käsittelemme näitä kehittyneitä tekniikoita seuraavassa oppaassa. Tässä vaiheessa esitämme muutamia perusesimerkkejä aritmeettisten kykyjen havainnollistamiseksi.
|
||
|
||
*Kehote:*
|
||
```
|
||
Paljonko on 9,000 * 9,000?
|
||
```
|
||
|
||
*Tulos:*
|
||
```
|
||
9,000 kertaa 9,000 on 81,000,000.
|
||
```
|
||
|
||
Kokeillaan hieman hankalampaa laskutehtävää.
|
||
|
||
*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 kehotetta parantamalla.
|
||
|
||
*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ö vain? Kokeilin tätä muutaman kerran, ja huomasin, että järjestelmä epäonnistuu välillä. Jos annat parempia ohjeita yhdistettynä esimerkkeihin, se saattaa auttaa saamaan tarkempia tuloksia.
|
||
|
||
Aiomme lisätä 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ä.
|