![]()
La lezione precedente ha scalato gli agenti verso l’alto nel cloud. Questa li porta verso il basso su un’unica 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 sul cloud.
Perché dovresti volere questo? Tre motivi che emergono costantemente nel lavoro ingegneristico reale:
Il rovescio della medaglia è che stai scambiando un modello di punta nel cloud per un Small Language Model (SLM) che gira sulla tua CPU, GPU o NPU. Questa lezione riguarda la costruzione di agenti che sono bravi entro quel 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 sia a tuo agio con:
Avrai anche bisogno di:
requirements.txt, più foundry-local-sdk, openai e chromadb per questa lezione.Un modello di punta nel cloud ha centinaia di miliardi di parametri e un data center alle spalle. Uno SLM ha pochi miliardi di parametri e deve stare nella RAM del tuo laptop. Questa differenza stabilisce aspettative chiare.
Gli SLM sono bravi a:
Gli SLM sono più deboli a:
La strategia vincente per gli agenti locali è quindi: lascia che l’SLM orchestra, e lascia che gli strumenti facciano il lavoro pesante. Il modello non deve conoscere il tuo codice — deve sapere quando chiamare read_file e search_docs. Questo gioca direttamente sui punti di forza di uno SLM.
flowchart LR
U[Sviluppatore] --> A[Agente SLM Locale]
A -->|decide quale strumento| T1[leggi_file]
A -->|decide quale strumento| T2[ricerca_doc 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 di OpenAI e il client OpenAI del Microsoft Agent Framework funzionano contro di esso con solo un cambio di base_url. Tutto ciò che hai imparato sulla costruzione di agenti si trasferisce direttamente; solo l’endpoint si sposta dal cloud a localhost.
Foundry Local sceglie anche automaticamente la migliore build di un modello per il tuo hardware — una build CPU, una build CUDA/GPU o una build NPU — così non devi ottimizzare manualmente per ogni macchina.
Installa Foundry Local (vedi la documentazione per il tuo sistema operativo), poi conferma che funziona:
# 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, quindi 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 è un agente solo se può chiamare strumenti. Molti SLM possono chattare ma producono chiamate a strumenti inaffidabili o malformate. I modelli Qwen sono addestrati per le chiamate a funzione e emettono strutture di chiamata a strumento ben formate in modo coerente — ed è esattamente questo che trasforma un modello di chat locale in un agente locale.
Il flusso è il circuito standard di chiamata a 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: Decidi: chiama read_file
A->>T: read_file("auth.py")
T-->>A: contenuto del file
A->>A: Ragiona sul contenuto
A-->>U: Spiegazione
La ricerca nella documentazione è dove gli agenti locali danno davvero valore. Invece di sperare che l’SLM abbia memorizzato la documentazione del tuo framework, incorpori quei documenti in un database vettoriale locale e lasci che l’agente recuperi i pezzi rilevanti su richiesta.
Usiamo Chroma, un archivio vettoriale incorporato che gira in-process senza 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[(Chroma vector DB - su disco)]
Q[Query agente] --> QE[Embedding query locale]
QE --> V
V -->|top-k frammenti| A[Agente Qwen]
A --> Ans[Risposta fondata]
Questo è lo stesso modello Agentic RAG della Lezione 5 — l’unico cambiamento è 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 filesystem, operazioni git, query di database — interamente offline.
La postura di sicurezza è diversa dal cloud, ma non assente: un server MCP locale gira comunque 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 validare.
“Local-first” non significa solo locale. I sistemi maturi instradano per sensibilità e difficoltà:
| Situazione | Dove gira |
|---|---|
| Codice/dati sensibili o offline | SLM Locale |
| Compito semplice e delimitato | SLM Locale (economico, veloce) |
| Ragionamento multi-hop complesso su dati non sensibili | Modello Cloud |
| Tutto, durante un’interruzione | SLM Locale (degrado graduale) |
Questo rispecchia l’idea di model routing della Lezione 16 — tranne che uno dei “modelli” è ora la tua stessa macchina. Un design robusto torna locale quando il cloud non è disponibile, così l’agente degrada in qualità piuttosto che fallire completamente.
flowchart LR
Q[Richiesta] --> S{Sensibile o offline?}
S -->|sì| L[SLM locale]
S -->|no| C{Richiede 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 lavoraci. Costruirai un assistente di ingegneria locale che gira interamente sulla tua workstation e può:
In nessun momento si usa inferenza cloud.
L’assistente si connette a Foundry Local tramite l’endpoint compatibile OpenAI, quindi il codice agente è quasi identico a quello delle lezioni 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 normali funzioni Python limitate a una directory 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 è un rischio. Il notebook mantiene ogni strumento limitato a una radice progetto singola.
Verifica la tua comprensione prima di passare all’assegnazione.
1. Dai due motivi concreti 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 agente cloud con Foundry Local?
4. Perché usiamo specificamente un modello Qwen con chiamata a funzione piuttosto che qualsiasi SLM?
5. Nella pipeline RAG locale, quali componenti girano sulla macchina?
6. Un server MCP locale gira sulla tua macchina. Questo lo rende automaticamente sicuro? Quale precauzione dovresti ancora prendere?
7. Descrivi una regola sensata di instradamento ibrido che includa un modello locale.
8. Qual è una cifra realistica minima di RAM per eseguire l’agente locale in questa lezione, e cosa ti offre più RAM?
Estendi l’assistente di ingegneria locale in un revisore di documentazione locale per un piccolo progetto a tua scelta (usa una delle cartelle di lezione di questo repo se vuoi).
La tua consegna dovrebbe:
Aggiungere uno strumento find_todos che scansiona il progetto per commenti TODO/FIXME e li restituisce con file e numero di riga — mantenendo lo stesso controllo sandbox di read_file.
Poi scrivi un breve paragrafo su cosa sposteresti nel cloud e cosa manterresti locale per questo revisore, e perché. Sarai valutato su quanto i componenti locali siano collegati correttamente e su quanto 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 di deployment: la Lezione 16 ha scalato gli agenti in Microsoft Foundry, e questa lezione li ha scalati su una singola workstation. La prossima lezione si concentra sul mantenere sicuri gli agenti distribuiti.
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.