Viestien käsitteleminen

Agent 365 SDK:n avulla agentti voi käsitellä ympäristön toimintatapahtumia, kuten asennustapahtumia ja asennuksen poistotapahtumia, sekä lähettää useita erillisiä viestejä yhden vuoron aikana. Tämä artikkeli esittelee keskeiset mallit, joiden avulla vastataan käyttäjille ja pidetään käyttäjät ajan tasalla agentin käsitellessä pyyntöjä.

Agentin asennustapahtumien ja asennuksen poistotapahtumien käsitteleminen

Kun käyttäjä asentaa agentin tai poistaa agentin asennuksen Teamsissa tai muissa Agent 365:n isännöimissä kanavissa, ympäristö lähettää InstallationUpdate-aktiviteetin (kutsutaan myös agentInstanceCreated-tapahtumaksi). Agentti voi käsitellä nämä tapahtumat lähettämällä tervetuloviestin asennuksen yhteydessä ja jäähyväisviestin poiston yhteydessä.

Toimi Description
add Käyttäjä asentaa agentin
remove Käyttäjä poistaa agentin asennuksen

Toisin kuin ilmoitusten käsittelijät, InstallationUpdate-käsittelijä ei vaadi todennusta, koska asennustapahtuma ja asennuksen poistotapahtuma käynnistyy ennen kuin käyttäjällä on aktiivinen istunto tai sen jälkeen.

Asennuksen ja asennuksen poiston käsittelijän rekisteröiminen

Rekisteröi aktiviteettien käsittelijä InstallationUpdate-aktiviteettityypille agentin alustuksessa:

@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 on merkkijono, jonka arvoksi on määritetty "add", kun agentti asennetaan, ja "remove", kun agentin asennus poistetaan. Activity.from_property on ChannelAccount-esiintymä, joka sisältää käyttäjätiedot.

Useiden viestien lähettäminen

Agent 365 -agentit voivat lähettää useita erillisiä viestejä vastauksena yhteen käyttäjäkehotteeseen. Tätä varten kutsutaan kohdetta SendActivityAsync (.NET), send_activity (Python) tai sendActivity (JavaScript) useita kertoja yhden vuoron aikana.

Tärkeää

Teams ei tue suoratoistovastauksia agentin käyttäjätietoja varten. SDK tunnistaa agentin käyttäjätiedot ja puskuroi viestivirran yhdeksi viestiksi. Käytä kohdetta SendActivityAsync, send_activity tai sendActivity suoraan lähettääksesi välittömiä, erillisiä viestejä käyttäjälle.

Seuraavat esimerkit havainnollistavat toimintatapaa, jossa käyttäjälle lähetetään välitön kuittaus ennen LLM-vastausta:

@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)

Esimerkki osoittaa tämän mallin kohteessa on_message (host_agent_server.py) lähettämällä välittömän kuittauksen ennen LLM:n vastausta.

Jokainen kutsu kohteeseen sendActivity, send_activity tai SendActivityAsync luo erillisen viestin. Voit kutsua sitä niin monta kertaa kuin edistymispäivitysten, osittaisten tulosten ja lopullisen vastauksen lähettäminen vaatii.

Kirjoitusilmaisimet

Kirjoitusilmaisimet näyttävät edistymisanimaation ... Teamsissa:

  • Niissä on valmis visuaalinen aikakatkaisu (noin 5 sekuntia), joka täytyy päivittää silmukassa noin neljän sekunnin välein.
  • Kirjoitusilmaisimet ovat näkyvissä vain kahdenkeskisissä keskusteluissa ja pienryhmäkeskusteluissa, eivät kanavissa.

Agentti lähettää kirjoitusilmaisimia silmukassa noin neljän sekunnin välein pitääkseen animaation ... käynnissä samalla kun LLM käsittelee pyyntöä:

# 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