m365-agents-py
m365-agents-py — официальный навык Microsoft для Microsoft 365 Agents SDK for Python. Его область — multichannel-агенты для Microsoft 365, Teams и Copilot Studio с aiohttp-хостингом, маршрутизацией AgentApplication, потоковыми ответами и MSAL-аутентификацией. Перед реализацией источник требует сверить свежие сигнатуры AgentApplication, start_agent_process и параметров authentication через microsoft-docs MCP, а версии пакетов — с PyPI. Это важная часть workflow: исходный пример показывает API-паттерны, но не заменяет проверку текущей версии SDK. В начале нужно учитывать breaking change импорта: актуальная форма использует префикс microsoft_agents с подчёркиванием, а не старый microsoft.agents. Базовая установка состоит из microsoft-agents-hosting-core, microsoft-agents-hosting-aiohttp, microsoft-agents-activity, microsoft-agents-authentication-msal и microsoft-agents-copilotstudio-client; для показанных примеров также нужны python-dotenv и aiohttp. Такой набор соответствует задачам хостинга, activity-моделям, авторизации и прямому клиенту Copilot Studio. Пакеты не следует считать установленными только потому, что они упомянуты в skill: их версии и наличие нужно проверить в конкретном окружении. Конфигурация загружается из переменных окружения. Для service connection показаны client ID, client secret и tenant ID; для автоматического sign-in может использоваться имя Graph OAuth connection. Для Azure OpenAI streaming нужны endpoint и API version, а для прямого Copilot Studio client — environment ID, schema name, tenant ID и app ID. Секреты должны оставаться в окружении, а не попадать в исходный код. Навык подчёркивает async-first подход: обработчики объявляются через async def, сетевые ресурсы и credentials используются через async with, а для MSAL-auth применяется MsalConnectionManager. Основной сценарий строится вокруг aiohttp Application и AgentApplication. Сначала загружается конфигурация через load_configuration_from_env, создаются storage, connection manager, authorization и adapter, затем регистрируется AgentApplication и запускается сервер. В маршрутизации можно объявить обработчик добавления участников, message-handler по regex, простой строковый маршрут вроде /status, защищённый auth_handlers маршрут /me, invoke activity, fallback для message и error handler. Авторизованный обработчик получает token через AGENT_APP.auth.get_token и может использовать его для Microsoft Graph. Такое разделение позволяет явно отличить обычные сообщения, invoke-события, OAuth-маршруты и обработку ошибок, а не отправлять весь трафик в один условный обработчик. Для защищённого приложения источник отдельно рекомендует jwt_authorization_middleware в aiohttp middlewares и явные auth handlers на декораторах сообщений. Для Graph показан асинхронный запрос с aiohttp.ClientSession и Bearer token; ответ обрабатывается только после проверки HTTP 200. Для прямой работы с Copilot Studio описаны ConnectionSettings, CopilotClient и MSAL PublicClientApplication: сначала проверяется локальный token cache и silent acquisition, затем при необходимости запускается interactive flow, после чего клиент начинает разговор и задаёт вопрос. CopilotClient не реализует context manager protocol, поэтому его lifecycle нужно учитывать отдельно. Потоковые ответы с Azure OpenAI подключаются через AsyncAzureOpenAI и AAD token provider на базе DefaultAzureCredential; источник предпочитает этот вариант API key. В примере один клиент живёт столько же, сколько приложение, streaming_response включает feedback loop и generated-by-AI label, затем chunks помещаются в ответ. Завершение потока обязательно вызывается в finally через end_stream(), чтобы ошибка во время генерации не оставила незакрытый streaming response. Для production также нужно заменить MemoryStorage на BlobStorage или CosmosDB, использовать context managers для клиентов и async credentials и не хранить secrets в коде. Ограничения навыка следуют из исходника. Он задаёт каркас SDK и примеры маршрутизации, auth, streaming и Copilot Studio, но не выбирает за проект tenant, environment, package versions, Graph permissions или бизнес-логику агента. Для старых импортов и сомнительных сигнатур требуется сверка с Microsoft docs MCP и PyPI. MemoryStorage подходит только для разработки; production должен иметь подходящее постоянное хранилище и проверенную конфигурацию. Поэтому перед запуском нужно проверить актуальные API, окружение, middleware, права и lifecycle ресурсов, а не считать пример готовым deployment без дополнительных тестов. Практические сценарии включают создание агента для Teams и Microsoft 365, обработку сообщений по командам и regex, OAuth-защищённые обращения к Graph, потоковую генерацию через Azure OpenAI и подключение Copilot Studio напрямую. Результатом навыка является проверяемая структура Python-приложения с явными границами аутентификации и асинхронного lifecycle; он не обещает автоматически зарегистрировать приложение в Azure, выдать credentials или подтвердить работоспособность конкретного tenant без запуска и проверки в этом tenant.
Для чего подходит
- Создание агентов Microsoft 365 на Python
- Интеграция с Teams и Copilot Studio
- Настройка Azure SDK для agent workflows
Установка
Сначала прочитайте SKILL.md и scripts в исходном репозитории. Затем выполните команду в каталоге проекта:
npx skills add https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-python/skills/m365-agents-py