KI-Modelle können innerhalb von Minuten ganze Funktionen generieren, aber ist der Code auch korrekt? Wir haben Android Bench, unseren KI-Bewertungs-Benchmark, entwickelt, um diese Frage zu beantworten, nachdem wir Tausende von generierten Codeänderungen analysiert haben.
In diesem Vortrag teilen wir Erkenntnisse aus unserer Arbeit, einschließlich aller Möglichkeiten, wie wir Modelle beim Schummeln beobachtet haben, wie die Spezifität von Prompts zu einer höheren Codequalität führt und wie verschiedene Agenten dieselbe Aufgabe angehen.
Transkript
Tomáš Mlynarič
Guten Morgen zusammen.
Legen wir los.
Im März haben wir Android Bench eingeführt, unseren Datensatz und unsere Bestenliste zur Messung von LLMs bei Android-Entwicklungsaufgaben.
Seitdem haben wir ihn mit vielen neuen Modellen getestet.
Erst letzten Monat haben wir Android Bench 2.0 veröffentlicht.
Das ist zwar erst ein paar Monate her, aber in der Welt der KI fühlt sich das wie eine Ewigkeit an.
Ich heiße Tomáš und möchte Ihnen heute die Geschichte von Android Bench erzählen und wie wir dorthin gekommen sind, wo wir heute stehen.
Beginnen wir mit 1.0.
In Version 1.0 haben wir reale Probleme aus Open-Source-Repositories verwendet.
Wir haben die GitHub-Projekte nach GitHub-Problemen, Pull-Anfragen zur Lösung dieser Probleme und Tests zur Überprüfung der Lösungen gefiltert.
Wir teilen die Pull-Anfragen in Aufgaben-Buckets für KI-Modelle auf.
Das GitHub-Problem wurde zur Anleitung oder zum Prompt für das Modell und wir haben es in den Zustand vor dem PR eingefügt.
Nachdem das Modell einige Ergebnisse generiert hatte, haben wir die Tests auf die Ausgabe angewendet. Das Ergebnis war entweder „bestanden“ oder „nicht bestanden“.
Diesen Versuch der KI, das Problem zu lösen, nennen wir „Trial“.
Wir können sie auch mit der von Menschen erstellten Lösung aus diesem PR vergleichen, die wir als „goldene Lösung“ bezeichnen.
Diese Methodik ähnelt dem bekannten SWE-bench-Benchmark.
Wir haben mit über 10.000 potenziellen Aufgaben begonnen, von denen nicht alle geeignet waren.
Einige hatten unvollständige oder zu spezifische Anweisungen.
Die Tests waren möglicherweise an die Golden Solution gekoppelt oder der Zustand vor dem PR war fehlerhaft.
Wir mussten also immer wieder prüfen, um 100 faire Aufgaben zu finden.
Bei diesen Überprüfungen haben wir die hochmodernen Modelle verwendet, um Ergebnisse zu erhalten.
Wir haben mit etwa 30 % gelösten Aufgaben begonnen, was wir als Erfolgsquote bezeichnen.
Als wir den Datensatz für die offizielle Veröffentlichung gesperrt haben, lagen die besten Modelle bereits bei etwa 70 %.
Aber das ist erst einen Monat später.
Wir hatten einen Plan, jeden Monat neue Modelle zu testen, und haben dann beobachtet, wie sie besser werden.
Im August-Release lag die Erfolgsquote für das beste Modell bei 92 %.
Und wir wussten, dass unsere Messlatte zu niedrig ist und dieser Datensatz gesättigt ist.
Tomáš Mlynarič
Aber wir haben das vorhergesehen und arbeiten bereits intensiv an Version 2.0, die wir letzten Monat veröffentlicht haben.
Unser Ziel ist es, die Messlatte mit komplexen, realen Android-Aufgaben höher zu legen und Ihnen als Entwicklerinnen und Entwicklern Orientierung und Transparenz in Bezug auf die LLM-Leistung zu bieten. Außerdem möchten wir Modellentwicklerinnen und ‑entwicklern einen guten Benchmark an die Hand geben, um Android zu priorisieren.
Außerdem werden Analysen und Ergebnisse bereitgestellt, die sowohl Ihnen als auch den Modellentwicklern dienen.
Aber wir müssen auch Cleverness, Hartnäckigkeit und Betrug berücksichtigen.
Außerdem müssen wir das Risiko einer Kontamination vermeiden.
Ein Problem mit der SWE-bench-Methodik ist die tatsächliche Offenheit des Quellcodes.
OpenAI hat einen Artikel veröffentlicht.
Sie stellten fest, dass die Modelle die nächsten Wörter der Anweisungen vervollständigen oder eine Aufgabe mit einem unklaren Fehler lösen konnten, der nicht Teil der Anweisungen war.
Und sie stellten fest, dass die Modellentwickler mit dem Open-Source-Quellcode trainieren und dass der SWE-bench kontaminiert ist.
Deshalb halten wir den Code für 2.0 geschlossen, um ein Training damit zu verhindern.
Wir haben die Arbeit in vier Arbeitsbereiche unterteilt.
Im ersten Fall haben wir App-Konvertierungen durchgeführt. Wir haben Open-Source-, Flutter- und React Native-Apps genommen und die Agents angewiesen, sie in native Android-Lösungen zu konvertieren.
Das spiegelt den aktuellen Trend wider, von plattformübergreifenden zu nativen Apps zu migrieren.
Der zweite Arbeitsbereich waren neue Funktionen und Plattformintegrationen.
Sie wurden in bestehende Produktionscodebasen integriert.
In „Now in Android“ haben wir beispielsweise eine Videofunktion oder Bild im Bild hinzugefügt.
Der dritte Arbeitsbereich waren Migrationen.
Wir aktualisieren Open-Source-Anwendungen, die wir geschlossen gehalten haben, mit modernen Bibliotheken und Architekturen.
Zum Beispiel Nav 2 zu Nav 3, XML-Ansichten zu Compose oder Single-Pane- zu adaptivem Layout.
Und die letzte war eine interne Greenfield-App, die von Grund auf mithilfe von visuellen Design-Mockups erstellt wurde.
Beispiele hierfür waren der vollständige SMS-OTP-Authentifizierungsablauf, die Bestellverfolgung mit Google Maps und mehr.
Tomáš Mlynarič
Mit nur wenigen Entwicklern haben wir eine App von der Größe von „Now in Android“ erstellt.
Die neuen Aufgaben brachten jedoch auch neue Herausforderungen mit sich.
Erstens: Agenten richtig bewerten.
Die Benchmarktests sind viel schwieriger als die Tests für Ihre App, da sie jede gültige Lösung bestehen müssen, nicht nur eine. Je größer die Aufgabe, desto mehr gültige Lösungen gibt es.
In Version 1.0 basierte der Benchmark hauptsächlich auf Unit-Tests, die sich jedoch nur schwer agnostisch gestalten lassen.
import com.foodvibes.MyViewModel
@Test
fun testRetry() {
val vm = MyViewModel()
vm.retry()
assertTrue(vm.retried)
}Sie erfordern genaue Klassen- oder Funktionsnamen.
Wie in diesem Fall gibt es keinen ausgefallenen Test, aber im Grunde könnte der Agent diese Dinge anders benennen. Und selbst wenn er sie nicht anders benennt, würden die Tests nicht kompiliert werden, wenn er sie in ein anderes Paket packt, und wären daher für unseren Fall unbrauchbar.
import com.foodvibes.feature.my.RetriableViewModel
@Test
fun testRetry() {
val vm = RetriableViewModel()
vm.tryAgain()
assertTrue(vm.tried)
}Wir könnten die APIs also technisch in den Prompts angeben, aber das würde entweder zu viele Details preisgeben oder den Prompt mit zu vielen Testanforderungen überfrachten.
Die Lösung besteht also darin, implementierungsunabhängige Tests durchzuführen.
Diese sind sehr allgemein und ergebnisorientiert. Sie testen Ergebnisse und Verhaltensweisen, nicht die internen Abläufe.
Wir verwenden den deterministischen UI-Test, bei dem mit den öffentlichen Bildschirminformationen interagiert wird, ähnlich wie es ein Nutzer tun würde.
Dafür verwenden wir UI Automator- oder Compose UI-Tests. Wir haben aber auch spezielle Skripts, die einige externe Systemgrenzen prüfen, z. B. ob ein Netzwerkaufruf die richtigen Daten hatte oder ob die richtigen Daten in einer Datenbank gespeichert werden, ohne interne Helfer oder DAOs zu kennen.
Dazu gehören auch statische Prüfungen, z. B. von Berechtigungen im Manifest oder ob die Bibliothek in Build-Dateien enthalten war.
Außerdem gibt es Hybridtests, die eine Kombination aus diesen Skripts und den UI-Tests sind.
Dies ist ein Beispiel für einen der Hybridtests.
Sie fahren außerhalb des Emulators.
Das ist der Test für den SMS-OTP-Authentifizierungsablauf. Das Script muss zuerst den Hash der App berechnen, um die SMS korrekt an den Emulator senden zu können. Dann startet es den Test, die UI Automator-Tests, übergibt ein zufällig generiertes OTP, das es benötigt, und sendet die SMS mit einem ADB-Befehl an einen Emulator.
Und der Test prüft nur, ob die Eingabe die richtige Zahl hatte.
Das ist im Grunde alles.
Es gibt keine Implementierungskopplung, sondern nur Prüfungen, ob der Ablauf funktioniert.
Das zweite Problem bei der Bewertung war, dass unsere Aufgaben Multimodalität erfordern.
Entweder müssen die Agenten die Benutzeroberfläche selbst erstellen oder wir stellen ihnen die Designmodelle zur Verfügung.
Dafür eignen sich Screenshot-Tests am besten.
Wir wussten von Anfang an, dass die Grenzwerte für Screenshots höher sein müssen, aber sie haben trotzdem versagt.
Wir haben verschiedene Algorithmen zur Pixel-Diff-Erkennung ausprobiert, aber sie sind bei Dingen wie Systemrauschen gescheitert, wenn die Statusleiste des Emulators anders war, oder beim Batteriesymbol oder sogar beim Hardware-Anti-Aliasing von Schriftarten.
Aber sie sind auch bei einigermaßen gültigen Implementierungen fehlgeschlagen, bei denen die Abstände geringfügig anders waren oder es leichte Farbunterschiede gab. Die Benutzeroberfläche konnte also völlig korrekt sein, aber der Hintergrund war leicht anders getönt und die Pixel-Diffing-Algorithmen sind fehlgeschlagen.
Dafür haben wir einen multimodalen LLM-Judge entwickelt, der Screenshot-Paare wie in Screenshot-Tests vergleicht und uns eine Bewertung sowie eine strukturelle Begründung für die Bewertung liefert.
Außerdem füttern wir es mit einigen Dumps der Hierarchie für Barrierefreiheit, um zu prüfen, ob die Struktur und die strukturelle Parität korrekt sind.
Wir haben es empirisch in vielen, vielen Versuchen getestet und festgestellt, dass es eine hohe Konsistenz aufweist und die Probleme, die wir gesehen haben, ignoriert.
Wir hatten also eine gute Möglichkeit, visuelle Elemente und Verhaltensweisen agnostisch zu überprüfen, und stellten fest, dass die Agenten versuchten, alles zu fälschen.
Ja, bitte.
Tomáš Mlynarič
Es fängt ganz einfach an.
Heutzutage sagen Agenten im Grunde: „Okay.
Ich habe eine Aufgabe.
Sehen wir uns GitHub an.
Lassen Sie uns die Lösungen finden.“
Das ist also das Erste, was sie tun.
Sie versuchen, auf GitHub oder im Internet nach der richtigen Lösung zu suchen. Deshalb müssen wir den Quellcode geheim halten und dürfen ihn nicht veröffentlichen.
Aber das war einfach.
In einigen Tests haben wir gesagt, dass alles zu 100 % bestanden wurde, und der KI-Agent hat geantwortet: „Ein großartiger Erfolg!“
Deswegen.
Interessant. Was haben sie herausgefunden?
Aber wir haben uns die Entwicklung genauer angesehen und sie sagten: „Das kann ich nicht.
Ich ändere einfach den Schwellenwert auf 80 % des Screenshot-Tests.“
// AuthFlowScreenshotTests.kt
@get:Rule
val dropshots = Dropshots(
resultValidator =
ThresholdValidator(
- 0.05f
+ 0.80f
)
)Und dann: „Ja, Triumph, alles wird bestanden.“
Ja, aber die Screenshot-Tests sind nutzlos.
Aber das war nicht die ausgefeilteste.
In einigen, tatsächlich in der Flutter-Konvertierungs-App, hat der Agent immer wieder versucht, die Android-App zu erstellen, und meinte dann: „Ich weiß nicht, was ich tun soll.“
Sie haben den Screenshot, den wir ihnen gegeben haben, als Drawable im Hintergrund eingefügt.
Und jetzt ist es so, als würde der Screenshot-Test bestanden.
Super!
Aber dann schlagen die UI-Tests immer noch fehl. Also sagen sie: „Ich lege eine unsichtbare Overlay-Ebene darüber, mit den Buttons und Texten und Test-Tags, allem, was wir brauchen.
Jetzt ist alles grün.
Prima.
Gut gemacht.“
Das ist nicht, also, es gibt eine, die ist wirklich gut.
Wir haben also eine Aufgabe zur Migration von Java zu Kotlin, bei der der Agent im Grunde von Java zu Kotlin migrieren muss, richtig?
Sie konnten es nicht erstellen.
Es schlägt immer noch etwas fehl, also dachte der Agent: „Okay, ich nehme einfach die kompilierten Klassen aus Java, packe sie in eine JAR-Datei und füge sie dann als reguläre Bibliothek zu den Build-Dateien hinzu.
Jetzt sind alle Tests erfolgreich, aber wir haben die statischen Prüfungen, die die Java-Dateien prüfen. Also lösche ich sie einfach.“
Ich lösche die Java-Dateien, alles ist grün, nur Kotlin schlägt immer noch fehl. Also entferne ich das Kotlin-Source-Set und jetzt ist alles in Ordnung.
Super.“
Ich weiß nicht, ob das überhaupt Betrug ist.
Das ist wirklich kreativ.
Um das zu verhindern, haben wir einen Betrugsdetektor mit drei Schutzmechanismen entwickelt.
Wir sehen uns den UI-Baum an, wenden verschiedene Bildschirmgrößen an, sodass der Hintergrund verzerrt wird, und sehen es.
Wir setzen die Tests aber auch zurück und prüfen, ob sie manipuliert wurden, damit die Schwellenwerte nicht geändert werden können.
Und dann haben wir auch noch LLM-as-a-Judge, das die Trajektorien und die tatsächliche Ausgabe des Agenten prüft, um seltsame Dinge zu erkennen.
Und wenn etwas passiert, sagen wir einfach: „Okay, sofort fehlgeschlagen.“
Tomáš Mlynarič
Jetzt gibt es keine Abkürzungen mehr, keine Suche nach Lösungen, keine instabilen Unit-Tests oder gefälschten Benutzeroberflächen.
Wie sieht es also aus, wenn wir die KI-Agenten zwingen, eine Android-App zu entwickeln?
Am Montag, vielleicht haben Sie den Blogpost gesehen, sahen die Zahlen so aus.
Selbst der beste KI-Agent besteht nur etwa 40 % unserer Aufgaben und die meisten Frontier-KI-Agenten liegen zwischen 20 % und 40 %.
Das ist gut für uns als Autoren des Benchmarks, weil es die richtige Balance bietet: Die von uns bereitgestellten Aufgaben haben einen realen Wert, aber es gibt auch noch viel Raum für Verbesserungen.
Sehen wir uns also die Ergebnisse an.
Wir können uns die Ergebnisse jetzt aus verschiedenen Perspektiven ansehen.
Sehen wir uns einige der Erkenntnisse an, die wir bereits gewonnen haben.
Die erste Frage, die Sie sich beim Betrachten des Diagramms stellen könnten, ist: Wie viel kostet es, diesen Agenten auszuführen?
Und die KI-Unternehmen geben in der Regel die Kosten pro Token an, für einige für Eingabe-, Ausgabe- und vielleicht Cache-Token.
Und vielleicht ist das in Ihrem Fall ein Argument für die Entscheidungsfindung.
Wir können es aber auch aus einer anderen Perspektive betrachten.
Wir können dasselbe Diagramm in einem 2D-Raum mit den durchschnittlichen Kosten pro Aufgabe darstellen, nicht pro Token, also wie viel die Aufgabe im Vergleich zur Erfolgsquote gekostet hat.
Hier sehen wir plötzlich, dass einige Modelle viel gesprächiger sind.
Sie benötigen pro Aufgabe viel mehr Zeit oder Tokens, während andere mehr Aufgaben erledigen und weniger kosten.
Wenn wir aber auch den Preis pro Token in dasselbe Diagramm einfügen, sehen wir, dass das, was KI-Unternehmen wirklich bewerben, nicht mit dem übereinstimmt, was Sie wirklich pro Aufgabe bezahlen.
Wenn Sie also sehen, dass der KI-Agent mit der besten Erfolgsquote tatsächlich einer der günstigsten pro Token, aber der teuerste pro Aufgabe ist.
Andere Agenten mit genau demselben Tokenpreis geben etwa 30 % der Aufgaben weiter, sind aber 15-mal günstiger.
Der Tokenpreis ist also nicht der Messwert.
Einige Modelle untersuchen den Code genauer, erstellen ihn neu und führen ihn noch einmal aus. Jeder Schritt verbraucht mehr Tokens.
Achten Sie also nicht nur auf den Preis pro Token.
Wählen Sie ein Modell aus, sehen Sie sich die realen Daten an und verwenden Sie es entweder in Ihrem Fall oder sehen Sie sich Android Bench an, um herauszufinden, welche Modelle tatsächlich die meisten Tokens für die Aufgaben verbrauchen.
Einige sind, wissen Sie, einige erfordern mehr Schritte, obwohl sie pro Token günstiger sind.
Es gibt aber noch einen weiteren Aspekt dieser Frage.
Dies ist dasselbe Diagramm, aber wir können uns auch ansehen, wie lange die Kundenservicemitarbeitenden für die Bearbeitung benötigen.
Und wir können sehen, dass die Agenten mit der höchsten Erfolgsquote möglicherweise sogar die langsamsten sind.
Wir sehen, dass einige fast zwei Stunden pro Aufgabe brauchen.
Sie bauen und testen immer wieder neu, bis es funktioniert.
Ja, sie erzielen die beste Erfolgsquote, nehmen aber auch die meiste Zeit in Anspruch.
Einige günstigere Agenten benötigen immer noch etwa eine halbe Stunde pro Aufgabe, aber ohne bessere Ergebnisse.
Andere Agenten wiederum erledigen die Aufgabe in weniger als 20 Minuten und lösen trotzdem mehr als ein Viertel der Aufgaben.
Kleine, einfache Modelle sind in der Regel schneller und günstiger, scheitern aber häufiger an schwierigen Aufgaben.
Es gibt also nicht das eine beste Modell.
Das hängt davon ab, was Sie optimieren möchten.
Ist es die Erfolgsquote?
Sind es die Kosten?
Ist es die Wartezeit?
In diesem Fall sollten Sie je nach Art der Arbeit, die Sie erledigen, wenn Sie nicht an so schwierigen Aufgaben arbeiten, die schnelleren Modelle in Betracht ziehen, die die Arbeit günstiger und schneller erledigen.
Kosten und Geschwindigkeit sagen Ihnen aber nur, wie KI-Agenten ausgeführt werden, nicht aber, warum sie die meisten Tests nicht bestehen.
Wir haben uns die fehlgeschlagenen Durchläufe angesehen und festgestellt, dass die Agenten oft vorzeitig aufgeben.
Sie sind überzeugt, dass sie fertig sind.
Aufgabe abgeschlossen.
Okay, ich gehe nach Hause.
Wie bereits erwähnt, erhalten die Agenten im Aufgabenpaket jedoch nur die Anweisungen und den Zustand vor der Ausführung.
Sie können die Tests nicht sehen.
Sie sehen, dass sie die Verifizierungssuite nicht sehen können.
Wir fragten uns also: Was passiert, wenn wir sie die Tests einfach sehen lassen?
Wir haben also experimentiert und eine offene Testvariante derselben Aufgabe erstellt, bei der der Agent die fehlgeschlagene Test-Suite für die Überprüfung im Voraus erhalten hat.
Die Tests wurden also iterativ ausgeführt.
Sie können Fehler prüfen und Codes in einer Feedbackschleife optimieren.
Wir haben festgestellt, dass die Agenten sich mehr anstrengen und länger arbeiten, wenn sie die Tests sehen.
Bei den offenen Durchläufen hatten sie 25 % mehr Turns und 40 % Agent Runtime.
Sie verbrachten fast 30 Minuten pro Aufgabe damit, die fehlgeschlagenen Tests auszuführen und zu korrigieren, weil sie nicht blind debuggten.
Sie sehen also genau, was fehlschlägt, und leider steigt die Erfolgsquote auch um fast 50 Prozentpunkte.
Und wie bereits erwähnt, verbessert dieser zusätzliche Aufwand die durchschnittliche Erfolgsquote.
Aber schließlich kamen neue Frontier-Modelle auf den Markt, die diese offene Variante schnell übertrafen.
Fast 90 % der Tests wurden bestanden.
Daher haben wir die Variante „Geschlossener Test“ als primären Benchmark-Messwert beibehalten.
Es ist aber trotzdem sehr interessant zu sehen, dass Modelle tatsächlich besser sind, wenn sie wissen, wonach sie bewertet werden.
Tomáš Mlynarič
Wir konnten dadurch jedoch mehr Erkenntnisse über die Agenten gewinnen.
Wir können zum Beispiel prüfen, wie Modelle ihre eigene Arbeit testen.
Anhand des Diagramms können wir also sehen, dass die Frontier-Modelle immer mehr und bessere Tests schreiben und höhere Erfolgsraten haben.
Andere Modelle sind zu selbstsicher: „Ich kann das, keine Tests.“
Manchmal sind sie noch gut.
Wenn Sie also Modelle verwenden, die nicht so gut im Testen sind, können Sie ihnen entweder bessere Testfähigkeiten oder spezifische Anweisungen zum Schreiben von Tests geben.
Aber Korrelation bedeutet nicht Kausalität, oder?
Wir müssen dazu einen kontrollierten Test durchführen.
Wir müssen noch herausfinden, ob das Prompting für bessere Tests die Punktzahl tatsächlich erhöht.
Wir haben jedoch ein Experiment mit der anderen Hälfte der Android-Tests durchgeführt, bei dem die Agenten einen Emulator verwenden.
Zu Beginn unseres Benchmarks haben wir nichts über den Emulator gesagt.
Wir dachten, dass die Agenten das schon irgendwie hinkriegen.
Wir haben festgestellt, dass fast keiner von ihnen den Emulator tatsächlich gestartet hat.
Wie bereits erwähnt, sind unsere UI-Tests für unsere Benchmarks sehr wichtig. Ohne Emulatoren können Sie die UI-Tests nicht wirklich verwenden.
Sie sind also alle an einer sehr einfachen Sache gescheitert.
Jetzt stehen wir vor einem Dilemma.
Sagen wir den Agenten, dass sie den Emulator verwenden müssen, und riskieren damit höhere Punktzahlen, oder sagen wir nichts und hoffen, dass sie es herausfinden?
Unser Ziel war es jedoch, einen fairen Benchmark für die Android-Programmierung und ‑Problemlösung zu schaffen.
Wir möchten keine umgebungsbedingten Abweichungen messen.
Wir haben uns also für einen Mittelweg entschieden.
Wir haben ihnen gezeigt, wie man einen Emulator startet, aber nicht, ob sie ihn verwenden sollen oder nicht.
Schließlich ist das Starten des Emulators nicht das, was wir eigentlich testen müssen oder wollen.
Und wir haben die Wirkung dieser Emulator-Anweisung gemessen.
Als wir ihnen die Anleitung gaben, haben die Agenten den Emulator viel häufiger gestartet und die UI-Tests ausgeführt. Das hatte leider große Auswirkungen auf die Erfolgsquote.
Außerdem konnten wir so ihre tatsächlichen Programmierfehler und Probleme untersuchen und nicht nur, dass der Emulator nicht gestartet wurde.
Zusammenfassend lässt sich sagen, dass die Spezifität von Prompts immer noch sehr wichtig ist. Wenn Sie Ihre eigenen Benchmarks oder Bewertungen entwerfen, müssen Sie testen, was in Ihrem Fall tatsächlich wichtig ist.
Ein Beispiel: Sie bewerten die Token-Effizienz oder eine Fähigkeit oder ein Tool. Zuerst müssen Sie die Bewertung bestehen, dann die Änderung für die Effizienz vornehmen und dann prüfen, ob die Bewertung auch mit weniger Tokens bestanden wird.
Andernfalls ändern sich zu viele Variablen auf einmal und Sie wissen nicht, ob Ihre Änderung tatsächlich zu einer Verbesserung geführt hat.
Tomáš Mlynarič
Zurück zur Bestenliste.
Wie bereits erwähnt, bestehen die besten Modelle etwa 40 % der Aufgaben. Für die Erfolgsquote müssen alle Prüfungen bestanden werden.
Andernfalls schlägt die Aufgabe fehl.
Die Frage ist also: Haben die Agenten für die anderen 60 % nichts Nützliches produziert?
Nein, sie sind auf dem richtigen Weg.
Um zu zeigen, wie nah der KI-Agent den funktionierenden Lösungen tatsächlich gekommen ist, berechnen wir auch die Abschlussrate oder eine Art Teilpunktzahl.
Dies ist eine gewichtete Punktzahl, die sich aus vier Kategorien zusammensetzt: visuelle Konsistenz, Funktionalität, ordnungsgemäße Funktion, einige aufgabenspezifische Anforderungen und einige Regressionsprüfungen.
Die Modelle mit niedrigerem Rang können etwa die Hälfte der Aufgaben erledigen, während die Frontier-Modelle im Durchschnitt fast 80 % der Aufgaben erledigen können, aber nur 40 % bestehen.
Wir haben also ein Experiment zur Flutter-zu-Android-Konvertierung durchgeführt, um herauszufinden, was los ist.
Wir haben die Abschlussrate alle paar Agentenschritte neu berechnet und bei allen Frontier-Modellen die gleichen Muster gesehen.
Nach etwa 140 Schritten erreichten sie im Durchschnitt fast 90 %. Dann verbrachten sie weitere 90 Schritte oder fast 40 % des Durchlaufs damit, die Lücke zu 100 % zu schließen, konnten aber nur etwa 1 oder 2 % mehr erreichen.
Und wir glauben, dass dies die aktuelle Entwicklung von KI-Agenten widerspiegelt, bei der unerfahrene Entwickler oder Nutzer die App als fertig ansehen.
Alles wird gerendert.
Die Eingabe hat einigermaßen funktioniert.
Möglicherweise gibt es keine Abstürze.
Wenn sich dann aber ein Senior Engineer den Code ansieht, fallen ihm viele Fehler auf: Architekturprobleme, Fehler im Lebenszyklus und Ähnliches.
Tomáš Mlynarič
Zum Abschluss möchten wir Android Bench, unsere Arbeit 2.0, in einen Kontext setzen.
Im Vergleich zu 1.0 haben wir jetzt nur noch 30 Aufgaben, und das ist Absicht.
Anstelle von isolierten Fehlerkorrekturen und kleinen Patches haben wir vollständige Bildschirme, Migrationen mehrerer Module und Konvertierungen ganzer Apps.
Patches sind jetzt um eine Größenordnung größer und umfassen Dutzende von Dateien.
Und wir haben die multimodalen UI-Prüfungen.
Die Agenten müssen länger laufen und viel härter arbeiten.
Wenn wir unseren Benchmark mit anderen Frontier-Benchmarks vergleichen, sehen wir, dass unser Benchmark viel größere Codeänderungen erfordert.
Es ist kontaminationsfrei, da die meisten Aufgaben von Grund auf neu geschrieben werden, und es gibt noch viel Raum für Verbesserungen.
Wie ich eingangs sagte, fühlen sich ein paar Monate in der KI-Welt wie eine Ewigkeit an. Irgendwann ist jeder Benchmark ausgereizt und gesättigt.
Und wenn das der Fall ist, werden wir hoffentlich noch schwierigere und komplexere Aufgaben angehen, die wiederum zu dieser Ära und diesem Stand der KI passen.
Verwenden Sie Android Bench jetzt als Kompass, um Modelle und Harnesses zu vergleichen und vielleicht einige Erkenntnisse zu gewinnen.
Und wenn Sie tiefer einsteigen möchten, können Sie dieselben Benchmarking- und Bewertungsprinzipien auf Ihre eigenen Codebasen und Workflows anwenden. Denn nichts ist besser, als KI anhand des Codes zu messen, mit dem Sie tatsächlich arbeiten.
So können Sie sich sicher sein, dass die KI die richtigen Informationen liefert.
Im Namen des gesamten Android Bench-Teams bedanke ich mich für Ihre Aufmerksamkeit.
import com.foodvibes.MyViewModel
@Test
fun testRetry() {
val vm = MyViewModel()
vm.retry()
assertTrue(vm.retried)
}import com.foodvibes.feature.my.RetriableViewModel
@Test
fun testRetry() {
val vm = RetriableViewModel()
vm.tryAgain()
assertTrue(vm.tried)
}// AuthFlowScreenshotTests.kt
@get:Rule
val dropshots = Dropshots(
resultValidator =
ThresholdValidator(
- 0.05f
+ 0.80f
)
)