Växla modeller och inferensleverantörer under körning

Program kan använda modeller från olika slutsatsdragningstjänster för olika konversationer. Ett program kan till exempel ändra modeller baserat på användarval, modellfunktioner, tillgänglighet eller kostnad.

Att ändra målet för nästa begäran är bara en del av routningen. Den nya modellen behöver också den tidigare konversationen för att fortsätta med samma kontext. Om den kan ta emot den kontexten beror på var chatthistoriken lagras och vem som styr den.

Lagring av chatthistorik avgör portabilitet

Inferenstjänster stöder olika metoder för samtalstillstånd. Vissa API:er förväntar sig att anroparen anger relevant meddelandehistorik för varje begäran. Andra API:er lagrar konversationen i inferenstjänsten och låter anroparen fortsätta genom att skicka en identifierare.

Historikmodell Var meddelandena lagras Vad anroparen skickar
Hanteras av anroparen I programstyrt minne eller beständig lagring Relevant meddelandehistorik plus eventuella nya meddelanden med varje begäran
Slutsatsdragningstjänsthanterad I lagring som styrs av inferenstjänsten En tjänstspecifik konversations- eller svarsidentifierare, plus eventuella nya meddelanden.

Vissa slutsatsdragningstjänster stöder båda metoderna via olika API:er eller alternativ. Till exempel har OpenAI Responses parametern store, som du kan ange till true för chatthistorik som hanteras av inferenstjänsten, och till false för chatthistorik som hanteras av anroparen.

Anroparens hanterade historik stöder routning

När anroparen hanterar historiken har den åtkomst till meddelandena från tidigare svängar. En router kan välja en annan modell eller slutsatsdragningstjänst, och anroparen kan skicka dessa meddelanden med nästa begäran.

Historiken behöver inte finnas kvar i processminnet. Det kan komma från programägd varaktig lagring, så länge programmet kan läsa in det och skicka det till den valda tjänsten. Destinationen måste också stödja meddelandeinnehållet och de funktioner som användes tidigare i konversationen.

Inference-service – hanterad historik begränsar routning

När en slutsatsdragningstjänst hanterar historiken är det källan till sanningen för konversationen. Anroparen behåller vanligtvis en ogenomskinlig identifierare i stället för själva meddelandena.

Den identifieraren avser tillstånd som innehas av den ursprungliga tjänsten. Åtkomst kan också bero på vilket konto eller projekt, slutpunkt och autentiseringsuppgifter som används för att skapa konversationen. En klient för en annan tjänst kan inte använda identifieraren för att hämta meddelandena. En annan klient för samma tjänst kanske inte heller kan komma åt konversationen om den använder ett annat omfång.

En tjänst kan ha stöd för att ändra modeller i en av sina egna lagrade konversationer. Det beteendet är specifikt för tjänsten och är inte portabel routning. En allmän router kan inte överföra konversationen på tjänstsidan till en annan provider utan att först hämta eller rekonstruera meddelandena.

Routningsscenario Historikmodell Result
Växla mellan modeller från en leverantör Anroparen hanteras Anroparen kan spela upp historiken igen till den nya modellen. Den nya modellen måste ha stöd för de meddelande- och innehållstyper som användes i tidigare svängar.
Växla mellan olika slutsatsdragningsprovidrar Hanteras av anroparen Anroparen kan spela upp historiken igen till den nya providern. Den nya providern måste acceptera de roller, innehållstyper, verktygsanropsmeddelanden och verktygsresultatmeddelanden som användes i tidigare svängar.
Ändra modeller i en konversation på tjänstsidan Slutsatsdragningstjänsthanterad Växeln fungerar bara om inferenstjänsten låter den befintliga konversationen fortsätta med den nya modellen. Routningsklienten kan inte aktivera det här beteendet.
Växla till en annan slutsatsdragningstjänst Slutsatsdragningstjänsthanterad Den nya tjänsten kan inte komma åt den ursprungliga tjänstens konversationsidentifierare. Hämta eller återskapa meddelandena och starta den nya rutten med historik som hanteras av anroparen.

Mer information om dessa lagringsmodeller finns i Lagring.

Så implementerar Agent Framework körningsroutning

Agent Framework kan tillhandahålla den anroparhanterade historik som behövs för bärbar routning. I det här routningsmönstret är en leverantör av chatthistorik källan till sanningen för konversationen. Den kan lagra meddelanden i agentsessionen eller i programägd lagring.

I Agent Framework innehåller anroparhanterad historik lokalt sessionstillstånd och lagring av anpassad chatthistorik. Historik som hanteras av inferenstjänsten motsvarar lagring som hanteras av tjänsten.

För en ChatClientAgent finns en routningsklient för chatt i chatklientlagret i agentpipeline. Agenten och dess session förblir desamma medan routningsklienten väljer en av flera namngivna IChatClient instanser för varje begäran.

En dirigerad begäran följer den här sekvensen:

  1. Leverantören av chatthistorik läser in konversationshistoriken.
  2. Agenten kombinerar historiken med indata för den aktuella omgången.
  3. Routningsklienten väljer den aktiva chattklienten för sessionen.
  4. Den valda klienten tar emot den fullständiga begäran.
  5. Chatthistorikprovidern lagrar de nya meddelandena efter körningen.

Eftersom den valda klienten tar emot historiken som läses in av providern kan programmet ändra vägar utan att manuellt återskapa konversationen.

.NET SDK:et tillhandahåller den experimentella RoutePersistingRoutingChatClient. Ställ in den initiala rutten med RoutePersistingRoutingChatClientOptions.DefaultRoute, granska en sessions rutt med GetActiveRoute, och ändra den med SetActiveRoute. Om du inte anger någon standardväg använder klienten den första vägen som tillhandahålls vid konstruktionen.

Det finns fler routningsklienter i Microsoft.Extensions.AI som möjliggör ytterligare routningsstrategier.

Se routningsexemplet för flera modeller för en fullständig C#-implementering.

Important

Varje chattklient som har registrerats som en rout måste använda anropshanterad historik som tillhandahålls av en provider för chatthistorik. Providern kan lagra den historiken i sessionen eller i programägd lagring. Registrera inte en rutt som använder konversationshistorik som hanteras av inferenstjänsten.

Python support är inte tillgänglig för närvarande.

Go-supporten är inte tillgänglig för närvarande.

Nästa steg