enhancement
major
minor
defect
critical
major
minor
major
#30166
TL-Chat: „runPageCommand“ gibt dem Modell die Ablehnung eines Seitenbefehls auf Englisch statt in der Sprache des Benutzers zurück.
Problem
ChatCommandTool.reasons (#30149) behebt die Fehlermeldung bei einem Seitenbefehl mit Resources.getInstance(Locale.ENGLISH). Die Fehlermeldung ist der Anwendungstext über den Benutzer, derselbe, der auch auf der Schaltfläche angezeigt wird, und er benennt Elemente der Benutzeroberfläche. Ein deutscher Benutzer erhält dann vom Agenten die Meldung „Sie sind kein Mitglied eines Mandanten. Die Git-Verbindungen aller Mandanten werden unter ‚Tenants‘ verwaltet“, obwohl der ResKey einen deutschen Text enthält und in der Benutzeroberfläche „Mandanten“ angezeigt wird (tl-factory, Gitea TopLogic/tl-factory #42).
Der Artikel ai/development unterscheidet bereits zwischen dem eigenen Text eines Tools (Englisch) und „Text, der sich auf den Benutzer bezieht und über das Modell an ihn gerichtet ist“ (übersetzt). An anderen Stellen werden Anwendungsmeldungen in der Sprache des Benutzers ausgegeben (TransactionScope.describeVeto, TLScriptExecutor, AttributeValues); ObjectEditTool.english tut dies jedoch nicht.
Änderung
ChatCommandTool.reasons und ObjectEditTool geben die von ihnen weitergeleiteten Anwendungsmeldungen in der Sprache des Benutzers der Ausführung wieder (der Ausführungsthread enthält die Untersitzung des Benutzers); die eigene Darstellung des Tools bleibt auf Englisch. ai/development legt dies für Ablehnungen und Validierungsmeldungen fest, die ein Tool weiterleitet.
Test
ChatCommandTool mit einem Befehl, dessen Ausführbarkeit mit einem ResKey mit @en und @de abgelehnt wird, in einer deutschen Untersitzung ausführen: Das Ergebnis enthält den deutschen Text innerhalb des englischen Rahmentextes.
Lösung
- Eine Anwendungsablehnung, die ein Tool an das Modell weiterleitet, ist ein strukturiertes Ergebnis, bei dem nur die Meldungen der Anwendung als Prosa in der Sprache des Benutzers der Ausführung (Resources.getInstance()) vorliegen und nichts anderes sie umgibt: kein englischer Satz um eine übersetzte Meldung herum.
- Shape (msgbuf, com.top_logic.tl.ai.core.tools.refusal.messages): ApplicationRefusal mit „refused“ sowie den Identifikatoren des Ablehnungsgrundes (Befehl, Objekt, Typ), den Gründen (Reason: optionales Objekt, Ort, Attribut und Text – die Meldung der Anwendung) und den Pflichtangaben (MandatoryAttributes: Typ, Attribute). „ApplicationRefusals“ erstellt diese, löst einen ResKey in der Sprache des Benutzers auf und schreibt das JSON; die DESCRIPTION erläutert das Format in den englischen Tool-Beschreibungen. Beispiel: {"refused":true,"command":"connectGit","reasons":[{"text":"Sie sind Mitglied keines Mandanten. ..."}]}.
- Wird verwendet für die Gründe, aus denen ein Seitenbefehl nicht ausführbar ist (ChatCommandTool), das Veto der Anwendung gegen eine Löschung und die Verstöße gegen Einschränkungen eines bearbeiteten oder erstellten Objekts (ObjectEditTool, ObjectConstraints, auch gemeldet von ChangeDataTool / ChangeReport) sowie für einen abgelehnten Commit: TransactionScope liefert die Gründe für einen fehlgeschlagenen Commit als Liste (CommitFailedException.reasons()), und die Meldung der Agent-Schleife an das Modell besteht aus englischem Text, gefolgt vom JSON-Code der Ablehnung.
- Der Artikel ai/development beschreibt die Regel: Anwendungsmeldungen, die ein Tool weiterleitet, werden in dedizierte Felder eines strukturierten Ergebnisses in der Sprache des Benutzers eingefügt; der eigene Text des Tools bleibt auf Englisch und umschließt diese Meldungen niemals.
- Tests beziehen ihre Texte aus Test-Ressourcenbündeln (testTlAiCoreMessages, testTlChatMessages) und prüfen das geparste Ergebnis in einem deutschen Kontext: einen abgelehnten Seitenbefehl, ein Löschveto, eine Verletzung von Einschränkungen, einen abgelehnten Commit.