Design subagenter, der undgår dublerede beskeder

Bemærkning

Denne artikel beskriver egenskaber og adfærd ved standardselen. Lær, hvordan du får adgang til standardfunktioner i Access standardagenter og agentflows.

Duplikerede beskeder kommer fra konteksthuller. Agentdesign skal tage højde for kontekst ved hvert trin.

En subagent, enten en børneagent eller en forbundet agent, kører på sit eget orkestreringslag inden for en moderagents plan. Den modtager en anmodning fra forældremyndigheden og fuldfører opgaven. Subagenten producerer tre typer output: indhold, den viser brugeren, værdier den returnerer gennem definerede output, og et implicit svar, den sender til den kaldende agent. Forælderen kan ikke se subagentens udveksling med brugeren og lærer kun resultatet gennem de definerede output og implicit respons. Denne begrænsede synlighed forårsager ofte dublerede beskeder og ubesvarede svar.

Tip

For vejledning om, hvornår arbejdet skal deles på tværs af agenter og generelle bedste praksisser for flere agenter, se Multi-agent orkestreringsmønstre og bedste praksis samt Multi-agent-mønstre. Denne artikel forklarer, hvordan input og output tilpasser en underagents svar til moderagentens kontekst.

Denne artikel bygger videre på kontekstmodellen beskrevet i Context distribution in the standard harness og designbeslutningerne i Design best practices for at undgå duplikerede beskeder.

Slå forældrekontekst fra for en tilsluttet agent

En underagent, der modtager forælderens samtalekontekst, kan handle på den. Hvis den kontekst indeholder en anmodning, som forælderen endnu ikke har besvaret, kan underagenten svare på den, gentage noget, forælderen allerede har håndteret, eller indtage den forkerte rolle. Disse handlinger forårsager ofte duplikerede beskeder.

En forbundet agent har en indstilling, Send samtalehistorik til denne agent, som styrer, om den modtager forælderens samtalekontekst. Denne indstilling er aktiveret som standard. Fravælg det, så den tilsluttede agent kun fungerer ud fra de input, som forælderen sender, ikke hele samtalen.

Skærmbillede af muligheden 'Send samtalehistorik til denne agent' aktiveret, bemærker at deaktivering forhindrer historikdeling mellem agenter.

En barneagent har ikke noget tilsvarende miljø. Den kører inde i forælderen og modtager altid forælderens samtalekontekst.

For forbundne agenter, der skal bevare konteksten for det arbejde, de er tildelt, og for børneagenter, der har kontekst som standard, brug et scoping-input for at beskytte subagentens scope.

Brug et inputfelt til afgrænsning

Nogle gange har en underagent brug for moderagentens kontekst for at udføre sine opgaver. Når du passerer den kontekst, inkluder et scoping-input – det fortæller underagenten præcis, hvad den skal arbejde på, så ubesvarede forespørgsler i konteksten ikke fjerner opgaven. Hvis du ikke får konteksten videre, behøver du ikke et scoping-input, fordi subagenten kun har den anmodning, som forældreen har sendt til den.

For at beskytte underagentens omfang tilføjes et input med en beskrivelse scopedRequest som: The specific request this agent should fulfill. Orkestreringslaget udfylder inputtet, når det kalder underagenten. Moderagenten identificerer den relevante del af anmodningen og sender kun denne del, selvom dens kontekst indeholder en anden ubesvaret anmodning.

Et scoping-input er et robust design, selv når du ikke beholder forældrekonteksten. Inputtet giver producenten mere kontrol over indholdet af den forespørgsel, der sendes til underagenten.

Forankr subagentens instruktioner til det input, så det arbejder ud fra scoped request og ignorerer alt andet, der ligner en indledende anmodning.

Eksempler på subagentinstruktioner:

Fulfill the request in the scopedRequest input. 
Treat it as your initial request and ignore any other initial requests in the conversation.

Konfigurer input og output

