![]()
Forrige leksjon skalerte agenter opp til skyen. Denne bringer dem ned på én enkelt maskin. På slutten vil du ha en fungerende ingeniørassistent som tenker, kaller verktøy, leser filene dine, og søker i dokumentasjonen din — uten én eneste forespørsel til skyen.
Hvorfor skulle du ønske det? Tre grunner som stadig dukker opp i reelt ingeniørarbeid:
Fangsten er at du bytter en topptung skyløsning mot en Small Language Model (SLM) som kjører på CPU, GPU eller NPU på maskinen din. Denne leksjonen handler om å bygge agenter som er gode innenfor den begrensningen i stedet for å late som om den ikke finnes.
Denne leksjonen dekker:
Etter å ha fullført denne leksjonen vil du kunne:
Denne leksjonen forutsetter at du har fullført tidligere leksjoner og er komfortabel med:
Du vil også trenge:
requirements.txt, pluss foundry-local-sdk, openai og chromadb for denne leksjonen.En topptung skyløsning har hundrevis av milliarder parametere og et datasenter bak seg. En SLM har noen få milliarder parametere og må få plass i laptopens RAM. Den forskjellen setter klare forventninger.
SLMer er gode på:
SLMer er svakere på:
Den vinnende strategien for lokale agenter er derfor: la SLM orkestrere, og la verktøyene gjøre det tunge arbeidet. Modellen trenger ikke å kunne kodebasen din — den trenger å vite når den skal kalle read_file og search_docs. Det spiller rett på en SLMs styrker.
flowchart LR
U[Utvikler] --> A[Lokal SLM-agent]
A -->|avgjør hvilket verktøy| T1[les_fil]
A -->|avgjør hvilket verktøy| T2[søk_dokumenter RAG]
A -->|avgjør hvilket verktøy| T3[analyser_kode]
T1 --> A
T2 --> A
T3 --> A
A --> R[Svar, fullstendig på enheten]
Microsoft Foundry Local er et lettvekts runtime-miljø som laster ned, administrerer og server modeller helt lokalt på maskinen din. Den viktigste egenskapen for oss er at den eksponerer et OpenAI-kompatibelt HTTP-endepunkt — noe som betyr at OpenAI SDK og Microsoft Agent Frameworks OpenAI-klient fungerer mot det med bare en endring av base_url. Alt du har lært om å bygge agenter overføres direkte; kun endepunktet flyttes fra skyen til localhost.
Foundry Local velger også automatisk den beste byggingen av en modell for maskinvaren din — CPU-versjon, CUDA/GPU-versjon eller NPU-versjon — så du slipper å optimalisere manuelt per maskin.
Installer Foundry Local (se dokumentasjonen for ditt OS), og bekreft at det fungerer:
# Installer (for eksempel; følg dokumentasjonen for din plattform)
winget install Microsoft.FoundryLocal # Windows
# brew install microsoft/foundrylocal/foundrylocal # macOS
# Last ned og kjør en Qwen-modell, start deretter den lokale tjenesten
foundry model run qwen2.5-7b-instruct
foundry service status
Når tjenesten kjører har du et lokalt, OpenAI-kompatibelt endepunkt (typisk http://localhost:PORT/v1). Notatboken bruker foundry-local-sdk til å oppdage endepunktet automatisk, så du trenger ikke hardkode porten.
En agent er bare en agent hvis den kan kalle verktøy. Mange SLMer kan chatte, men produserer upålitelige, feilformede verktøysanrop. Qwen-modeller er trent for funksjonskall og produserer konsekvent velformede verktøysostrukturer — som er akkurat det som gjør en lokal chatmodell til en lokal agent.
Flyten er den standard verktøysanrop-sløyfen du allerede kjenner, bare at den kjører lokalt:
sequenceDiagram
participant U as Bruker
participant A as Qwen Agent (lokal)
participant T as Lokalt verktøy
U->>A: "Hva gjør auth.py?"
A->>A: Bestem: kall read_file
A->>T: read_file("auth.py")
T-->>A: filinnhold
A->>A: Resonner over innholdet
A-->>U: Forklaring
Dokumentasjonssøk er der lokale agenter virkelig har verdi. I stedet for å håpe at SLM har memorert rammeverkets dokumentasjon, embedder du dokumentene i en lokal vektordatabase og lar agenten hente relevante utdrag etter behov.
Vi bruker Chroma, et innebygd vektorlager som kjører i prosess uten server. Hele kjeden er lokalt: lokal embeddemodell → lokale vektorer → lokal henting → lokal SLM.
flowchart TB
D[Dine dokumenter / kode] --> E[Lokal innebyggingsmodell]
E --> V[(Chroma vektordatabase - på disk)]
Q[Agentforespørsel] --> QE[Bygg inn forespørsel lokalt]
QE --> V
V -->|topp-k biter| A[Qwen-agent]
A --> Ans[Begrunnet svar]
Dette er det samme Agentic RAG-mønsteret fra Leksjon 5 — eneste forskjell er at alle komponentene kjører på maskinen din.
MCP er et transportlag, ikke en skytjeneste. En MCP-server kan kjøre som en lokal prosess på stdio og eksponere verktøy til agenten over standardprotokollen. Dette lar deg gjenbruke det voksende økosystemet av MCP-servere — tilgang til filsystem, git-operasjoner, databaseforespørsler — helt offline.
Sikkerhetsinnstillingen er annerledes enn i skyen, men ikke fraværende: en lokal MCP-server kjører fortsatt med brukertillatelser, så avgrens hva den kan berøre (et prosjektkatalog, ikke hele hjemmemappen) og behandle utdata som input som må verifiseres.
Lokal-først betyr ikke bare lokalt. Modne systemer ruter etter sensitivitet og vanskelighetsgrad:
| Situasjon | Hvor det kjører |
|---|---|
| Sensitiv kode/data, eller offline | Lokal SLM |
| Enkelt, avgrenset oppgave | Lokal SLM (rimelig, rask) |
| Vanskelig flertrinns resonnering på ikke-sensitiv data | Sky-modell |
| Alt, under strømbrudd | Lokal SLM (grasiøs degradering) |
Dette speiler modell-rutingen fra Leksjon 16 — bortsett fra at en av “modellene” nå er din egen maskin. Et robust design faller tilbake på lokalt når skyen er utilgjengelig, slik at agenten degraderer i kvalitet i stedet for å feile helt.
flowchart LR
Q[Forespørsel] --> S{Sensitiv eller frakoblet?}
S -->|ja| L[Lokal SLM]
S -->|nei| C{Trenger dyp resonnering?}
C -->|nei| L
C -->|ja| Cloud[Sky-modell]
L --> Out[Svar]
Cloud --> Out
Åpne code_samples/17-local-agent-foundry-local.ipynb og følg gjennom. Du vil bygge en lokal ingeniørassistent som kjører helt på din arbeidsstasjon og kan:
Ingen skybassert inferens brukes på noe tidspunkt.
Assistenten kobler seg til Foundry Local via OpenAI-kompatibelt endepunkt, så agentkoden ser nesten identisk ut med skylærdommene — bare klienten endres:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# Foundry Local oppdager/nedlaster modellen og gir oss et lokalt endepunkt.
manager = FoundryLocalManager(\"qwen2.5-7b-instruct\")
client = OpenAI(base_url=manager.endpoint, api_key=manager.api_key) # api_key er en lokal plassholder
Verktøyene er vanlige Python-funksjoner avgrenset til et prosjektkatalog:
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\")
Merk sandbox-sjekken — selv lokalt er et verktøy som leser vilkårlige stier en risiko. Notatboken holder hvert verktøy avgrenset til én prosjektrot.
Test forståelsen din før du går videre til oppgaven.
1. Gi to konkrete grunner til å kjøre en agent lokalt i stedet for i skyen.
2. Hva er anbefalt arbeidsdeling mellom en SLM og dens verktøy i en lokal agent, og hvorfor?
3. Hva gjør det mulig å gjenbruke sky-agentkode med Foundry Local?
4. Hvorfor bruker vi spesielt en Qwen funksjonskall-modell i stedet for hvilken som helst SLM?
5. I den lokale RAG-pipelinen, hvilke komponenter kjører på maskinen?
6. En lokal MCP-server kjører på maskinen din. Gjør det automatisk serveren trygg? Hvilket forholdsregel bør du fortsatt ta?
7. Beskriv en fornuftig hybrid ruterregel som inkluderer en lokal modell.
8. Hva er et realistisk minimum RAM-beløp for å kjøre lokal agent i denne leksjonen, og hva får du ut av mer RAM?
Utvid den lokale ingeniørassistenten til en lokal dokumentasjonsgjennomgåer for et lite prosjekt du velger (bruk gjerne en av leksjonsmappene i dette repoet).
Innleveringen din skal:
Legge til et find_todos verktøy som søker gjennom prosjektet etter TODO/FIXME-kommentarer og returnerer disse med fil- og linjenummer — med samme sandbox-sjekk som read_file.
Skriv deretter et kort avsnitt om hva du ville flyttet til skyen og hva du ville beholdt lokalt for denne vurdereren, og hvorfor. Du vurderes på om de lokale komponentene er koblet riktig sammen og om din hybride resonnering er solid — ikke på modellkvalitet.
I denne leksjonen bygde du en agent som kjører helt på din egen maskin:
Dette fullfører distribusjonsbuen: Leksjon 16 skalerte agenter opp i Microsoft Foundry, og denne leksjonen skalerte dem ned til en enkelt arbeidsstasjon. Neste leksjon handler om å holde distribuerte agenter sikre.
Ansvarsfraskrivelse: Dette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten Co-op Translator. Selv om vi streber etter nøyaktighet, vær oppmerksom på at automatiske oversettelser kan inneholde feil eller unøyaktigheter. Det opprinnelige dokumentet på originalspråket skal betraktes som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for eventuelle misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen.