![]()
Den föregående lektionen skalerade agenter upp till molnet. Den här tar dem ner till en enda maskin. I slutet kommer du att ha en fungerande ingenjörsassistent som resonerar, anropar verktyg, läser dina filer och söker i din dokumentation — utan ett enda molninferensanrop.
Varför skulle du vilja det? Tre anledningar som ständigt dyker upp i verkligt ingenjörsarbete:
Nackdelen är att du byter ut en topprankad molnmodell mot en Small Language Model (SLM) som körs på din CPU, GPU eller NPU. Den här lektionen handlar om att bygga agenter som är bra inom denna begränsning snarare än att låtsas att begränsningen inte finns.
Den här lektionen kommer att täcka:
Efter att ha genomfört denna lektion kommer du att kunna:
Den här lektionen förutsätter att du har genomfört tidigare lektioner och är bekväm med:
Du behöver också:
requirements.txt, plus foundry-local-sdk, openai och chromadb för denna lektion.En topprankad molnmodell har hundratals miljarder parametrar och ett datacenter bakom sig. En SLM har några få miljarder parametrar och måste rymmas i din laptops RAM. Den skillnaden sätter tydliga förväntningar.
SLM är bra på:
SLM är svagare på:
Den vinnande strategin för lokala agenter är alltså: låt SLM orkestrera och låt verktyg göra tyngre lyft. Modellen behöver inte känna till din kodbas — den behöver veta när den ska anropa read_file och search_docs. Det spelar direkt på en SLM:s styrkor.
flowchart LR
U[Utvecklare] --> A[Lokal SLM-agent]
A -->|bestämmer vilket verktyg| T1[läs_fil]
A -->|bestämmer vilket verktyg| T2[sök_dokument RAG]
A -->|bestämmer vilket verktyg| T3[analysera_kod]
T1 --> A
T2 --> A
T3 --> A
A --> R[Svar, helt på enheten]
Microsoft Foundry Local är en lättviktig runtime som laddar ner, hanterar och serverar modeller helt på din maskin. Dess viktigaste funktion för oss är att den exponerar en OpenAI-kompatibel HTTP-slutpunkt — vilket betyder att OpenAI SDK och Microsoft Agent Frameworks OpenAI-klient fungerar med den med bara en ändring av base_url. Allt du lärt dig om att bygga agenter överförs direkt; bara slutpunkten flyttas från molnet till localhost.
Foundry Local väljer också automatiskt den bästa bygget för en modell för din hårdvara — en CPU-build, en CUDA/GPU-build eller en NPU-build — så du behöver inte optimera manuellt per maskin.
Installera Foundry Local (se dokumentationen för ditt OS), och kontrollera sedan att det fungerar:
# Installera (exempel; följ dokumentationen för din plattform)
winget install Microsoft.FoundryLocal # Windows
# brew install microsoft/foundrylocal/foundrylocal # macOS
# Ladda ner och kör en Qwen-modell, starta sedan den lokala tjänsten
foundry model run qwen2.5-7b-instruct
foundry service status
När tjänsten körs har du en lokal, OpenAI-kompatibel slutpunkt (vanligtvis http://localhost:PORT/v1). Notebooken använder foundry-local-sdk för att automatiskt upptäcka slutpunkten, så du behöver inte hårdkoda porten.
En agent är bara en agent om den kan anropa verktyg. Många SLM kan chatta men producerar opålitliga, felaktigt formade verktygsanrop. Qwen-modeller tränas för funktionsanrop och genererar konsekvent välformade verktygsanropsstrukturer — vilket är precis vad som gör en lokal chattmodell till en lokal agent.
Flödet är den standardiserade verktygsanropsloopen du redan känner till, men körs på enheten:
sequenceDiagram
participant U as Användare
participant A as Qwen-Agent (lokal)
participant T as Lokalt verktyg
U->>A: "Vad gör auth.py?"
A->>A: Bestäm: anropa read_file
A->>T: read_file("auth.py")
T-->>A: filinnehåll
A->>A: Resonerar över innehåll
A-->>U: Förklaring
Dokumentationssökning är där lokala agenter verkligen gör skillnad. Istället för att hoppas att SLM memorerat din ramverksdokumentation bäddar du in dessa dokument i en lokal vektordatabas och låter agenten hämta relevanta delar vid behov.
Vi använder Chroma, en inbäddad vektordatabas som körs i processen utan någon server att hantera. Pipeline är helt lokal: lokal inbäddningsmodell → lokala vektorer → lokal hämtning → lokal SLM.
flowchart TB
D[Dina dokument / kod] --> E[Lokal inbäddningsmodell]
E --> V[(Chroma vektor DB - på disk)]
Q[Agentfråga] --> QE[Bädda in fråga lokalt]
QE --> V
V -->|top-k segment| A[Qwen agent]
A --> Ans[Grundat svar]
Detta är samma Agentic RAG-mönster från Lektion 5 — enda skillnaden är att varje komponent körs på din maskin.
MCP är en transport, inte en molntjänst. En MCP-server kan köras som en lokal process på stdio, vilket exponerar verktyg till din agent över standardprotokollet. Detta låter dig återanvända det växande ekosystemet av MCP-servrar — filsystemåtkomst, git-operationer, databasfrågor — helt offline.
Säkerhetsinställningen skiljer sig från molnet, men är inte frånvarande: en lokal MCP-server körs fortfarande med dina användarbehörigheter, så begränsa vad den kan röra vid (en projektkatalog, inte hela din hemkatalog) och behandla dess utdata som indata för validering.
Lokalt först betyder inte bara lokalt. Mogna system styr baserat på känslighet och svårighetsgrad:
| Situation | Var det körs |
|---|---|
| Känslig kod / data, eller offline | Lokal SLM |
| Enkel, avgränsad uppgift | Lokal SLM (billigt, snabbt) |
| Svårt flerstegsresonemang på icke-känslig data | Molnmodell |
| Allt under ett avbrott | Lokal SLM (graciell degradering) |
Detta speglar idén om modellriktning från Lektion 16 — förutom att en av “modellerna” nu är din egen maskin. En robust design faller tillbaka på lokal när molnet inte är tillgängligt, så agenten degraderas i kvalitet istället för att helt misslyckas.
flowchart LR
Q[Begäran] --> S{Känslig eller offline?}
S -->|ja| L[Lokal SLM]
S -->|nej| C{Behöver djup resonemang?}
C -->|nej| L
C -->|ja| Cloud[Molnmodell]
L --> Out[Svar]
Cloud --> Out
Öppna code_samples/17-local-agent-foundry-local.ipynb och arbeta igenom den. Du kommer att bygga en lokal ingenjörsassistent som körs helt på din arbetsstation och kan:
Ingen molninferens används vid något tillfälle.
Assistenten ansluter till Foundry Local via den OpenAI-kompatibla slutpunkten, så agentkoden ser nästan identisk ut med molnlektionerna — bara klienten ändras:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# Foundry Local upptäcker/laddar ner modellen och ger oss en lokal slutpunkt.
manager = FoundryLocalManager(\"qwen2.5-7b-instruct\")
client = OpenAI(base_url=manager.endpoint, api_key=manager.api_key) # api_key är en lokal platshållare
Verktygen är vanliga Python-funktioner som begränsas till en projektmapp:
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\")
Notera sandboxkontrollen — även lokalt är ett verktyg som läser godtyckliga sökvägar en risk. Notebooken håller varje verktyg begränsat till en projektrot.
Testa din förståelse innan du går vidare till uppgiften.
1. Ge två konkreta anledningar till att köra en agent lokalt istället för i molnet.
2. Vad är den rekommenderade arbetsfördelningen mellan en SLM och dess verktyg i en lokal agent, och varför?
3. Vad gör det möjligt att återanvända molnagenter med Foundry Local?
4. Varför använder vi specifikt en Qwen funktionsanropsmodell snarare än vilken SLM som helst?
5. Vilka komponenter körs på maskinen i den lokala RAG-pipelinen?
6. En lokal MCP-server körs på din maskin. Gör det den automatiskt säker? Vilken försiktighetsåtgärd bör du ändå vidta?
7. Beskriv en rimlig hybridriktregel som inkluderar en lokal modell.
8. Vad är en realistisk miniminivå av RAM för att köra den lokala agenten i denna lektion, och vad köper du med mer RAM?
Utöka den lokala ingenjörsassistenten till en lokal dokumentationsgranskare för ett litet projekt du väljer (använd gärna någon av lektionens mappar i detta repot).
Din inlämning ska:
Lägga till ett find_todos-verktyg som skannar projektet efter TODO/FIXME-kommentarer och returnerar dem med fil och radnummer — med samma sandbox-kontroll som read_file.
Skriv sedan ett kort stycke om vad du skulle flytta till molnet och vad du skulle behålla lokalt för denna granskare, och varför. Du bedöms på om de lokala komponenterna är korrekt kopplade tillsammans och om din hybrida resonemang är sund — inte på modellkvaliteten.
I denna lektion byggde du en agent som körs helt på din egen maskin:
Detta slutför distributionsbågen: Lektion 16 skalade upp agenter i Microsoft Foundry, och denna lektion skalade ned dem till en enskild arbetsstation. Nästa lektion handlar om att hålla distribuerade agenter säkra.
Ansvarsfriskrivning: Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Även om vi strävar efter noggrannhet, var vänlig notera att automatiska översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på dess modersmål bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för några missförstånd eller feltolkningar som uppstår till följd av användningen av denna översättning.