Structured Output mit Ollama und Semantic Kernel

by Dominik Deschner
Structured Output mit Ollama und Semantic Kernel

Semantic Kernel ist eine hervorragende Plattform, mit der sich Large Language Models (LLMs) in eure Anwendungen integrieren lassen. Neben dem sogenannten Function Calling – das LLMs ermöglicht, benutzerdefinierten Code auszuführen und mit dessen Ergebnissen zu arbeiten – stellt der Structured Output ein wesentliches Werkzeug für eine reibungslose Integration dar. Mithilfe eines benutzerdefinierten JSON-Schemas könnt ihr vorgeben, in welcher Struktur das LLM antworten soll. So lassen sich die Antworten später deterministisch und strukturiert weiterverarbeiten.

Semantic Kernel ermöglicht die Definition von Structured Outputs über die PromptExecutionSettings des jeweiligen Providers. 

Ein Beispiel:Die lokale Hosting-Umgebung Ollama unterstützt Structured Outputs bereits seit einiger Zeit. Allerdings implementiert der offizielle Ollama-Connector von Semantic Kernel diese Funktion nicht – was bedeutet, dass Anwender aktuell auf ein wertvolles Feature verzichten müssen.

Ein aktueller Workaround besteht darin, den offiziellen OpenAI-Connector in Kombination mit der OpenAI-kompatiblen API von Ollama zu verwenden. Das folgende Codebeispiel zeigt, wie das funktioniert:

builder.AddOpenAIChatCompletion(
    modelId: "qwen2.5:32b",
    openAIClient: new(
        new ApiKeyCredential("ollama"),
        new() { Endpoint = new("http://localhost:11434/v1") }
    )
);

Wichtig: Der Pfad „/v1“ muss in der URI angegeben werden, da Ollama dort eine OpenAI-kompatible Schnittstelle bereitstellt.

Anschließend könnt ihr eure Prompts mit folgenden KernelArguments ausführen und erhaltet eine Antwort, die eine JSON-Struktur entsprechend des angegebenen .NET-Typs enthält – diese lässt sich dann problemlos wieder parsen:

KernelArguments StructuredOutputArgs =
    new(
        new OpenAIPromptExecutionSettings()
        {
            ResponseFormat = typeof(MyStructuredOutputClass),
            FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(),
        }
    );

Semantic Kernel und das gesamte Ökosystem zur Entwicklung von KI-gestützter Software haben im vergangenen Jahr enorme Fortschritte gemacht. Dennoch stellen sich im Detail immer wieder Herausforderungen bei der Anbindung konkreter Provider und Technologien.

Posted on 15.02.2025 01:43, 613 views