Skip to content

Commit

Permalink
Lagt inn workshop-oppgavene som sider i jekyll
Browse files Browse the repository at this point in the history
  • Loading branch information
goranbasso committed Sep 17, 2023
1 parent c617894 commit bd2fdac
Show file tree
Hide file tree
Showing 12 changed files with 540 additions and 107 deletions.
5 changes: 3 additions & 2 deletions docs/_config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@

title: Kantega AI-dev Workshop
email: [email protected]
description: >- # this means to ignore newlines until "baseurl:"
Denne workshopen dekker de praktiske delene med å benytte store språkmodeller i utviklingsarbeid.
description:
#>- # this means to ignore newlines until "baseurl:"
#Denne workshopen dekker de praktiske delene med å benytte store språkmodeller i utviklingsarbeid.
#baseurl: "ai-dev-workshop/" # the subpath of your site, e.g. /blog
#url: "https://kantega.github.io" # the base hostname & protocol for your site, e.g. http://example.com
#twitter_username: --
Expand Down
139 changes: 34 additions & 105 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,131 +2,60 @@
layout: default
---

Text can be **bold**, _italic_, or ~~strikethrough~~.

[Link to another page](./another-page.html).

There should be whitespace between paragraphs.

There should be whitespace between paragraphs. We recommend including a README, or a file with information about your project.

# Innføring i bruk av ChatGPT / GitHub Copilot

Denne workshop'en er ment som en innføring i hvordan man kan benytte
LLM'er i utviklingsarbeid, og er ingen endelig eller komplett guide
språkmodeller i utviklingsarbeid, og er ingen endelig eller komplett guide
på alt man kan bruke det til eller problemstillinger rundt det.

Språkmodeller er verktøy, og har fordeler og ulemper. Og som de fleste verktøy, så må man øve for kunne bruke det effektivt.

Det handler først og fremst bare om å bli kjent med det,
hvilke oppgaver de er gode til å løse, og hvilke ufordringer man kan
støte på underveis.

# Header 1

This is a normal paragraph following a header. GitHub is a code hosting platform for version control and collaboration. It lets you and others work together on projects from anywhere.

## Header 2

> This is a blockquote following a header.
>
> When something is important enough, you do it even if the odds are not in your favor.
### Header 3

```js
// Javascript code with syntax highlighting.
var fun = function lang(l) {
dateformat.i18n = require('./lang/' + l)
return true;
}
```

```ruby
# Ruby code with syntax highlighting
GitHubPages::Dependencies.gems.each do |gem, version|
s.add_dependency(gem, "= #{version}")
end
```

#### Header 4

* This is an unordered list following a header.
* This is an unordered list following a header.
* This is an unordered list following a header.

##### Header 5

1. This is an ordered list following a header.
2. This is an ordered list following a header.
3. This is an ordered list following a header.

###### Header 6

| head1 | head two | three |
|:-------------|:------------------|:------|
| ok | good swedish fish | nice |
| out of stock | good and plenty | nice |
| ok | good `oreos` | hmm |
| ok | good `zoute` drop | yumm |

### There's a horizontal rule below this.

* * *
Workshop'en er ment å være språkmodell-agnostisk, og i utgangspunktet kan man bruke akkurat den modellen man vil.
Per i dag er det 2 verktøy som utmerker seg: ChatGPT og GitHub Copilot.

