Azure Bot Framework SDK Microsoft 365 -agenttien SDK siirtämisen ohjeet Python

Tässä artikkelissa kuvataan tarvittavat muutokset siirtymiseksi Bot Framework SDK:sta Python Python Microsoft 365 -agenttien SDK.

Vinkki

Käsittele tätä työtä modernisointityönä, ei vain pakettivaihtona. Agenttien SDK suosii yksinkertaisempia, mielipiteetöntä mallia (asynkronis/odotus, riippuvuuksien injektio, standardiloki) ja poistaa vanhat ominaisuudet. Säilytä vain botin tarpeet ja vältä vanhan mallin monimutkaisuuden viemistä eteenpäin.

Vaatimukset

  • Python versio 3.10 tai uudempi (suositus yli 3,11) tukee enintään 3,14:ää.
  • Aiemmin luotu Bot Framework SDK -projekti
  • Azure Bot Service resurssi

Azure-resurssit

Olemassa olevat Azure resurssit pysyvät muuttumattomina tämän siirron aikana. Jatka nykyisen Azure Botin rekisteröimistä (sovellustunnus ja salainen koodi). Viittaat näihin arvoihin myöhemmin kuvatussa uudessa konfiguraatiorakenteessa. Monet ratkaisut sisältävät myös vanhoja sovellusasetuksia, kuten APP_ID, APP_PASSWORD, ja APP_TENANT_ID. Nämä merkinnät ovat haitattomia siirron aikana, mutta Microsoft 365 -agenttien SDK eivät enää käytä niitä. Voit poistaa nämä asetukset, kun olet vahvistanut uuden asetuksen.

Ensimmäiset vaiheet

Aloita päivittämällä pakettien riippuvuudet. Seuraavat muutokset eivät kata kaikkia nimitiloja, joihin saatat joutua koskemaan, mutta ne käsittelevät useimmat pakettikorvaukset.

Pakettien riippuvuuksien päivittäminen

Bot Framework SDK Agents SDK
botbuilder-core microsoft-agents-hosting-core
botbuilder-schema microsoft-agents-activity
botbuilder-azure microsoft-agents-storage-blob Ja microsoft-agents-storage-cosmos
botbuilder-integration-aiohttp microsoft-agents-hosting-aiohttp

Jos bottisi integroituu Microsoft Teams kanssa, sisällytä Teams-laajennuspakettiin microsoft-agents-hosting-teams Teamsin ydinominaisuuksille.

Tunnistautumisen hallintaa varten lisää microsoft-agents-authentication-msal käsittelemään MSAL-pohjaista tunnistautumista.

Päivitä oma requirements.txt tai vastaava riippuvuustiedostosi korvaamaan Bot Framework -paketit niiden Agent-SDK-vastineilla. Käytä pip install -r requirements.txt tai haluamaasi paketinhallintaa uusien riippuvuuksien asentamiseen.

Agents SDK valvoo koodin laatustandardeja muotoilun black ja flake8 lintauksen avulla. Harkitse näiden työkalujen lisäämistä kehitysriippuvuuksiisi.

Päivitä tuonnit

Tärkeää

Agents SDK käyttää alleviivauksia tuontipoluissa (microsoft_agents) pisteiden (microsoft.agents) sijaan. Tämä muutos vaikuttaa kaikkiin tuontituotteisiin.

Seuraavaksi päivitä tuonnit. Helpoin tapa on koko projektin kattava etsi ja korvaa tarkka teksti.

Bottikehyksen tuonti Agents SDK:n tuonti
from botbuilder.core import ... from microsoft_agents.hosting.core import ...
from botbuilder.schema import ... from microsoft_agents.activity import ...
from botbuilder.integration.aiohttp import ... from microsoft_agents.hosting.aiohttp import ...
from botbuilder.core.teams import ... from microsoft_agents.hosting.teams import ...

Tyyppi- ja luokkien uudelleennimet

Joillakin tyypeillä ja luokilla on eri nimet Agenttien SDK:ssa. Käytä seuraavia kartoituksia ohjaamaan muutoksiasi.

Bot Framework Agents SDK
BotState AgentState
BotFrameworkAdapter CloudAdapter
BotFrameworkHttpClient AgentHttpClient
OAuthPromptSettings.connection_name OAuthPromptSettings.azure_bot_oauth_connection_name

Toimintaluokkien muutokset

