enhancement
major
minor
defect
critical
major
minor
major
#30150
Stellen Sie einen Anbieter mit aufgezeichneten Musterantworten für die Agentenprüfungen der Bewerbungen bereit
Problem
Die Tests der Engine führen Agenten anhand aufgezeichneter Modellantworten aus. tl-ai-eval verfügt unter seinen Testquellen über einen ScriptedProvider, und mehrere Tests von tl-ai-core haben ihre eigenen verschachtelten Provider (TestReplyWithoutAnswer, TestModelFailover, TestTaskPlanWithoutApproval, ...). Keiner davon befindet sich in einer JAR-Datei, auf die eine Anwendung zurückgreifen kann.
Daher muss eine Anwendung, die ihre eigene Agenten-Definition, ihre Fähigkeiten und Werkzeuge ohne ein echtes Modell testet, einen solchen Provider selbst schreiben. Die Steuerungsanwendung tl-factory (TopLogic/tl-factory#24) tut genau das, wobei sie das Muster von etwa 140 Zeilen kopiert.
Vorschlag
Stellt einen wiederverwendbaren Provider für aufgezeichnete Antworten in einer JAR-Datei bereit, die Anwendungen in ihren Tests nutzen können: die Test-JAR von tl-ai-core oder ein kleines Test-Support-Modul. Dieser:
- spielt eine skriptgesteuerte Abfolge von Antworten (Text und Tool-Aufrufe) für die Anfragen eines Durchlaufs ab;
- zeichnet die empfangenen Anfragen auf, sodass ein Test überprüfen kann, was an das Modell gesendet wurde, z. B. dass keine Anmeldedaten erscheinen;
- ist in einer Testkonfiguration als Instanz von ` LLMProviderService ` konfigurierbar.
Die eigenen Tests der Engine, die verschachtelte Kopien enthalten, nutzen es.
Test
Ein Engine-Agent-Test, der auf den gemeinsamen Provider verlagert wurde, läuft unverändert weiter. Der Provider kann von einem Modul aus genutzt werden, das ausschließlich vom veröffentlichten Artefakt abhängt.
Lösung
- Der Provider befindet sich in den Testquellen von tl-ai-core (Paket com.top_logic.tl.ai.core.provider) und wird somit im Test-JAR von tl-ai-core ( Classifier-Tests) ausgeliefert, das ohnehin von jedem Modul veröffentlicht wird. Eine Anwendung bindet ihn mit <type>test-jar</type><scope>test</scope> ein; er benötigt lediglich die Hauptklassen von tl-ai-core.
- ScriptedModel: ein LLMProvider mit einem Skript, das pro Anfrage die Antwort (Text, Tool-Aufrufe, Thinking, Finish-Reason) liefert oder eine ProviderException auslöst und die empfangenen Anfragen aufzeichnet. Kann direkt an einen AgentLoop übergeben werden. Eine Hilfsfunktion erstellt ein Skript aus einer festen Abfolge von Antworten.
- ScriptedProvider: die LLMProviderConfig für eine Testkonfiguration von LLMProviderService; delegiert an ein statisch installiertes ScriptedModel. install(script) setzt die Aufzeichnung zurück, requests() liefert die gesendeten Anfragen.
- Der bisherige ScriptedProvider aus tl-ai-eval wird dorthin verlagert; die Tests von tl-ai-eval und die verschachtelten Kopien in tl-ai-core verwenden den gemeinsamen Provider, sofern sich ihr Verhalten als Skript ausdrücken lässt (Fehlschlagen/Ablehnen als ProviderException, Failover über request.model()).
- Ein Abschnitt in den Entwicklerartikeln des Kapitels „ai“ beschreibt das Testen eigener Agenten ohne Modell (Abhängigkeit, Konfiguration, install / requests).