Input og output er kontrakten mellem forældre og underagent. Inputtet scoper, hvad subagenten arbejder med, og outputtene fortæller forælderen, hvad der skete, så den kan orkestrere resten af samtalen. Forælderen kan ikke se subagentens udveksling med brugeren, så denne kontrakt er det eneste pålidelige signal, den har.

Important

En subagent, der ikke returnerer nogen output, er et advarselstegn. Uden output har forælderen ingen registrering af, hvad underagenten svarede, eller hvad der er tilbage. Den kan gentage et svar, som underagenten allerede har givet, eller droppe den del af anmodningen, som underagenten ikke har håndteret.

Konfigurér følgende input og output, og skriv beskrivelsen af hver enkelt, så det overordnede orkestreringslag kan læse:

Indgang eller udgang Beskrivelse Sådan bruger du
scopedRequest (indtastning) Den specifikke anmodning, denne agent skal opfylde. Forælderen udfylder den kun med den relevante del af brugerens anmodning. Det beskytter underagenten mod at besvare det forkerte spørgsmål, når forælderens kontekst stadig indeholder andre, ubesvarede anmodninger. Forankr subagentens instruktioner til dette input.
answered (uddata) Sandt, når brugeren allerede har modtaget et svar på scopedRequest. Sæt det på hver subagent, uanset om den sender besked til brugeren eller forbliver tavs. Den øverste instruktion, vist næste gang, læser den, så forælderen ikke svarer på den samme anmodning igen.
scopedRequest (uddata) Den anmodning, denne agent arbejdede på. Gentag den scoped request, så den når det øverste orkestreringslag, som ikke pålideligt holder de inputs, den skaber, i sin egen kontekst. I multi-intent ture, der kræver mere end én underagent, gør denne funktion det muligt for topniveauet at planlægge korrekt og undgå at sende den forkerte underagent til det forkerte spørgsmål.
interactionSummary (uddata) Et kort resumé af det svar, der blev leveret til brugeren. Returner den, når subagenten sender direkte besked til brugeren, så forælderen ved, hvad der blev kommunikeret, og ikke gentager det.
findings (output) Svaret på scopedRequest, som forælderen skal levere til brugeren. Returnér det, når underagenten ikke svarer, så moderagenten har indholdet til at sende videre.
openQuestions (output) Enhver del af brugerens anmodning, der forbliver ubesvaret. Returner det fra enhver subagent, der kun kan opfylde en del af anmodningen, eller hvor en ny anmodning dukkede op i subagentens samtale, så moderagenten kan fuldføre resten og fortsætte værktøjskæden. Subagenten bør ikke gætte, hvilken agent der håndterer resten.

Vælg hvilken komponent, der kommunikerer med brugeren

Beslut om forældreagenten eller underagenten kommunikerer med brugeren. I de fleste tilfælde skal moderagenten kommunikere med brugeren, så den kan kombinere resultaterne i ét svar. Lad underagenten kommunikere direkte, når den skal give et langt svar eller have en samtale over flere ture. Giv nok information til, at forælderen kan håndtere resten af samtalen med kontekst.

Uanset hvilken komponent der kommunikerer, tilføj en topniveau-instruktion, så orkestreringslaget tjekker hver subagents output, før det svarer.

Denne eksempelinstruktion på topniveau virker i alle tilfælde, uanset om en underagent sender direkte besked til brugeren eller forbliver tavs. Rediger og tilpas det efter behov.

Når et emne eller en agent bliver kaldt, skal du altid lede efter det 'besvarede' booleske output, før du beslutter, hvad du vil svare. Emner og agenter har deres egen kommunikationskanal med brugeren. Hvis 'besvaret' er sandt, antag altid, at anmodningen er blevet besvaret korrekt ved brug af mindst én af outputvariablerne, og tjek hvilke baseret på outputbeskrivelsen. Giv ikke en akavet anerkendelse af det besvarede indhold. Giv kun de ubesvarede resultater, og fortsæt samtalen naturligt med næste skridt.

Begrebet kanal refererer ikke til en integrationskanal. Det er en prompting-enhed, der fortæller orkestreringslaget, at brugeren måske allerede har set svaret gennem en anden komponent.

