Design beste praksis for å unngå dupliserte meldinger

Note

Denne artikkelen beskriver egenskapene og oppførselen til standardselen. Lær hvordan du får tilgang til standardfunksjoner i Access standardagenter og agentflyter.

I standardharnessen kan flere komponenter håndtere en brukers forespørsel, og hver av dem handler fra sitt eget synspunkt. Et emne kan vise en melding eller et adaptivt kort, et verktøy kan returnere data, og et barn eller tilknyttet agent kan svare fra sin egen kontekst. Orkestreringslaget fortsetter planen fra en kontekst som kanskje ikke samsvarer med responsen brukeren får. Når disse synspunktene glir fra hverandre, kan brukeren se en gjentatt melding eller et ubesvaret svar. Produsenter opplever denne oppførselen oftere med nyere modeller enn eldre.

Forstå hvorfor duplikater oppstår før du designer en løsning. Lær mer om kontekstfordeling i standardselen.

Note

Gjentatte meldinger og dupliserte meldinger er vanligvis designproblemer knyttet til håndtering av kontekst, ikke feil. De oppstår når brukeren ser et svar, men komponenten som fortsetter planen har annen informasjon om hva som allerede er besvart.

For å forstå disse bruksområdene, vurder to flater separat: bruker-synlig output (det brukeren ser i chatten) og den aktive konteksten (informasjonen en komponent har tilgjengelig når den bestemmer hva den skal gjøre videre). Skapere ser ikke den aktive konteksten direkte. Derfor er det viktig å forstå hvert komponents perspektiv, og bruke input og output for å holde disse perspektivene på linje.

For å feilsøke et symptom i en levende agent, start med Feilsøk duplikatmeldinger og utesvar , og gå deretter tilbake til denne artikkelen for veiledning om redesign.

Design med kontekst i tankene

Hvis en forespørsel håndteres av ett enkelt steg etterfulgt av en Avslutt alle emner, kommer ikke konteksthåndtering i bruk. Men når en forespørsel må kjede flere komponenter, eller når brukeren sender inn mer enn én forespørsel i samme økt, er konteksthåndtering viktig. De fleste virkelige brukstilfeller dekker flere komponenter per økt, så design deretter.

  • Én komponent, så avslutt alle temaer. Et enkelt emne, verktøy, barneagent eller tilkoblet agent håndterer forespørselen, og økten avsluttes. Hvis den komponenten skriver det komplette svaret og rapporterer at det er fullført, har orkestreringslaget ingen grunn til å skrive et nytt svar.
  • Flere komponenter i økten. En økt kan kjøre flere komponenter før den gir brukeren et fullstendig svar. En økt kan også omfatte flere forespørsler. En komponent kan svare på deler av forespørselen, mens en annen må svare på resten. Hver komponent som fungerer må rapportere hva den gjorde. Ellers kan en senere komponent handle på kontekst som virker ubesvart og svare igjen.
Der kontekst har betydning Eksempel Lyddesign
Ingen kontekst brukt Et tema viser hele svaret i en melding eller et adaptivt kort. Noden Avslutt alle emner hindrer orkestreringslaget i å svare igjen.
Orkestreringslaget bruker kontekst Et emne viser en tabell for del A, deretter svarer orkestreringslaget på del B ved å bruke kunnskap eller en annen agent. Hver komponent rapporterer hva den svarte på og returnerer verdier som senere steg trenger, så orkestreringslaget svarer ikke to ganger.
Komponent bruker kontekst Et emne svarer på del A til brukeren, deretter håndterer en annen agent del B. Hvis agenten mottar foreldrekontekst der A ser ubesvart ut, svarer den A igjen. Ekskluder foreldrekontekst på den tilkoblede agenten der det er mulig, og komponentene returnerer utganger som bekrefter hva som ble besvart og hva som er igjen.

Designkomponenter for å rapportere hva som skjedde

En komponent sender en gjentatte melding eller dupliserte meldinger når orkestreringslaget ikke kan oppdage arbeid som en tidligere komponent har fullført. Bruk samme designtilnærming hver gang for å unngå duplikatmeldinger – instruer hver komponent om å rapportere sine handlinger til orkestreringslaget. For hver del av forespørselen, tildel nøyaktig én komponent for å skrive svaret brukeren mottar. Alle andre komponenter gjør jobben sin og returnerer kontekst uten å skrive til brukeren.

