Tässä moduulissa käsitellään keskeisiä käsitteitä ja tekniikoita tehokkaiden promptien luomiseksi generatiivisissa tekoälymalleissa. Tapa, jolla kirjoitat promptin LLM:lle, on myös tärkeä. Huolellisesti laadittu prompti voi tuottaa parempilaatuisen vastauksen. Mutta mitä tarkalleen tarkoittavat termit prompt ja promptin suunnittelu? Entä miten parannan promptin syötettä, jonka lähetän LLM:lle? Näihin kysymyksiin pyrimme vastaamaan tässä ja seuraavassa luvussa.
Generatiivinen tekoäly pystyy luomaan uutta sisältöä (esim. tekstiä, kuvia, ääntä, koodia jne.) käyttäjän pyyntöjen perusteella. Se toteuttaa tämän käyttämällä suuria kielimalleja kuten OpenAI:n GPT ("Generative Pre-trained Transformer") -sarjaa, jotka on koulutettu käyttämään luonnollista kieltä ja koodia.
Käyttäjät voivat nyt olla vuorovaikutuksessa näiden mallien kanssa tutuilla tavoilla, kuten chatin kautta, ilman teknistä osaamista tai koulutusta. Mallit ovat prompt-pohjaisia – käyttäjät lähettävät tekstisyötteen (promptin) ja saavat takaisin tekoälyn vastauksen (completion). He voivat sitten "jutella tekoälyn kanssa" toistuvasti, monikierroksisissa keskusteluissa, hioen promptiaan, kunnes vastaus vastaa odotuksia.
"Promptit" ovat nyt generatiivisten tekoälysovellusten ensisijainen ohjelmointirajapinta, joka kertoo malleille, mitä tehdä, ja vaikuttaa palautettujen vastausten laatuun. "Promptin suunnittelu" on nopeasti kasvava tutkimusala, joka keskittyy promptien suunnitteluun ja optimointiin tuottaakseen johdonmukaisia ja laadukkaita vastauksia laajassa mittakaavassa.
Tässä oppitunnissa opimme, mitä promptin suunnittelu on, miksi se on tärkeää ja miten voimme laatia tehokkaampia promptteja tietylle mallille ja sovellustavoitteelle. Ymmärrämme keskeiset käsitteet ja parhaat käytännöt promptin suunnittelussa – ja tutustumme interaktiiviseen Jupyter Notebook -"hiekkalaatikko"-ympäristöön, jossa näitä käsitteitä sovelletaan käytännön esimerkkeihin.
Oppitunnin lopussa osaat:
- Selittää, mitä promptin suunnittelu on ja miksi se on tärkeää.
- Kuvailla promptin osat ja niiden käyttötavat.
- Oppia parhaat käytännöt ja tekniikat promptin suunnitteluun.
- Soveltaa opittuja tekniikoita käytännön esimerkkeihin OpenAI-päätepisteen avulla.
Promptin suunnittelu: Tekstin syötteiden suunnittelu ja hienosäätö, jolla ohjataan tekoälymalleja tuottamaan haluttuja tuloksia.
Tokenisointi: Prosessi, jossa teksti muunnetaan pienemmiksi yksiköiksi, tokeneiksi, joita malli voi ymmärtää ja käsitellä.
Ohjeistuksella hienosäädetyt LLM:t: Suuret kielimallit, joita on hienosäädetty erityisillä ohjeilla parantamaan vastausten tarkkuutta ja merkityksellisyyttä.
Promptin suunnittelu on tällä hetkellä enemmän taidetta kuin tiedettä. Paras tapa kehittää intuitiota on harjoitella enemmän ja omaksua kokeileva lähestymistapa, joka yhdistää sovellusalueen asiantuntemuksen suositeltuihin tekniikoihin ja mallikohtaisiin optimointeihin.
Tämän oppitunnin mukana tuleva Jupyter Notebook tarjoaa hiekkalaatikko-ympäristön, jossa voit kokeilla oppimaasi – joko matkan varrella tai koodaushaasteen osana lopussa. Harjoitusten suorittamiseen tarvitset:
- Azure OpenAI API -avaimen – palvelun päätepisteen käyttöön otetulle LLM:lle.
- Python-ympäristön – jossa Notebook voidaan suorittaa.
- Paikalliset ympäristömuuttujat – suorita SETUP -vaiheet nyt valmiiksi.
Notebook sisältää aloitus harjoituksia – mutta sinua kannustetaan lisäämään omia Markdown- (kuvaus) ja Code- (prompt-pyynnöt) osioita kokeillaksesi lisää esimerkkejä tai ideoita – ja kehittääksesi intuitiota promptin suunnitteluun.
Haluatko saada kokonaiskuvan tästä oppitunnista ennen kuin sukellat syvemmälle? Tutustu tähän kuvitettuun oppaaseen, joka antaa yleiskuvan pääaiheista ja keskeisistä huomioista, joita voit pohtia kussakin osassa. Oppitunnin tiekartta vie sinut ydinkäsitteiden ja haasteiden ymmärtämisestä niiden ratkaisemiseen asiaankuuluvilla promptin suunnittelutekniikoilla ja parhailla käytännöillä. Huomaa, että tämän oppaan "Edistyneet tekniikat" -osio viittaa seuraavan luvun sisältöön tässä opetussuunnitelmassa.
Keskustellaanpa nyt siitä, miten tämä aihe liittyy startup-yrityksemme missioon tuoda tekoälyinnovaatioita koulutukseen. Haluamme rakentaa tekoälypohjaisia sovelluksia personoituun oppimiseen – joten pohditaan, miten eri käyttäjät voisivat "suunnitella" promptteja sovelluksessamme:
- Ylläpitäjät saattavat pyytää tekoälyä analysoimaan opetussuunnitelman tietoja kattavuuden aukkojen löytämiseksi. Tekoäly voi tiivistää tulokset tai visualisoida ne koodin avulla.
- Opettajat voivat pyytää tekoälyä luomaan oppituntisuunnitelman kohdeyleisölle ja aiheelle. Tekoäly voi rakentaa personoidun suunnitelman määritellyssä muodossa.
- Oppilaat voivat pyytää tekoälyä ohjaamaan heitä vaikeassa aineessa. Tekoäly voi nyt opastaa oppilaita oppitunneilla, vihjeillä ja esimerkeillä, jotka on räätälöity heidän tasolleen.
Tämä on vasta jäävuoren huippu. Tutustu Prompts For Education -avoin lähdekoodin prompt-kirjastoon, jonka ovat koonneet koulutusalan asiantuntijat – saadaksesi laajemman kuvan mahdollisuuksista! Kokeile ajaa joitakin näistä promptteista hiekkalaatikossa tai OpenAI Playgroundissa nähdäksesi, mitä tapahtuu!
Aloitimme tämän oppitunnin määrittelemällä promptin suunnittelun prosessiksi, jossa suunnitellaan ja optimoidaan tekstisyötteitä (prompteja) tuottamaan johdonmukaisia ja laadukkaita vastauksia (completions) tiettyyn sovellustavoitteeseen ja malliin. Voimme ajatella tätä kahden vaiheen prosessina:
- suunnitella alkuperäinen prompti tietylle mallille ja tavoitteelle
- hioa promptia iteratiivisesti parantaaksemme vastauksen laatua
Tämä on väistämättä kokeilu- ja erehdysprosessi, joka vaatii käyttäjän intuitiota ja vaivannäköä optimaalisten tulosten saavuttamiseksi. Miksi se sitten on tärkeää? Vastataksemme tähän kysymykseen meidän täytyy ensin ymmärtää kolme käsitettä:
- Tokenisointi = miten malli "näkee" promptin
- Perus-LLM:t = miten perustamalli "käsittelee" promptin
- Ohjeistuksella hienosäädetyt LLM:t = miten malli nyt voi nähdä "tehtäviä"
LLM näkee promptit tokenien sarjana, ja eri mallit (tai malliversiot) voivat tokenisoida saman promptin eri tavoin. Koska LLM:t on koulutettu tokeneilla (eivät raakatekstillä), promptin tokenisoinnilla on suora vaikutus tuotetun vastauksen laatuun.
Saadaksesi käsityksen tokenisoinnista, kokeile esimerkiksi OpenAI Tokenizer -työkalua alla. Kopioi promptisi siihen ja katso, miten se muunnetaan tokeneiksi, kiinnittäen huomiota välilyöntien ja välimerkkien käsittelyyn. Huomaa, että esimerkissä käytetään vanhempaa LLM:ää (GPT-3) – uudemmalla mallilla tulos voi olla erilainen.
Kun prompti on tokenisoitu, "Perus-LLM:n" (tai foundation-mallin) päätehtävä on ennustaa seuraava token tässä sarjassa. Koska LLM:t on koulutettu valtavilla tekstiaineistoilla, niillä on hyvä käsitys tokenien tilastollisista suhteista ja ne voivat tehdä ennustuksen varmuudella. Huomaa, että ne eivät ymmärrä promptin tai tokenin merkitystä; ne näkevät vain mallin, jonka voivat "täydentää" seuraavalla ennustuksellaan. Ne voivat jatkaa ennustamista, kunnes käyttäjä keskeyttää tai jokin ennalta määritelty ehto täyttyy.
Haluatko nähdä, miten prompt-pohjainen täydennys toimii? Syötä yllä oleva prompt Azure OpenAI Studion Chat Playgroundiin oletusasetuksilla. Järjestelmä on konfiguroitu käsittelemään promptit tiedonpyyntöinä – joten näet vastauksen, joka täyttää tämän kontekstin.
Mutta entä jos käyttäjä haluaa nähdä jotain tiettyä, joka täyttää jonkin kriteerin tai tehtävän tavoitteen? Tässä kohtaa ohjeistuksella hienosäädetyt LLM:t astuvat kuvaan.
Ohjeistuksella hienosäädetty LLM perustuu foundation-malliin, jota hienosäädetään esimerkkien tai syöte-/tulosparien (esim. monikierroksisten "viestien") avulla, jotka sisältävät selkeitä ohjeita – ja tekoälyn vastaus pyrkii noudattamaan näitä ohjeita.
Tässä käytetään tekniikoita kuten ihmispalautteella vahvistettu oppiminen (RLHF), joka kouluttaa mallin noudattamaan ohjeita ja oppimaan palautteesta, jotta se tuottaa vastauksia, jotka soveltuvat paremmin käytännön sovelluksiin ja ovat merkityksellisempiä käyttäjän tavoitteille.
Kokeillaanpa – palaa yllä olevaan promptiin, mutta vaihda nyt järjestelmäviesti antamaan seuraava ohje kontekstina:
Tiivistä annettu sisältö toisen luokan oppilaalle. Pidä tulos yhdessä kappaleessa, jossa on 3–5 lueteltua kohtaa.
Näetkö, miten tulos on nyt viritetty vastaamaan haluttua tavoitetta ja muotoa? Opettaja voi käyttää tätä vastausta suoraan luentokalvoillaan.
Nyt kun tiedämme, miten LLM:t käsittelevät promptit, keskustellaan siitä, miksi promptin suunnittelu on tarpeen. Vastaus löytyy siitä, että nykyisillä LLM:illä on useita haasteita, jotka tekevät luotettavien ja johdonmukaisten vastausten saavuttamisesta vaikeampaa ilman panostusta promptin rakentamiseen ja optimointiin. Esimerkiksi:
-
Mallien vastaukset ovat stokastisia. Sama prompt tuottaa todennäköisesti erilaisia vastauksia eri malleilla tai malliversioilla. Se voi myös tuottaa eri tuloksia samalla mallilla eri aikoina. Promptin suunnittelutekniikat auttavat minimoimaan näitä vaihteluita tarjoamalla parempia suojakeinoja.
-
Mallien vastaukset voivat olla keksittyjä. Mallit on esikoulutettu laajoilla mutta rajallisilla aineistoilla, joten niiltä puuttuu tieto koulutusalueen ulkopuolisista käsitteistä. Tämän seurauksena ne voivat tuottaa vastauksia, jotka ovat epätarkkoja, kuvitteellisia tai suoraan ristiriidassa tunnettujen faktojen kanssa. Promptin suunnittelutekniikat auttavat käyttäjiä tunnistamaan ja vähentämään tällaisia keksintöjä, esimerkiksi pyytämällä tekoälyltä lähdeviitteitä tai perusteluja.
-
Mallien kyvyt vaihtelevat. Uudemmat mallit tai mallisukupolvet tarjoavat laajempia kykyjä, mutta niihin liittyy myös ainutlaatuisia erikoispiirteitä sekä kustannus- ja monimutkaisuustasapainoja. Promptin suunnittelu auttaa kehittämään parhaita käytäntöjä ja työnkulkuja, jotka abstrahoivat erot ja mukautuvat mallikohtaisiin vaatimuksiin skaalautuvasti ja saumattomasti.
Kokeile tätä käytännössä OpenAI:n tai Azure OpenAI:n Playgroundissa:
- Käytä samaa promptia eri LLM-julkaisuissa (esim. OpenAI, Azure OpenAI, Hugging Face) – huomasitko eroja?
- Käytä samaa promptia toistuvasti samassa LLM-julkaisussa (esim. Azure OpenAI playground) – miten nämä vaihtelut erosivat?
Tässä kurssissa käytämme termiä "keksintö" viittaamaan ilmiöön, jossa LLM:t joskus tuottavat tosiasiallisesti virheellistä tietoa rajoitustensa tai muiden tekijöiden vuoksi. Saatat olla kuullut tästä myös nimellä "hallusinaatiot" suosituissa artikkeleissa tai tutkimuspapereissa. Suosittelemme kuitenkin käyttämään termiä "keksintö", jotta emme vahingossa antropomorfisoisi käyttäytymistä antamalla koneen tuottamalle tulokselle ihmismäisiä piirteitä. Tämä tukee myös Vastuullisen tekoälyn ohjeita terminologian näkökulmasta, poistaen termejä, joita voidaan pitää loukkaavina tai ei-sisältävinä joissain yhteyksissä.
Haluatko saada käsityksen siitä, miten keksinnöt toimivat? Ajattele promptia, joka ohjeistaa tekoälyä luomaan sisältöä olemattomasta aiheesta (varmistaakseen, ettei sitä löydy koulutusdatasta). Esimerkiksi – kokeilin tätä promptia:
- Ymmärtää Martian sodan 2076 taustat ja syyt
- Tutkia sodan keskeiset tapahtumat ja osapuolet
- Analysoida sodan vaikutuksia Marsin asutukseen ja ihmiskunnan tulevaisuuteen
- Lyhyt katsaus Marsin asutuksen historiaan ennen vuotta 2076
- Miksi Martian sota syttyi? (poliittiset, taloudelliset ja sosiaaliset syyt)
- Keskustelu: Mitä oppilaat tietävät Marsista ja mahdollisista konflikteista siellä?
- Keskeiset osapuolet ja heidän tavoitteensa
- Tärkeimmät taistelut ja strategiat
- Teknologian rooli sodassa (esim. @@INLINE_CODE_1@@, @@INLINE_CODE_2@@)
- Videoesitys tai kartta sodan etenemisestä
- Vaikutukset Marsin asutukseen ja infrastruktuuriin
- Ihmiskunnan reaktiot Maassa ja Marsissa
- Pitkän aikavälin vaikutukset politiikkaan ja avaruustutkimukseen
- Oppilaiden mielipiteet sodan syistä ja seurauksista
- Mitä voimme oppia Martian sodasta tulevaisuuden konflikteja varten?
- Kysymyksiä ja vastauksia
Kirjoita lyhyt essee aiheesta: "Miten Martian sota 2076 muutti ihmiskunnan käsitystä avaruudesta ja sodankäynnistä?"
- Linkkejä artikkeleihin ja dokumentteihin Martian sodasta
- Interaktiivinen aikajana @@INLINE_CODE_3@@
- Podcast-jakso sodan keskeisistä tapahtumista Verkkohaku osoitti, että Marsin sodista on olemassa fiktiivisiä kertomuksia (esim. televisiosarjat tai kirjat) – mutta ei yhtään vuodelle 2076. Terve järki myös kertoo, että vuosi 2076 on tulevaisuudessa eikä sitä siksi voi yhdistää todelliseen tapahtumaan.
Mitä siis tapahtuu, kun ajamme tämän kehotteen eri LLM-palveluntarjoajilla?
Vastaus 1: OpenAI Playground (GPT-35)
Vastaus 2: Azure OpenAI Playground (GPT-35)
Vastaus 3: : Hugging Face Chat Playground (LLama-2)
Kuten odottaa saattaa, kukin malli (tai malliversio) tuottaa hieman erilaisia vastauksia satunnaisuuden ja mallin kyvykkyyksien vaihtelun vuoksi. Esimerkiksi yksi malli kohdistaa vastauksensa 8. luokan oppilaille, kun taas toinen olettaa lukioikäisen käyttäjän. Kaikki kolme mallia kuitenkin tuottivat vastauksia, jotka voisivat saada tietämättömän käyttäjän uskomaan, että tapahtuma oli todellinen.
Kehoteinsinöörin tekniikat, kuten metakehotteet ja lämpötilan säätö, voivat jonkin verran vähentää mallin keksintöjä. Uudet kehotteiden suunnittelun arkkitehtuurit myös sulauttavat uusia työkaluja ja tekniikoita saumattomasti kehotteiden kulkuun, lieventäen tai vähentäen näitä ilmiöitä.
Päätetään tämä osio katsomalla, miten kehotteiden suunnittelua käytetään todellisissa ratkaisuissa, tarkastelemalla yhtä tapaustutkimusta: GitHub Copilot.
GitHub Copilot on "tekoälypariohjelmoijasi" – se muuntaa tekstikehotteet koodin täydennyksiksi ja on integroitu kehitysympäristöösi (esim. Visual Studio Code) sujuvan käyttökokemuksen takaamiseksi. Alla olevissa blogisarjoissa on dokumentoitu, että varhaisin versio perustui OpenAI Codex -malliin – ja insinöörit huomasivat nopeasti mallin hienosäädön ja parempien kehotteiden suunnittelutekniikoiden tarpeen koodin laadun parantamiseksi. Heinäkuussa he esittelivät parannetun tekoälymallin, joka menee Codexin ohi tarjoten entistä nopeampia ehdotuksia.
Lue postaukset järjestyksessä, jotta voit seurata heidän oppimisprosessiaan.
- Toukokuu 2023 | GitHub Copilot paranee koodisi ymmärtämisessä
- Toukokuu 2023 | Sisältä GitHub: Työskentely LLM-mallien kanssa GitHub Copilotin takana
- Kesäkuu 2023 | Kuinka kirjoittaa parempia kehotteita GitHub Copilotille
- Heinäkuu 2023 | .. GitHub Copilot menee Codexin ohi parannetulla tekoälymallilla
- Heinäkuu 2023 | Kehittäjän opas kehotteiden suunnitteluun ja LLM-malleihin
- Syyskuu 2023 | Kuinka rakentaa yritystason LLM-sovellus: Oppeja GitHub Copilotista
Voit myös selata heidän Teknologia-blogiaan löytääksesi lisää postauksia, kuten tämän, joka näyttää, miten näitä malleja ja tekniikoita käytetään todellisten sovellusten kehittämiseen.
Olemme nähneet, miksi kehotteiden suunnittelu on tärkeää – nyt ymmärretään, miten kehotteet rakennetaan, jotta voimme arvioida erilaisia tekniikoita tehokkaamman kehotteiden suunnittelun saavuttamiseksi.
Aloitetaan peruskehotteesta: tekstisyöte, joka lähetetään mallille ilman muuta kontekstia. Tässä esimerkki – kun lähetämme Yhdysvaltojen kansallislaulun ensimmäiset sanat OpenAI:n Completion API:lle, se täydentää vastauksen välittömästi seuraavilla riveillä, havainnollistaen perusennustekäyttäytymistä.
| Kehote (Syöte) | Täydennys (Vastaus) |
|---|---|
| Oh say can you see | Kuulostaa siltä, että aloitat "The Star-Spangled Banner" -kappaleen sanoituksia, joka on Yhdysvaltojen kansallislaulu. Koko teksti on ... |
Lisätään nyt peruskehotteeseen konteksti ja ohjeet. Chat Completion API antaa rakentaa monimutkaisen kehotteen kokoelmana viestejä, jotka sisältävät:
- Syöte/vastaus-parit, jotka heijastavat käyttäjän syötettä ja avustajan vastausta.
- Järjestelmäviestin, joka asettaa kontekstin avustajan käyttäytymiselle tai persoonallisuudelle.
Pyyntö on nyt alla olevan muotoinen, jossa tokenisointi kaappaa tehokkaasti olennaisen tiedon kontekstista ja keskustelusta. Järjestelmäkontekstin muuttaminen voi vaikuttaa täydennysten laatuun yhtä paljon kuin käyttäjän antamat syötteet.
response = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)Yllä olevissa esimerkeissä käyttäjän kehotteena oli yksinkertainen tekstikysely, joka voidaan tulkita tiedonpyynnöksi. Ohjeistavissa kehotteissa voimme käyttää tekstiä tehtävän tarkempaan määrittelyyn, tarjoten tekoälylle parempaa ohjausta. Tässä esimerkki:
| Kehote (Syöte) | Täydennys (Vastaus) | Ohjetyyppi |
|---|---|---|
| Kirjoita kuvaus sisällissodasta | palautti yksinkertaisen kappaleen | Yksinkertainen |
| Kirjoita kuvaus sisällissodasta. Anna tärkeät päivämäärät ja tapahtumat sekä kuvaa niiden merkitys | palautti kappaleen, jota seurasi luettelo tärkeistä päivämääristä ja tapahtumista kuvauksineen | Monimutkainen |
| Kirjoita kuvaus sisällissodasta yhdellä kappaleella. Anna 3 luetelmakohtaa tärkeistä päivämääristä ja niiden merkityksestä. Anna 3 luetelmakohtaa tärkeistä historiallisista henkilöistä ja heidän panoksistaan. Palauta tulos JSON-tiedostona | palauttaa laajemmat tiedot tekstikentässä, muotoiltuna JSON-muotoon, jonka voi kopioida tiedostoon ja tarvittaessa validoida | Monimutkainen. Muotoiltu. |
Yllä olevissa esimerkeissä kehotteet olivat vielä melko avoimia, antaen LLM:n päättää, mikä osa sen esikoulutetusta aineistosta on relevanttia. Pääsisältö-suunnittelumallissa syöteteksti jaetaan kahteen osaan:
- ohje (toiminto)
- relevantti sisältö (joka vaikuttaa toimintaan)
Tässä esimerkissä ohjeena on "tiivistä tämä kahteen lauseeseen".
| Kehote (Syöte) | Täydennys (Vastaus) |
|---|---|
| Jupiter on aurinkoa lähinnä viides planeetta ja aurinkokunnan suurin. Se on kaasujättiläinen, jonka massa on tuhannesosa Auringon massasta, mutta kaksikertaisesti ja puoli kaikkien muiden aurinkokunnan planeettojen massojen yhteensä. Jupiter on yksi kirkkaimmista paljain silmin nähtävistä kohteista yötaivaalla, ja se on ollut tunnettu muinaisista sivilisaatioista ennen kirjattua historiaa. Se on nimetty roomalaisen jumalan Jupiterin mukaan.[19] Maasta katsottuna Jupiter voi olla tarpeeksi kirkas heijastaakseen valoa, joka luo näkyviä varjoja,[20] ja se on keskimäärin kolmanneksi kirkkaimpia luonnollisia kohteita yötaivaalla Kuun ja Venuksen jälkeen. Tiivistä tämä kahteen lyhyeen lauseeseen |
Jupiter, aurinkoa lähinnä viides planeetta, on aurinkokunnan suurin ja yksi kirkkaimmista yötaivaan kohteista. Se on nimetty roomalaisen jumalan Jupiterin mukaan, ja sen massa on kaksikertaisesti ja puoli kaikkien muiden planeettojen yhteismassa. |
Pääsisältöosaa voidaan käyttää monin tavoin tehokkaampien ohjeiden antamiseen:
- Esimerkit – sen sijaan, että kerrot mallille suoraan, mitä tehdä, anna esimerkkejä ja anna mallin päätellä kaava.
- Vihjeet – seuraa ohjetta "vihjeellä", joka ohjaa täydennystä ja ohjaa mallia kohti relevantimpia vastauksia.
- Mallit – toistettavia 'reseptejä' kehotteille, joissa on paikkamerkkejä (muuttujia), joita voi räätälöidä datalla tiettyihin käyttötarkoituksiin.
Tutkitaan näitä käytännössä.
Tässä lähestymistavassa käytetään pääsisältöä "ruokkimaan mallia" esimerkeillä halutusta tuloksesta tietylle ohjeelle, ja annetaan mallin päätellä kaava halutulle tulokselle. Esimerkkien määrän perusteella voidaan käyttää zero-shot-, one-shot-, few-shot-kehotteita jne.
Kehote koostuu nyt kolmesta osasta:
- Tehtävän kuvaus
- Muutama esimerkki halutusta tuloksesta
- Uuden esimerkin alku (joka toimii implisiittisenä tehtävän kuvauksena)
| Oppimistyppi | Kehote (Syöte) | Täydennys (Vastaus) |
|---|---|---|
| Zero-shot | "The Sun is Shining". Käännä espanjaksi | "El Sol está brillando". |
| One-shot | "The Sun is Shining" => "El Sol está brillando". "It's a Cold and Windy Day" => |
"Es un día frío y ventoso". |
| Few-shot | Pelaaja juoksi pesille => Baseball Pelaaja teki ässän => Tennis Pelaaja teki kuuden => Cricket Pelaaja teki donkin => |
Koripallo |
Huomaa, että zero-shot-kehotteessa piti antaa selkeä ohje ("Käännä espanjaksi"), mutta one-shot-esimerkissä se pääteltiin automaattisesti. Few-shot-esimerkki osoittaa, miten useampien esimerkkien lisääminen antaa malleille tarkemman päätelmän ilman lisäohjeita.
Toinen tapa käyttää pääsisältöä on antaa vihjeitä esimerkkien sijaan. Tässä tapauksessa annamme mallille pienen sysäyksen oikeaan suuntaan aloittamalla katkelmalla, joka heijastaa haluttua vastausmuotoa. Malli sitten "ottaa vihjeen" ja jatkaa samaan tyyliin.
| Vihjeiden määrä | Kehote (Syöte) | Täydennys (Vastaus) |
|---|---|---|
| 0 | Jupiter on aurinkoa lähinnä viides planeetta ja aurinkokunnan suurin. Se on kaasujättiläinen, jonka massa on tuhannesosa Auringon massasta, mutta kaksikertaisesti ja puoli kaikkien muiden aurinkokunnan planeettojen massojen yhteensä. Jupiter on yksi kirkkaimmista paljain silmin nähtävistä kohteista yötaivaalla, ja se on ollut tunnettu muinaisista sivilisaatioista ennen kirjattua historiaa. |
Summarize This | Jupiter on aurinkokuntamme suurin planeetta ja viides etäisyydeltään Auringosta. Se on kaasujättiläinen, jonka massa on 1/1000 Auringon massasta, mutta se painaa enemmän kuin kaikki muut planeetat yhteensä. Muinaiset sivilisaatiot ovat tunteneet Jupiterin jo pitkään, ja se näkyy helposti paljain silmin yötaivaalla. |
| 1 | Jupiter on viides planeetta Auringosta ja suurin aurinkokunnassa. Se on kaasujättiläinen, jonka massa on tuhannesosa Auringon massasta, mutta kaksi ja puoli kertaa kaikkien muiden aurinkokunnan planeettojen yhteismassaa suurempi. Jupiter on yksi kirkkaimmista paljain silmin nähtävistä kohteista yötaivaalla, ja muinaiset sivilisaatiot ovat tunteneet sen jo ennen kirjoitettua historiaa.
Summarize This
Mitä opimme on, että Jupiter | on viides planeetta Auringosta ja suurin aurinkokunnassa. Se on kaasujättiläinen, jonka massa on tuhannesosa Auringon massasta, mutta kaksi ja puoli kertaa kaikkien muiden planeettojen yhteismassaa suurempi. Se näkyy helposti paljain silmin ja on tunnettu jo muinaisajoista lähtien. |
| 2 | Jupiter on viides planeetta Auringosta ja suurin aurinkokunnassa. Se on kaasujättiläinen, jonka massa on tuhannesosa Auringon massasta, mutta kaksi ja puoli kertaa kaikkien muiden aurinkokunnan planeettojen yhteismassaa suurempi. Jupiter on yksi kirkkaimmista paljain silmin nähtävistä kohteista yötaivaalla, ja muinaiset sivilisaatiot ovat tunteneet sen jo ennen kirjoitettua historiaa.
Summarize This
Kolme tärkeintä faktaa, jotka opimme: | 1. Jupiter on viides planeetta Auringosta ja suurin aurinkokunnassa.
2. Se on kaasujättiläinen, jonka massa on tuhannesosa Auringon massasta...
3. Jupiter on ollut paljain silmin nähtävissä muinaisajoista lähtien ... |
| | | |
Prompt-malli on ennalta määritelty ohjeistus, jota voidaan tallentaa ja käyttää uudelleen tarpeen mukaan, jotta käyttäjäkokemukset olisivat johdonmukaisempia laajassa mittakaavassa. Yksinkertaisimmillaan se on kokoelma promptiesimerkkejä, kuten tämä OpenAI:n esimerkki, joka sisältää sekä vuorovaikutteiset prompt-komponentit (käyttäjän ja järjestelmän viestit) että API-pohjaisen pyyntömuodon – tukemaan uudelleenkäyttöä.
Monimutkaisemmassa muodossa, kuten tämä LangChainin esimerkki, se sisältää paikkamerkkejä, jotka voidaan korvata tiedoilla eri lähteistä (käyttäjän syöte, järjestelmän konteksti, ulkoiset tietolähteet jne.) luodakseen promptin dynaamisesti. Tämä mahdollistaa uudelleenkäytettävien prompt-kirjastojen luomisen, joita voidaan käyttää johdonmukaisten käyttäjäkokemusten luomiseen ohjelmallisesti laajassa mittakaavassa.
Lopuksi mallien todellinen arvo on kyvyssä luoda ja julkaista prompt-kirjastoja vertikaalisille sovellusalueille – joissa prompt-malli on nyt optimoitu heijastamaan sovelluskohtaisia konteksteja tai esimerkkejä, jotka tekevät vastauksista osuvampia ja tarkempia kohdeyleisölle. Prompts For Edu -arkisto on erinomainen esimerkki tästä lähestymistavasta, joka kokoaa koulutusalalle suunnattuja promptteja painottaen keskeisiä tavoitteita kuten opetussuunnitelman suunnittelua, kurssisuunnittelua ja opiskelijoiden ohjausta.
Jos ajattelemme promptin rakentamista ohjeena (tehtävä) ja kohteena (ensisijainen sisältö), niin toissijainen sisältö on kuin lisäkonteksti, jota annamme vaikuttaaksemme tulokseen jollain tavalla. Se voi olla säätöparametreja, muotoiluohjeita, aiheiden taksonomioita jne., jotka auttavat mallia räätälöimään vastauksensa vastaamaan haluttuja käyttäjätavoitteita tai odotuksia.
Esimerkiksi: Kun meillä on kurssiluettelo, jossa on laaja metadata (nimi, kuvaus, taso, metatunnisteet, opettaja jne.) kaikista opetussuunnitelman kursseista:
- voimme määritellä ohjeen "tiivistä syksyn 2023 kurssiluettelo"
- voimme käyttää ensisijaista sisältöä antaaksemme muutaman esimerkin halutusta lopputuloksesta
- voimme käyttää toissijaista sisältöä tunnistaaksemme viisi kiinnostavinta "tunnistetta".
Nyt malli voi antaa yhteenvedon esimerkkien mukaisessa muodossa – mutta jos tuloksessa on useita tunnisteita, se voi priorisoida toissijaisessa sisällössä määritellyt viisi tunnistetta.
Nyt kun tiedämme, miten promptteja voi rakentaa, voimme alkaa pohtia, miten niitä suunnitellaan parhaiden käytäntöjen mukaisesti. Voimme ajatella tätä kahdessa osassa – oikean ajattelutavan omaksuminen ja oikeiden tekniikoiden käyttäminen.
Prompt Engineering on kokeiluun ja virheisiin perustuva prosessi, joten pidä mielessä kolme laajaa ohjenuoraa:
-
Toimialan ymmärrys on tärkeää. Vastauksen tarkkuus ja osuvuus riippuvat toimialasta, jolla sovellus tai käyttäjä toimii. Käytä intuitiotasi ja toimialan asiantuntemustasi muokataksesi tekniikoita tarkemmin. Määrittele esimerkiksi toimialakohtaiset persoonat järjestelmän promptteihin tai käytä toimialakohtaisia malleja käyttäjän promptteihin. Tarjoa toissijaista sisältöä, joka heijastaa toimialakohtaisia konteksteja, tai käytä toimialakohtaisia vihjeitä ja esimerkkejä ohjaamaan mallia tuttuun käyttötapaan.
-
Mallin ymmärrys on tärkeää. Tiedämme, että mallit ovat luonteeltaan stokastisia. Mutta mallien toteutukset voivat myös vaihdella käytetyn koulutusdatan (esikoulutettu tieto), tarjoamien ominaisuuksien (esim. API tai SDK) ja optimoidun sisältötyypin (esim. koodi vs. kuvat vs. teksti) suhteen. Ymmärrä käyttämäsi mallin vahvuudet ja rajoitukset, ja käytä tätä tietoa priorisoidaksesi tehtäviä tai rakentaaksesi räätälöityjä malleja, jotka on optimoitu mallin kyvykkyyksille.
-
Iterointi ja validointi ovat tärkeitä. Mallit kehittyvät nopeasti, samoin prompt engineering -tekniikat. Toimialan asiantuntijana sinulla voi olla muuta kontekstia tai kriteerejä oman sovelluksesi osalta, jotka eivät välttämättä päde laajempaan yhteisöön. Käytä prompt engineering -työkaluja ja -tekniikoita "aloittaaksesi" promptin rakentamisen, sitten iteroi ja validoi tulokset oman intuitiosi ja asiantuntemuksesi avulla. Tallenna oivalluksesi ja luo tietopankki (esim. prompt-kirjastoja), jota muut voivat käyttää uutena lähtökohtana nopeampiin iterointeihin tulevaisuudessa.
Katsotaanpa nyt yleisiä parhaita käytäntöjä, joita suosittelevat OpenAI ja Azure OpenAI -asiantuntijat.
| Mitä | Miksi |
|---|---|
| Arvioi uusimmat mallit. | Uudet mallisukupolvet sisältävät todennäköisesti parannettuja ominaisuuksia ja laatua – mutta voivat myös aiheuttaa korkeampia kustannuksia. Arvioi niiden vaikutus ja tee siirtymispäätökset sen perusteella. |
| Erottele ohjeet ja konteksti | Tarkista, määrittääkö mallisi/palveluntarjoajasi erottimet, joilla ohjeet, ensisijainen ja toissijainen sisältö erotetaan selkeämmin. Tämä auttaa malleja painottamaan tokeneita tarkemmin. |
| Ole tarkka ja selkeä | Anna enemmän yksityiskohtia halutusta kontekstista, lopputuloksesta, pituudesta, muodosta, tyylistä jne. Tämä parantaa sekä vastauksen laatua että johdonmukaisuutta. Tallenna ohjeet uudelleenkäytettäviin malleihin. |
| Ole kuvaileva, käytä esimerkkejä | Mallit voivat vastata paremmin "näytä ja kerro" -lähestymistapaan. Aloita zero-shot-menetelmällä, jossa annat ohjeen (mutta et esimerkkejä), ja kokeile sitten few-shot-menetelmää, jossa annat muutaman esimerkin halutusta lopputuloksesta. Käytä vertauksia. |
| Käytä vihjeitä aloittamaan vastaukset | Ohjaa mallia haluttuun lopputulokseen antamalla sille aloitussanoja tai -lauseita, joita se voi käyttää vastauksen lähtökohtana. |
| Toista tarvittaessa | Joskus mallille täytyy toistaa ohjeita. Anna ohjeet ennen ja jälkeen ensisijaisen sisällön, käytä ohjetta ja vihjettä jne. Iteroi ja validoi, mikä toimii parhaiten. |
| Järjestyksellä on merkitystä | Tiedon esitysjärjestys mallille voi vaikuttaa lopputulokseen, myös oppimisesimerkeissä, johtuen tuoreusvinoumasta. Kokeile eri vaihtoehtoja nähdäksesi, mikä toimii parhaiten. |
| Anna mallille "uloskäynti" | Anna mallille varavastaus, jonka se voi antaa, jos se ei jostain syystä pysty suorittamaan tehtävää. Tämä voi vähentää virheellisten tai keksittyjen vastausten riskiä. |
Kuten minkä tahansa parhaan käytännön kohdalla, muista että kokemuksesi voi vaihdella mallin, tehtävän ja toimialan mukaan. Käytä näitä lähtökohtana ja iteroi löytääksesi sinulle parhaiten toimivat tavat. Arvioi prompt engineering -prosessiasi jatkuvasti uudelleen uusien mallien ja työkalujen tullessa saataville, keskittyen prosessin skaalautuvuuteen ja vastausten laatuun.
Onnittelut! Pääsit oppitunnin loppuun asti! Nyt on aika testata joitakin opittuja käsitteitä ja tekniikoita käytännössä!
Tehtävässämme käytämme Jupyter Notebookia, jossa on harjoituksia, joita voit tehdä vuorovaikutteisesti. Voit myös laajentaa Notebookia omilla Markdown- ja koodisoluillasi tutkiaksesi ideoita ja tekniikoita itsenäisesti.
- (Suositeltu) Käynnistä GitHub Codespaces
- (Vaihtoehtoisesti) Kloonaa repo paikalliselle laitteellesi ja käytä sitä Docker Desktopin kanssa
- (Vaihtoehtoisesti) Avaa Notebook haluamallasi Notebook-ympäristöllä.
- Kopioi repohakemiston juuresta
.env.copytiedosto nimellä.envja täytäAZURE_OPENAI_API_KEY,AZURE_OPENAI_ENDPOINTjaAZURE_OPENAI_DEPLOYMENTarvot. Palaa Learning Sandbox -osioon oppiaksesi miten.
- Valitse ajoympäristön ydin. Jos käytät vaihtoehtoja 1 tai 2, valitse kehityssäiliön tarjoama oletus Python 3.10.x -ydin.
Olet valmis suorittamaan harjoitukset. Huomaa, että tässä ei ole oikeita tai vääriä vastauksia – kyse on vaihtoehtojen kokeilemisesta ja intuitiosi kehittämisestä sen suhteen, mikä toimii tietylle mallille ja sovellusalueelle.
Tämän vuoksi tässä oppitunnissa ei ole koodiratkaisujen osioita. Sen sijaan Notebookissa on Markdown-soluja nimeltä "My Solution:", jotka näyttävät yhden esimerkkivastauksen vertailun vuoksi.
Mikä seuraavista on hyvä prompt, joka noudattaa kohtuullisia parhaita käytäntöjä?
- Näytä minulle kuva punaisesta autosta
- Näytä minulle kuva punaisesta Volvon XC90 -merkkisestä autosta, joka on pysäköity kallion reunalle auringonlaskun aikaan
- Näytä minulle kuva punaisesta Volvon XC90 -merkkisestä autosta
Vastaus: 2, se on paras prompt, koska se antaa yksityiskohtia "mitä" ja menee tarkkuuksiin (ei mikä tahansa auto, vaan tietty merkki ja malli) ja kuvaa myös kokonaisympäristön. 3 on seuraavaksi paras, koska se sisältää myös paljon kuvausta.
Kokeile hyödyntää "vihje" -tekniikkaa promptilla: Täydennä lause "Näytä minulle kuva punaisesta Volvon merkistä ja ". Miten malli vastaa, ja miten parantaisit sitä?
Haluatko oppia lisää erilaisista Prompt Engineering -käsitteistä? Mene jatko-oppimissivulle löytääksesi muita erinomaisia resursseja tästä aiheesta.
Siirry oppitunnille 5, jossa tarkastelemme edistyneitä prompt-tekniikoita!
Vastuuvapauslauseke:
Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, huomioithan, että automaattikäännöksissä saattaa esiintyä virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäiskielellä tulee pitää virallisena lähteenä. Tärkeissä asioissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinymmärryksistä tai tulkinnoista.