Skriv subagentens beskrivelse for det overordnede orkestreringslag, så den ved, hvornår den skal bruge subagenten, og hvordan den skal læse dens output. Her er et eksempel:

Handles payroll questions. 
If its answered output is true, the user has already received their response and it should not be answered again.

Angiv besvaret-status og outputværdier for hver underagent, uanset om underagenten sender en besked til brugeren eller forbliver tavs, og giv den overordnede agent én instruktion om at læse dem. Med denne tilgang kan en agent blande stille subagenter og subagenter, der sender direkte beskeder til brugeren, kun adskilt ved deres output. Lær mere i Design, en robust topniveau-instruktion til at undgå gentagne beskeder.

Deleger brugerkommunikation til forældremyndigheden

Overvej at dirigere al brugerkommunikation gennem moderagenten i stedet for en underagent. Indsaml det, subagenten har brug for som input, før den starter, læs det, den producerede som output, når den er færdig, og instruer den i ikke at sende direkte beskeder til brugeren. En subagent, der aldrig skriver til brugeren, kan ikke svare på noget, som forælderen allerede har svaret på.

Sig til underagenten, at han skal tie stille og returnere sine fund. Her er et eksempel:

Do NOT reply or communicate with the user directly. 
Only fulfill the scopedRequest provided in the input and respond with the result.

En stille underagent returnerer findings og openQuestions, begge beskrevet i Konfigurér input og output, for at give sit svar til forældremyndigheden og markere ethvert arbejde, der er tilbage.

Returner et openQuestions-resultat. Det lader orkestreringslaget færdiggøre resten af brugerens anmodning og fortsætte værktøjskædningen, når en underagent kun kan opfylde en del af det, der blev bedt om.

At holde underagenten tavs kræver en eksplicit instruktion. Som standard kan en subagent sende en besked til brugeren på egen hånd, mens den kører. Fuldførelsesindstillingen Efter kørsel forhindrer ikke disse meddelelser, fordi den kun fortæller det overordnede element, hvad det skal gøre, når underagenten er færdig.

Bemærkning

At sige til moderagenten: "Du er den eneste agent, der taler med brugeren," virker ikke. Moderagenten kan ikke stoppe en kørende underagent, og underagenten kan stadig sende en besked til brugeren på egen hånd. I stedet skal du instruere underagenten om at forblive tavs, og derefter teste for at bekræfte.

Nogle underagenter skal kommunikere direkte

En subagent, der sender direkte beskeder til brugeren, er et gyldigt valg, ikke en overtrædelse af en regel, men det kræver bevidst design for at undgå gentagne beskeder fra forælderen.

Nogle anvendelsestilfælde kræver, at subagenten svarer direkte til brugeren, enten for at levere et langt svar uden at kopiere det ind i forældrekonteksten eller for at føre en samtale. For at undgå gentagne beskeder og tabt kontekst, overlad kontekst til forælderen i output.

Få underagenten til at give et langt svar og returnere et resumé

Subagenten giver sit fulde svar direkte til brugeren og returnerer kun et kort resumé eller en note om, at den har leveret svaret. Brug denne tilgang til lange svar, såsom detaljerede analyser, og begræns den information, der returneres, til forælderens kontekst. Målet er at holde forældrekonteksten lille, men informeret.

Returner answered og interactionSummary, begge beskrevet i Konfigurér input og output.

Få underagenten til at føre en samtale med brugeren

Subagenten udveksler flere beskeder med brugeren på tværs af flere trin for at fuldføre den scoped forespørgsel. Den største risiko er, at forælderen ikke kender til de mellemliggende samtaletrin, underagentens arbejde og eventuelle svar, der gives, eller eventuelle nye anmodninger, der er dukket op. Som følge heraf kan forælderen ikke handle på nye forespørgsler eller svare korrekt i senere trin.

Returner answered, scopedRequest, og interactionSummary, som beskrevet i Konfigurér input og output.

Top-niveau instruktionen dækker også dette brugstilfælde.