![]()
Ang nakaraang aralin ay nag-scale ng mga agent pataas sa ulap. Ang araling ito ay nagdadala sa kanila pababa sa isang solong makina. Sa pagtatapos, magkakaroon ka ng gumaganang engineering assistant na nagrereason, tumatawag ng mga tool, nagbabasa ng iyong mga file, at naghahanap sa iyong dokumentasyon — nang walang kahit isang ulap na inference call.
Bakit mo iyon gusto? Tatlong dahilan na madalas lumitaw sa tunay na gawaing engineering:
Ang kapalit ay ang pagpapalitan ng isang frontier cloud model para sa isang Small Language Model (SLM) na tumatakbo sa iyong CPU, GPU, o NPU. Ang araling ito ay tungkol sa paggawa ng mga agent na magaling sa ilalim ng ganitong limitasyon sa halip na magpanggap na wala ang limitasyong iyon.
Tatalakayin ng araling ito ang mga sumusunod:
Pagkatapos tapusin ang araling ito, malalaman mo kung paano:
Ipinapalagay ng araling ito na natapos mo na ang mga naunang aralin at komportable ka sa:
Kailangan mo rin ng:
requirements.txt, pati ang foundry-local-sdk, openai, at chromadb para sa araling ito.Ang isang frontier cloud model ay may daan-daang bilyong mga parameter at isang data centre sa likod nito. Ang isang SLM ay may ilang bilyong parameter at kailangang magkasya sa RAM ng iyong laptop. Ang pagkakaibang ito ay nagtatakda ng malinaw na inaasahan.
Magaling ang mga SLM sa:
Mahina ang mga SLM sa:
Kaya ang tamang estratehiya para sa mga lokal na agent ay: hayaan ang SLM ang mag-orchestrate, at hayaang gawin ng mga tool ang mabibigat na gawain. Hindi kailangang alam ng modelo ang iyong codebase — kailangan lamang nitong malaman kung kailan tatawagin ang read_file at search_docs. Ito ay direktang naaayon sa lakas ng SLM.
flowchart LR
U[Developer] --> A[Lokal na Ahente ng SLM]
A -->|nagdedesisyon kung aling kasangkapan| T1[basahin_file]
A -->|nagdedesisyon kung aling kasangkapan| T2[maghanap_dok RAG]
A -->|nagdedesisyon kung aling kasangkapan| T3[suriin_code]
T1 --> A
T2 --> A
T3 --> A
A --> R[Sagot, buong-buo sa aparato]
Microsoft Foundry Local ay isang magaan na runtime na nagda-download, namamahala, at nagseserbisyo ng mga modelo nang buo sa iyong makina. Ang pinakamahalagang tampok para sa atin ay naipapakita nito ang isang OpenAI-compatible HTTP endpoint — na nangangahulugan na ang OpenAI SDK at Microsoft Agent Framework’s OpenAI client ay gumagana dito sa pamamagitan ng iisang pagbabago sa base_url. Lahat ng iyong natutunan tungkol sa paggawa ng mga agent ay direktang maililipat; ang endpoint lang ang lumilipat mula sa ulap papuntang localhost.
Pinipili rin ng Foundry Local ang pinakamagandang build ng modelo para sa iyong hardware nang awtomatiko — CPU build, CUDA/GPU build, o NPU build — kaya hindi mo kailangang mano-manong i-optimize para sa bawat makina.
I-install ang Foundry Local (tingnan ang dokumentasyon para sa iyong OS), pagkatapos kumpirmahin na gumagana ito:
# I-install (halimbawa; sundin ang mga dokumento para sa iyong plataporma)
winget install Microsoft.FoundryLocal # Windows
# brew install microsoft/foundrylocal/foundrylocal # macOS
# I-download at patakbuhin ang isang Qwen na modelo, pagkatapos simulan ang lokal na serbisyo
foundry model run qwen2.5-7b-instruct
foundry service status
Kapag tumatakbo na ang serbisyo, mayroon kang lokal na OpenAI-compatible endpoint (karaniwan ay http://localhost:PORT/v1). Ginagamit ng notebook ang foundry-local-sdk para awtomatikong mahanap ang endpoint, kaya hindi mo na kailangang i-hardcode ang port.
Isa lang ang agent kung kaya nitong tumawag ng mga tool. Maraming SLM ang puwedeng mag-chat ngunit naglalabas ng mga hindi maaasahan o maling format na tool calls. Ang mga Qwen na modelo ay sinanay para sa function calling at palagiang naglalabas ng maayos na mga tool-call structure — na siyang nagpapa–local chat model maging lokal na agent.
Ang daloy ay ang karaniwang tool-calling loop na alam mo na, pero tumatakbo sa device:
sequenceDiagram
participant U as User
participant A as Ahente ng Qwen (lokal)
participant T as Lokal na Kasangkapan
U->>A: "Ano ang ginagawa ng auth.py?"
A->>A: Magpasya: tawagan ang read_file
A->>T: read_file("auth.py")
T-->>A: nilalaman ng file
A->>A: Mag-isip gamit ang nilalaman
A-->>U: Paliwanag
Ang paghahanap sa dokumentasyon ang pinanggagalingan ng halaga ng mga lokal na agent. Sa halip na umaasa na natandaan ng SLM ang dokumentasyon ng iyong framework, ini-embed mo ang mga dokumentong iyon sa isang lokal na vector database at pinapayagan ang agent na kunin ang mga kaukulang bahagi kapag kailangan.
Ginagamit natin ang Chroma, isang embedded vector store na tumatakbo nang sama-sama sa proseso nang walang server na kailangang pamahalaan. Ang pipeline ay ganap na lokal: lokal na embedding model → lokal na vectors → lokal na retrieval → lokal na SLM.
flowchart TB
D[Ang iyong mga dokumento / code] --> E[Lokal na embedding na modelo]
E --> V[(Chroma vector DB - nasa disk)]
Q[Query ng ahente] --> QE[I-embed ang query nang lokal]
QE --> V
V -->|mga nangungunang-k chunks| A[Ahenteng Qwen]
A --> Ans[Naka-ground na sagot]
Ito ang parehong Agentic RAG na pattern mula sa Aralin 5 — ang nag-iisang pagbabago ay lahat ng bahagi ay tumatakbo sa iyong makina.
Ang MCP ay isang transport, hindi isang cloud service. Ang isang MCP server ay puwedeng tumakbo bilang lokal na proseso sa stdio, na nag-eexpose ng mga tool sa iyong agent sa pamamagitan ng standard na protocol. Pinapayagan kang muling gamitin ang lumalawak na ecosystem ng mga MCP server — filesystem access, git operations, database queries — nang ganap na offline.
Iba ang security posture dito kumpara sa ulap, ngunit hindi ito nawawala: ang lokal na MCP server ay tumatakbo gamit ang permiso ng iyong user, kaya dapat kontrolin mo kung ano lang ang kaya nitong pasukin (halimbawa, isang project directory lang, hindi ang buong home folder mo) at i-validate ang outputs nito bago gamitin.
Ang local-first ay hindi nangangahulugang local-only. Ang mga matured na sistema ay nagro-route base sa sensitivity at hirap:
| Sitwasyon | Saan ito tumatakbo |
|---|---|
| Sensitibong code / data, o offline | Lokal na SLM |
| Simpleng hangganang gawain | Lokal na SLM (murang, mabilis) |
| Mahirap na multi-hop reasoning sa hindi sensitibong data | Cloud model |
| Lahat ng bagay, habang may outage | Lokal na SLM (maayos na pagbagsak) |
Ito ay kahalintulad ng ideya ng model routing mula sa Aralin 16 — pero isa sa mga “modelo” ay ang sarili mong makina. Ang matibay na disenyo ay bumabalik sa lokal kapag hindi available ang ulap, kaya ang agent ay bumabagsak nang maayos sa kalidad sa halip na total na pumalya.
flowchart LR
Q[Kahilingan] --> S{Sensitibo o offline?}
S -->|oo| L[Lokal na SLM]
S -->|hindi| C{Kailangan ba ng malalim na pag-iisip?}
C -->|hindi| L
C -->|oo| Cloud[Modelong Cloud]
L --> Out[Tugon]
Cloud --> Out
Buksan ang code_samples/17-local-agent-foundry-local.ipynb at gawin ito. Gagawa ka ng isang lokal na engineering assistant na tumatakbo nang buo sa iyong workstation at puwedeng:
Walang ulap na inference ang ginagamit sa kahit anong punto.
Kumokonekta ang assistant sa Foundry Local sa pamamagitan ng OpenAI-compatible endpoint, kaya halos pareho lang ang code ng agent sa mga aralin sa ulap — ang nagbabago lang ay ang client:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# Natuklasan/nida-download ng Foundry Local ang modelo at nagbibigay sa atin ng lokal na endpoint.
manager = FoundryLocalManager(\"qwen2.5-7b-instruct\")
client = OpenAI(base_url=manager.endpoint, api_key=manager.api_key) # Ang api_key ay isang lokal na placeholder
Ang mga tool ay mga ordinaryong Python function na naka-scope sa isang project directory:
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\")
Pansinin ang sandbox check — kahit sa lokal, ang tool na nagbabasa ng mga arbitrary path ay isang panganib. Pinananatili ng notebook na naka-scope ang bawat tool sa iisang project root.
Subukan ang iyong pag-unawa bago lumipat sa takdang-aralin.
1. Magbigay ng dalawang kongkretong dahilan kung bakit patakbuhin ang agent nang lokal kaysa sa ulap.
2. Ano ang inirerekomendang pamamahagi ng gawain sa pagitan ng SLM at mga tool nito sa isang lokal na agent, at bakit?
3. Ano ang nagpapahintulot na magamit muli ang cloud agent code gamit ang Foundry Local?
4. Bakit partikular na ginagamit ang Qwen function-calling model sa halip na alinmang SLM?
5. Sa lokal na RAG pipeline, alin sa mga bahagi ang tumatakbo sa makina?
6. Ang isang lokal na MCP server ay tumatakbo sa iyong makina. Ibig sabihin ba nito na awtomatikong ligtas ito? Anong pag-iingat ang dapat mong gawin?
7. Ilahad ang isang makatwirang hybrid routing rule na kasama ang lokal na modelo.
8. Ano ang realistic na minimum na RAM para patakbuhin ang lokal na agent sa araling ito, at ano ang nakukuha mo kapag mas marami ang RAM?
Palawakin ang lokal na engineering assistant sa isang lokal na tagasuri ng dokumentasyon para sa isang maliit na proyekto na pipiliin mo (maaaring gamitin ang isa sa mga lesson folder ng repo kung nais mo).
Ang iyong isusumite ay dapat:
Magdagdag ng find_todos tool na nag-scan sa proyekto para sa mga TODO/FIXME na comment at ibalik ang mga ito kasama ang file at line number — panatilihin ang parehong sandbox check gaya ng sa read_file.
Pagkatapos ay sumulat ng isang maikling talata tungkol sa ano ang iyong ililipat sa cloud at ano ang iyong panatilihin lokal para sa tagasuri na ito, at bakit. Ikaw ay susuriin kung ang mga lokal na bahagi ay tama ang pagkakakonekta at kung ang iyong hybrid na pangangatwiran ay matibay — hindi sa kalidad ng modelo.
Sa araling ito nagtayo ka ng isang ahente na tumatakbo nang ganap sa iyong sariling makina:
Naitapos nito ang deployment arc: Ang Aralin 16 ay nagpalawak ng mga ahente papunta sa Microsoft Foundry, at ang araling ito ay nagpaliit sa kanila patungo sa isang workstation. Ang susunod na aralin ay tumutok sa pagpapanatiling ligtas ang mga deployed agents.
Pagtatanggi: Ang dokumentong ito ay isinalin gamit ang serbisyo ng AI translation na Co-op Translator. Bagama’t nagsusumikap kami para sa katumpakan, pakatandaan na ang awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na pangunahing sanggunian. Para sa mahahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang maling pagkakaintindi o maling interpretasyon na nagmula sa paggamit ng pagsasaling ito.