Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Durch die Verwendung des Agent 365 SDK kann Ihr Agent Plattform-Ereignisse wie Installation und Deinstallation handhaben und mehrere separate Nachrichten innerhalb eines einzigen Interaktionsschritts senden. Dieser Artikel behandelt die wichtigsten Muster, um auf Nutzer zu reagieren und sie während der Bearbeitung von Anfragen durch Ihren Agent auf dem Laufenden zu halten.
Agent-Installations- und -Deinstallationsereignisse verarbeiten
Wenn ein Benutzer Ihren Agent in Teams oder anderen von Agent 365 gehosteten Kanälen installiert oder deinstalliert, löst die Plattform eine InstallationUpdate-Aktivität aus (die auch als agentInstanceCreated-Ereignis bezeichnet wird). Ihr Agent kann diese Ereignisse verarbeiten, um bei der Installation eine Begrüßungsnachricht und bei der Deinstallation eine Abschiedsnachricht zu senden.
| Aktion | Beschreibung des Daten-Flows |
|---|---|
add |
Der Benutzer installiert den Agent |
remove |
Der Benutzer deinstalliert den Agent |
Im Gegensatz zu Benachrichtigungs-Handlern benötigt der InstallationUpdate Handler keine Authentifizierung, da das Installations- oder Deinstallationsereignis vor oder nach einer aktiven Sitzung des Benutzers ausgelöst wird.
Registrieren Sie den Handler für Installation und Deinstallation
Registrieren Sie einen Aktivitätshandler für den InstallationUpdate-Aktivitätstyp bei 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 Zeichenkette, die auf "add" eingestellt ist, wenn Sie den Agent installieren oder auf "remove" wenn Sie ihn deinstallieren.
Activity.from_property ist eine Instanz von ChannelAccount, die die Identität des Benutzers enthält.
Mehrere Nachrichten senden
Agents von Agent 365 können als Antwort auf einen einzelnen Benutzer-Prompt mehrere einzelne Nachrichten senden. Dazu rufen Sie SendActivityAsync (.NET), send_activity (Python) oder sendActivity (JavaScript) mehrmals innerhalb einer einzelnen Interaktion auf.
Wichtig
Teams unterstützt keine Streamingantworten für agentische Identitäten. Das SDK erkennt die Agentidentität und bündelt den Nachrichtenstrom zu einer einzigen Nachricht. Verwenden Sie SendActivityAsync, send_activity oder sendActivity direkt, um sofortige, diskrete Nachrichten an den Nutzer zu senden.
Die folgenden Beispiele zeigen diese Vorgehensweise, indem sie vor der LLM-Antwort eine sofortige Bestätigung senden:
@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)
Das Beispiel zeigt dieses Muster in on_message (host_agent_server.py), indem eine sofortige Bestätigung vor der LLM-Antwort gesendet wird.
Mit jedem Aufruf von sendActivity, send_activity oder SendActivityAsync wird eine separate Nachricht erzeugt. Sie können sie beliebig oft aufrufen, um Fortschrittsupdates, 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 sichtbar, nicht in Kanälen.
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