Suunnittele parhaat käytännöt päällekkäisten viestien välttämiseksi

Muistio

Tässä artikkelissa kuvataan standardivaljaiden ominaisuuksia ja käyttäytymistä. Opi, miten pääset käsiksi standardeihin liittyviin ominaisuuksiin Accessin standardiagenteissa ja agenttivirroissa.

Vakiovaljaskunnassa useat komponentit voivat käsitellä käyttäjän pyyntöä, ja kukin toimii omasta näkökulmastaan. Aihe voi näyttää viestin tai Adaptive Cardin, työkalu voi palauttaa dataa, ja lapsi tai siihen liitetty agentti voi vastata omasta kontekstistaan. Orkestrointikerros jatkaa suunnitelmaa kontekstista, joka ei välttämättä vastaa käyttäjän saamaa vastausta. Kun nämä näkökulmat poikkeavat toisistaan, käyttäjä saattaa nähdä toistuvan viestin tai vastaamatta jääneen vastauksen. Valmistajat kohtaavat tätä käyttäytymistä useammin uudemmissa malleissa kuin vanhemmissa malleissa.

Ymmärrä, miksi kaksoiskappaleet syntyvät ennen kuin suunnittelet ratkaisun. Lue lisää kontekstin jakautumisesta standardivaljaissa.

Muistio

Toistuvat viestit ja päällekkäiset viestit ovat yleensä suunnitteluongelmia, jotka liittyvät kontekstin hallintaan, eivät bugeja. Ne syntyvät, kun käyttäjä näkee vastauksen, mutta suunnitelmaa jatkava komponentti saa eri tiedot siitä, mihin on jo vastattu.

Näiden käyttötapausten ymmärtämiseksi tarkastellaan kahta pintaa erikseen: käyttäjän näkyvää tulosta (mitä käyttäjä näkee chatissa) ja aktiivista kontekstia (tieto, joka komponentilla on käytettävissään, kun se päättää, mitä tehdä seuraavaksi). Tekijät eivät näe aktiivista kontekstia suoraan. Siksi on tärkeää ymmärtää jokaisen komponentin näkökulma ja käyttää syötteitä ja tuloksia, jotta nämä näkökulmat pysyvät linjassa.

Jos haluat selvittää käynnissä olevassa agentissa ilmenevän oireen, aloita artikkelista Päällekkäisten viestien ja puuttuvien vastausten vianmääritys ja palaa sitten tähän artikkeliin saadaksesi uudelleensuunnittelua koskevia ohjeita.

Suunnittelu konteksti huomioon ottaen

Jos pyyntö käsitellään yhdellä vaiheella, jota seuraa Lopeta kaikki aiheet, kontekstinhallinta ei tule mukaan. Mutta kun pyynnön täytyy ketjuttaa useita komponentteja tai kun käyttäjä tekee useamman pyynnön samassa istunnossa, kontekstinhallinnalla on merkitystä. Useimmat todelliset käyttötapaukset käyvät läpi useita komponentteja per istunto, joten suunnittele sen mukaan.

  • Yksi komponentti, sitten lopeta kaikki aiheet. Yksi aihe, työkalu, lapsiagentti tai yhdistetty agentti hoitaa pyynnön ja istunto päättyy. Jos kyseinen komponentti kirjoittaa täydellisen vastauksen ja raportoi sen suorittamisesta, orkestrointikerroksella ei ole syytä kirjoittaa uutta vastausta.
  • Istunnossa on useita osia. Istunto voi ajaa useita komponentteja ennen kuin käyttäjä saa täydellisen vastauksen. Istunto voi myös kattaa useita pyyntöjä. Yksi komponentti saattaa vastata osaan pyynnöstä, kun taas toisen täytyy vastata loput. Jokaisen toimivan komponentin on raportoitava mitä se teki. Muussa tapauksessa myöhempi komponentti saattaa toimia vastaamatta jääneen kontekstin perusteella ja vastata uudelleen.
