KI26.4.3 Scripting mit KI

Das ai-Modul steht in QF-Test Skripten ohne Import zur Verfügung und ermöglicht die direkte Kommunikation mit einem konfigurierten LLM. Typische Einsatzgebiete sind die dynamische Textauswertung, die Generierung von Testdaten zur Laufzeit oder die KI-gesteuerte Steuerung einer Anwendung mithilfe von MCP-Werkzeugen.

26.4.3.1 LLM-Anfragen senden

"Object ask(String message, String configName, Double temperature, Double topP, Integer topK, Double frequencyPenalty, Double presencePenalty, Integer maxOutputTokens, List<String> stopSequences, Integer timeoutMs) throws TestException" sendet eine Textnachricht an ein konfiguriertes LLM und gibt dessen Antwort zurück. Ohne Angabe einer Konfiguration wird die Standardkonfiguration verwendet.

// Einfache Anfrage mit Standardkonfiguration
antwort = ai.ask("Erkläre kurz, was ein Regressionstest ist")
rc.logMessage(antwort)

// Anfrage mit expliziter Konfiguration
antwort = ai.ask("Bist du erreichbar?", "mein-modell")
Beispiel 26.1:  Einfache LLM-Anfragen (Groovy-Skript)

"Object askWithTools(String message, String configName, ...) throws TestException" funktioniert identisch, ermöglicht dem Modell jedoch zusätzlich, die vordefinierten MCP-Werkzeuge von QF-Test aufzurufen. Auf diese Weise kann der Agent selbstständig mit der Anwendung interagieren, ohne dass Sie jeden Einzelschritt vorgeben müssen.

ai.askWithTools("Öffne die Anwendung, melde dich als 'admin' an und prüfe, ob das Dashboard angezeigt wird")
Beispiel 26.2:  LLM-Anfrage mit MCP-Werkzeugnutzung (Groovy-Skript)

26.4.3.2 KI-Konfiguration im Skript setzen

Mit "void setDefaultConfig(String provider, String baseUrl, String apiKey, String modelName, String displayName="Default")" lässt sich die aktive KI-Konfiguration zur Laufzeit ändern, ohne den Optionendialog öffnen zu müssen. Das ist nützlich, wenn verschiedene Modelle für unterschiedliche Aufgaben innerhalb derselben Testsuite eingesetzt werden sollen. Mit "void resetDefaultConfig()" wird anschließend auf die erste konfigurierte Konfiguration zurückgestellt.

// Konfiguration zur Laufzeit setzen
ai.setDefaultConfig("OpenAIGeneric", "https://api.openai.com/v1", api_schluessel, "gpt-4o")
antwort = ai.ask("Generiere fünf Testfallnamen für einen Login-Test")

// Zurücksetzen auf die konfigurierte Standardkonfiguration
ai.resetDefaultConfig()
Beispiel 26.3:  KI-Konfiguration zur Laufzeit setzen (Groovy-Skript)

"List<String> getConfigNames()" gibt eine Liste aller im Optionendialog eingetragenen Konfigurationsnamen zurück.

26.4.3.3 Prompts abrufen

Prozeduren, die in qfs-ai.qft oder einer eigenen user-ai.qft als MCP-Prompts definiert sind, können mit "String getPrompt(String promptName, Map<String, Object> promptArguments)" als fertigen Prompttext abgerufen werden. Das Ergebnis kann direkt an "Object ask(String message, String configName, Double temperature, Double topP, Integer topK, Double frequencyPenalty, Double presencePenalty, Integer maxOutputTokens, List<String> stopSequences, Integer timeoutMs) throws TestException" übergeben werden.

// Vordefinierte Prompt-Vorlage abrufen und verwenden
prompt = ai.getPrompt("plan_tests", ["url": "https://example.com"])
testplan = ai.ask(prompt)
rc.logMessage(testplan)
Beispiel 26.4:  Prompt abrufen und an LLM senden (Groovy-Skript)

Mit "List<List<Object>> listPrompts()" erhalten Sie eine Übersicht aller verfügbaren Prompts mit Name, Titel und Beschreibung.

26.4.3.4 Benutzerdefinierte Modelle registrieren

Mit "void addCustomModel(final String name, final Object responseFunction)" können Sie ein eigenes Modell registrieren, das über eine beliebige Schnittstelle kommuniziert - etwa über ein Kommandozeilen-Tool oder ein externes KI-System. Das registrierte Modell steht anschließend wie jede andere KI-Konfiguration unter seinem Namen zur Verfügung.

Die Callback-Funktion empfängt neben der Nachricht auch optionale Parameter sowie ein toolBridge-Objekt. Über toolBridge.listTools() können die verfügbaren QF-Test Werkzeuge abgerufen werden; mit toolBridge.callTool(name, params) können diese aufgerufen werden. Nur wenn das benutzerdefinierte Modell die verfügbaren Werkzeuge an das KI-System weiterreicht und deren Aufrufe verarbeitet - oder alternativ einen externen Client verwendet, der mit dem QF-Test MCP-Server verbunden ist - kann es für agentische Funktionen wie die Testgenerierung eingesetzt werden.

// Externes CLI-Werkzeug als KI-Modell registrieren
ai.addCustomModel("MeinModell", (msg, parameters, toolBridge) -> {
    def cmd = ["my-ai-shell-command", msg]
    def proc = cmd.execute()
    proc.outputStream.close()
    proc.waitFor()
    return proc.in.text
})

// Registriertes Modell verwenden
antwort = ai.ask("Erzähl mir einen Witz!", "MeinModell")

// Modell wieder entfernen
ai.removeCustomModel("MeinModell")
Beispiel 26.5:  Benutzerdefiniertes Modell registrieren (Groovy-Skript)

Die vollständige API-Referenz des ai-Moduls finden Sie unter "Das ai-Modul".