![]()
Попередній урок масштабував агентів у хмару. Цей переносить їх на одну машину. До кінця ви матимете робочого інженерного помічника, який робить висновки, виконує виклики інструментів, читає ваші файли та шукає у вашій документації — без жодного хмарного виклику inference.
Чому б ви цього хотіли? Три причини, які постійно виникають у реальній інженерній роботі:
Умовою є те, що ви міняєте передовий хмарний модель на незначну мовну модель (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 endpoint — отже OpenAI SDK і OpenAI клієнт Microsoft Agent Framework працюють з ним, змінивши лише base_url. Усе, що ви вивчили про створення агентів, залишається таким же; лише endpoint переноситься з хмари на 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-сумісний endpoint (зазвичай http://localhost:PORT/v1). Ноутбук використовує foundry-local-sdk для автоматичного виявлення endpoint, тож вам не доводиться жорстко прописувати порт.
Агент — це агент лише якщо він може викликати інструменти. Багато 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, вбудований векторний сховище, що працює в процесі, без сервера для керування. Конвеєр повністю локальний: локальна модель для embedding → локальні вектори → локальний пошук → локальний 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 і проробіть його. Ви створите локального інженерного помічника, який працює цілком на вашій робочій станції та може:
На жодному етапі не використовується хмарний inference.
Помічник підключається до Foundry Local через OpenAI-сумісний endpoint, тож код агента виглядає майже ідентично до уроків у хмарі — лише змінюється клієнт:
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. Який реалистичний мінімум оперативної пам’яті для запуску локального агента в цьому уроці, і що дає більше RAM?
Розширте локального інженерного помічника до локального рев’юера документації для невеликого проєкту на ваш вибір (можете використати будь-яку з папок уроків цього репозиторію).
Ваш проєкт має:
Додати інструмент find_todos, який сканує проєкт на предмет коментарів TODO/FIXME і повертає їх з файлами і номерами рядків — з тією ж перевіркою sandbox, що й у read_file.
Потім напишіть короткий абзац про те, що б ви перенесли в хмару, а що залишили локально для цього рецензента, і чому. Ваша оцінка залежить від того, наскільки правильно підключено локальні компоненти та наскільки обґрунтоване ваше гібридне мислення — а не від якості моделі.
У цьому уроці ви створили агента, який працює повністю на вашій власній машині:
Це завершує арку розгортання: Урок 16 масштабував агентів у Microsoft Foundry, а цей урок зменшив їх до одного робочого столу. Наступний урок присвячено збереженню безпеки розгорнутих агентів.
Відмова від відповідальності: Цей документ було перекладено за допомогою сервісу штучного інтелекту для перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ рідною мовою слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.