Missä konteksti on tärkeä Esimerkki Äänisuunnittelu
Ei kontekstia käytetty Aihe näyttää täydellisen vastauksen viestissä tai Adaptive Cardissa. Lopeta kaikki aiheet -solmu estää orkestrointikerrosta vastaamasta uudelleen.
Orkestrointikerros käyttää kontekstia Aihe näyttää taulukon osalle A, ja orkestrointikerros vastaa osaan B käyttämällä tietoa tai toista agenttia. Jokainen komponentti raportoi, mitä se vastasi, ja palauttaa arvot, joita myöhemmät vaiheet vaativat, joten orkestrointikerros ei vastaa kahdesti.
Komponentti käyttää kontekstia Aihe vastaa osaan A käyttäjälle, sitten toinen agentti käsittelee osaa B. Jos agentti saa vanhemman kontekstin, jossa A näyttää olevan vastaamatta, se vastaa A:han uudelleen. Sulje pois vanhempien konteksti yhdistetyllä agentilla mahdollisuuksien mukaan, ja komponentit palauttavat tulosteita, jotka vahvistavat, mitä vastattiin ja mitä jäljelle jää.

Suunnittele komponentit raportoimaan tapahtuneesta

Komponentti lähettää toistuvan viestin tai kaksoisviestejä, kun orkestrointikerros ei pysty havaitsemaan työtä, jonka aiempi komponentti on suorittanut. Käytä samaa suunnittelulähestymistapaa joka kerta välttääksesi päällekkäiset viestit – käske jokainen komponentti raportoimaan toimintonsa orkestrointikerrokselle. Jokaiselle pyynnön osalle määritetään täsmälleen yksi komponentti, joka kirjoittaa käyttäjän saaman vastauksen. Jokainen muu komponentti tekee työnsä ja palauttaa kontekstin ilman, että kirjoittaa käyttäjälle.

Käytä näitä käytäntöjä yhdessä yhtenä suunnittelulähestymistapana:

  1. Palautustulokset , jotka tallentavat tapahtuneen. Pelkät ulostulot riittävät yleensä vanhemmille malleille.
  2. Lisää aiheen tai aliagentin kuvaukseen ohje , joka määrittelee, mitä onnistunut suoritus tarkoittaa. Tämä lähestymistapa tekee suunnittelusta kestävän.
  3. Lisää ylimmän tason käsky , jotta orkestrointikerros tarkistaa nämä ulostulot ennen kuin vastaa. Uudemmat mallit hyötyvät eniten tästä lähestymistavasta.

Vain komponentit, jotka tukevat mukautettuja lähtöjä, voivat palauttaa ulostuloja ja sisältää kuvausohjeita. Komponenteille, jotka eivät tue mukautettuja lähtöjä, estä päällekkäiset viestit rajoittamalla niiden vastaanottamaa kontekstia ja lisäämällä ylimmän tason käsky.

Komponentti Ilmoittaa takaisin Korjaus
Aihe answered (Tosi/Epätosi), choiceReceived (Tosi/Epätosi), sekä näytetty arvo tai yhteenvetotulos (Teksti) Palauta tulokset ja lisää ohje aiheen kuvaukseen. Aiheiden suunnittelu mini-agentteina, jotka välttävät päällekkäiset viestit , tarjoaa esimerkkejä aihekuvauksista.
Aliagentti (lapsi tai siihen liitetty agentti) answered (Totta/Väärin), interactionSummary (Teksti), openQuestions (Teksti) Palauta tulosteet, lisää scoping input ja lisää käsky aliagentin kuvaukseen. Suunnittele aliagentteja, jotka välttävät päällekkäiset viestit , tarjoavat esimerkkejä aliagentin kuvauksista.
Tieto (kutsu tietoon) Kontekstia ei voi mukauttaa, saatan toistaa vastauksen. Pidä puhdas ylätason konteksti ja vaikuta lähetettyihin pyyntöihin.
Generatiivinen vastaussolmu Kontekstia ei voi mukauttaa, voi toistaa vastauksen, sen vastaus voi toistua myöhemmin. Pidä selkeä ylätason konteksti, vaikuta solmusyötteeseen kirjoitettuun pyyntöön ja anna isäntäaiheen palauttaa tulos tai vastaustilan tulos.

Suunnittele vahva ylätason käsky toistuvien viestien välttämiseksi

Tulokset pitävät orkestrointikerroksen ajan tasalla. Lisää ylimmän tason käsky, joka kehottaa uudempia malleja tarkistamaan tulokset ennen vastaamista.

Seuraava ylimmän tason agenttikäsky on esimerkki, joka on suunniteltu toimimaan eri käyttötapauksissa, riippumatta siitä, kommunikoiko komponentti käyttäjän kanssa suoraan vai ei. Muokkaa ja mukauta sitä tarpeen mukaan.

