Řešení neplatného vstupu funkce z modelů AI

Když modely AI volají funkce v kódu .NET, můžou někdy poskytnout neplatný vstup, který neodpovídá očekávanému schématu. Knihovna Microsoft.Extensions.AI poskytuje několik strategií pro řádné zpracování těchto scénářů.

Běžné scénáře pro neplatný vstup

Modely umělé inteligence mohou poskytovat neplatný vstup pro funkční volání několika způsoby:

  • Chybí požadované parametry.
  • Nesprávné datové typy (například odeslání řetězce při očekávaném celočíselném čísle).
  • Poškozený formát JSON, který nejde deserializovat.

Bez správného zpracování chyb můžou tyto problémy způsobit selhání aplikace nebo poskytování špatných uživatelských zkušeností.

Povolení podrobných chybových zpráv

Ve výchozím nastavení, když vyvolání funkce selže, model AI obdrží obecnou chybovou zprávu. Pomocí vlastnosti můžete povolit podrobné hlášení chyb FunctionInvokingChatClient.IncludeDetailedErrors . Pokud je tato vlastnost nastavená na true hodnotu a při vyvolání funkce dojde k chybě, přidá se do historie chatu úplná zpráva o výjimce. To umožňuje modelu AI zjistit, co se nepovedlo, a potenciálně se opravit při následných pokusech.

// Enable detailed error messages to help the AI model self-correct.
FunctionInvokingChatClient? functionInvokingClient = client as FunctionInvokingChatClient;
functionInvokingClient?.IncludeDetailedErrors = true;

Poznámka:

Nastavení IncludeDetailedErrors na true může odhalit podrobnosti o interním systému modelu AI a potenciálně je zpřístupnit koncovým uživatelům. Ujistěte se, že zprávy o výjimkách neobsahují tajné kódy, připojovací řetězce ani jiné citlivé informace. Pokud se chcete vyhnout úniku citlivých informací, zvažte zakázání podrobných chyb v produkčních prostředích.

Implementace vlastního zpracování chyb

Pokud chcete mít větší kontrolu nad zpracováním chyb, můžete nastavit vlastního FunctionInvokingChatClient.FunctionInvoker delegáta. To umožňuje zachytit volání funkcí, zachytit výjimky a vrátit do modelu AI vlastní chybové zprávy.

Následující příklad ukazuje, jak implementovat vyvolání vlastní funkce, která zachytává chyby serializace a poskytuje užitečnou zpětnou vazbu:

IChatClient chatClient = new OpenAIClient(key).GetChatClient(model ?? "gpt-5").AsIChatClient();

var functionInvokingClient = new FunctionInvokingChatClient(chatClient)
{
    FunctionInvoker = async (context, cancellationToken) =>
    {
        try
        {
            // Invoke the function normally.
            return await context.Function.InvokeAsync(context.Arguments, cancellationToken);
        }
        catch (JsonException ex)
        {
            // Catch JSON serialization errors and provide helpful feedback.
            return $"Error: Unable to parse the function arguments. {ex.Message}. " +
                   "Check the parameter types and try again.";
        }
        catch (Exception ex)
        {
            // Catch all other errors.
            return $"Error: Function execution failed - {ex.Message}";
        }
    }
};

Když místo vyvolání výjimek vrátíte popisné chybové zprávy, umožníte modelu AI zjistit, co se nepovedlo, a zkusit to znovu s opraveným vstupem.

Osvědčené postupy pro chybové zprávy

Při vracení chybových zpráv, které umožňují samoobslužnou opravu AI, poskytněte jasnou a použitelnou zpětnou vazbu:

  • Buďte konkrétní: Vysvětlete přesně, co se s vstupem nepovedlo.
  • Uveďte příklady: Zobrazení očekávaného formátu nebo platných hodnot.
  • Používejte konzistentní formát: Pomozte modelu AI učit se ze vzorů.
  • Chyby protokolu: Sledování vzorů chyb pro ladění a monitorování

Použití striktního schématu JSON (pouze OpenAI)

Při použití modelů OpenAI můžete povolit striktní režim schématu JSON, který vynucuje, aby výstup modelu striktně dodržoval schéma vaší funkce. To pomáhá zabránit neshodám typů a chybějícím požadovaným polím.

Povolte striktní režim pomocí další vlastnosti Strict v metadatech této funkce. Pokud je tato možnost povolená, modely OpenAI se snaží zajistit, aby jejich výstup přesně odpovídal vašemu schématu:

AIFunction weatherFunction = AIFunctionFactory.Create(
    (string location, int temperature, bool isRaining) =>
    {
        string weather = isRaining ? "rainy" : "clear";
        return $"Weather in {location}: {temperature}°C and {weather}";
    },
    new AIFunctionFactoryOptions
    {
        Name = "report_weather",
        Description = "Reports the weather for a location with temperature and rain status",
        // Enable strict mode by adding the Strict property (OpenAI only).
        AdditionalProperties = new Dictionary<string, object?>
        {
            { "Strict", true }
        }
    }
);

Nejnovější seznam modelů, které podporují striktní schéma JSON, najdete v dokumentaci OpenAI.

Omezení

Zatímco striktní režim výrazně zlepšuje dodržování schématu, mějte na paměti tato omezení:

  • Ne všechny funkce schématu JSON se podporují v přísném režimu.
  • Složitá schémata můžou stále způsobit občasné chyby.
  • Vždy ověřte výstupy i s povoleným přísným režimem.
  • Striktní režim je specifický pro OpenAI a nevztahuje se na jiné poskytovatele AI.

Další kroky