![]()
La lezione precedente ha scalato gli agenti verso l’alto nel cloud. Questa li porta verso il basso su una singola macchina. Alla fine avrai un assistente di ingegneria funzionante che ragiona, chiama strumenti, legge i tuoi file e cerca nella tua documentazione — senza una singola chiamata di inferenza al cloud.
Perché lo vorresti? Tre ragioni che emergono costantemente nel lavoro ingegneristico reale:
Il compromesso è che stai scambiando un modello cloud di frontiera per un Small Language Model (SLM) che gira sulla tua CPU, GPU o NPU. Questa lezione riguarda la costruzione di agenti che siano validi entro questo vincolo piuttosto che fingere che il vincolo non esista.
Questa lezione tratterà:
Dopo aver completato questa lezione, saprai come:
Questa lezione assume che tu abbia completato le lezioni precedenti e che ti senta a tuo agio con:
Avrai inoltre bisogno di:
requirements.txt, più foundry-local-sdk, openai e chromadb per questa lezione.Un modello cloud di frontiera ha centinaia di miliardi di parametri e un data center dietro di sé. Un SLM ha pochi miliardi di parametri e deve stare nella RAM del tuo portatile. Questa differenza crea aspettative chiare.
Gli SLM sono bravi in:
Gli SLM sono meno forti in:
La strategia vincente per agenti locali è quindi: lascia che l’SLM orchestrare, e lascia che gli strumenti facciano il lavoro pesante. Il modello non deve conoscere il tuo codice, ma deve sapere quando chiamare read_file e search_docs. Questo fa leva direttamente sui punti di forza di un SLM.
flowchart LR
U[Sviluppatore] --> A[Agente SLM Locale]
A -->|decide quale strumento| T1[leggi_file]
A -->|decide quale strumento| T2[ricerca_documenti RAG]
A -->|decide quale strumento| T3[analizza_codice]
T1 --> A
T2 --> A
T3 --> A
A --> R[Risposta, completamente sul dispositivo]
Microsoft Foundry Local è un runtime leggero che scarica, gestisce e serve modelli interamente sulla tua macchina. La sua caratteristica più importante per noi è che espone un endpoint HTTP compatibile OpenAI — il che significa che l’SDK OpenAI e il client OpenAI del Microsoft Agent Framework funzionano con esso cambiando solo il base_url. Tutto quello che hai imparato a costruire agenti si trasferisce direttamente; cambia solo l’endpoint che si sposta dal cloud a localhost.
Foundry Local sceglie automaticamente la build migliore di un modello per il tuo hardware — build CPU, build CUDA/GPU o build NPU — così non devi ottimizzare manualmente per ogni macchina.
Installa Foundry Local (vedi la documentazione per il tuo sistema operativo), poi verifica che funzioni:
# Installa (esempio; segui la documentazione per la tua piattaforma)
winget install Microsoft.FoundryLocal # Windows
# brew install microsoft/foundrylocal/foundrylocal # macOS
# Scarica ed esegui un modello Qwen, poi avvia il servizio locale
foundry model run qwen2.5-7b-instruct
foundry service status
Una volta che il servizio è in esecuzione, hai un endpoint locale compatibile OpenAI (tipicamente http://localhost:PORT/v1). Il notebook usa il foundry-local-sdk per scoprire automaticamente l’endpoint, così non devi codificare a mano la porta.
Un agente è solo un agente se può chiamare strumenti. Molti SLM chat possono chattare ma producono chiamate strumenti inaffidabili o malformate. I modelli Qwen sono addestrati per la chiamata di funzioni e emettono strutture di chiamata strumenti ben formate in modo consistente — ed è esattamente ciò che trasforma un modello di chat locale in un agente locale.
Il flusso è il ciclo standard di chiamata strumenti che già conosci, solo che gira sul dispositivo:
sequenceDiagram
participant U as Utente
participant A as Agente Qwen (locale)
participant T as Strumento Locale
U->>A: "Cosa fa auth.py?"
A->>A: Decidere: chiamare read_file
A->>T: read_file("auth.py")
T-->>A: contenuto del file
A->>A: Ragionare sul contenuto
A-->>U: Spiegazione
La ricerca nella documentazione è dove gli agenti locali danno il meglio. Invece di sperare che l’SLM abbia memorizzato la documentazione del tuo framework, inserisci quei documenti in un database vettoriale locale e lascia che l’agente recuperi i blocchi rilevanti su richiesta.
Usiamo Chroma, un archivio vettoriale embedded che gira in-process senza bisogno di server da gestire. La pipeline è interamente locale: modello di embedding locale → vettori locali → recupero locale → SLM locale.
flowchart TB
D[I tuoi documenti / codice] --> E[Modello di embedding locale]
E --> V[(DB vettoriale Chroma - su disco)]
Q[Query agente] --> QE[Embeddare la query localmente]
QE --> V
V -->|top-k chunk| A[Agente Qwen]
A --> Ans[Risposta fondata]
Questo è lo stesso modello Agentic RAG della Lezione 5 — l’unica differenza è che ogni componente gira sulla tua macchina.
MCP è un trasporto, non un servizio cloud. Un server MCP può girare come processo locale su stdio, esponendo strumenti al tuo agente tramite il protocollo standard. Questo ti permette di riutilizzare l’ecosistema crescente di server MCP — accesso al file system, operazioni git, query database — completamente offline.
La postura di sicurezza è diversa dal cloud, ma non assente: un server MCP locale gira ancora con i permessi del tuo utente, quindi limita cosa può toccare (una directory di progetto, non tutta la tua home) e tratta i suoi output come input da convalidare.
Local-first non significa solo locale. Sistemi maturi instradano in base a sensibilità e difficoltà:
| Situazione | Dove gira |
|---|---|
| Codice / dati sensibili, o offline | SLM locale |
| Compito semplice e limitato | SLM locale (economico, veloce) |
| Ragionamento multi-hop difficile su dati non sensibili | Modello cloud |
| Tutto durante un’interruzione | SLM locale (degrado elegante) |
Questo riflette l’idea di instradamento modello della Lezione 16 — eccetto che uno dei “modelli” ora è la tua macchina. Un design robusto ricade sul locale quando il cloud non è disponibile, così l’agente degrada in qualità anziché fallire completamente.
flowchart LR
Q[Richiesta] --> S{Sensibile o offline?}
S -->|sì| L[SLM Locale]
S -->|no| C{Serve un ragionamento profondo?}
C -->|no| L
C -->|sì| Cloud[Modello Cloud]
L --> Out[Risposta]
Cloud --> Out
Apri code_samples/17-local-agent-foundry-local.ipynb e segui. Costruirai un assistente di ingegneria locale che gira interamente sulla tua workstation e può:
Nessuna inferenza cloud viene usata in nessun momento.
L’assistente si connette a Foundry Local tramite l’endpoint compatibile OpenAI, quindi il codice dell’agente è quasi identico alle lezioni sul cloud — cambia solo il client:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# Foundry Local scopre/scarica il modello e ci fornisce un endpoint locale.
manager = FoundryLocalManager(\"qwen2.5-7b-instruct\")
client = OpenAI(base_url=manager.endpoint, api_key=manager.api_key) # api_key è un segnaposto locale
Gli strumenti sono funzioni Python ordinarie limitate a una directory di progetto:
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\")
Nota il controllo sandbox — anche localmente, uno strumento che legge percorsi arbitrari è una responsabilità. Il notebook tiene ogni strumento confinato a una singola radice di progetto.
Metti alla prova la tua comprensione prima di passare all’assegnazione.
1. Fornisci due ragioni concrete per eseguire un agente localmente invece che nel cloud.
2. Qual è la divisione del lavoro raccomandata tra un SLM e i suoi strumenti in un agente locale, e perché?
3. Cosa rende possibile riutilizzare il codice per agenti cloud con Foundry Local?
4. Perché usiamo specificamente un modello di chiamata funzione Qwen invece di qualsiasi SLM?
5. Nella pipeline RAG locale, quali componenti girano sulla macchina?
6. Un server MCP locale gira sulla tua macchina. Lo rende automaticamente sicuro? Quale precauzione dovresti comunque prendere?
7. Descrivi una regola sensata di instradamento ibrido che includa un modello locale.
8. Qual è una cifra minima realistica di RAM per eseguire l’agente locale in questa lezione e cosa ti dà più RAM?
Estendi l’assistente di ingegneria locale in un revisore della documentazione locale per un piccolo progetto a tua scelta (usa una delle cartelle lezioni di questo repo se vuoi).
La tua consegna dovrebbe:
Aggiungere uno strumento find_todos che scansioni il progetto per commenti TODO/FIXME e li ritorni con file e numero di riga — mantenendo lo stesso controllo sandbox di read_file.
Poi scrivi un breve paragrafo su cosa sposteresti sul cloud e cosa manterresti locale per questo revisore, e perché. Verrai valutato sul fatto che i componenti locali siano collegati correttamente e che il tuo ragionamento ibrido sia solido — non sulla qualità del modello.
In questa lezione hai costruito un agente che gira interamente sulla tua macchina:
Questo completa l’arco del deployment: la Lezione 16 ha scalato gli agenti su Microsoft Foundry, e questa lezione li ha scalati su una singola workstation. La lezione successiva si concentra su come mantenere sicuri gli agenti deployati.
Disclaimer: Questo documento è stato tradotto utilizzando il servizio di traduzione AI Co-op Translator. Sebbene ci impegniamo per garantire la precisione, si prega di notare che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un essere umano. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.