![]()
У попередньому уроці агенти масштабувалися вгору у хмару. Цей урок опускає їх вниз на одну машину. До кінця ви матимете працюючого інженерного асистента, який міркує, викликає інструменти, читає ваші файли та шукає в документації — без жодного звернення до хмари.
Чому це може бути корисним? Три причини, які постійно виникають у реальній інженерній роботі:
Віддаєте перевагу тому, щоб обміняти хмарну модель передового рівня на Small Language Model (SLM), яка працює на вашому CPU, GPU або NPU. Цей урок присвячений побудові агентів, які добре працюють у межах цього обмеження, замість того щоб ігнорувати його.
У цьому уроці розглянемо:
Після завершення уроку ви знатимете, як:
Цей урок передбачає, що ви пройшли попередні уроки і впевнено користуєтесь:
Також вам знадобляться:
requirements.txt, а також foundry-local-sdk, openai і chromadb для цього уроку.Хмарна модель передового рівня має сотні мільярдів параметрів і великий дата-центр. SLM має кілька мільярдів параметрів і має поміщатися в оперативну пам’ять вашого ноутбука. Ця різниця встановлює чіткі очікування.
SLM добре справляються з:
SLM слабші в:
Тож стратегія успіху для локальних агентів: дозвольте SLM керувати, а інструментам виконувати важку роботу. Моделі не потрібно знати ваш код — їй потрібно знати, коли викликати read_file і search_docs. Це саме те, у чому сильні SLM.
flowchart LR
U[Розробник] --> A[Локальний агент SLM]
A -->|вирішує, який інструмент| T1[read_file]
A -->|вирішує, який інструмент| T2[search_docs RAG]
A -->|вирішує, який інструмент| T3[analyze_code]
T1 --> A
T2 --> A
T3 --> A
A --> R[Відповідь, повністю на пристрої]
Microsoft Foundry Local — легке середовище виконання, що завантажує, управляє та обслуговує моделі повністю на вашій машині. Найважливіша для нас особливість — це OpenAI-сумісний HTTP кінцевий пункт — тобто SDK OpenAI і OpenAI клієнт Microsoft Agent Framework працюватимуть з ним, змінивши лише base_url. Все, що ви вивчили про побудову агентів, переноситься напряму; змінюється лише пункт доступу — з хмари на localhost.
Foundry Local також автоматично підбирає найкращу збірку моделі для вашого обладнання — для CPU, CUDA/GPU або NPU — тож вам не потрібно оптимізувати вручну під кожен комп’ютер.
Встановіть Foundry Local (див. документацію для вашої ОС), а потім підтвердьте, що він працює:
# Встановіть (наприклад; дотримуйтесь документації для вашої платформи)
winget install Microsoft.FoundryLocal # Windows
# brew install microsoft/foundrylocal/foundrylocal # macOS
# Завантажте та запустіть модель Qwen, потім розпочніть локальний сервіс
foundry model run qwen2.5-7b-instruct
foundry service status
Після запуску сервісу у вас буде локальний, OpenAI-сумісний кінцевий пункт (зазвичай http://localhost:PORT/v1). Ноутбук використовує foundry-local-sdk для автоматичного пошуку кінцевого пункту, тож не потрібно жорстко прописувати порт.
Агент — це агент лише якщо він може викликати інструменти. Багато SLM можуть спілкуватися, але виробляють ненадійні та неправильно сформовані виклики інструментів. Моделі Qwen навчили надійно створювати структури викликів інструментів — саме це перетворює локальну чат-модель у локального агента.
Потік стандартний, ви його вже знаєте — виклик інструментів у циклі, тільки тепер локально:
sequenceDiagram
participant U as Користувач
participant A as Агент Qwen (локальний)
participant T as Локальний інструмент
U->>A: "Що робить auth.py?"
A->>A: Вирішити: викликати read_file
A->>T: read_file("auth.py")
T-->>A: вміст файлу
A->>A: Аналізувати вміст
A-->>U: Пояснення
Пошук у документації — це те, де локальні агенти виправдовують себе. Замість надії, що SLM запам’ятала документацію вашого фреймворку, ви вбудовуєте ці документи у локальну векторну базу і даєте агенту повертати відповідні фрагменти за потребою.
Ми використовуємо Chroma — вбудоване сховище векторів, що працює в процесі без окремого сервера. Конвеєр повністю локальний: локальна модель вбудовування → локальні вектори → локальний пошук → локальний SLM.
flowchart TB
D[Ваші документи / код] --> E[Локальна модель вбудовування]
E --> V[(Векторна БД Chroma - на диску)]
Q[Запит агента] --> QE[Вбудувати запит локально]
QE --> V
V -->|топ-k фрагментів| A[Агент Qwen]
A --> Ans[Обґрунтована відповідь]
Це той самий патерн Agentic RAG з уроку 5 — єдина зміна в тому, що кожен компонент працює на вашій машині.
MCP — це транспорт, а не хмарний сервіс. MCP сервер може запускатися локально як процес на stdio, виставляючи інструменти агенту через стандартний протокол. Це дає можливість використовувати численні MCP сервери — доступ до файлової системи, git-операції, запити до бази даних — повністю офлайн.
Рівень безпеки відрізняється від хмари, але не відсутній: локальний MCP сервер працює з правами вашого користувача, тож обмежуйте, до чого він матиме доступ (папка проєкту, а не весь домашній каталог) і валідуйте його вивід як вхідні дані.
Локальний підхід не означає виключно локальний. Дорослі системи направляють за чутливістю і складністю:
| Ситуація | Де працює |
|---|---|
| Чутливий код / дані, або офлайн | Локальний SLM |
| Просте, обмежене завдання | Локальний SLM (дешево, швидко) |
| Складні багатоступеневі міркування над нечутливими даними | Хмарна модель |
| Усе під час відключення | Локальний SLM (плавна деградація) |
Це відображає ідею маршрутизації моделей з уроку 16 — тільки тепер одна з “моделей” — ваша власна машина. Надійний дизайн переходить на локальний режим, коли хмара недоступна, тож якість агента падає поступово, а не повністю відмовляється.
flowchart LR
Q[Запит] --> S{Чутливо чи офлайн?}
S -->|так| L[Локальний SLM]
S -->|ні| C{Потрібне глибоке мислення?}
C -->|ні| L
C -->|так| Cloud[Хмарна модель]
L --> Out[Відповідь]
Cloud --> Out
Відкрийте code_samples/17-local-agent-foundry-local.ipynb і виконайте його. Ви створите локального інженерного асистента, який повністю працює на вашій робочій станції і може:
Жодних звернень до хмари не використовується.
Асистент підключається до Foundry Local через OpenAI-сумісний кінцевий пункт, тому код агента майже ідентичний тому, що у хмарних уроках — змінюється лише клієнт:
from foundry_local import FoundryLocalManager
from openai import OpenAI
# Foundry Local виявляє/завантажує модель і надає нам локальну точку доступу.
manager = FoundryLocalManager(\"qwen2.5-7b-instruct\")
client = OpenAI(base_url=manager.endpoint, api_key=manager.api_key) # api_key є локальним заповнювачем
Інструменти — це звичайні функції Python, обмежені папкою проєкту:
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\")
Зверніть увагу на перевірку sandbox — навіть локально інструмент, що читає будь-які шляхи, може бути ризиком. Ноутбук тримає кожен інструмент обмеженим кореневою папкою проєкту.
Перевірте своє розуміння перед переходом до завдання.
1. Наведіть дві конкретні причини запускати агента локально, а не у хмарі.
2. Який рекомендований розподіл ролей між SLM і інструментами в локальному агенті і чому?
3. Що робить можливою повторне використання коду хмарного агента з Foundry Local?
4. Чому ми конкретно використовуємо модель виклику функцій Qwen замість будь-якої іншої SLM?
5. Які компоненти локального конвеєра RAG працюють на машині?
6. Локальний MCP сервер працює на вашій машині. Чи робить це його автоматично безпечним? Які заходи обережності варто дотримуватися?
7. Опишіть розумне гібридне правило маршрутизації, що включає локальну модель.
8. Який реалістичний мінімум ОЗП для запуску локального агента в цьому уроці і що дає більше ОЗП?
Розширте локального інженерного асистента у локального рев’юера документації для невеликого проєкту за вашим вибором (можете використати одну з папок з уроками цього репозиторію).
Ваше рішення має:
Додати інструмент find_todos, що сканує проєкт на наявність коментарів TODO/FIXME і повертає їх з іменами файлів і номерами рядків — з такою самою перевіркою sandbox, як і в read_file.
Потім напишіть короткий абзац про що ви б перенесли в хмару, а що залишили б локальним для цього рецензента і чому. Вас оцінюють за правильність з’єднання локальних компонентів і за обґрунтованість гібридного мислення — але не за якість моделі.
У цьому уроці ви побудували агента, який працює повністю на вашому комп’ютері:
Це завершує арку розгортання: урок 16 масштабував агентів у Microsoft Foundry, а цей урок масштабував їх на одну робочу станцію. Наступний урок присвячений забезпеченню безпеки розгорнутих агентів.
Розгортання масштабованих агентів
Забезпечення безпеки AI агентів
Відмова від відповідальності: Цей документ було перекладено за допомогою сервісу штучного інтелекту для перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ рідною мовою слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.