Bruk disse praksisene sammen som en felles designtilnærming:

  1. Return-utganger som registrerer hva som skjedde. Utganger alene er vanligvis nok for eldre modeller.
  2. Legg til en instruksjon i emne- eller underagentbeskrivelsen som definerer hva en vellykket kjøring betyr. Denne tilnærmingen gjør designet robust.
  3. Legg til en toppnivåinstruksjon slik at orkestreringslaget sjekker disse utgangene før det svarer. Nyere modeller drar mest nytte av denne tilnærmingen.

Kun komponenter som støtter egendefinerte utganger kan returnere utganger og inkludere beskrivelsesinstruksjoner. For komponenter som ikke støtter egendefinerte utdata, unngå dupliserte meldinger ved å begrense konteksten de mottar og ved å legge til en instruksjon på toppnivå.

Komponent Rapporterer tilbake med Korriger
Tema answered (Sant/Falskt), choiceReceived (Sant/Falskt), og en viste verdi eller sammendragsutdata (Tekst) Returner outputene og legg til en instruksjon i emnebeskrivelsen. Design emner som mini-agenter som unngår duplikatmeldinger gir eksempler på temabeskrivelser.
Subagent (barn eller tilknyttet agent) answered (Sant/Usant), interactionSummary (Tekst), openQuestions (Tekst) Returner utgangene, legg til en scoping-inngang, og legg til en instruksjon i subagentbeskrivelsen. Design underagenter som unngår duplikatmeldinger gir eksempler på underagentbeskrivelser.
Kunnskap (et kall til kunnskap) Kan ikke tilpasse konteksten, kan gjenta et svar. Hold en ryddig kontekst på toppnivå og påvirk hvilke forespørsler som sendes.
Generativ svarnode Kan ikke tilpasse konteksten, kan gjenta et svar, svaret kan bli gjentatt senere. Behold en ren kontekst på toppnivå, påvirk forespørselen som skrives til nodens inndata, og la vertsemnet returnere utdata eller utdata i besvart tilstand.

Design en robust toppnivåinstruksjon for å unngå gjentatte meldinger

Utgangene holder orkestreringslaget informert. Legg til en toppnivåinstruksjon som ber nyere modeller sjekke utgangene før de svarer.

Følgende toppnivå-agentinstruksjon er et eksempel designet for å fungere på tvers av brukstilfeller, enten en komponent kommuniserer direkte med brukeren eller ikke. Rediger og tilpass det etter behov.

Når et tema eller en agent blir kalt, se alltid etter det 'besvarte' boolske utgangspunktet før du bestemmer deg for hva du skal svare. Emner og agenter har sin egen kommunikasjonskanal med brukeren. Hvis 'besvart' er sant, anta alltid at forespørselen er besvart riktig ved bruk av minst én av utdatavariablene, og sjekk hvilke basert på utdatabeskrivelsen. Ikke gi en klønete anerkjennelse av det besvarte innholdet. Gi kun de ubesvarte resultatene, og fortsett samtalen naturlig med neste steg.

Begrepet kanal refererer ikke til en integrasjonskanal som Teams eller en nettside. Det er en prompting-enhet som forteller orkestreringslaget at brukeren kanskje allerede har sett svaret eller gjort et valg gjennom en annen komponent, som et emne, kort eller en subagent. Denne formuleringen får mest effektivt modellen til å sjekke sitt svar før den svarer.

Håndter temaer

Et tema kommuniserer ofte direkte med brukeren ved å vise en melding, stille et spørsmål eller presentere et Adaptivt Kort. Orkestreringskonteksten mottar temaets tekst som ren tekst, men registrerer ikke om brukeren så den. Konteksten mottar heller ikke Adaptive Card-handlinger eller -valg. Hvis emnet svarer brukeren, men ikke rapporterer handlingen til orkestreringslaget, behandler orkestreringslaget forespørselen som uløst og svarer på nytt.

Utform et emne som en mini-agent. Returner utdata som angir at den er besvart, slik at orkestreringslaget vet at forespørselen ble håndtert, og returner eventuelle verdier emnet viser, eller valg det registrerte, som et senere trinn trenger. Resultatene gjør handlingene og resultatene tilgjengelige for resten av planen. Legg til en instruksjon i emnebeskrivelsen som definerer hva en vellykket gjennomspilling betyr.

Lær mer i Design-temaer som mini-agenter som unngår dupliserte meldinger.

Håndter barne- og tilknyttede agenter

Design barne- og tilknyttede agenter slik du designer andre komponenter. Deres frem og tilbake med brukeren er usynlig for forelderen, som bare får vite hva som skjedde gjennom utdata, og først etter at agenten er ferdig.

