Agent Framework-program med egen värd

Note

Protokollhjälpare för självvärd i .NET kommer snart. Värdmodellen låter ditt program äga sina server-, tillstånds- och protokollintegreringar.

Note

Protokollhjälpare med självbetjäning är för närvarande inte tillgängliga för Go.

Självhostning låter dig köra en Agent Framework-agent eller ett arbetsflöde i din egen webbapplikation, container, tjänst eller körmiljö. Ditt program styr routning, identitet, auktorisering, begärandeprincip, lagring, distribution och skalning. Lägg till en eller flera protokollintegreringar till servern baserat på de klienter som du behöver stöd för.

Använd det här alternativet när du behöver integrera en agentslutpunkt med din befintliga programinfrastruktur. Om du vill att Microsoft Foundry ska köra agenten åt dig, se Foundry Hosted Agents. Om du behöver utlösare för Azure Functions eller beständig körning, se Durable Extension.

Utformningen av dessa paket är sådan att det ger maximal flexibilitet för utvecklaren. Det innebär att om du vill skapa en värd som exponerar en agent med svars-API:et och missbrukar parametrarna för andra ändamål (dvs. mappa temperature till top_p) kan du göra det. Om du inte vill lagra sessioner kan du göra det. Om du vill låta anroparen styra hela agentkörningen kan du också göra det. Vi kommer inte att stå i vägen, vi erbjuder hjälpmedel för de vanligaste fallen och låter dig ansvara för resten, så att du kan bygga den exakta värdmiljö du behöver.

Important

agent-framework-hosting, agent-framework-hosting-responses, agent-framework-hosting-telegram, agent-framework-a2a, agent-framework-hosting-a2aoch agent-framework-hosting-mcp är förhandsversioner Python paket. Installera förhandsversioner uttryckligen och granska versionsinformationen innan du uppdaterar en produktionsmiljö.

pip install --pre agent-framework-hosting

Vad värdhjälparna tillhandahåller

Det allmänna värdpaketet ger delat körningstillstånd för en programägd server:

  • AgentState parkopplar ett agentmål med en SessionStore och skapar sessioner när programmet väljer en ny nyckel.
  • SessionStore lagrar, hämtar och tar bort sessioner med ett programvalt ID. Dess standardlagring är lokal för processen och har ingen utrensningsprincip.
  • WorkflowState löser ett arbetsflödesmål. Ditt program äger kontrollpunktslagring och eventuell mappning från ett klientfortsättnings-ID till en kontrollpunkt.

AgentState är inte ett server- eller protokollregister. Din applikation väljer en auktoriserad sessionsnyckel, fastställer målet och sparar sluttillståndet efter körning. Den kan använda samma mål- och delade programinfrastruktur för en eller flera protokollslutpunkter.

Anpassa sessionslagring

SessionStore är en liten asynkron lagringsklass med getmetoderna , setoch delete . Standardimplementeringen håller sessioner i processminnet. Underklassa den och åsidosätt dessa metoder för att lagra AgentSession objekt i Redis, en databas, bloblagring eller ett annat programägt arkiv och skicka sedan instansen till AgentState(session_store=...).

SessionStore och historikleverantörer lagrar separata delar av en agents konversation. Ett sessionsarkiv sparar ett sessionsobjekt per sessions-ID, inklusive sessionsmetadata och providertillstånd. En dedikerad HistoryProvider lagrar konversationen separat, vanligtvis som en post per meddelande. Den här separationen rekommenderas för varaktiga värdar eftersom det i allmänhet är effektivare att lägga till enskilda meddelanden än att skriva om ett växande sessionsobjekt efter varje tur. En historikprovider definieras per agent genom att den önskade historikproviderklassen skickas till parametern context_providers .

Note

Standardhistorikprovidern: InMemoryHistoryProvider är undantaget: den lagrar hela konversationen i AgentSession.state. När providern används SessionStore bevaras konversationen i sessionsobjektet. För längre konversationer eller produktionslagring använder du en dedikerad historikprovider så att sessionsarkivet kan fokusera på enkelt sessionstillstånd.

Ta med ditt eget ramverk eller klientbibliotek

Värdpaketen är inte kopplade till ett webbramverk eller klientbibliotek. Exemplen använder FastAPI och aiogram eftersom de ger kortfattade körbara exempel, inte för att hjälparna behöver dem.

  • För HTTP-slutpunkter använder du routnings- och begärande-/svars-API:er för ditt programramverk, till exempel FastAPI, Starlette, Django, Flask, Azure Functions eller något annat ramverk.
  • För protokollklienter som Telegram använder du alla klientbibliotek som kan tillhandahålla en protokolluppdatering och köra de åtgärder som skapas av hjälpen.

Programmet väljer sitt ramverk och klientbibliotek. Agent Framework-paketen konverterar endast protokolldata och hanterar valfritt körningstillstånd. De registrerar inte routter, autentiserar anropare, auktoriserar åtkomst till status, väljer tillåtna modellalternativ eller tillhandahåller beständig lagring.

Lägga till protokoll till servern

Välj en eller flera protokollintegreringar:

Protokoll Paket och integrering
OpenAI-svar agent-framework-hosting-responses
Telegram agent-framework-hosting-telegram
A2A agent-framework-a2a eller agent-framework-hosting-a2a
MCP agent-framework-hosting-mcp

Varje protokollsida beskriver dess konfiguration. De är dock utformade för att du ska kunna skapa en enda värd med ett eller flera protokoll aktiverade och ett anropsbart mål. antingen en agent eller ett arbetsflöde. Eftersom vi inte begränsar dig till ett enda webbramverk kan du välja det du vill använda och enkelt konfigurera värden för dessa protokoll.

Fortsättning av säker session

Behandla varje identifierare som tillhandahålls av protokollet som otillförlitliga indata. Innan du använder ett ID för att läsa in en session, kontrollpunkt, uppgift eller annat tillstånd:

  1. Autentisera anroparen.
  2. Ge anroparen behörighet att komma åt det refererade tillståndet.
  3. Partitionera beständigt tillstånd efter den autentiserade tenanten, användaren eller arbetsytan.
  4. Bevara sessions- och kontrollpunktstillståndet först när körningen eller strömmen har slutförts.

Det här självhanteringsmönstret gör att din applikation bara behöver implementera de protokollslutpunkter och principer den behöver; det försöker inte implementera hela API-ytan för varje protokoll som stöds.

Nästa steg

Gå djupare: