Orkestreringsmönster och metodtips för flera agenter

Generativ orkestrering stöder också system med flera agenter, där en agent anropar andra agenter. När du delar upp problem i flera specialiserade agenter gör du programmet mer modulärt, skalbart och hanterbart.

Inbyggda agenter

Inline-agenter, även kallade child agents, är små, återanvändbara arbetsflöden inom samma agent. De är ofta bara ämnen som huvudagenten använder som subrutiner. Till exempel kan huvudagenten kalla ett ämne "Översätt text" som ett steg i en större plan. Inline-agenter delar kontext med huvudagenten, så att skicka data mellan dem är enkelt.

Bästa praxis: Håll interna agenter fokuserade på ett enda ansvar och testa dem väl.

Anslutna agenter

Kopplade agenter är separata agenter med egen orkestrering, verktyg och kunskap. Huvudagenten delegerar en del av en förfrågan till en barnagent. En IT-agent anropar till exempel en försäljningsagent för att få information om priser. Anslutna agenter möjliggör modularitet och domänavgränsning och kan kringgå plangränser. De kan ha andra privilegier eller kunskaper, så tillämpa styrning och revisionskontroller.

Dock kräver användningen av sammankopplade agenter noggrann styrning:

  • Orkestrering: Moderorkestratören bör ha tydliga kriterier för när den ska överlämna till en ansluten agent. Orkestreringen överlämnar vanligtvis när användarens avsikt matchar den anslutna agentens domän. För att underlätta denna process, beskriv den anslutna agentens syfte tydligt i förälderns konfiguration. Behandla hela den anslutna agenten som ett agentiskt ”verktyg” med en beskrivning, ur den överordnade agentens perspektiv.

  • Dataöverlämning: Du måste hantera dataöverlämning. Bestäm vilken kontext från föräldern som ska skickas vidare till den anslutna agenten. En ansluten agent har en kontextinkluderingsinställning som styr om den tar emot konversationshistoriken, så bekräfta den inställningen istället för att anta att historiken skickas automatiskt. En barnagent, däremot, får alltid förälderns kontext. Du kan också behöva uppfylla specifika parametrar. Till exempel, om huvudagenten redan känner till användarens namn från tidigare, kan den skicka det till den anslutna agenten för att undvika att fråga igen.

  • Säkerhet: Den anslutna agenten kan ha tillgång till saker som moderagenten inte har. Se till att anropet med den anslutna agenten inte oavsiktligt kringgår begränsningar. Till exempel, om moderagenten inte får radera poster men den anslutna agenten kan, bör moderagenten inte kalla den anslutna agenten i situationer där radering kan ske utan korrekt godkännande. Behandla ett kopplat agentsamtal som vilken annan kraftfull åtgärd som helst. Om den gör något känsligt, utsätt den för nödvändiga kontroller eller användarens samtycke.

  • Revision och övervakning: Logga när en ansluten agent anropades och vad den gjorde. Eftersom det är en separat agent har du separata transkriptioner för det. Det är viktigt för felsökning att koppla ihop förälder- och anslutna sessioner. Vanligtvis kopplar identifierare i telemetrin ihop de två.

När man ska separera agenter

Skapa inte en separat agent för varje deluppgift. Använd separata agenter om deluppgiften:

  • Är tillräckligt komplex för att ha en egen verktygssvit eller kunskap (ett annat expertområde)
  • Kräver andra styrningsregler eller åtkomstkontroller än huvudagenten
  • Kan återanvändas i flera olika huvudagenter (så det är ungefär som en tjänsteagent)

Om inget av dessa villkor gäller, kan en enkel inbäddad agent klara uppgiften väl och samtidigt vara enklare än en fullt ansluten agent. Separata agenter medför kostnader för systemet. Det finns en något längre exekveringstid på grund av kontextväxling samt en komplexitet i att hantera flera agenter. Så använd dem med omtanke. Börja med en agent för ett praktiskt tillvägagångssätt. Sedan delas bara upp i flera agenter när du tydligt ser ett behov av modularitet eller en gräns som en enskild agent inte bör korsa.