Barne- og tilknyttede agenter kan også motta tidligere ubesvarte forespørsler som forblir i foreldreagentens kontekst.

For hver agent, begrens oppgaven med en input, spesifiser om den svarer brukeren eller forblir stille, og returner utdata som forteller foreldreagenten hva som har skjedd.

Lær mer i Design underagenter som unngår dupliserte meldinger.

Håndter kunnskap

Kunnskap er en overordnet konstruksjon som agenten påkaller. Den mottar en forespørsel basert på agentens design, og den mottar agentens kontekst. De fleste gjentatte meldingsproblemer oppstår når agentens kontekst mangler informasjon fra andre komponenter. Design kunnskap for å påvirke hvordan agenten formulerer forespørselen. Sørg for at andre komponenter bruker utgangene sine riktig.

Håndter generative svarnoder

En generativ svarnode lever innenfor et tema og svarer ut fra kunnskap. Den mottar foreldrekonteksten pluss det som sendes inn i inputen, så den oppfører seg som toppnivå kunnskap og utvider svaret sitt fra den nåværende konteksten. Den kan skrive svaret direkte til chatpanelet eller lagre det i en topic-variabel, men den kan ikke returnere noe til toppnivå-konteksten alene. Som med alt temainnhold, forblir svaret i emnet med mindre temaet returnerer et resultat.

En generativ svarnode trenger ingen spesiell håndtering utover regelen som gjelder for hvert emne: send resultatet som et emneutgang. Hvis noden svarer brukeren i emnet, legg til en utdata i besvaret tilstand og en utdata med vist verdi. Disse utgangene gir orkestreringslaget en registrering av at forespørselen ble besvart og forhindrer at et senere steg svarer på forespørselen igjen.

Sørg for at beskrivelser og instruksjoner samsvarer med synsvinkelen

Beskrivelser og instruksjoner er også en del av kontekstkontrakten.

Denne instruksjonen leder til temaet:

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

Denne instruksjonen videresender og tildeler ansvaret for svaret til orkestreringslaget:

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

Hvis emnet allerede viser balansen, oppretter den andre instruksjonen en andre svarsti. Hvis emnet ikke returneres balanceValue, kan orkestreringslaget kalle emnet på nytt eller svare at det ikke kjenner verdien.

Bruk beskrivelser og instruksjoner som samsvarer med synspunktet:

  • En temabeskrivelse hjelper orkestreringslaget med å bestemme når og hvordan temaet skal brukes. Den følger også instruksjoner om hva som skal gjøres eller sendes ut videre.
  • En beskrivelse av en tilkoblet agent kommer fra foreldrenes synspunkt.
  • En instruksjon fra den tilkoblede agenten leses fra den tilkoblede agentens synspunkt.
  • En beskrivelse av emne- eller tilkoblet-agent-utdata forteller orkestreringslaget hvordan det skal tolke den returnerte verdien.

For et tema som viser et svar til brukeren og setter answered=true, beskriv både når du skal rute til temaet og hva en vellykket kjøring betyr:

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.

For et tema som kun skriver utdata, beskriv både når du skal rute til emnet og hvordan du skal svare:

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

Gjenopprette kontekst i lange samtaler

En verdi som en komponent hadde, kan forlate den aktive konteksten på to måter. I en lang økt kan en verdi som var tilgjengelig for noen runder siden ikke lenger være i aktiv kontekst. Eller en komponent henter et komplett resultat, bruker den relevante delen til å produsere et svar, og returnerer kun det svaret slik at resten av resultatet aldri når orkestreringslaget. Uansett kan agenten hente dataene igjen eller be brukeren om informasjon den allerede har, noe brukeren oppfatter som et feil svar. Orkestreringslaget oppfører seg som om det aldri har mottatt verdien.

Design for dette scenariet ved å returnere og lagre viktig kontekst og levere den tilbake når det trengs:

  • Returner et komplett resultat, ikke bare den delen som ble brukt til å svare. Et hentet resultat har ofte mer enn ett felt, mange rader og lang tekst. Returner alle data som en senere omgang kan trenge, som utdata, slik at orkestreringslaget har dem uten å hente dem på nytt.

  • Lagre og bruk verdier på tvers av omganger. På de riktige punktene, før eller etter et verktøykall, rut til et emne som kan lagre eller levere verdien gjennom sine input og output og en global variabel, slik at planen ikke henter verdien eller ber om den igjen.

Tips

Sømløs agentisk atferd bygger på et agentdesign som tar hensyn til kontekst i hvert steg og fra alle synsvinkler.