![]()
De vorige les schaalde agenten omhoog naar de cloud. Deze brengt ze omlaag naar een enkele machine. Aan het einde heb je een werkende engineering-assistent die redeneert, tools aanroept, je bestanden leest en je documentatie doorzoekt — zonder ook maar één cloud-inferentie-aanroep.
Waarom zou je dat willen? Drie redenen die voortdurend terugkomen in echte engineering-werkzaamheden:
De kanttekening is dat je een toonaangevend cloudmodel inruilt voor een Klein Taalmodel (SLM) dat draait op je CPU, GPU of NPU. Deze les gaat over het bouwen van agenten die goed functioneren binnen die beperking in plaats van te doen alsof de beperking er niet is.
Deze les behandelt:
Na afronding van deze les weet je hoe je:
Deze les gaat ervan uit dat je de voorgaande lessen hebt afgerond en vertrouwd bent met:
Je hebt ook nodig:
requirements.txt, plus foundry-local-sdk, openai en chromadb voor deze les.Een toonaangevend cloudmodel heeft honderden miljarden parameters en een datacenter erachter. Een SLM heeft een paar miljard parameters en moet in het RAM van je laptop passen. Dat verschil zet duidelijke verwachtingen.
SLM’s zijn goed in:
SLM’s zijn zwakker in:
De winnende strategie voor lokale agenten is daarom: laat de SLM orkestreren, en laat tools het zware werk doen. Het model hoeft je codebase niet te kennen — het moet weten wanneer read_file en search_docs aan te roepen. Dat speelt direct in op de sterke punten van een SLM.
flowchart LR
U[Ontwikkelaar] --> A[Lokale SLM Agent]
A -->|beslist welk hulpmiddel| T1[read_file]
A -->|beslist welk hulpmiddel| T2[search_docs RAG]
A -->|beslist welk hulpmiddel| T3[analyze_code]
T1 --> A
T2 --> A
T3 --> A
A --> R[Antwoord, volledig op apparaat]
Microsoft Foundry Local is een lichtgewicht runtime die modellen volledig op je machine downloadt, beheert en serveert. De belangrijkste functie voor ons is dat het een OpenAI-compatibele HTTP-endpoint aanbiedt — wat betekent dat de OpenAI SDK en de Microsoft Agent Framework OpenAI-client ermee werken met slechts een aanpassing van base_url. Alles wat je hebt geleerd over het bouwen van agenten gaat direct mee; alleen de endpoint verplaatst zich van de cloud naar localhost.
Foundry Local kiest ook automatisch de beste build van een model voor je hardware — een CPU-build, een CUDA/GPU-build of een NPU-build — zodat je niet per machine handmatig hoeft te optimaliseren.
Installeer Foundry Local (zie de documentatie voor jouw OS), en controleer dan of het werkt:
# Installeren (voorbeeld; volg de documentatie voor uw platform)
winget install Microsoft.FoundryLocal # Windows
# brew install microsoft/foundrylocal/foundrylocal # macOS
# Download en voer een Qwen-model uit, en start vervolgens de lokale service
foundry model run qwen2.5-7b-instruct
foundry service status
Zodra de service draait, heb je een lokale, OpenAI-compatibele endpoint (meestal http://localhost:PORT/v1). De notebook gebruikt de foundry-local-sdk om de endpoint automatisch te vinden, dus je hoeft de poort niet hard te coderen.
Een agent is alleen een agent als hij tools kan aanroepen. Veel SLM’s kunnen chatten maar produceren onbetrouwbare, malformed tool-aanroepen. Qwen-modellen zijn getraind voor functie-aanroepen en geven consequent goed gevormde tool-aanroepstructuren weer — precies wat een lokaal chatmodel tot een lokale agent maakt.
De flow is de standaard tool-aanroeplus die je al kent, alleen draait die op het apparaat:
sequenceDiagram
participant U as Gebruiker
participant A as Qwen Agent (lokaal)
participant T as Lokale Tool
U->>A: "Wat doet auth.py?"
A->>A: Beslissen: roep read_file aan
A->>T: read_file("auth.py")
T-->>A: bestandsinhoud
A->>A: Redeneren over inhoud
A-->>U: Verklaring
Documentatiezoekfunctie is waar lokale agenten zichzelf bewijzen. In plaats van te hopen dat het SLM je framework-docs heeft onthouden, embed je die docs in een lokale vectordatabase en laat je de agent de relevante stukken op aanvraag ophalen.
We gebruiken Chroma, een embedded vectoropslag die in-proces draait zonder serverbeheer. De pijplijn is volledig lokaal: lokaal embeddingmodel → lokale vectors → lokale retrieval → lokaal SLM.
flowchart TB
D[Je documenten / code] --> E[Lokale embed model]
E --> V[(Chroma vector DB - op schijf)]
Q[Agent vraag] --> QE[Vraags embed lokaal]
QE --> V
V -->|top-k fragmenten| A[Qwen agent]
A --> Ans[Gegronde antwoord]
Dit is hetzelfde Agentic RAG-patroon als bij Les 5 — de enige wijziging is dat elk onderdeel op jouw machine draait.
MCP is een transport, geen cloudservice. Een MCP-server kan draaien als lokaal proces op stdio, en tools via het standaardprotocol exposen aan je agent. Hiermee hergebruik je de groeiende ecosysteem van MCP-servers — toegang tot filesysteem, git-operaties, databasequery’s — volledig offline.
De beveiligingshouding verschilt van die in de cloud, maar is niet afwezig: een lokale MCP-server draait nog steeds met de permissies van je gebruiker, dus begrens waar hij bij kan (bijvoorbeeld een projectdirectory, niet je hele homefolder) en behandel de outputs als invoer om te valideren.
Lokaal eerst betekent niet alleen lokaal. Volwassen systemen routeren op gevoeligheid en moeilijkheid:
| Situatie | Waar het draait |
|---|---|
| Gevoelige code/data, of offline | Lokale SLM |
| Eenvoudige, begrensde taak | Lokale SLM (goedkoop, snel) |
| Moeilijk multi-hop redeneren over niet-gevoelige data | Cloudmodel |
| Alles, tijdens een storing | Lokale SLM (graceful degradatie) |
Dit weerspiegelt het modelroutering-idee uit Les 16 — behalve dat een van de “modellen” nu je eigen machine is. Een robuust ontwerp valt terug op lokaal als de cloud onbeschikbaar is, zodat de agent degradeert in kwaliteit in plaats van volledig faalt.
flowchart LR
Q[Verzoek] --> S{Gevoelig of offline?}
S -->|ja| L[Lokale SLM]
S -->|nee| C{Heeft diep redeneren nodig?}
C -->|nee| L
C -->|ja| Cloud[Cloudmodel]
L --> Out[Antwoord]
Cloud --> Out
Open code_samples/17-local-agent-foundry-local.ipynb en werk het door. Je bouwt een lokale engineering-assistent die volledig op je werkstation draait en kan:
Er wordt op geen enkel moment cloud-inferentie gebruikt.
De assistent maakt verbinding met Foundry Local via de OpenAI-compatibele endpoint, dus de agentcode lijkt bijna identiek aan de cloudlessen — alleen de client verandert:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# Foundry Local ontdekt/downloadt het model en geeft ons een lokaal eindpunt.
manager = FoundryLocalManager(\"qwen2.5-7b-instruct\")
client = OpenAI(base_url=manager.endpoint, api_key=manager.api_key) # api_key is een lokale tijdelijke aanduiding
De tools zijn gewone Python-functies die begrensd zijn tot een projectdirectory:
def read_file(path: str) -> str:
\"\"\"Read a file, but only inside the sandboxed project directory.\"\"\"
full = (PROJECT_ROOT / path).resolve()
if PROJECT_ROOT not in full.parents and full != PROJECT_ROOT:
return \"Access denied: path is outside the project directory.\"
return full.read_text(encoding=\"utf-8\")
Let op de sandbox-controle — zelfs lokaal is een tool die willekeurige paden leest een risico. De notebook houdt elke tool begrensd tot een enkele projectroot.
Test je begrip voordat je verdergaat naar de opdracht.
1. Noem twee concrete redenen om een agent lokaal te draaien in plaats van in de cloud.
2. Wat is de aanbevolen taakverdeling tussen een SLM en zijn tools in een lokale agent, en waarom?
3. Wat maakt het mogelijk om cloud-agentcode te hergebruiken met Foundry Local?
4. Waarom gebruiken we specifiek een Qwen functie-aanroepmodel in plaats van een willekeurige SLM?
5. Welke componenten draaien er op de machine in de lokale RAG-pijplijn?
6. Een lokale MCP-server draait op jouw machine. Maakt dat het automatisch veilig? Welke voorzorgsmaatregel moet je nog nemen?
7. Beschrijf een verstandige hybride routeringsregel die een lokaal model omvat.
8. Wat is een realistisch minimum RAM bedrag om de lokale agent in deze les te draaien, en wat koop je extra met meer RAM?
Breid de lokale engineering-assistent uit tot een lokale documentatie-reviewer voor een klein project naar keuze (gebruik gerust een van de lesmappen van deze repo).
Je inzending moet:
Een find_todos tool toevoegen die het project scant op TODO/FIXME-commentaar en die teruggeeft met bestand en regelnummers — met dezelfde sandbox-check als read_file.
Schrijf daarna een korte paragraaf over wat je naar de cloud zou verplaatsen en wat je lokaal zou houden voor deze beoordelaar, en waarom. Je wordt beoordeeld op of de lokale componenten correct zijn gekoppeld en of je hybride redenering logisch is — niet op modelkwaliteit.
In deze les bouwde je een agent die volledig op je eigen machine draait:
Dit maakt de implementatiecyclus compleet: Les 16 schaalde agents op in Microsoft Foundry, en deze les schaalde ze af naar één werkstation. De volgende les richt zich op het beveiligen van gedeployde agents.
Disclaimer: Dit document is vertaald met behulp van de AI vertaaldienst Co-op Translator. Hoewel we streven naar nauwkeurigheid, dient u er rekening mee te houden dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.