Metodtips för orkestrering med flera agenter

Följande metodtips gäller vid redigering av instruktioner för överordnade och underagenter i en installation med flera agenter.

1. Princip för enskilt svar

Se till att endast en agent pratar med användaren per tur. I en konfiguration med flera agenter är den överordnade agenten den enda som ska leverera det slutliga svaret. Subagenter är utredare, inte svarsgivare.

  • Gör: Lägg till i överordnade instruktioner: "Du är den enda agenten som kommunicerar med användaren. Kombinera resultat från alla underordnade agenter till ett enda svar."
  • Gör det inte: Lämna det tvetydigt. Utan uttrycklig vägledning svarar underagenter användaren direkt, vilket orsakar duplicerade eller partiella meddelanden.

Note

Att routa all användarkommunikation via föräldern är en giltig design, inte den enda. Ett barn eller en ansluten agent kan också svara användaren direkt när det är ett medvetet val. I båda fallen måste utformningen förebygga samma risk: att den överordnade agenten besvarar en begäran som underagenten redan har hanterat. Lär dig om kontextkontraktet som förhindrar dubbla meddelanden i båda utformningarna i Utforma underagenter som undviker dubbla meddelanden.

2. Instruktioner för subagenten måste deklarera sin roll

Berätta alltid för subagenter att de är subagenter. Subagenter vet inte att de ingår i en orkestrering. Utan uttrycklig vägledning beter de sig som fristående agenter och skickar meddelanden direkt till användaren.

  • Gör: Lägg till i varje underagents instruktioner: "Du är en underagent. Svara INTE direkt till användaren. Ditt jobb är att söka efter information och returnera dina resultat till den överordnade agenten. Den överordnade agenten hanterar all kommunikation med användaren."
  • Gör inte: Anta att underagenter tar reda på orkestreringsmönstret på egen hand.

3. Använd tydligt, direkt språk i instruktioner

Använd alltid direktivspråk. Undvik mjuk eller artig frasering. Plattformen matar in instruktioner på systemnivå med hjälp av ett starkt språk (MUST, DO NOT, NEVER). Instruktioner skrivna med mjukt språk ("försök till", "du borde", "det skulle vara bra att") förlorar prioritet när de står i konflikt.

  • Gör: "Svara ALDRIG direkt till användaren. Returnera ENDAST dina resultat."
  • Gör: "Det måste finnas exakt ett slutligt svar per användarfråga."
  • Gör inte: "Försök att undvika att skicka meddelanden till användaren och returnera i stället dina resultat."
  • Gör inte: "Helst vill vi ha ett enda kombinerat svar."

4. Använd en kunskapskälla per subagent (ingen överlappning)

Tilldela distinkta, icke-överlappande kunskapskällor till varje underagent. Om två underagenter söker i samma kunskapsbas hittar en underagent svaret först. Den andra underagenten returnerar antingen duplicerade resultat eller hoppar över sökningen helt och hållet och lägger inte till något värde.

  • Gör: CA-1 söker i Kunskapskälla A (till exempel HR-principer). CA-2 söker i Kunskapskälla B (till exempel IT-dokumentation).
  • Gör inte: Ge inte båda underagenterna åtkomst till samma dokument, Dataverse-tabeller eller SharePoint-webbplatser.
  • Obs! Om du bara har en kunskapskälla använder du en enda agent med kunskap i stället för att dela upp i två underagenter. Fleragentssystem skapar bara värde när källorna faktiskt är genuint olika.

5. Använd exakta och distinkta beskrivningar för subagenter

Skriv tydliga, distinkta beskrivningar för varje underagent som är synlig för den överordnade. Den överordnade agenten använder underagentbeskrivningar för att bestämma routning. Om beskrivningarna är vaga, identiska eller felaktiga kan den överordnade noden inte fatta välgrundade routningsbeslut.

  • Gör: CA-1: "Söker i HR-principdokument efter medarbetarrelaterade frågor." CA-2: "Söker i IT-kunskapsbasen efter frågor om teknisk support."
  • Gör inte: Ge båda agenterna samma beskrivning när de hanterar olika domäner.
  • Gör inte: Använd allmänna beskrivningar som "Den här agenten kan hjälpa till med frågor".