Agents SDK:n Activity luokka sisältää sisäänrakennetun validoinnin käyttämällä Pydanticia. Voit jäsentää ja validoida toimintoja JSONista tai sanakirjoista käyttämällä Activity.model_validate().

Lisäksi luokka Activity keskittää toimintakuormiin liittyvät toiminnot. Metodit, joilla aiemmin oli staattisia metodejaTurnContext, ovat nyt instanssimetodeja :Activity

Bot Frameworkin staattinen menetelmä Agents SDK -instanssimenetelmä
TurnContext.apply_conversation_reference() activity.apply_conversation_reference()
TurnContext.get_conversation_reference() activity.get_conversation_reference()
TurnContext.get_reply_conversation_reference() activity.get_reply_conversation_reference()
TurnContext.remove_recipient_mention() activity.remove_recipient_mention()
TurnContext.get_mentions() activity.get_mentions()
TurnContext.remove_mention_text() activity.remove_mention_text()

Päivitä yleiset turn_state-viittaukset. Korvaa seuraavat käytöt vastaavasti.

Bot Framework Agents SDK
turn_context.turn_state.get(ConnectorClient) turn_context.services.get(ConnectorClient)
turn_context.turn_state.get(UserTokenClient) turn_context.services.get(UserTokenClient)
turn_context.turn_state turn_context.services

Määritys

Agent-SDK käyttää ympäristömuuttujia hierarkkisella nimeämiskäytännöllä konfigurointia varten.

Ympäristömuuttujat

Luo tai päivitä tiedostosi .env seuraavalla rakenteella:

# Required for Azure Bot Service
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID=your-app-id
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTSECRET=your-app-secret
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID=your-tenant-id

# Optional - for local debugging
PORT=3978

Siirron huomautus: päivitä ympäristömuuttujien nimet seuraavassa taulukossa esitetyllä tavalla:

Bot Framework SDK Agentit SDK
APP_ID tai MICROSOFT_APP_ID CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTID
APP_PASSWORD tai MICROSOFT_APP_PASSWORD CONNECTIONS__SERVICE_CONNECTION__SETTINGS__CLIENTSECRET
APP_TENANT_ID tai MICROSOFT_APP_TENANT_ID CONNECTIONS__SERVICE_CONNECTION__SETTINGS__TENANTID

Agentin SDK-konfiguraatio käyttää kaksoisalaviivoja (__) esittämään sisäkkäisiä konfiguraatiohierarkioita. Tämä malli mahdollistaa joustavan konfiguraationhallinnan eri käyttöönottoympäristöissä.

Käynnistys ja alustaminen

Alustus vaihtelee Agents SDK:ssa. Bot Framework SDK:ta käytetään aiohttp tyypillisesti manuaalisen adapterin konfiguraatiossa. Agents SDK:n avulla voit käyttää sisäänrakennettuja palvelintyökaluja yksinkertaistettuun asennukseen.

Palvelimen asennus

Bot Framework SDK -lähestymistapa

from aiohttp import web
from botbuilder.core import BotFrameworkAdapter, BotFrameworkAdapterSettings
from botbuilder.schema import Activity

# Configure adapter
SETTINGS = BotFrameworkAdapterSettings(
    app_id=os.environ.get("APP_ID", ""),
    app_password=os.environ.get("APP_PASSWORD", "")
)
ADAPTER = BotFrameworkAdapter(SETTINGS)

# Bot instance
BOT = MyBot()

async def messages(req: web.Request) -> web.Response:
    if "application/json" in req.headers["Content-Type"]:
        body = await req.json()
    else:
        return web.Response(status=415)

    activity = Activity().deserialize(body)
    auth_header = req.headers["Authorization"] if "Authorization" in req.headers else ""

    response = await ADAPTER.process_activity(activity, auth_header, BOT.on_turn)
    if response:
        return web.json_response(data=response.body, status=response.status)
    return web.Response(status=201)

APP = web.Application()
APP.router.add_post("/api/messages", messages)

if __name__ == "__main__":
    web.run_app(APP, host="localhost", port=3978)

Agents SDK -lähestymistapa (sisustuskuvio)

Suositeltu lähestymistapa käyttää AgentApplication sisustajien kanssa modernimman, deklaratiivsemman tyylin luomiseksi:

import re
from os import environ
from dotenv import load_dotenv