### Here is an unordered list:
Man kan få tilgang til ChatGPT via [chat.openai.com/](https://chat.openai.com/), der man kan logge seg inn med
eksempelvis Google. ChatGPT basert på GPT-3.5 er gratisversjonen, men man må betale for å få tilgang til GPT-4 versjonen av ChatGPT.

* Item foo
* Item bar
* Item baz
* Item zip
GitHub Copilot er et verktøy spesifikt ment for koding, og er basert på en språkmodell som er trent og finetunet for programmering.
Man kan få tak i en 30 dagers gratis prøveversjon via [https://github.com/github-copilot/signup](https://github.com/github-copilot/signup) -
men vær obs på hva du tilgjengeliggjør, da Copilot sender data ut til sine servere.

### And an ordered list:

1. Item one
1. Item two
1. Item three
1. Item four
# Gjennomføring

### And a nested list:
Dette er i utgangspunktet en ganske åpen workshop, og kan gjennomføres på flere måter:
- Dersom du er litt usikker på hvordan du skal begynne, så kan du starte på denne siden: [Hurtigstart](pages/quickstart.md)
- Dersom du ønsker et kode-repo å starte med, ta en titt her: [Utvid en kodebase](pages/codebase.md)
- Dersom du ønsker en liste av oppgaver, ta en titt her: [Oppgaver](pages/exercises.md)

- level 1 item
- level 2 item
- level 2 item
- level 3 item
- level 3 item
- level 1 item
- level 2 item
- level 2 item
- level 2 item
- level 1 item
- level 2 item
- level 2 item
- level 1 item
Noen tips for å få best mulig effekt ut av språkmodeller: [Tips](pages/tips.md)

### Small image

![Octocat](https://github.githubassets.com/images/icons/emoji/octocat.png)
# Litt kort om språkmodeller

### Large image
En stor språkmodell (large language model, eller LLM) er en maskinlæringsmodell som er trent på et enormt datasett,
gjerne 'hele' internett, og som i korte trekk prøver å forutsi neste ord i en tekst, gitt en kontekst og input.

![Branching](https://guides.github.com/activities/hello-world/branching.png)
De store språkmodellene i dag baserer seg ofte på GPT-arkitekturen - der GPT står for Generative Pre-trained Transformer.
Dette betyr egentlig bare at det er en modell som er trent på forhånd, som genererer noe form for output, basert på et eller annet input.

For ChatGPT, så genererer den tekst, og er trent på språkkilder som bøker, internett, osv, og gir et svar som skal matche et gitt prompt.
En GPT-modell trenger ikke være tekstbasert, for eksempel er DALL-E også basert på GPT, men genererer bilder, og ikke tekst.

### Definition lists can be used with HTML syntax.
### Copilot

<dl>
<dt>Name</dt>
<dd>Godzilla</dd>
<dt>Born</dt>
<dd>1952</dd>
<dt>Birthplace</dt>
<dd>Japan</dd>
<dt>Color</dt>
<dd>Green</dd>
</dl>
GitHub Copilot er en LLM som er finetunet for å fungere som en kodeassistent,
ved å foreslå kodesnutter etterhvert som man jobber i et integrert miljø.
Den er også basert på GPT-modellen, men fokuset under treningen og tuningen
har vært å lage en modell som er god til å forstå og generere kode.

```
Long, single-line code blocks should not wrap. They should horizontally scroll if they are too long. This line should be long enough to demonstrate this.
```
Den ser på hele repoet mens man jobber, og prøver å foreslå kode som gir
mening i kontekst av hele prosjektet.

```
The final element.
```
Her er det utfordringer rundt om man har anledning til å dele kodebasen
sin med en ekstern aktør, samt problemstillinger rundt personvern,
og det vil ikke egne seg i alle prosjekt.
7 changes: 7 additions & 0 deletions docs/pages/codebase.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
layout: default
---

heihei codebase

[< Tilbake](../)
27 changes: 27 additions & 0 deletions docs/pages/exercises.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
layout: default
---

Disse oppgavene er ganske åpne, og kan gjennomføres på mange måter.

Poenget med denne workshop'en er ikke å faktisk løse oppgavene - men å øve på hvordan språkmodeller
kan passe inn i en eksisterende arbeidsflyt.

Dersom du ikke er vant til å benytte språkmodeller, så 'tving' deg selv til å gjøre så mye som mulig
med modellen. Da vil du erfare hva som fungerer godt, og hva som fungerer dårlig.

Dette er bare forslag på oppgaver, og kan gjøres i hvilken som helst rekkefølge, og man kan
gjerne blande konsepter fra flere av oppgavene.

## Ferdige oppgaver
### Utvikling
- [ASCII-kunst](./exercises/ASCII-kunst.md)
- [Discord-bot](./exercises/Discord-bot.md)
- [JSON omstrukturering](./exercises/JSON-omstrukturere.md)
- [SQL Opprette tabeller](./exercises/SQL-opprett-tabeller.md)
- [Webapp komponent](./exercises/Webapp-komponent.md)

### Diverse oppgaveforslag
- [Diverse oppgaver](./exercises/Diverse-oppgaveforslag.md)

[< Tilbake](../)
30 changes: 30 additions & 0 deletions docs/pages/exercises/ASCII-kunst.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
---
layout: default
---

# ASCII-kunst

## Generer ASCII-kunst fra en bildefil

Velg et programmeringsspråk, gjerne et du ikke kan særlig godt, men ønsker å lære.
Helst ikke for obskurt, men noe som Go, Rust, Kotlin, eller Haskell kan egne seg.

Oppgaven går ut på å, ved hjelp av LLM (ChatGPT, og kanskje Copilot, om du har tilgang til det),
å skrive et program fra scratch, som tar inn en bildefil, og genererer ASCII-kunst basert på dette.

Poenget her er å få med seg oppsett av et nytt språk (installasjon og miljø),
installering og bruk av biblioteker (antakeligvis må man bruke et bibliotek for å håndtere bildefiler),
lesing fra og skriving til disk, og en kjent problemstilling rundt det å algoritmisk
produsere ASCII-kunst fra en bildefil.

Gjerne begynn med å få en høynivå algoritme, hvor du beskriver hvert steg du må
gjennom for å oppnå dette, og så bryt det ned i mindre problemer som du kan
få generert kode til.

Om du støter på problemer underveis, spør LLM'en. Kopier inn feilen du får, og beskriv
problemet, og gjerne konteksten rundt problemet (hvilken prosjekt-struktur du har, hvilket miljø, etc).

Vær obs på at LLM'en kan fortsatt hallusinere, og for eksempel foreslå klasser, funksjoner,
og metoder som ikke finnes i språket eller biblioteket som blir brukt.

[< Tilbake](../exercises.md)
25 changes: 25 additions & 0 deletions docs/pages/exercises/Discord-bot.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
layout: default
---

# Discord-bot

## Skriv en Discord-bot som man kan spille spill med

Skriv en Discord-chatbot som man kan spille enkle spill med.
Start med å opprette en Discord-server (det er kjempelett, bare spør ChatGPT!), og deretter en bot som svarer når man skriver.

Deretter gjør den mer avansert, du kan gjerne begynne med noe enkelt som stein-saks-papir,
men seinere noe mer avansert, som tripp-trapp-tresko (bondesjakk / tic-tac-toe).
Vær kreativ, og gjerne drøm stort.
Kan du for eksempel lage en trivia-bot, som henter spørsmål og svar fra et eksternt API?

Det finnes en del funksjonalitet rundt Discord-bot'er, så gjerne gjør noe spenstig.

Målet er å se hvordan LLM'en forholder seg til eksterne biblioteker og programvare.
Discord-API'et (og biblioteker rundt) har endret seg en del, og det finnes en haug med repoer
som løser kodeproblem på mange forskjellige måter.

Hvordan håndterer LLM'en dette? Opprettholder den en konsekvent kodestil? Hallusinerer den ofte?

[< Tilbake](../exercises.md)
121 changes: 121 additions & 0 deletions docs/pages/exercises/Diverse-oppgaveforslag.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
---
layout: default
---

# Potensielle oppgaver - Utvikling

### Utvide en eksisterende kodebase

Ta en eksisterende kodebase som du har jobbet på (gitt, selvfølgelig, at det ikke bryter noen lisens eller noe lovverk å bruke det i denne sammenhengen),
eventuelt last ned et open source prosjekt som du enten er kjent med eller som er smått nok til at du lett kan forstå det.

Utvid deretter denne kodebasen med noe som mangler, og bruk LLM'en hele veien.
Noen eksempler på konkrete oppgaver:

- Få det til å kjøre, uten å lese README
- Utvide modeller i kodebasen, med ekstra felter
- Hente data fra et eksternt API
- Skrive flere tester
- Skrive det om til et annet språk
- Lage et API som tilgjengeliggjør data

### Håndtere JSON

- Ta en JSON-modell, generer en Java-klasse basert på denne (DTO, REST-kontroller, DAO) -
kan utvides til å gå fra "konsumer JSON via en POST mot et REST-endepunkt, og insert det i en database"
- Ta en liste av JSON'er, som har en property som er en enum (`type: 'IMAGE'`) - omstrukturer denne til et Map som nøkler på enum-verdien:

```javascript
const originalArray = [
{ title: 'dog.jpg', type: 'IMAGE' },
{ title: 'cat.mp4', type: 'VIDEO' },
{ title: 'fish.jpg', type: 'IMAGE' },
/* etc, etc... */
];

const expectedMap = {
'IMAGE': [
{ title: 'dog.jpg' },
{ title: 'fish.jpg' }
],
'VIDEO': [
{ title: 'cat.mp4' }
]
};
```

### SQL

- Denormaliser en tabellstruktur
- Konstruer en rekke SQL-spørringer som oppretter tabeller og inserter data

### Algoritmer

- Forslag til forskjellige algoritmer for å løse et konkret problem, og trade-offs med de forskjellige algoritmene -
en konkret oppgave her kan være å traversere en trestruktur, og ta med relevante noder videre
- Optimaliser en funksjon / kodeblokk

### Generere kode

- Hvordan lese en fil
- Hvordan gjøre API-kall
- Hvordan lese / skrive til en database
- Hvordan implementere en algoritme
- Generer en nettside
- Generer en komponent til en web-applikasjon
- Formatter en rekke data
- Oversett fra et språk til et annet
- Parse et gitt filformat, få ut spesifisert informasjon, med en rekke forutsetninger

### Tester

- Generer tester basert på eksisterende kode
- Generer test-data

### Dokumentasjon

- Forklar hva et stykke kode gjør
- Finn et godt navn for en metode
- Bruke LLM'er som en 'live StackOverflow' - be om å forklare klasser og funksjoner i rammeverk / biblioteker
- Finskriving av tekst til issue-trackers (beskrivelsen til en Jira-oppgave, for eksempel)
- Generere dokumentasjon til et API

### Fagstoff

- Forklare terminologi, konsepter, rammeverk, biblioteker, språk; foreslå læringskilder -
her har man muligheten til å ha en dialog med LLM'en, og spisse inn på begreper man sliter med
- Best practices og design patterns - forslag og forklaringer
- Valg av teknologi til et prosjekt (språk, rammeverk, biblioteker, etc)
- Arkitekturelle beslutninger
- Foreslå et roadmap for å lære en gitt teknologi

### Review

- Be LLM om å gjøre code review av et stykke kode, foreslå forbedringer

### Integrasjoner i IDE'er

- Praktisk bruk av Copilot i IntelliJ / VSCode
- Plugins

### Feilsøking

- Hva er galt med denne koden her?
- Debugging, forklar problemet, få forslag til hva det kan være og hvordan løse det

### Sikkerhet

- Finn potensielle sikkerhetshull i en gitt kodeblokk


## Potensielle oppgaver - Drift

### Automasjon

Man kan finne konkrete deler av en arbeidsflyt som potensielt kan automatiseres, og forsøke å benytte språkmodellen til å
avdekke hva som potensielt kan automatiseres, og hvordan det rent praktisk kan automatiseres.

For eksempel om man i en fly det gjøres en del manuell konfigurasjon, med flere steg, så kan man prøve å få språkmodellen til å
skrive et script eller utforme en prosedyre slik at man ikke behøver alle de manuelle stegene.

[< Tilbake](../exercises.md)
Loading

0 comments on commit bd2fdac

Please sign in to comment.