![]()
Lecția precedentă a scalat agenții în sus, în cloud. Aceasta îi aduce în jos, pe o singură mașină. La final veți avea un asistent de inginerie funcțional care raționează, apelează unelte, citește fișierele voastre și caută în documentație — fără niciun apel de inferență în cloud.
De ce ați dori asta? Trei motive care apar constant în munca reală de inginerie:
Dezavantajul este că faceți un schimb între un model frontieră în cloud și un Model de Limbaj Mic (SLM) care rulează pe CPU, GPU sau NPU. Această lecție este despre construirea agenților care sunt buni în această constrângere, în loc să pretindem că nu există.
Această lecție va acoperi:
După finalizarea acestei lecții veți ști cum să:
Această lecție presupune că ați finalizat lecțiile anterioare și sunteți confortabil cu:
Veți avea nevoie și de:
requirements.txt al depozitului, plus foundry-local-sdk, openai și chromadb pentru această lecție.Un model frontieră în cloud are sute de miliarde de parametri și un centru de date în spate. Un SLM are câteva miliarde de parametri și trebuie să încapă în RAM-ul laptopului tău. Această diferență setează așteptări clare.
SLM-urile sunt bune la:
SLM-urile sunt mai slabe la:
Strategia câștigătoare pentru agenții locali este așadar: lăsați SLM să orchestreze și uneltele să facă treaba grea. Modelul nu trebuie să cunoască codul tău — trebuie să știe când să apeleze read_file și search_docs. Asta joacă direct pe punctele forte ale unui SLM.
flowchart LR
U[Dezvoltator] --> A[Agent SLM Local]
A -->|decide ce unelte| T1[citește_fișier]
A -->|decide ce unelte| T2[caută_doc RAG]
A -->|decide ce unelte| T3[analizează_cod]
T1 --> A
T2 --> A
T3 --> A
A --> R[Răspuns, complet pe dispozitiv]
Microsoft Foundry Local este un runtime ușor care descarcă, administrează și servește modele în întregime pe mașina ta. Caracteristica cea mai importantă pentru noi este că expune un endpoint HTTP compatibil OpenAI — ceea ce înseamnă că SDK-ul OpenAI și clientul OpenAI din Microsoft Agent Framework funcționează contra lui schimbând doar base_url. Tot ce ai învățat despre construirea agenților se transferă direct; doar endpoint-ul se mută din cloud pe localhost.
Foundry Local alege de asemenea automat cea mai bună construcție a unui model pentru hardware-ul tău — o construcție CPU, una CUDA/GPU sau una NPU — așa că nu trebuie să optimizezi manual fiecare mașină.
Instalați Foundry Local (vedeți documentația pentru sistemul vostru de operare), apoi confirmați că funcționează:
# Instalează (exemplu; urmează documentația pentru platforma ta)
winget install Microsoft.FoundryLocal # Windows
# brew install microsoft/foundrylocal/foundrylocal # macOS
# Descarcă și rulează un model Qwen, apoi pornește serviciul local
foundry model run qwen2.5-7b-instruct
foundry service status
Odată ce serviciul rulează, aveți un endpoint local, compatibil OpenAI (de obicei http://localhost:PORT/v1). Notebook-ul folosește foundry-local-sdk pentru a descoperi automat endpoint-ul, deci nu trebuie să hardcodați portul.
Un agent este agent doar dacă poate apela unelte. Multe SLM-uri pot discuta, dar produc apeluri către unelte nefiabile, incorecte. Modelele Qwen sunt antrenate pentru apelare de funcții și emit structuri bine formate de apeluri către unelte în mod constant — ceea ce transformă un model de chat local într-un agent local.
Fluxul este bucla standard de apelare de unelte pe care o cunoașteți deja, doar că rulează pe dispozitiv:
sequenceDiagram
participant U as Utilizator
participant A as Agent Qwen (local)
participant T as Unealtă locală
U->>A: "Ce face auth.py?"
A->>A: Decide: apelează read_file
A->>T: read_file("auth.py")
T-->>A: conținutul fișierului
A->>A: Raționează asupra conținutului
A-->>U: Explicație
Căutarea documentației este locul unde agenții locali aduc valoare. În loc să sperăm că SLM-ul a memorat documentația framework-ului vostru, integrați acele documente într-o bază de date vectorială locală și lăsați agentul să recupereze bucățile relevante la cerere.
Folosim Chroma, un magazin vectorial încorporat care rulează în proces, fără server de administrat. Pipeline-ul este complet local: modelul de embedding local → vectori locali → recuperare locală → SLM local.
flowchart TB
D[Documentele / codul tău] --> E[Model local de încorporare]
E --> V[(Baza de date vectorială Chroma - pe disc)]
Q[Interogare agent] --> QE[Încorporează interogarea local]
QE --> V
V -->|fragmente top-k| A[Agent Qwen]
A --> Ans[Răspuns fundamentat]
Acesta este același tipar Agentic RAG din lecția 5 — singura diferență este că toate componentele rulează pe mașina ta.
MCP este un transport, nu un serviciu cloud. Un server MCP poate rula ca proces local pe stdio, expunând unelte agentului prin protocolul standard. Acest lucru permite reutilizarea ecosistemului MCP în creștere — acces la sistemul de fișiere, operațiuni git, interogări baze de date — complet offline.
Postura de securitate este diferită față de cloud, dar nu absentă: un server MCP local rulează tot cu permisiunile utilizatorului tău, deci limitează lui ce poate accesa (un director de proiect, nu întreg folderul home) și tratează rezultatele lui ca inputuri ce trebuie validate.
Local-first nu înseamnă local-doar. Sistemele mature direcționează după sensibilitate și dificultate:
| Situație | Unde rulează |
|---|---|
| Cod / date sensibile, sau offline | SLM local |
| Sarcină simplă, delimitată | SLM local (ieftin, rapid) |
| Raționament multi-hop dificil pe date nesensibile | Model cloud |
| Totul, în timpul unei pene | SLM local (degradare grațioasă) |
Aceasta oglindește ideea de rutare a modelului din Lecția 16 — cu excepția faptului că unul dintre “modele” este acum propria ta mașină. Un design robust cade pe local când cloud-ul nu este disponibil, astfel încât agentul degradează calitatea în loc să eșueze complet.
flowchart LR
Q[Cerere] --> S{Sensibil sau offline?}
S -->|da| L[SLM local]
S -->|nu| C{Necesită o raționare profundă?}
C -->|nu| L
C -->|da| Cloud[Model cloud]
L --> Out[Răspuns]
Cloud --> Out
Deschideți code_samples/17-local-agent-foundry-local.ipynb și parcurgeți-l. Veți construi un asistent de inginerie local care rulează integral pe stația voastră de lucru și poate:
Nu se folosește inferență în cloud în niciun punct.
Asistentul se conectează la Foundry Local prin endpoint-ul compatibil OpenAI, astfel codul agentului arată aproape identic cu lecțiile din cloud — doar clientul se schimbă:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# Foundry Local descoperă/descarcă modelul și ne oferă un endpoint local.
manager = FoundryLocalManager(\"qwen2.5-7b-instruct\")
client = OpenAI(base_url=manager.endpoint, api_key=manager.api_key) # api_key este un substituent local
Uneltele sunt funcții Python obișnuite, cu scope într-un director de proiect:
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\")
Observați verificarea sandbox — chiar și local, o unealtă care citește căi arbitrare este o responsabilitate. Notebook-ul păstrează fiecare unealtă limitată la un singur root de proiect.
Testați-vă înțelegerea înainte de a trece la tema de acasă.
1. Dați două motive concrete pentru a rula un agent local în loc să folosiți cloud-ul.
2. Care este împărțirea recomandată a muncii între un SLM și uneltele sale într-un agent local, și de ce?
3. Ce face posibilă reutilizarea codului agentului din cloud cu Foundry Local?
4. De ce folosim în mod specific un model Qwen de apelare a funcțiilor și nu orice SLM?
5. În pipeline-ul RAG local, ce componente rulează pe mașină?
6. Un server MCP local rulează pe mașina ta. Îl face asta automat sigur? Ce precauție trebuie totuși să iei?
7. Descrie o regulă de rutare hibridă rezonabilă care include un model local.
8. Care este o valoare minimă realistă de RAM pentru a rula agentul local din această lecție și ce îți aduce mai mult RAM?
Extinde asistentul local de inginerie într-un recenzor local de documentație pentru un proiect mic ales de tine (folosește unul din folderele de lecții ale acestui depozit, dacă dorești).
Trimiterea ta trebuie să:
Adauge o unealtă find_todos care scanează proiectul pentru comentarii TODO/FIXME și le returnează cu fișier și număr de linie — păstrând aceeași verificare sandbox ca read_file.
Apoi scrie un paragraf scurt despre ce ai muta în cloud și ce ai păstra local pentru acest recenzor și de ce. Ești evaluat pe baza faptului dacă componentele locale sunt conectate corect între ele și dacă raționamentul tău hibrid este solid — nu pe calitatea modelului.
În această lecție ai construit un agent care rulează integral pe propria ta mașină:
Aceasta încheie arcul de implementare: Lecția 16 a scalat agenții în Microsoft Foundry, iar această lecție i-a redus la o singură stație de lucru. Lecția următoare se concentrează pe menținerea securității agenților implementați.
Implementarea agenților scalabili
Declinare a responsabilității: Acest document a fost tradus folosind serviciul de traducere AI Co-op Translator. În timp ce ne străduim pentru acuratețe, vă rugăm să rețineți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa nativă trebuie considerat sursa autorizată. Pentru informații critice, se recomandă traducerea profesională realizată de un om. Nu ne asumăm responsabilitatea pentru eventualele neînțelegeri sau interpretări greșite care decurg din utilizarea acestei traduceri.