from microsoft_agents.hosting.aiohttp import CloudAdapter
from microsoft_agents.hosting.core import (
    Authorization,
    AgentApplication,
    TurnState,
    TurnContext,
    MemoryStorage,
)
from microsoft_agents.authentication.msal import MsalConnectionManager
from microsoft_agents.activity import load_configuration_from_env

# Load environment variables
load_dotenv()
agents_sdk_config = load_configuration_from_env(environ)

# Initialize core components
STORAGE = MemoryStorage()
CONNECTION_MANAGER = MsalConnectionManager(**agents_sdk_config)
ADAPTER = CloudAdapter(connection_manager=CONNECTION_MANAGER)
AUTHORIZATION = Authorization(STORAGE, CONNECTION_MANAGER, **agents_sdk_config)

# Create agent application
AGENT_APP = AgentApplication[TurnState](
    storage=STORAGE,
    adapter=ADAPTER,
    authorization=AUTHORIZATION,
    **agents_sdk_config
)

# Register handlers using decorators
@AGENT_APP.conversation_update("membersAdded")
async def on_members_added(context: TurnContext, _state: TurnState):
    await context.send_activity("Welcome!")
    return True

@AGENT_APP.activity("message")
async def on_message(context: TurnContext, _state: TurnState):
    await context.send_activity(f"You said: {context.activity.text}")

Agents SDK mahdollistaa load_configuration_from_env() konfiguraation automaattisen latauksen ympäristömuuttujista, jolloin manuaalinen konfiguraation jäsennys poistuu. Sisustusmalli mahdollistaa käsittelijöiden rekisteröinnin deklaratiivisesti ilman eksplisiittistä luokkapohjaista periytymistä.

Todentaminen ja suojaus

Bot Framework SDK sisälsi JSON Web Token (JWT) -validoinnin sovittimeen. Agent-SDK erottaa todennuskysymykset, joten autentikointiväliohjelmiston voi konfiguroida eksplisiittisesti.

Tuotantoympäristöissä varmista, että JWT-validointi on käytössä konfiguroinnin CloudAdapter kautta. Sovitin validoi saapuvat pyynnöt automaattisesti MSAL-todennuskonfiguraatiolla.

Paikallisessa kehityksessä Bot Framework Emulatorilla voit käyttää tyhjiä tunnuksia .env-tiedostossasi:

# Only for local development with Emulator
CONNECTIONS__SERVICE_CONNECTION__SETTINGS__ANONYMOUS_ALLOWED=True

Toiminnan hallinta

Useimmat Bot Framework SDK:n avulla luodut botit perustuvat ActivityHandler perusluokkaan.

Agents SDK tarjoaa yhteensopivan ActivityHandler version, joka ylläpitää samankaltaista API-pintaa helpompaa migraatiota varten.

Tärkeimmät erot

Käsittelijämetodin allekirjoitusmuutokset

Bot Frameworkin SDK-käsittelijät käyttävät tyypillisesti paikkaparametreja, kun taas agenttien SDK-käsittelijät ylläpitävät samaa kaavaa, TurnContext joka on kuin pääparametri.

Lisämenetelmät Agents SDK:ssa

Tapa Kuvaus
on_message_delete() Käsittelee viestin poistotoimia
on_message_update() Käsittelee sanoman päivitystoiminnot
on_sign_in_invoke() Käsittelee kirjautumiskutsutoiminnot

Puuttuvat menetelmät Agents SDK:ssa

Tapa Syy
on_command_activity() Komentotoimintoja ei tueta
on_command_result_activity() Komentotulostoimintoja ei tueta

Migraatioesimerkki

Bot Framework SDK

from botbuilder.core import ActivityHandler, TurnContext
from botbuilder.schema import ChannelAccount

class MyBot(ActivityHandler):
    async def on_message_activity(self, turn_context: TurnContext):
        await turn_context.send_activity(f"You said: {turn_context.activity.text}")

    async def on_members_added_activity(
        self,
        members_added: list[ChannelAccount],
        turn_context: TurnContext
    ):
        for member in members_added:
            if member.id != turn_context.activity.recipient.id:
                await turn_context.send_activity("Welcome!")

Agenttien SDK

from microsoft_agents.hosting.core import AgentApplication, TurnState, TurnContext

# AGENT_APP is initialized as shown in the Startup and initialization section

@AGENT_APP.activity("message")
async def on_message(context: TurnContext, _state: TurnState):
    await context.send_activity(f"You said: {context.activity.text}")

