![]()
В предыдущем уроке агенты масштабировались в облако. В этом — они опускаются на одну машину. К концу у вас будет рабочий инженерный ассистент, который размышляет, вызывает инструменты, читает ваши файлы и ищет в вашей документации — без единого обращения к облачному выводу.
Зачем это нужно? Три причины, которые постоянно всплывают в реальной инженерной работе:
Но вы меняете передовую облачную модель на Малую Языковую Модель (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[прочитать_файл]
A -->|решает, какой инструмент| T2[поиск_документов RAG]
A -->|решает, какой инструмент| T3[анализ_кода]
T1 --> A
T2 --> A
T3 --> A
A --> R[Ответ, полностью на устройстве]
Microsoft Foundry Local — это лёгкая среда выполнения, которая загружает, управляет и обслуживает модели полностью на вашем устройстве. Самая важная для нас функция — это открытие OpenAI-совместимого HTTP эндпоинта — потому OpenAI SDK и клиент 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\")
Обратите внимание на проверку песочницы — даже локально инструмент, который читает произвольные пути, является риском. Ноутбук ограничивает каждый инструмент только одним корнем проекта.
Проверьте понимание перед выполнением задания.
1. Назовите две конкретные причины запускать агента локально, а не в облаке.
2. Какое рекомендуемое разделение обязанностей между SLM и её инструментами в локальном агенте и почему?
3. Что делает возможным повторное использование облачного кода агента с Foundry Local?
4. Почему именно модель вызова функций Qwen используется вместо любой другой SLM?
5. Какие компоненты локального RAG-конвейера работают на машине?
6. Локальный MCP-сервер работает на вашей машине. Значит ли это, что он автоматически безопасен? Какие меры предосторожности всё же нужно соблюдать?
7. Опишите разумное правило гибридной маршрутизации, включающее локальную модель.
8. Какое реалистичное минимальное количество RAM для запуска локального агента из этого урока и что дает больше RAM?
Расширьте локального инженерного ассистента, создав локального рецензента документации для небольшого проекта по вашему выбору (можете использовать одну из папок уроков этого репозитория).
Ваша работа должна:
Добавить инструмент find_todos, который сканирует проект на наличие комментариев TODO/FIXME и возвращает их с указанием файла и номера строки — сохраняя ту же проверку песочницы, что и в read_file.
Затем напишите короткий абзац о том, что бы вы переместили в облако, а что оставили локально для этого рецензента и почему. Ваша оценка будет зависеть от того, насколько правильно связаны локальные компоненты и насколько обоснована ваша гибридная логика — а не от качества модели.
В этом уроке вы создали агента, который полностью работает на вашем собственном компьютере:
Это завершает цикл деплоя: урок 16 масштабировал агентов в Microsoft Foundry, а этот урок масштабирует их вниз на одну рабочую станцию. Следующий урок посвящён обеспечению безопасности развернутых агентов.
Обеспечение безопасности AI-агентов
Отказ от ответственности: Этот документ был переведен с использованием сервиса машинного перевода Co-op Translator. Несмотря на наши усилия по обеспечению точности, имейте в виду, что автоматический перевод может содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется обратиться к профессиональному человеческому переводу. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования этого перевода.