Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Note
Dit artikel beschrijft de kenmerken en het gedrag van het standaardharnas. Lees hoe je toegang krijgt tot standaardfuncties in Standaardagenten en agentstromen openen.
Dubbele berichten ontstaan uit contextgaten. Agentontwerp moet bij elke stap rekening houden met context.
Een subagent, hetzij een kindagent of een verbonden agent, draait op een eigen orkestratielaag binnen het plan van een ouderagent. Het ontvangt een verzoek van de ouder en voltooit de taak. De subagent produceert drie soorten output: inhoud die hij aan de gebruiker toont, waarden die hij teruggeeft via gedefinieerde outputs, en een impliciet antwoord dat hij naar de aanroepende agent stuurt. De ouder kan de uitwisseling van de subagent met de gebruiker niet zien en leert het resultaat alleen via de gedefinieerde outputs en impliciete respons. Deze beperkte zichtbaarheid veroorzaakt vaak dubbele berichten en gemiste antwoorden.
Tip
Voor advies over wanneer werk te splitsen tussen agenten en algemene best practices voor meerdere agenten, raadpleeg Multi-agent orchestration patterns and best practices en Multi-agent patterns. Dit artikel legt uit hoe inputs en outputs het antwoord van een subagent afstemmen op de context van de ouderagent.
Dit artikel bouwt voort op het contextmodel beschreven in Context distribution in de standaard harness en de ontwerpbeslissingen in Design best practices om dubbele berichten te voorkomen.
Schakel de oudercontext uit voor een verbonden agent
Een subagent die de context van het gesprek van de ouder ontvangt, kan erop handelen. Als die context een verzoek bevat dat de ouder nog niet heeft beantwoord, kan de subagent het beantwoorden, iets herhalen wat de ouder al heeft afgehandeld, of de verkeerde rol aannemen. Deze acties veroorzaken vaak dubbele berichten.
Een verbonden agent heeft een instelling, Geef gespreksgeschiedenis door aan deze agent, die bepaalt of hij de context van het gesprek van de ouder ontvangt. Deze instelling is standaard ingeschakeld. Deselecteer het zodat de verbonden agent alleen werkt vanuit de invoer die de ouder stuurt, niet vanuit het volledige gesprek.
Een kindagent heeft geen equivalente setting. Het loopt binnen de ouder en ontvangt altijd de context van het gesprek van de ouder.
Voor connected agents die de context moeten behouden voor het werk dat ze toegewezen krijgen, en voor child agents die standaard context hebben, gebruik je een scoping-invoer om de scope van de subagent te beschermen.
Gebruik invoer voor afbakening
Soms heeft een subagent de context van de ouderagent nodig om zijn taken te voltooien. Als je die context doorgeeft, voeg dan een scoping-invoer toe—die vertelt de subagent precies waar hij aan moet werken, zodat aanhoudende, onbeantwoorde verzoeken in de context het niet van de taak halen. Als je de context niet doorgeeft, heb je geen invoer voor de scope nodig, omdat de subagent alleen beschikt over het verzoek dat de bovenliggende agent naar die subagent heeft doorgestuurd.
Om de scope van de subagent te beschermen, voeg je een invoer toe met een beschrijving scopedRequest zoals: The specific request this agent should fulfill. De orkestratielaag vult de invoer wanneer deze de subagent aanroept. De ouderagent identificeert het relevante deel van het verzoek en geeft alleen dat deel door, zelfs als de context een ander onbeantwoord verzoek bevat.
Een scoping-invoer is een robuust ontwerp, zelfs als je de oudercontext niet behoudt. De invoer geeft de maker meer controle over de inhoud van het verzoek dat naar de subagent wordt gestuurd.
Koppel de instructies van de subagent aan die invoer, zodat deze uitgaat van het afgebakende verzoek en al het andere negeert dat op een oorspronkelijk verzoek lijkt.
Voorbeeldinstructies voor subagenten:
Fulfill the request in the scopedRequest input.
Treat it as your initial request and ignore any other initial requests in the conversation.
Invoer en uitvoer configureren
Invoer en uitvoer vormen het contract tussen de bovenliggende agent en de subagent. De input bepaalt waar de subagent aan werkt, en de output vertelt de ouder wat er is gebeurd zodat die de rest van het gesprek kan orkestreren. De ouder kan de uitwisseling van de subagent met de gebruiker niet zien, dus dit contract is het enige betrouwbare signaal dat het heeft.
Important
Een subagent die geen outputs teruggeeft is een rode vlag. Zonder output heeft de ouder geen registratie van wat de subagent heeft beantwoord of wat er nog overblijft. Het kan een antwoord herhalen dat de subagent al heeft gegeven, of het deel van het verzoek dat de subagent niet heeft afgehandeld, laten vallen.
Configureer de volgende invoer en uitvoer, en schrijf van elk een beschrijving zodat de bovenliggende orkestratielaag deze kan lezen:
| Invoer of uitvoer | Description | Hoe te gebruiken |
|---|---|---|
scopedRequest (invoer) |
Het specifieke verzoek dat deze agent moet vervullen. | De ouder vult het alleen in met het relevante deel van het verzoek van de gebruiker. Het beschermt de subagent tegen het beantwoorden van de verkeerde vraag wanneer de context van de ouder nog andere, onbeantwoorde verzoeken bevat. Veranker de instructies van de subagent aan deze input. |
answered (uitvoer) |
Dat klopt wanneer de gebruiker al een antwoord op de scopedRequest heeft ontvangen. | Stel het in op elke subagent, of het nu de gebruiker een bericht stuurt of stil blijft. De bovenste instructie, die vervolgens wordt getoond, leest het zodat de ouder niet opnieuw op hetzelfde verzoek reageert. |
scopedRequest (uitvoer) |
Het verzoek waar deze agent aan heeft gewerkt. | Herhaal het scoped verzoek zodat het de orkestratielaag op het hoogste niveau bereikt, die de invoer die deze zelf aanmaakt niet consistent in de eigen context bewaart. Bij beurten met meerdere intenties die meer dan één subagent vereisen, stelt deze mogelijkheid het hoogste niveau in staat goed te plannen en te voorkomen dat de verkeerde subagent aan de verkeerde vraag wordt toegewezen. |
interactionSummary (uitvoer) |
Een korte samenvatting van het antwoord dat aan de gebruiker werd gegeven. | Stuur het terug wanneer de subagent direct een bericht naar de gebruiker stuurt, zodat de ouder weet wat er is gecommuniceerd en het niet herhaalt. |
findings (uitvoer) |
Het antwoord op de scopedRequest, die de ouder aan de gebruiker moet leveren. | Stuur het terug wanneer de subagent stil blijft, zodat de ouder de content heeft om af te leveren. |
openQuestions (uitvoer) |
Elk deel van het verzoek van de gebruiker dat onbeantwoord blijft. | Stuur het terug van elke subagent die slechts een deel van het verzoek kan vervullen, of waar een nieuw verzoek in het gesprek van de subagent is verschenen, zodat de ouderagent de rest kan afronden en de toolchain kan voortzetten. De subagent mag niet raden welke agent de rest afhandelt. |
Kies welke component met de gebruiker communiceert
Bepaal of de ouderagent of de subagent met de gebruiker communiceert. In de meeste gevallen laat je de ouderagent met de gebruiker communiceren zodat deze de resultaten kan combineren tot één antwoord. Laat de subagent direct communiceren wanneer hij een lang antwoord moet geven of een gesprek over meerdere beurten moet voeren. Geef genoeg informatie zodat de ouder de rest van het gesprek met context kan afhandelen.
Welke component ook communiceert, voeg één topniveau-instructie toe zodat de orkestratielaag de output van elke subagent controleert voordat hij antwoordt.
Deze voorbeeldinstructie op topniveau werkt in elk geval, of een subagent nu direct een bericht naar de gebruiker stuurt of stilblijft. Bewerk en pas het aan indien nodig.
Wanneer een onderwerp of agent wordt genoemd, zoek dan altijd naar de 'beantwoorde' booleaanse output voordat je beslist wat je wilt antwoorden. Topics en agents hebben hun eigen communicatiekanaal met de gebruiker. Als 'beantwoord' waar is, ga er dan altijd van uit dat het verzoek correct is beantwoord met ten minste één van de uitvoervariabelen, en controleer welke op basis van de uitvoerbeschrijving. Geef geen ongemakkelijke bevestiging van inhoud waarop al is geantwoord. Geef alleen de onbeantwoorde uitkomsten en zet het gesprek natuurlijk voort met de volgende stap.
De term kanaal verwijst niet naar een integratiekanaal. Het is een prompting-apparaat dat de orkestratielaag vertelt dat de gebruiker het antwoord mogelijk al via een andere component heeft gezien.
Schrijf de beschrijving van de subagent voor de ouder orchestratielaag, zodat deze weet wanneer hij de subagent moet gebruiken en hoe hij zijn output moet lezen. Voorbeeld:
Handles payroll questions.
If its answered output is true, the user has already received their response and it should not be answered again.
Stel antwoordtoestand- en waarde-uitvoeren in op elke subagent, of de subagent nu een bericht naar de gebruiker stuurt of stilblijft, en geef de ouder één instructie om deze te lezen. Met deze aanpak kan een agent stille subagenten en subagenten combineren die direct een bericht sturen aan de gebruiker, alleen onderscheiden door hun output. Lees meer in Design een robuuste top-level instructie om herhaalde berichten te voorkomen.
Delegeer gebruikerscommunicatie aan de ouder
Overweeg om alle gebruikerscommunicatie via de hoofdagent te routeren in plaats van een subagent. Verzamel wat de subagent nodig heeft als input voordat hij begint, lees wat hij als output produceert nadat hij klaar is, en geef hem de instructie om de gebruiker niet direct te berichten. Een subagent die nooit naar de gebruiker schrijft, kan niet antwoorden op iets wat de ouder al heeft beantwoord.
Zeg tegen de subagent dat hij moet zwijgen en zijn bevindingen moet teruggeven. Voorbeeld:
Do NOT reply or communicate with the user directly.
Only fulfill the scopedRequest provided in the input and respond with the result.
Een stille subagent geeft findings en openQuestions, beide beschreven in Configure inputs and outputs, terug om zijn antwoord aan de ouder te geven en elk overgebleven werk te markeren.
Geef een openQuestions output terug. Het laat de orkestratielaag de rest van het verzoek van de gebruiker afronden en doorgaan met de toolchain wanneer een subagent slechts een deel van wat gevraagd werd kan uitvoeren.
Het stil houden van de subagent vereist een expliciete instructie. Standaard kan een subagent de gebruiker zelf een bericht sturen terwijl het draait. De instelling 'After Run Completion verhindert' deze berichten niet, omdat deze de ouder alleen vertelt wat te doen wanneer de subagent klaar is.
Note
Tegen de hoofdagent zeggen: "Jij bent de enige agent die met de gebruiker praat," werkt niet. De ouderagent kan een draaiende subagent niet stoppen, en de subagent kan de gebruiker nog steeds zelfstandig een bericht sturen. Geef in plaats daarvan de subagent de instructie om stil te blijven en test dan om het te bevestigen.
Sommige subagenten moeten direct communiceren
Een subagent die direct berichten stuurt naar de gebruiker is een geldige keuze, geen overtreding van een regel, maar vereist een bewust ontwerp om herhaalde berichten van de ouder te vermijden.
Sommige gebruiksgevallen vereisen dat de subagent direct op de gebruiker reageert, hetzij om een lang antwoord te geven zonder het in de oudercontext te kopiëren, hetzij om een gesprek te voeren. Om herhaalde berichten en verloren context te voorkomen, geef je context door aan de ouder in de outputs.
Laat de subagent een lang antwoord geven en een samenvatting terugsturen
De subagent geeft zijn volledige antwoord rechtstreeks aan de gebruiker en geeft alleen een korte samenvatting of een opmerking terug dat het antwoord is afgeleverd. Gebruik deze aanpak voor lange reacties, zoals gedetailleerde analyses, en beperk de teruggegeven informatie tot de context van de ouder. Het doel is om de oudercontext klein maar goed geïnformeerd te houden.
Return answered en interactionSummary, beide beschreven in Configureer inputs en outputs.
Laat de subagent een gesprek voeren met de gebruiker
De subagent wisselt meerdere berichten uit met de gebruiker via verschillende stappen om het scoped verzoek te voltooien. Het grootste risico is dat de ouder niet op de hoogte is van de stappen in het tussenliggende gesprek, het werk van de subagent en eventuele gegeven antwoorden, of van nieuwe verzoeken die naar boven komen. Daardoor kan de ouder niet reageren op nieuwe verzoeken of in latere stappen niet correct reageren.
Geef answered, scopedRequest, en interactionSummary, terug zoals beschreven in Invoer en uitvoer Configureren.
De top-level instructie behandelt ook dit gebruiksscenario.
Verwante informatie
- Contextverdeling in het standaardharnas
- Ontwerp best practices om dubbele berichten te vermijden
- Ontwerp onderwerpen als mini-agenten die dubbele berichten vermijden
- Probeer dubbele berichten en gemiste antwoorden op te lossen
- Ontdek multi-agent orkestratiepatronen
- Toepassing van generatieve orkestratiemogelijkheden
- Agentoplossingen ontwerpen: Principes en patronen