311 lines
9.5 KiB
Markdown
311 lines
9.5 KiB
Markdown
# Les 18 — Advanced AI Toolbox
|
||
## Docenttekst (Klas A — 3 uur, fysiek, demo-driven, laatste les)
|
||
|
||
**Les:** 18 van 18
|
||
**Onderwerp:** Voice + Vision + Image gen + Local LLMs + Edge AI + wrap-up
|
||
**Duur:** 180 minuten
|
||
**Demo-app:** Vijf mini-demo's, niet één
|
||
|
||
---
|
||
|
||
## VÓÓR DE LES (60 min)
|
||
|
||
1. Alle vijf demo's lokaal werkend op laptop
|
||
2. OpenAI account (Whisper + Vision werkend)
|
||
3. Fal.ai account (image gen)
|
||
4. Ollama geïnstalleerd + llama4:8b gedownload (vooraf — duurt 10 min)
|
||
5. Vercel AI Gateway demo-project klaar
|
||
6. Browser tabs: ollama.com, fal.ai, vercel.com/docs/ai-gateway
|
||
7. Mentaal voorbereid: laatste les, ruimte voor reflectie aan eind
|
||
|
||
---
|
||
|
||
## HET SCRIPT
|
||
|
||
### BLOK 1 — Welkom + Recap (10 min)
|
||
|
||
`[SLIDE 1]`
|
||
|
||
**Vertel:** "Welkom bij de allerlaatste les. Les 18. Vandaag: alle leuke modaliteiten die we nog niet hebben gezien. Voice, vision, image gen, local LLMs, edge AI."
|
||
|
||
`[SLIDE 2]`
|
||
|
||
**Vertel:** "Even kort terug. 18 lessen. Foundations 1-10, AI SDK 11, Tool Calling 12, Cursor+Vercel 13, Agents 14, RAG 15, MCP 16, Production Polish 17, vandaag.
|
||
|
||
Vandaag is anders dan voorgaande lessen. Geen één onderwerp dat we diep in gaan. Vijf modaliteiten, korte demo's, je weet wat mogelijk is. Voor je eindopdracht: kies wat past."
|
||
|
||
`[SLIDE 3]`
|
||
|
||
**Vertel:** "180 minuten. 25 min theorie en landschap. Vijf demo's van 20-25 min. Pauze rond minuut 80. Aan eind 25 min voor reflectie + vragen."
|
||
|
||
---
|
||
|
||
### BLOK 2 — Theorie + landschap (25 min)
|
||
|
||
`[SLIDE 4]`
|
||
|
||
**Vertel:** "Het landschap eind 2026. Verschillende providers, verschillende sterke punten.
|
||
|
||
OpenAI heeft GPT-5 voor algemeen, o3 voor reasoning, GPT-realtime voor voice. Anthropic Claude Opus 4.6 en Sonnet 4.6 — best voor code en lange context. Google Gemini 2.5 met 2 miljoen context window. Meta Llama 4 — open-source, je kunt 'm lokaal draaien.
|
||
|
||
Modaliteiten — text, vision, voice, image, video. En modi — cloud API, edge, lokaal.
|
||
|
||
Vandaag zien we alle drie de modi."
|
||
|
||
`[SLIDE 5]`
|
||
|
||
**Vertel:** "Waarom multimodal? Tekst is niet altijd genoeg. Mobile? Voice is sneller dan typen. Foto-upload? Vision. Marketing-assets? Image gen.
|
||
|
||
Denk per feature: welke modaliteit past het best? Niet alles is chat."
|
||
|
||
---
|
||
|
||
### BLOK 3 — DEMO 1: Voice (25 min)
|
||
|
||
`[SLIDE 6]` `[SCHERM: editor + browser]`
|
||
|
||
**Vertel:** "Whisper voor transcriptie. Drie regels code."
|
||
|
||
`*[Maak app/voice/page.tsx + api/transcribe/route.ts]*`
|
||
|
||
```typescript
|
||
const result = await transcribe({
|
||
model: openai.transcription("whisper-1"),
|
||
audio: audioBlob,
|
||
});
|
||
```
|
||
|
||
`*[Demo: klik record, spreek, zie tekst verschijnen]*`
|
||
|
||
**Vertel:** "Werkt. Cost: $0.006 per minuut. Voor productie: ElevenLabs voor TTS-stemmen die natuurlijker klinken.
|
||
|
||
Volledige voice-loop? Drie calls. Whisper + LLM + TTS. Latency ongeveer 2-4 seconden. Voor 'echte' voice met interruptions: Realtime API. Complexer, magisch."
|
||
|
||
💬 *Vraag: 'Hoe duur is dit op schaal?'*
|
||
|
||
**Antwoord:** "Voor 1000 vragen van 30 seconden: Whisper $3, LLM $1, TTS $5. Negen dollar voor duizend voice-interacties. Schaalbaar."
|
||
|
||
---
|
||
|
||
### BLOK 4 — DEMO 2: Vision (20 min)
|
||
|
||
`[SLIDE 7]`
|
||
|
||
`*[Maak app/vision/page.tsx + api/analyze/route.ts]*`
|
||
|
||
```typescript
|
||
const result = await generateText({
|
||
model: openai("gpt-4o"),
|
||
messages: [{
|
||
role: "user",
|
||
content: [
|
||
{ type: "text", text: "Beschrijf wat er op deze foto staat." },
|
||
{ type: "image", image: buffer },
|
||
],
|
||
}],
|
||
});
|
||
```
|
||
|
||
`*[Demo: upload foto van eten, krijg beschrijving]*`
|
||
|
||
**Vertel:** "Bouw varianten. Defect detection in fabrieken. OCR voor formulieren. Receipt scanning — bonnetjes naar gestructureerde data. Code-from-screenshot.
|
||
|
||
Cost: vision is 2-5× duurder dan text. Een 1024×1024 image = ~1100 tokens. Voor productie: resize client-side."
|
||
|
||
---
|
||
|
||
### BLOK 5 — Pauze (15 min)
|
||
|
||
`[SLIDE 8]`
|
||
|
||
---
|
||
|
||
### BLOK 6 — DEMO 3: Image generation (25 min)
|
||
|
||
`[SLIDE 9]`
|
||
|
||
**Vertel:** "Image generation. Flux is het beste open-source model. Via Fal.ai of Replicate."
|
||
|
||
`*[Fal account, key]*`
|
||
|
||
```bash
|
||
pnpm add @ai-sdk/fal
|
||
```
|
||
|
||
`*[app/generate/page.tsx]*`
|
||
|
||
```typescript
|
||
const { image } = await generateImage({
|
||
model: fal.image("fal-ai/flux/schnell"),
|
||
prompt: "Retro festival-poster voor Polderfest 2027, oranje + cream, vintage typografie",
|
||
size: "1024x1024",
|
||
});
|
||
```
|
||
|
||
`*[Demo: type prompt, klik generate, zie image]*`
|
||
|
||
**Vertel:** "Drie cent per image op schnell variant. Voor productie: save in Supabase Storage, gebruik CDN.
|
||
|
||
Goede prompts zijn specifiek. Stijl, palette, compositie, wat NIET te tonen. 'Een mooie afbeelding' werkt niet. 'Retro festival-poster, 70s rockconcert-flyer stijl, oranje en cream, decoratieve geometrische randen' wel."
|
||
|
||
---
|
||
|
||
### BLOK 7 — DEMO 4: Local LLMs (25 min)
|
||
|
||
`[SLIDE 10]`
|
||
|
||
**Vertel:** "Tijd om lokaal te draaien. Ollama."
|
||
|
||
`*[Terminal]*`
|
||
|
||
```bash
|
||
brew install ollama # of via download
|
||
ollama pull llama4:8b
|
||
ollama run llama4:8b
|
||
```
|
||
|
||
`*[Interactieve chat in terminal — werkt offline]*`
|
||
|
||
**Vertel:** "Dat draait lokaal op mijn M-series Mac. Geen internet, geen API-cost.
|
||
|
||
Via AI SDK:"
|
||
|
||
```bash
|
||
pnpm add ollama-ai-provider
|
||
```
|
||
|
||
```typescript
|
||
import { createOllama } from "ollama-ai-provider";
|
||
const ollama = createOllama();
|
||
|
||
const result = await generateText({
|
||
model: ollama("llama4:8b"),
|
||
prompt: "...",
|
||
});
|
||
```
|
||
|
||
`*[Demo: chat-app met dropdown 'Cloud (gpt-4o-mini)' vs 'Local (llama4)'. Vergelijk antwoorden]*`
|
||
|
||
**Vertel:** "Lokaal model is iets minder slim dan GPT-5 voor complex. Voor 70% van vragen prima. Voor privacy-critical apps — healthcare, legal — is dit dé oplossing. Voor cost — als je veel calls maakt, lokaal is gratis na hardware-investering."
|
||
|
||
---
|
||
|
||
### BLOK 8 — DEMO 5: Edge AI + Gateway (20 min)
|
||
|
||
`[SLIDE 11]`
|
||
|
||
**Vertel:** "Twee edge-opties.
|
||
|
||
Vercel AI Gateway. Eén endpoint, alle providers. Automatic fallback bij OpenAI-down."
|
||
|
||
```typescript
|
||
import { vercel } from "@ai-sdk/vercel";
|
||
|
||
const result = await generateText({
|
||
model: vercel.fallback([
|
||
"openai/gpt-4o",
|
||
"anthropic/claude-sonnet-4.5",
|
||
]),
|
||
prompt: "...",
|
||
});
|
||
```
|
||
|
||
**Vertel:** "Als OpenAI down: switch automatisch naar Claude. Geen downtime voor je users.
|
||
|
||
Cloudflare Workers AI. LLMs op Cloudflare's edge. 250+ datacenters wereldwijd. Latency overal laag."
|
||
|
||
```typescript
|
||
import { workersai } from "@ai-sdk/cloudflare";
|
||
|
||
const result = await generateText({
|
||
model: workersai("@cf/meta/llama-3.1-8b-instruct"),
|
||
prompt: "...",
|
||
});
|
||
```
|
||
|
||
**Vertel:** "Gratis tier 10k requests per dag. Voor MVP en lichte apps: gratis productie."
|
||
|
||
---
|
||
|
||
### BLOK 9 — Resources + community (10 min)
|
||
|
||
`[SLIDE 12]`
|
||
|
||
**Vertel:** "Hoe blijf je leren? Communities. r/LocalLLaMA op Reddit voor open-source updates. AI Engineer Foundation op Discord voor productie-focus. Latent Space — podcast en Discord.
|
||
|
||
Blogs. Simon Willison's blog is de absolute referentie. Daily updates. The Rundown AI newsletter. Twitter accounts: Karpathy, swyx, sama.
|
||
|
||
Voor diepere kennis. Karpathy's Zero to Hero op YouTube — bouw neural network from scratch. Gratis, briljant.
|
||
|
||
Conferenties. AI Engineer Summit in SF jaarlijks. NeurIPS voor research. In Nederland: Devbase, MAINSTAGE."
|
||
|
||
---
|
||
|
||
### BLOK 10 — Eindopdracht + Afsluiting (15 min)
|
||
|
||
`[SLIDE 13]`
|
||
|
||
**Vertel:** "Tijd voor eindopdracht. Wat we hebben:
|
||
|
||
Volledige toolkit. Next.js, TypeScript, Tailwind. Supabase. AI SDK. Tool calling. Agents. RAG. MCP. Production polish. Multimodal.
|
||
|
||
Voor je eindopdracht — moet bevatten Next.js stack, Supabase met auth en RLS, AI SDK met Tool Calling, externe API, deployed op Vercel.
|
||
|
||
Werk er gestaag aan. 8 tot 10 uur per week voor 4 tot 6 weken. Niet één laat weekend.
|
||
|
||
Pitch volgt na inleveren. Acht tot twaalf minuten demonstratie.
|
||
|
||
Eindopdracht-voorstel deze week via Teams indienen."
|
||
|
||
`[SLIDE 14]`
|
||
|
||
**Vertel:** "Een laatste woord.
|
||
|
||
18 lessen. 54 uur klassikaal samen. Plus jullie thuiswerk. Een vol vak.
|
||
|
||
Wat jullie nu kunnen. Een AI-app van scratch naar productie. Tool calling en agents. RAG en MCP. Production-niveau observability en evals. Multimodal features. Lokale modellen draaien.
|
||
|
||
Drie jaar geleden was dit een specialist-skill. Nu — jullie kunnen dit.
|
||
|
||
Voor je eindopdracht en daarna. Doe het ding waarvan je dacht: dat kan ik niet. Bouw iets dat je écht zelf zou gebruiken. Vraag hulp tijdig. En als je iets bouwt waar je trots op bent — laat het me weten. Echt waar.
|
||
|
||
Bedankt voor jullie inzet. Veel succes."
|
||
|
||
`[SLIDE 15]`
|
||
|
||
**Vertel:** "Open ruimte. Vragen over de stof. Vragen over je eindopdracht. Vragen over je carrière in AI development. Feedback op de leerlijn."
|
||
|
||
`*[Vragenronde — laat dit echt open. 10-15 min over]*`
|
||
|
||
---
|
||
|
||
## NA DE LES — Wrap-up
|
||
|
||
- Brightspace: eindopdracht-instructies + voorstel-template
|
||
- Teams: nieuwe channel "Eindopdracht support"
|
||
- Office hours-schema voor 4-6 weken
|
||
- Bewaar deze 18 lessen als referentie voor Klas B / volgende cyclus
|
||
- Voor jezelf: noteer wat werkte en wat minder — voor verbetering
|
||
|
||
---
|
||
|
||
## Veelvoorkomende fouten in demo's
|
||
|
||
| Fout | Oplossing |
|
||
|------|-----------|
|
||
| MediaRecorder API niet beschikbaar | Test in Chrome eerst, Safari heeft soms anders |
|
||
| Fal API key issue | Sign up + generate key, gratis tier |
|
||
| Ollama "connection refused" | `ollama serve` runnen, check `:11434` poort |
|
||
| Vision image te groot | Resize naar <4MB, of compress JPEG |
|
||
| Vercel AI Gateway niet beschikbaar | Vercel Pro account nodig in 2026 |
|
||
|
||
---
|
||
|
||
## Mentale model voor afsluiting
|
||
|
||
Voor reflectie aan eind van de les:
|
||
|
||
> 18 lessen leiden niet tot "AI-meester". Wel tot iemand die weet welke vragen te stellen, welke tools te kiezen, en hoe te beginnen. Verdere groei = blijven bouwen, vragen stellen, community + nieuwe modellen volgen.
|
||
|
||
Hou de toon praktisch, niet sentimenteel. Studenten waarderen oprechte erkenning + duidelijke volgende stap.
|