Aina kun jokin aihe tai agentti kutsutaan, etsi aina 'vastattu' boolean-tulos ennen kuin päätät, mitä vastata. Aiheilla ja agenteilla on oma viestintäkanavansa käyttäjän kanssa. Jos 'vastattu' on totta, oletetaan aina, että pyyntöön on vastattu asianmukaisesti vähintään yhdellä tulosmuuttujalla, ja tarkista mitkä niistä tuloskuvauksen perusteella. Älä esitä kömpelöä kuittausta sisällöstä, johon on jo vastattu. Anna vain vastaamattomia tuloksia ja jatka keskustelua luonnollisesti seuraavalla askeleella.

Termi kanava ei viittaa integraatiokanavaan, kuten Teamsiin, tai verkkosivustoon. Se on kehotuslaite, joka kertoo orkestrointikerrokselle, että käyttäjä on saattanut jo nähdä vastauksen tai tehdä valinnan jonkin muun komponentin, kuten aiheen, kortin tai aliagentin, kautta. Tämä sanamuoto saa mallin tarkistamaan vastauksensa ennen vastaamista.

Käsittele aiheita

Aihe kommunikoi usein suoraan käyttäjän kanssa näyttämällä viestin, esittämällä kysymyksen tai esittämällä Adaptive Cardin. Orkestrointikonteksti vastaanottaa aiheen tekstin tavallisena tekstinä, mutta ei tallenna, näkikö käyttäjä sen. Konteksti ei myöskään saa Adaptive Card -toimintoja tai valintoja. Jos aihe vastaa käyttäjälle, mutta ei raportoi toimintoa orkestrointikerrokselle, orkestrointikerros käsittelee pyynnön ratkaisemattomana ja vastaa siihen uudelleen.

Suunnittele aihe mini-agentiksi. Palauta vastatun tilan tulos, jotta orkestrointikerros tietää, että pyyntö käsiteltiin, ja palauta kaikki arvot, joita aihe näyttää tai jonka se kerää ja jotka myöhempi vaihe vaatii. Tulosteet tuovat toiminnot ja tulokset suunnitelman muiden osien saataville. Lisää aiheen kuvaukseen ohje, joka määrittelee, mitä onnistunut suoritus tarkoittaa.

Lue lisää Design-aiheista miniagentteina, jotka välttävät päällekkäiset viestit.

Käsittele lapsi- ja yhdistettyjä agentteja

Suunnittele lapsi- ja yhdistetyt agentit samalla tavalla kuin suunnittelet mitä tahansa muuta komponenttia. Heidän edestakainen keskustelunsa käyttäjän kanssa on vanhemmalle näkymätöntä, joka oppii tapahtuneen vasta ulostulojen kautta ja vasta agentin lopetettua.

Lapsi- ja yhdistetyt agentit saattavat myös saada aiemmin vastaamattomia pyyntöjä, jotka jäävät vanhempien agentin kontekstiin.

Jokaiselle agentille määritetään tehtävän laajuus syötteellä, määritä, vastaako se käyttäjälle vai pysyykö hiljaa, ja palauta tulosteita, jotka kertovat emoagentille tapahtuneesta.

Lue lisää Design-aliagenteista, jotka välttävät päällekkäisviestejä.

Käsittele tietämystä

Tieto on ylimmän tason konstruktio, johon agentti vetoaa. Se vastaanottaa pyynnön agentin suunnittelun perusteella ja vastaanottaa agentin kontekstin. Useimmat toistuvat viestiongelmat syntyvät, kun agentin kontekstista puuttuu tietoa muista komponenteista. Suunnittele tieto vaikuttamaan siihen, miten agentti muotoilee pyynnön. Varmista, että muut komponentit käyttävät lähtöjään oikein.

Käsittele generatiivisia vastaussolmuja

Generatiivinen vastaussolmu sijaitsee aiheen sisällä ja vastaa tiedosta. Se vastaanottaa vanhemman kontekstin sekä sen, mitä sen syötteessä välitetään, joten se käyttäytyy kuin huipputason tieto ja täydentää vastaustaan nykyisestä kontekstista. Se voi kirjoittaa vastauksensa suoraan chat-paneeliin tai tallentaa sen aihemuuttujaan, mutta ei voi palauttaa mitään ylimmälle kontekstille yksinään. Kuten minkä tahansa aiheen sisällön kohdalla, sen vastaus pysyy aiheessa, ellei aihe anna tulosta.