6. Överordnade instruktioner måste definiera orkestreringsmönstret

Informera den överordnade agenten om hur den ska orkestrera. Säg inte bara "använd underordnade agenter". Den överordnade användaren behöver explicita instruktioner för mönstret: anropa agenter, vänta på resultat, kombinera och svara sedan.

  • Gör: "När användaren ställer en fråga: 1. Anropa båda de underordnade agenterna för att samla in information. 2. Vänta tills båda de underordnade agenterna återkommer med sina resultat. 3. Kombinera resultaten till ett enda enhetligt svar. 4. Leverera exakt ett svar till användaren. Underordnade agenter får inte svara direkt till användaren."
  • Gör inte: "När användaren ställer en fråga anropar du underordnade agenter och får svaret från båda källorna och ger ett enda kombinerat svar." (För vagt. Instruktionen säger inte att underagenter ska vara tysta.)

7. Inkludera direktivet om "inget direkt svar" i uppgiftsdelegeringen

Även med tydliga instruktioner för subagent ger tillägg av förstärkning i den delegerade uppgiften ett säkerhetsnät.

  • Gör så här: Lägg till i överordnade instruktioner: "När du delegerar till en underordnad agent ska du alltid inkludera i uppgiften: 'Returnera endast dina slutsatser. Svara inte användaren.'"
  • Gör inte: Förlita dig enbart på underagentens egna instruktioner. Aktivitetskontexten ger subagenten fler signaler som förstärker mönstret.

8. Testa med sökfrågor som inte matchar domänen

Testa alltid med frågor som inte matchar någon underagents domän. Det här testet visar om underordnade agenter på ett smidigt sätt returnerar "ingen information hittades" i stället för att returnera information som kan vara felaktig, hänga sig eller skicka förvirrande meddelanden.

  • Gör: Testa med frågor utanför alla subagentdomäner (till exempel fråga om väder när agenter hanterar HR och IT).
  • Gör så här: Kontrollera att de överordnade hanterar "båda agenterna hittade ingenting" på ett korrekt sätt.
  • Gör inte: Testa endast med enklaste ärendefrågor som perfekt matchar en underagents domän.

9. Föredrar att fråga över informera när du förväntar dig en uppföljning

Använd interaktioner i fråga/fråga-stil när du förväntar dig att användaren svarar. Använd endast inform/send-style för slutgiltiga enkelriktade meddelanden. Om agenten ställer en fråga till användaren med hjälp av ett enkelriktat meddelande (inform), går användarens svar tillbaka till den överordnade planeraren som en helt ny förfrågan. I det här fallet är det bättre att fortsätta samma konversation med underagenten.

  • Gör: Skriv instruktioner som: "Om du behöver förtydliganden kan du ställa en fråga till användaren och vänta på deras svar."
  • Gör inte: Skriv instruktioner som: "Informera användaren om alternativen och låt dem välja." "Informera" signalerar ett enkelriktad meddelande, medan "fråga" signalerar ett dubbelriktad utbyte.

Checklista för snabbreferens

# Kontroll
1 Överordnade instruktioner anger uttryckligen "endast jag svarar användaren"
2 Varje instruktion för underagent säger "svara inte direkt till användaren"
3 Instruktionerna är formulerade i ett starkt imperativt språk (MÅSTE, ALDRIG, ENDAST)
4 Varje underagent har en unik, icke-överlappande kunskapskälla
5 Beskrivningar av subagenter är korrekta, distinkta och specifika
6 Överordnade instruktioner definierar det fullständiga orkestreringsmönstret (anropa → vänta → kombinera → svara)
7 Överordnad skickar "inget direkt svar" i delegerad uppgiftskontext
8 Testad med domänmatchningsfrågor
9 Skillnaden mellan att fråga och att informera är korrekt i subagentinstruktioner