Freigeben über


Behandeln von Nachrichten

Von Bedeutung

Sie müssen Teil des Frontier-Vorschauversionsprogramms sein, um Vorabzugriff auf Microsoft Agent 365 zu erhalten. Frontier verbindet Sie direkt mit den neuesten KI-Innovationen von Microsoft. Frontier-Vorschauen unterliegen den bestehenden Vorschaubedingungen Ihrer Kundenverträge. Da diese Funktionen noch in Entwicklung sind, können sich ihre Verfügbarkeit und Fähigkeiten im Laufe der Zeit ändern.

Mithilfe des Agent 365 SDK kann Ihr Agent Plattformaktivitätsereignisse wie Installation und Deinstallation verarbeiten und mehrere diskrete Nachrichten innerhalb einer einzigen Reihe senden. In diesem Artikel werden die Schlüsselmuster für die Reaktion auf Benutzeranfragen behandelt, um sie informiert zu halten, während Ihr Agent Anfragen bearbeitet.

Agent-Installations- und -Deinstallationsereignisse verarbeiten

Wenn ein Benutzer Ihren Agent in Teams oder anderen vom Agent 365 gehosteten Kanälen installiert oder deinstalliert, sendet die Plattform eine InstallationUpdate Aktivität (auch als agentInstanceCreated Ereignis bezeichnet). Ihr Agent kann diese Ereignisse verarbeiten, um eine Willkommensnachricht zu senden, wenn sie installiert ist, und eine Abschiedsnachricht, wenn sie deinstalliert wird.

Action Beschreibung
add Der Benutzer installiert den Agent
remove Der Benutzer deinstalliert den Agent.

Im Gegensatz zu Benachrichtigungshandlern erfordert der InstallationUpdate Handler keine Authentifizierung, da das Installations- oder Deinstallationsereignis vor oder nach einer aktiven Sitzung des Benutzers ausgelöst wird.

Registrieren des Installations- und Deinstallationshandlers

Registrieren Sie einen Aktivitätshandler für den InstallationUpdate Aktivitätstyp in der Initialisierung Ihres Agents.

@agent_app.activity("installationUpdate")
async def on_installation_update(context: TurnContext, state: TurnState):
    action = context.activity.action
    from_prop = context.activity.from_property
    logger.info(
        "InstallationUpdate received — Action: '%s', DisplayName: '%s', UserId: '%s'",
        action or "(none)",
        getattr(from_prop, "name", "(unknown)") if from_prop else "(unknown)",
        getattr(from_prop, "id", "(unknown)") if from_prop else "(unknown)",
    )
    if action == "add":
        await context.send_activity("Thank you for hiring me! Looking forward to assisting you in your professional journey!")
    elif action == "remove":
        await context.send_activity("Thank you for your time, I enjoyed working with you.")

Activity.action ist eine Zeichenfolge, die "add" festgelegt ist, wenn Sie den Agent installieren oder "remove" wenn Sie ihn deinstallieren. Activity.from_property ist eine ChannelAccount-Instanz , die die Identität des Benutzers enthält.

Senden mehrerer Nachrichten

Agent 365-Agents können als Reaktion auf eine einzelne Benutzeraufforderung mehrere diskrete Nachrichten senden. Rufen Sie dazu SendActivityAsync (.NET), send_activity (Python) oder sendActivity (JavaScript) mehrmals innerhalb einer Sitzung auf.

Von Bedeutung

Teams unterstützt keine Streamingantworten für agentische Identitäten. Das SDK erkennt die Identität eines Agenten und puffert den Datenstrom in eine einzelne Nachricht. Verwenden Sie SendActivityAsync, send_activityoder sendActivity direkt, um sofortige, diskrete Nachrichten an den Benutzer zu senden.

Die folgenden Beispiele veranschaulichen das Muster, indem eine sofortige Bestätigung vor der LLM-Antwort gesendet wird:

@agent_app.activity("message")
async def on_message(context: TurnContext, state: TurnState):
    # Message 1: immediate ack — reaches the user right away
    await context.send_activity("Got it — working on it…")

    # ... LLM processing ...

    # Message 2: the LLM response
    await context.send_activity(response)

Im Beispiel wird dieses Muster in on_message (host_agent_server.py) veranschaulicht, indem eine sofortige Bestätigung vor der LLM-Antwort gesendet wird.

Jeder Aufruf von sendActivity, send_activity oder SendActivityAsync erstellt eine separate Nachricht. Sie können es so oft wie nötig aufrufen, um Statusaktualisierungen, Teilergebnisse oder eine endgültige Antwort zu senden.

Eingabeindikatoren

Eingabeindikatoren zeigen eine ...-Fortschrittsanimation in Teams an:

  • Sie verfügen über ein integriertes visuelles Timeout von etwa 5 Sekunden, das alle vier Sekunden in einer Schleife aktualisiert werden muss.
  • Sie sind nur in Einzelchats und kleinen Gruppenchats und nicht in Kanälen sichtbar.

Der Agent sendet etwa alle vier Sekunden Eingabeindikatoren in einer Schleife, um die ...-Animation live zu halten, während das LLM die Anforderung verarbeitet.

# Message 1: immediate ack — reaches the user right away
await context.send_activity("Got it — working on it…")

# Send typing indicator immediately (awaited so it arrives before the LLM call starts).
await context.send_activity(Activity(type="typing"))

# Background loop refreshes the "..." animation every ~4s (it times out after ~5s).
async def _typing_loop():
    try:
        while True:
            await asyncio.sleep(4)
            await context.send_activity(Activity(type="typing"))
    except asyncio.CancelledError:
        pass  # Expected on cancel.

typing_task = asyncio.create_task(_typing_loop())
try:
    response = await agent.process_user_message(...)
    await context.send_activity(response)
finally:
    typing_task.cancel()
    try:
        await typing_task
    except asyncio.CancelledError:
        pass