Generatiivinen vastaussolmu ei tarvitse erityistä käsittelyä lukuun ottamatta sääntöä, joka koskee jokaista aihetta: välitä tulos aiheen tuotoksena. Jos solmu vastaa käyttäjälle aiheessa, lisää vastatun tilan tulos ja näytetyn arvon tulos. Nämä ulostulot antavat orkestrointikerrokselle merkinnän, että pyyntöön on vastattu, ja estävät myöhempää vaihetta vastaamasta pyyntöön uudelleen.

Varmista, että kuvaukset ja ohjeet vastaavat näkökulmaa

Kuvaukset ja ohjeet kuuluvat myös kontekstisopimukseen.

Tämä ohje siirtyy aiheeseen:

When the user asks about their account balance, call the Account balance topic.

Tämä käsky ohjaa ja antaa vastauksen omistajuuden orkestrointikerrokselle:

When the user asks about their account balance, call the Account balance topic and give the balance.

Jos aihe näyttää jo tasapainon, toinen käsky luo toisen vastauspolun. Jos aihe ei palaa balanceValue, orkestrointikerros saattaa kutsua aiheen uudelleen tai vastata, ettei se tiedä arvoa.

Käytä kuvauksia ja ohjeita, jotka vastaavat näkökulmaa:

  • Aiheen kuvaus auttaa orkestrointikerrosta päättämään, milloin ja miten aihetta käytetään. Se noudattaa myös ohjeita siitä, mitä tehdä tai tulostaa seuraavaksi.
  • Yhdistetyn agentin kuvaus tulee vanhemman näkökulmasta.
  • Yhdistetyn agentin käsky luetaan yhdistetyn agentin näkökulmasta.
  • Aihe- tai yhdistetyn agentin ulostulokuvaus kertoo orkestrointikerrokselle, miten palautettu arvo tulkitaan.

Aiheelle, joka näyttää vastauksen käyttäjälle ja asettaa answered=true, kuvaa sekä milloin ohjata aiheeseen että mitä onnistunut suoritus tarkoittaa:

This topic handles account balance requests.
If its answered output is true, the user has already received their response and it should not be answered again.

Aiheessa, joka kirjoittaa vain tuotoksia, kuvaile sekä milloin ohjata aiheeseen että miten vastata:

This topic handles account balance requests and responds with the balance value in italics.

Palauta konteksti pitkissä keskusteluissa

Komponentin arvo voi poistua aktiivisesta kontekstista kahdella tavalla. Pitkän session aikana arvo, joka oli saatavilla muutama vuoro sitten, ei välttämättä enää ole aktiivisessa kontekstissa. Tai komponentti hakee täydellisen tuloksen, käyttää relevanttia osaa vastauksen tuottamiseen ja palauttaa vain sen vastauksen, jolloin lopputulos ei koskaan saavuta orkestrointikerrosta. Joka tapauksessa agentti saattaa hakea tiedot uudelleen tai pyytää käyttäjältä tietoja, jotka sillä jo on, mikä käyttäjä kokee vastauksen menetyksenä. Orkestrointikerros toimii kuin se ei olisi koskaan saanut arvoa.

Suunnittele tätä tilannetta varten palauttamalla ja tallentamalla tärkeä konteksti sekä toimittamalla se tarvittaessa:

  • Palauta täydellinen tulos, älä vain osaa, jolla vastataan. Haetulla tuloksella on usein useampi kenttä, useita rivejä ja pitkää tekstiä. Palauta kaikki data, jota myöhemmässä vuorossa saatetaan tarvita ulostuloina, jotta orkestrointikerros saa sen ilman refetchausta.

  • Tallenna ja syötä arvoja vuorojen välillä. Oikeissa kohdissa, ennen tai jälkeen työkalukutsun, ohjaa aiheeseen, joka voi tallentaa tai palvella arvon syötteiden, tulosten ja globaalin muuttujan kautta, jotta suunnitelma ei hake arvoa tai pyydä sitä uudelleen.

Vinkki

Saumaton agenttikäyttäytyminen perustuu agentin suunnitteluun, joka ottaa kontekstin huomioon jokaisessa vaiheessa ja näkökulmasta.