
关于
Microsoft 365 Agents Python SDK。使用 aiohttp 托管、AgentApplication 路由、流式响应和基于 MSAL 的认证,为 Teams/M365/Copilot Studio 构建多渠道代理。
name: m365-agents-py description: Microsoft 365 Agents SDK for Python。为 Teams/M365/Copilot Studio 构建多渠道代理,支持 aiohttp 托管、AgentApplication 路由、流式响应和基于 MSAL 的认证。 risk: unknown source: community date_added: '2026-02-27'
Microsoft 365 Agents SDK (Python)
使用 Microsoft Agents SDK 为 Microsoft 365、Teams 和 Copilot Studio 构建企业级代理,支持 aiohttp 托管、AgentApplication 路由、流式响应和基于 MSAL 的认证。
实施前准备
- 使用 microsoft-docs MCP 验证 AgentApplication、start_agent_process 和认证选项的最新 API 签名。
- 在 PyPI 上确认你计划使用的 microsoft-agents-* 包的版本。
重要通知 - 导入变更
⚠️ 破坏性变更:最近的更新已将 Python 导入结构从
microsoft.agents更改为microsoft_agents(使用下划线而非点号)。
安装
pip install microsoft-agents-hosting-core
pip install microsoft-agents-hosting-aiohttp
pip install microsoft-agents-activity
pip install microsoft-agents-authentication-msal
pip install microsoft-agents-copilotstudio-client
pip install python-dotenv aiohttp
环境变量 (.env)
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID=<client-id>
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTSECRET=<client-secret>
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID=<tenant-id>
# 可选:OAuth 处理器用于自动登录
AGENTAPPLICATION__USERAUTHORIZATION__HANDLERS__GRAPH__SETTINGS__AZUREBOTOAUTHCONNECTIONNAME=<connection-name>
# 可选:Azure OpenAI 用于流式传输
AZURE_OPENAI_ENDPOINT=<endpoint>
AZURE_OPENAI_API_VERSION=<version>
AZURE_OPENAI_API_KEY=<key>
# 可选:Copilot Studio 客户端
COPILOTSTUDIOAGENT__ENVIRONMENTID=<environment-id>
COPILOTSTUDIOAGENT__SCHEMANAME=<schema-name>
COPILOTSTUDIOAGENT__TENANTID=<tenant-id>
COPILOTSTUDIOAGENT__AGENTAPPID=<app-id>
核心工作流:aiohttp 托管的 AgentApplication
import logging
from os import environ
from dotenv import load_dotenv
from aiohttp.web import Request, Response, Application, run_app
from microsoft_agents.activity import load_configuration_from_env
from microsoft_agents.hosting.core import (
Authorization,
AgentApplication,
TurnState,
TurnContext,
MemoryStorage,
)
from microsoft_agents.hosting.aiohttp import (
CloudAdapter,
start_agent_process,
jwt_authorization_middleware,
)
from microsoft_agents.authentication.msal import MsalConnectionManager
# 启用日志
ms_agents_logger = logging.getLogger("microsoft_agents")
ms_agents_logger.addHandler(logging.StreamHandler())
ms_agents_logger.setLevel(logging.INFO)
# 加载配置
load_dotenv()
agents_sdk_config = load_configuration_from_env(environ)
# 创建存储和连接管理器
STORAGE = MemoryStorage()
CONNECTION_MANAGER = MsalConnectionManager(**agents_sdk_config)
ADAPTER = CloudAdapter(connection_manager=CONNECTION_MANAGER)
AUTHORIZATION = Authorization(STORAGE, CONNECTION_MANAGER, **agents_sdk_config)
# 创建 AgentApplication
AGENT_APP = AgentApplication[TurnState]()
@AGENT_APP.conversation_update("membersAdded")
async def on_members_added(context: TurnContext, _state: TurnState):
await context.send_activity("Welcome to the agent!")
@AGENT_APP.activity("message")
async def on_message(context: TurnContext, _state: TurnState):
await context.send_activity(f"You said: {context.activity.text}")
@AGENT_APP.error
async def on_error(context: TurnContext, error: Exception):
await context.send_activity("The agent encountered an error.")
# 服务器设置
async def entry_point(req: Request) -> Response:
agent: AgentApplication = req.app["agent_app"]
adapter: CloudAdapter = req.app["adapter"]
return await start_agent_process(req, agent, adapter)
APP = Application(middlewares=[jwt_authorization_middleware])
APP.router.add_post("/api/messages", entry_point)
APP["agent_configuration"] = CONNECTION_MANAGER.get_default_connection_configuration()
APP["agent_app"] = AGENT_APP
APP["adapter"] = AGENT_APP.adapter
if __name__ == "__main__":
run_app(APP, host="localhost", port=environ.get("PORT", 3978))
AgentApplication 路由
import re
from microsoft_agents.hosting.core import (
AgentApplication, TurnState, TurnContext, MessageFactory
)
from microsoft_agents.activity import ActivityTypes
AGENT_APP = AgentApplication[TurnState]()
# 欢迎处理器
@AGENT_APP.conversation_update("membersAdded")
async def on_members_added(context: TurnContext, _state: TurnState):
await context.send_activity("Welcome!")
# 基于正则的消息处理器
@AGENT_APP.message(re.compile(r"^hello$", re.IGNORECASE))
async def on_hello(context: TurnContext, _state: TurnState):
await context.send_activity("Hello!")
# 简单字符串消息处理器
@AGENT_APP.message("/status")
async def on_status(context: TurnContext, _state: TurnState):
await context.send_activity("Agent is running.")
兼容工具
Claude CodeCursor
标签
后端开发
