Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Korzystając z SDK Agenta 365, twój agent może obsługiwać zdarzenia aktywności platformy, takie jak instalacja i deinstalacja, oraz wysyłać wiele oddzielnych wiadomości w ciągu jednej tury. Ten artykuł omawia kluczowe wzorce odpowiadania użytkownikom i informowania ich podczas przetwarzania zgłoszeń przez Twojego agenta.
Obsługa zdarzeń instalacji i deinstalacji agenta
Gdy użytkownik instaluje lub odinstaluje Twojego agenta w Teams lub innych kanałach hostowanych przez Agenta 365, platforma wysyła aktywność InstallationUpdate (nazywaną także zdarzeniem agentInstanceCreated). Agent może obsługiwać te zdarzenia, wysyłając wiadomość powitalną po instalacji oraz pożegnalną po odinstalowaniu.
| Akcja | Podpis |
|---|---|
add |
Użytkownik instaluje agenta |
remove |
Użytkownik odinstalowuje agenta |
W przeciwieństwie do obsługi powiadomień, obsługa InstallationUpdate nie wymaga uwierzytelniania, ponieważ zdarzenie instalacji lub odinstalowania uruchamia się przed lub po aktywnej sesji użytkownika.
Zarejestruj procedurę obsługi instalacji i odinstalowania
Zarejestruj procedurę obsługi aktywności dla typu aktywności InstallationUpdate podczas inicjalizacji agenta:
@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 jest ciągiem znaków ustawianym na "add" podczas instalowania agenta lub na "remove" podczas jego odinstalowywania.
Activity.from_property jest instancją ChannelAccount zawierającą tożsamość użytkownika.
Wysyłanie wielu oddzielnych wiadomości
Agenty Agent 365 mogą wysyłać wiele odrębnych wiadomości w odpowiedzi na pojedyncze polecenie użytkownika. Aby to zrobić, wywołaj SendActivityAsync (.NET), send_activity (Python) lub sendActivity (JavaScript) wielokrotnie w jednej turze.
Ważne
Teams nie obsługuje strumieniowych odpowiedzi dla tożsamości agentycznej. SDK wykrywa tożsamość agentyczną i buforuje strumień w pojedynczą wiadomość. Użyj SendActivityAsync, send_activity lub sendActivity bezpośrednio, aby wysłać natychmiastowe, oddzielne wiadomości do użytkownika.
Poniższe przykłady prezentują ten wzorzec, wysyłając natychmiastowe potwierdzenie przed odpowiedzią LLM:
@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)
Przykład demonstruje ten wzorzec w on_message (host_agent_server.py), wysyłając natychmiastowe potwierdzenie przed odpowiedzią LLM.
Każde wywołanie sendActivity, send_activity lub SendActivityAsync tworzy osobną wiadomość. Możesz wywołać tę funkcję dowolną liczbę razy, aby wysłać aktualizacje postępów, wyniki częściowe lub odpowiedź końcową.
Wskaźniki pisania
Wskaźniki pisania pokazują ... animację postępu w Teams:
- Mają wbudowany wizualny upływający czas trwający około 5 sekund, który należy odświeżać w pętli co około cztery sekundy.
- Są widoczne tylko w czatach jeden na jeden i czatach małych grup, nie w kanałach.
Agent wysyła wskaźniki pisania w pętli co około cztery sekundy, aby animacja ... pozostała widoczna podczas przetwarzania żądania przez LLM:
# 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