![]()
Poprzednia lekcja przeniosła agentów do chmury. Ta zabiera ich na jeden komputer. Pod koniec będziesz mieć działającego asystenta inżynieryjnego, który rozumuje, wywołuje narzędzia, czyta twoje pliki i wyszukuje w dokumentacji — bez ani jednego wywołania inferencji w chmurze.
Dlaczego miałbyś tego chcieć? Trzy powody, które często pojawiają się podczas realnej pracy inżynieryjnej:
Minusem jest to, że zamieniasz model chmurowy klasy frontowej na Mały Model Językowy (SLM) działający na Twoim CPU, GPU lub NPU. Ta lekcja skupia się na budowaniu agentów, którzy są dobrzy w tych ograniczeniach, zamiast udawać, że ich nie ma.
Ta lekcja obejmie:
Po ukończeniu tej lekcji będziesz potrafił:
Ta lekcja zakłada, że ukończyłeś wcześniejsze lekcje i czujesz się swobodnie z:
Potrzebujesz też:
requirements.txt, oraz foundry-local-sdk, openai i chromadb do tej lekcji.Model chmurowy klasy frontowej ma setki miliardów parametrów i za nim stoi centrum danych. SLM ma kilka miliardów parametrów i musi zmieścić się w pamięci RAM laptopa. Ta różnica ustawia jasne oczekiwania.
SLMy dobrze radzą sobie z:
SLMy gorzej radzą sobie z:
Zwycięska strategia dla lokalnych agentów to: niech SLM orkiestruje, a narzędzia niech wykonują ciężką pracę. Model nie musi znać Twojej bazy kodu — musi wiedzieć, kiedy wywołać read_file i search_docs. To trafia dokładnie w mocne strony SLM.
flowchart LR
U[Deweloper] --> A[Lokalny Agent SLM]
A -->|decyduje, które narzędzie| T1[czytaj_plik]
A -->|decyduje, które narzędzie| T2[przeszukaj_dokumenty RAG]
A -->|decyduje, które narzędzie| T3[analizuj_kod]
T1 --> A
T2 --> A
T3 --> A
A --> R[Odpowiedź, całkowicie na urządzeniu]
Microsoft Foundry Local to lekkie środowisko uruchomieniowe, które pobiera, zarządza i udostępnia modele całkowicie na Twoim komputerze. Najważniejszą funkcją dla nas jest udostępnianie HTTP endpointa kompatybilnego z OpenAI — co oznacza, że SDK OpenAI oraz klient OpenAI w Microsoft Agent Framework działają z nim tylko przez zmianę base_url. Wszystko, czego się nauczyłeś o budowaniu agentów, przenosi się bezpośrednio; zmienia się tylko endpoint z chmury na localhost.
Foundry Local automatycznie wybiera najlepszą wersję modelu dla Twojego sprzętu — wersję na CPU, CUDA/GPU lub NPU — więc nie musisz ręcznie optymalizować dla każdej maszyny.
Zainstaluj Foundry Local (zobacz dokumentację dla twojego systemu operacyjnego), następnie potwierdź, że działa:
# Instalacja (przykład; postępuj zgodnie z dokumentacją dla swojej platformy)
winget install Microsoft.FoundryLocal # Windows
# brew install microsoft/foundrylocal/foundrylocal # macOS
# Pobierz i uruchom model Qwen, a następnie rozpocznij lokalną usługę
foundry model run qwen2.5-7b-instruct
foundry service status
Po uruchomieniu serwisu masz lokalny endpoint kompatybilny z OpenAI (zwykle http://localhost:PORT/v1). Notatnik używa foundry-local-sdk do automatycznego wykrywania endpointa, więc nie musisz ręcznie wpisywać portu.
Agent jest agentem tylko wtedy, gdy może wywoływać narzędzia. Wiele SLM-ów potrafi prowadzić chat, ale wytwarza niewiarygodne, źle sformułowane wywołania narzędzi. Modele Qwen są trenowane do wywoływania funkcji i konsekwentnie emitują poprawne struktury wywołań narzędzi — to właśnie zamienia lokalny model chatowy w lokalnego agenta.
Przepływ to standardowa pętla wywoływania narzędzi, którą już znasz, tylko działa lokalnie:
sequenceDiagram
participant U as Użytkownik
participant A as Agent Qwen (lokalny)
participant T as Narzędzie lokalne
U->>A: "Co robi auth.py?"
A->>A: Decyzja: wywołaj read_file
A->>T: read_file("auth.py")
T-->>A: zawartość pliku
A->>A: Analiza zawartości
A-->>U: Wyjaśnienie
Wyszukiwanie w dokumentacji to miejsce, gdzie lokalni agenci uzasadniają swoją obecność. Zamiast liczyć, że SLM zapamiętał dokumentację twojego frameworka, wkładasz te dokumenty do lokalnej bazy wektorowej i pozwalasz agentowi pobierać odpowiednie fragmenty na żądanie.
Używamy Chroma, osadzonego magazynu wektorów działającego w procesie, bez potrzeby serwera do zarządzania. Cały pipeline jest lokalny: lokalny model osadzający → lokalne wektory → lokalne wyszukiwanie → lokalny SLM.
flowchart TB
D[Twoje dokumenty / kod] --> E[Lokalny model osadzania]
E --> V[(Chroma vector DB - na dysku)]
Q[Zapytanie agenta] --> QE[Osadź zapytanie lokalnie]
QE --> V
V -->|najlepsze k fragmentów| A[Agent Qwen]
A --> Ans[Odpowiedź oparta na faktach]
To ten sam wzorzec Agentic RAG z Lekcji 5 — jedyna zmiana jest taka, że każdy komponent działa na Twoim komputerze.
MCP to transport, nie usługa chmurowa. Serwer MCP może działać jako lokalny proces na stdio, udostępniając narzędzia agentowi przez standardowy protokół. Pozwala to na ponowne użycie rozwijającego się ekosystemu serwerów MCP — dostęp do systemu plików, operacje git, zapytania do bazy danych — całkowicie offline.
Pozycja bezpieczeństwa różni się od chmury, ale nie jest jej brakiem: lokalny serwer MCP działa z uprawnieniami Twojego użytkownika, więc ogranicz co może dotykać (katalog projektu, nie cały katalog domowy) i traktuj jego wyjścia jako dane do weryfikacji.
Lokalność pierwsza nie oznacza tylko lokalności. Dojrzałe systemy kierują ruch wg wrażliwości i trudności:
| Sytuacja | Gdzie działa |
|---|---|
| Wrażliwy kod/dane lub tryb offline | Lokalny SLM |
| Proste, ograniczone zadanie | Lokalny SLM (tani, szybki) |
| Trudne, wieloetapowe rozumowanie na danych niewrażliwych | Model chmurowy |
| Wszystko podczas awarii | Lokalny SLM (łagodne obniżenie jakości) |
To odzwierciedla koncepcję kierowania modelem z Lekcji 16 — z tą różnicą, że jednym z „modeli” jest teraz Twój własny komputer. Solidny projekt przewiduje fallback do lokalnego, gdy chmura jest niedostępna, więc agent obniża jakość, zamiast całkowicie zawieść.
flowchart LR
Q[Żądanie] --> S{Wrażliwe lub offline?}
S -->|tak| L[Lokalny SLM]
S -->|nie| C{Wymaga głębokiego rozumowania?}
C -->|nie| L
C -->|tak| Cloud[Model w chmurze]
L --> Out[Odpowiedź]
Cloud --> Out
Otwórz code_samples/17-local-agent-foundry-local.ipynb i przejdź przez niego krok po kroku. Zbudujesz lokalnego asystenta inżynieryjnego działającego całkowicie na Twojej stacji roboczej, który potrafi:
Ani razu nie korzysta z inferencji w chmurze.
Asystent łączy się z Foundry Local przez endpoint kompatybilny z OpenAI, więc kod agenta wygląda niemal identycznie jak w lekcjach chmurowych — zmienia się tylko klient:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# Foundry Local wykrywa/pobiera model i udostępnia nam lokalny punkt końcowy.
manager = FoundryLocalManager(\"qwen2.5-7b-instruct\")
client = OpenAI(base_url=manager.endpoint, api_key=manager.api_key) # api_key jest lokalnym symbolem zastępczym
Narzędzia to zwykłe funkcje Pythona ograniczone do katalogu projektu:
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\")
Zwróć uwagę na sprawdzenie sandboxa — nawet lokalnie narzędzie czytające dowolne ścieżki stanowi ryzyko. Notatnik utrzymuje każde narzędzie ograniczone do jednego katalogu projektu.
Sprawdź swoje zrozumienie przed przejściem do zadania.
1. Podaj dwa konkretne powody, by uruchamiać agenta lokalnie, a nie w chmurze.
2. Jaki jest zalecany podział pracy między SLM a jego narzędziami w lokalnym agencie i dlaczego?
3. Co umożliwia ponowne użycie kodu agenta chmurowego z Foundry Local?
4. Dlaczego używamy konkretnego modelu Qwen do wywoływania funkcji, a nie dowolnego SLM?
5. Które elementy pipeline’u lokalnego RAG działają na komputerze?
6. Lokalny serwer MCP działa na Twoim komputerze. Czy to automatycznie oznacza, że jest bezpieczny? Jaką ostrożność nadal powinieneś zachować?
7. Opisz sensowną hybrydową regułę kierowania (routing), która uwzględnia model lokalny.
8. Jaka jest realistyczna minimalna ilość RAM do uruchomienia lokalnego agenta z tej lekcji, a co daje więcej RAM?
Rozszerz lokalnego asystenta inżynieryjnego do lokalnego recenzenta dokumentacji dla małego projektu według własnego wyboru (możesz użyć jednego z folderów lekcji z tego repozytorium).
Twoje zgłoszenie powinno:
Dodać narzędzie find_todos, które skanuje projekt pod kątem komentarzy TODO/FIXME i zwraca je wraz z nazwą pliku i numerem linii — zachowując to samo sprawdzenie sandbox jak read_file.
Następnie napisz krótki akapit o tym, co przeniósłbyś do chmury, a co pozostawił lokalnie dla tego recenzenta i dlaczego. Oceniane jest, czy lokalne komponenty są poprawnie połączone i czy twoje hybrydowe rozumowanie jest prawidłowe — a nie jakość modelu.
W tej lekcji zbudowałeś agenta, który działa całkowicie na twoim własnym komputerze:
To kończy łuk wdrożeniowy: Lekcja 16 rozszerzyła agentów do Microsoft Foundry, a ta lekcja zmniejszyła ich skalę do pojedynczej stacji roboczej. Następna lekcja dotyczy utrzymania bezpieczeństwa wdrożonych agentów.
Zastrzeżenie: Niniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI Co-op Translator. Choć dążymy do dokładności, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w jego języku źródłowym należy uznawać za autorytatywne źródło. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.