@AGENT_APP.conversation_update("membersAdded")
async def on_members_added(context: TurnContext, _state: TurnState):
    for member in context.activity.members_added:
        if member.id != context.activity.recipient.id:
            await context.send_activity("Welcome!")
    return True

Migraatio on pääosin suoraviivaista, ja tärkeimmät muutokset ovat import-lauseet. Useimmat olemassa ActivityHandlerolevat botit toimivat mahdollisimman vähäisin muutoksin.

Osavaltion hallinta

ConversationState, UserState ja PrivateConversationState ovat yhteensopivia muutamien eroavaisuuksien kanssa. Ydintilahallinnan mallit ovat samankaltaisia kuin Bot Framework SDK:ssa.

Sinun täytyy rekisteröidä tilaobjektit ja tallentaa ne nimenomaisesti muutosten jälkeen.

from microsoft_agents.hosting.core import (
    AgentApplication,
    TurnState,
    TurnContext,
    ConversationState,
    UserState,
    MemoryStorage,
)

# Initialize storage and state
STORAGE = MemoryStorage()
conversation_state = ConversationState(STORAGE)
user_state = UserState(STORAGE)
count_property = conversation_state.create_property("conversation_data")

# AGENT_APP is initialized as shown in the Startup and initialization section

@AGENT_APP.activity("message")
async def on_message(context: TurnContext, _state: TurnState):
    # Access state
    conversation_data = await count_property.get(context, {})

    # Modify state
    conversation_data["count"] = conversation_data.get("count", 0) + 1
    await count_property.set(context, conversation_data)

    await context.send_activity(f"Message count: {conversation_data['count']}")

    # Save state changes
    await conversation_state.save_changes(context)
    await user_state.save_changes(context)

Tallennustilavaihtoehdot

Agent-SDK tarjoaa tallennustoteutuksia eri taustajärjestelmille:

# Memory storage (development only)
from microsoft_agents.hosting.core import MemoryStorage
storage = MemoryStorage()

# Azure Blob Storage
from microsoft_agents.storage.blob import BlobStorage
storage = BlobStorage(
    connection_string="your-connection-string",
    container_name="bot-state"
)

# Azure Cosmos DB
from microsoft_agents.storage.cosmos import CosmosDbPartitionedStorage
storage = CosmosDbPartitionedStorage(
    cosmos_client_options={
        "url": "your-cosmos-url",
        "key": "your-cosmos-key"
    },
    database_id="bot-db",
    container_id="bot-state"
)

Lokiin kirjaaminen

Agenttien SDK käyttää Python vakiomuotoista logging -moduulia. Määritä kirjautuminen pääsovellustiedostoosi:

import logging

# Configure logging for Agents SDK
ms_agents_logger = logging.getLogger("microsoft_agents")
console_handler = logging.StreamHandler()
console_handler.setFormatter(
    logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
)
ms_agents_logger.addHandler(console_handler)
ms_agents_logger.setLevel(logging.INFO)

Lokien tasot

  • DEBUG: Yksityiskohtainen paikallisen tilan seuranta
  • INFO: Toiminnan käsittely, API-kutsut ja pyynnöt ulkoisille tahoille tai niiden lähettämistä
  • VAROITUS: Odottamattomat tapahtumat, jotka aiheuttavat mahdollisia ongelmia
  • VIRHE: Havaitut virheet, olivatpa ne havaittu tai jääneet kiinni

Yleiset muuttoreitit

Yksinkertainen kaikurobotti

Yksinkertainen kaiku-botti Bot Framework SDK:ssa

from botbuilder.core import ActivityHandler, TurnContext

class EchoBot(ActivityHandler):
    async def on_message_activity(self, turn_context: TurnContext):
        await turn_context.send_activity(f"Echo: {turn_context.activity.text}")

Yksinkertainen kaikurobotti Agents SDK:ssa

from microsoft_agents.hosting.core import AgentApplication, TurnState, TurnContext

# AGENT_APP is initialized as shown in the Startup and initialization section

@AGENT_APP.activity("message")
async def on_message(context: TurnContext, _state: TurnState):
    await context.send_activity(f"Echo: {context.activity.text}")

Tilanhallinta laskurin avulla

from microsoft_agents.hosting.core import (
    AgentApplication,
    TurnState,
    TurnContext,
    ConversationState,
    MemoryStorage,
)

# Initialize storage and state
STORAGE = MemoryStorage()
conversation_state = ConversationState(STORAGE)
count_property = conversation_state.create_property("count")

