AI-verktygssamtal

Verktygsanrop är en AI-modellfunktion som gör att du kan beskriva tillgängliga verktyg för en AI-modell så att modellen kan begära att programmet anropar dem. Verktyg kan vara .NET-metoder, anrop till externa API:er, interaktioner med MCP-servrar (Model Context Protocol) eller andra körbara åtgärder. I stället för att köra dessa verktyg direkt returnerar modellen ett strukturerat utdata som beskriver vilka verktyg som ska anropas och med vilka argument. Ditt program anropar dessa verktyg och skickar tillbaka resultaten till modellen så att det kan skapa ett mer exakt och grundat svar.

Microsoft.Extensions.AI (MEAI) tillhandahåller leverantörsoberoende abstraktioner för verktygsanrop som fungerar i olika AI-tjänster, inklusive Azure OpenAI, OpenAI, Ollama och andra. Du skriver logiken för verktygsanrop en gång och den fungerar oavsett vilken underliggande modell eller leverantör du använder.

Varför använda verktygsanrop

Verktygsanrop förenklar hur du ansluter externa verktyg till AI-modeller. Du beskriver varje verktyg för modellen som en del av konversationen. Modellen bestämmer sedan vilka verktyg som ska anropas baserat på användarens fråga. När programmet anropar de begärda verktygen och returnerar resultaten använder modellen dessa resultat för att skapa ett mer fullständigt och korrekt svar.

Vanliga användningsfall för verktygsanrop är:

  • Besvara frågor genom att anropa externa API:er. Du kan till exempel kontrollera väderprognosen eller skicka e-post.
  • Hämtar information från interna datalager. Du kan till exempel aggregera försäljningsdata för att svara" Vad är mina mest sålda produkter?"
  • Skapa strukturerade data från ostrukturerad text. Du kan till exempel skapa en användarprofil från chatthistoriken.

Anropa AI-funktioner i MEAI

Det allmänna flödet för att anropa AI-funktioner med IChatClient är:

  1. Definiera .NET-metoder som funktioner och konfigurera dem på en ChatOptions instans.

  2. Skicka användarens meddelande till modellen. Modellen bestämmer vilka funktioner, om några, som ska anropas. Den returnerar ett strukturerat svar som visar funktionsanropen och deras argument.

    Note

    Modeller kan hallucinera argument som inte beskrevs i funktionsdefinitionerna.

  3. Parsa modellens svar och anropa de begärda funktionerna med de angivna argumenten.

  4. Skicka en annan begäran som innehåller funktionsresultatet som nya meddelanden i konversationshistoriken.

  5. Modellen svarar med fler begäranden om funktionsanrop eller ett slutligt svar på användarens fråga. Fortsätt att anropa begärda funktioner tills modellen ger ett slutligt svar.

MEAI hanterar steg 3 till och med 5 automatiskt, så du behöver inte hantera anropsloopen FunctionInvokingChatClient själv.

Nyckeltyper

MEAI tillhandahåller följande typer för att stödja funktionsanrop:

  • AIFunction: Representerar en funktion som kan beskrivas för en AI-modell och anropas. Det här är kärnabstraktionen för en funktion i MEAI.
  • AIFunctionFactory: Tillhandahåller fabriksmetoder för att skapa AIFunction-instanser från .NET metoder. Använd AIFunctionFactory för att omsluta befintliga metoder som funktioner utan att skriva standardbeskrivning eller kod för argumenttolkning.
  • FunctionInvokingChatClient: Omsluter alla IChatClient och lägger till funktioner för automatisk funktionsanrop. När modellen begär ett funktionsanrop FunctionInvokingChatClient anropar motsvarande AIFunction, samlar in resultatet och fortsätter konversationen – allt transparent.

Parallell funktionsanrop

Vissa modeller stöder parallella funktionsanrop, där modellen begär flera funktionsanrop i ett enda svar. Programmet anropar varje funktion och returnerar alla resultat tillsammans i ett uppföljningsmeddelande. Parallell funktionsanrop minskar antalet turer till modellen, vilket minskar svarstiden och API-användningen. FunctionInvokingChatClient stöder parallell funktionsanrop automatiskt.

Stöd för flera leverantörer

En av de viktigaste fördelarna med att använda MEAI för funktionsanrop är providerns oberoende. Typerna AIFunction, AIFunctionFactoryoch FunctionInvokingChatClient fungerar med alla IChatClient implementeringar, inklusive:

  • Azure OpenAI
  • OpenAI
  • Ollama
  • Alla andra leverantörer som implementerar IChatClient

Eftersom stöd för funktionsanrop varierar mellan modeller och leverantörer kontrollerar du leverantörens dokumentation för att bekräfta om en specifik modell stöder funktionsanrop eller parallella funktionsanrop.

Tokenöverväganden

Verktygsbeskrivningar ingår i begäran som skickas till modellen och räknas mot modellens tokengräns. Det innebär att verktygsdefinitioner bidrar till både tokenförbrukning och begärandekostnad.

Om din begäran närmar sig modellens tokengräns bör du överväga följande justeringar:

  • Minska antalet registrerade verktyg för konversationen.
  • Förkorta de metodnamn och beskrivningar som används för att generera verktygsdefinitioner.
  • Begränsa verktygsregistreringen till endast de verktyg som är relevanta för en viss konversationskontext.