# AGENT_APP is initialized as shown in the Startup and initialization section

@AGENT_APP.activity("message")
async def on_message(context: TurnContext, _state: TurnState):
    count = await count_property.get(context, 0)
    count += 1
    await count_property.set(context, count)

    await context.send_activity(f"Message count: {count}")
    await conversation_state.save_changes(context)

Teams-botti

from microsoft_agents.hosting.core import AgentApplication, TurnState, TurnContext

# AGENT_APP is initialized as shown in the Startup and initialization section
# Include microsoft-agents-hosting-teams in your dependencies for Teams support

@AGENT_APP.conversation_update("membersAdded")
async def on_members_added(context: TurnContext, _state: TurnState):
    for member in context.activity.members_added:
        await context.send_activity(f"Welcome to the team, {member.name}!")
    return True

@AGENT_APP.activity("message")
async def on_message(context: TurnContext, _state: TurnState):
    # Remove mentions
    text = context.activity.remove_mention_text(context.activity.recipient.id)
    await context.send_activity(f"You said: {text}")

Vianmääritys ja vihjeet

Seuraavat vihjeet saattavat auttaa sinua menestymään paremmin.

Tuontivirheet

Jos kohtaat tuontivirheitä, varmista, että käytät kaikissa tuontilauseissa alleviivauksia (microsoft_agents) pisteiden () sijaanmicrosoft.agents. Tämä virhe on yleisin migraatio-ongelma.

Asynkroniset/odotuskuviot

Kaikkien bottimetodien on oltava async ja käytettävä await asynkronisissa operaatioissa. Varmista, että kaikki kutsut send_activity, tilaoperaatiot ja dialogitoiminnot käyttävät await.

Tyyppivinkit

Agents SDK käyttää Python laajasti vihjeitä. Harkitse tyyppivihjeiden lisäämistä bottikoodiin paremman IDE-tuen ja virheiden tunnistuksen saamiseksi:

from microsoft_agents.hosting.core import TurnContext

async def on_message_activity(self, turn_context: TurnContext) -> None:
    await turn_context.send_activity("Hello")

Kokoonpanon validointi

Jos botti ei käynnisty konfiguraatiovirheiden vuoksi, varmista, että ympäristömuuttujien nimet käyttävät oikeaa kaksoisalleviivatusta (__) ja että olet asettanut kaikki tarvittavat arvot.

Paikalliset 401-virheet virheenkorjauksen aikana

Jos näet 401-virheitä paikallisessa debuggauksessa käyttämällä Bot Framework Emulatoria, varmista, että tunnuksesi ovat oikein tiedostossa .env tai käytä emulaattorin todennusasetuksia.

Python version yhteensopivuus

Varmista, että käytät Python 3.10 tai uudempaa. Agents SDK käyttää nykyaikaisia Python ominaisuuksia, jotka eivät ole käytettävissä aiemmissa versioissa.

Siirron tarkistusluettelo

Analysoi ja suunnittele: Tunnista kaikki vanhentuneet ominaisuudet ja päätä migraatiosta vs. uudelleenrakentamisen laajuudesta. ( Upgrade Python versio: Siirry arvoon Python 3.10 tai uudempi (suositus on yli 3,11). ✓ Korvaa paketit: Poista botbuilder-*; lisää microsoft-agents-* (hosting-core, activity, hosting-aiohttp, authentication-msal, tallennuspalveluntarjoajat, hosting-teams). ✓ Päivitä tuonnit: Sovella etsi/korvaa yllä olevien taulukoiden mukaisesti; muuta kaikki microsoft.agents muotoon microsoft_agents. ✓ Päivitä tyypit ja luokat: Korjaa uudelleen nimetyt API:t ja siirrä TurnContext staattiset metodit instanssimetodeihin Activity . ✓ Päivitä asetukset: Luo .env tiedosto hierarkkisella nimellä (kaksoisalleviivat). ✓ Päivitä alustus: Käytä CloudAdapter ja MsalAuth.from_environment().AgentsHttpMiddleware ( Määritä kirjaaminen: määritä Python kirjaaminen microsoft_agentskirjaustoiminnolle. ✓ Rakenna ja testaa paikallisesti: Käytä Bot Framework Emulatoria tunnuksilla; Vahvista ydinskenaariot. ( Deploy ja monitor: Päivitä Azure ympäristömuuttujat vastaamaan uutta kokoonpanoa ja katso lokit käyttöönoton jälkeen.