11 Punkte von GN⁺ 2024-06-10 | 1 Kommentare | Auf WhatsApp teilen
  • 2019 konnten sich die meisten Softwareingenieure kaum vorstellen, wie Machine Learning ihnen bei ihrer Arbeit helfen könnte
  • 2024 herrscht dagegen breite Begeisterung darüber, wie KI beim Schreiben von Code hilft
    • Viele Ingenieure haben ML-basierte Autovervollständigung in firmeninternen Tools oder kommerziellen Produkten ausprobiert
  • Dieser Artikel stellt die neuesten KI-basierten Verbesserungen im Zuge der fortlaufenden Veränderungen von Googles internen Softwareentwicklungs-Tools vor
    • Außerdem werden weitere Veränderungen diskutiert, die in den nächsten fünf Jahren zu erwarten sind
  • Es wird auch eine Methodik vorgestellt, wie sich KI-Produkte entwickeln lassen, die für professionelle Softwareentwicklung echten Mehrwert liefern
    • Das Team verantwortet die Softwareentwicklungsumgebungen, in denen Google-Ingenieure den Großteil ihrer Zeit verbringen, darunter IDE, Code Review und Codesuche
    • Das zeigt, dass solche Verbesserungen direkte Auswirkungen auf Produktivität und Zufriedenheit von Entwicklern haben können

Herausforderungen

  • Eine fortlaufende Herausforderung in diesem Bereich ist, dass sich KI-Technologien so schnell weiterentwickeln, dass schwer vorherzusagen ist, welche Ideen zuerst erkundet werden sollten
  • Zwischen einem technisch machbaren Demo und einer erfolgreichen Produktisierung klafft oft eine erhebliche Lücke
  • Für den Weg von der Idee bis zum Produkt gibt es drei Leitlinien:
    1. Nach technischer Machbarkeit und Wirkung priorisieren: Es wird an Ideen gearbeitet, deren technische Umsetzbarkeit bereits nachgewiesen ist und bei denen ein hoher (messbarer) Einfluss auf den Workflow von Ingenieuren zu erwarten ist
    2. Schnell lernen, um UX und Modellqualität zu verbessern: Der Fokus liegt auf schneller Iteration und dem Ableiten von Erkenntnissen, ohne Produktivität und Zufriedenheit der Entwickler zu beeinträchtigen. Die User Experience ist genauso wichtig wie die Modellqualität
    3. Wirkung messen: Das Ziel ist, Produktivitäts- und Zufriedenheitskennzahlen zu steigern, daher müssen diese Kennzahlen umfassend überwacht werden

Anwendung von LLMs in der Softwareentwicklung

  • Mit dem Aufkommen der Transformer-Architektur begann man zu untersuchen, wie sich LLMs in der Softwareentwicklung einsetzen lassen
  • LLM-basierte Inline-Codevervollständigung ist die populärste KI-Anwendung in der Softwareentwicklung
    • Den Code selbst als Trainingsdaten zu verwenden, ist eine natürliche Anwendung der LLM-Technologie
    • Die UX fühlt sich für Entwickler natürlich an, weil Autovervollständigung auf Wortebene seit Langem eine Kernfunktion von IDEs ist
    • Grobe Messungen der Wirkung sind möglich, etwa über den Anteil neu geschriebener Zeichen durch KI
    • Aus diesen Gründen war es nur folgerichtig, diese LLM-Anwendung zuerst auszurollen
  • In einem früheren Blogpost wurde erläutert, wie sich die User Experience bei der Codevervollständigung verbessern und deren Wirkung messen lässt
    • Seitdem zeigte sich ein anhaltend schnelles Wachstum, ähnlich wie in anderen Unternehmensumgebungen
    • Die Akzeptanzrate unter Softwareingenieuren liegt bei 37 %, und die Funktion hilft dabei, 50 % der Codezeichen zu vervollständigen
  • Wesentliche Verbesserungen kamen sowohl vom Modell als auch von der UX
    • Dieser Zyklus ist entscheidend, um aus realem Verhalten statt aus synthetischen Formeln zu lernen
  • Zur Verbesserung KI-gestützter Funktionen in Coding-Tools (z. B. IDEs) werden Protokolldaten aus verschiedenen Tools sowie Nutzungsdaten verwendet, die Benutzerpräferenzen und Anforderungen erfassen
  • Der Anteil des mit KI-Unterstützung erzeugten Codes steigt kontinuierlich
    • Er wird definiert als die Anzahl der aus KI-basierten Vorschlägen übernommenen Zeichen geteilt durch die Summe aus manuell eingegebenen Zeichen und aus KI-basierten Vorschlägen übernommenen Zeichen
    • Bemerkenswert ist, dass per Copy-and-paste eingefügte Zeichen nicht in den Nenner eingehen
  • Verwendet werden umfangreiche und hochwertige Logs interner Software-Engineering-Aktivitäten, die über lange Zeit aus mehreren Tools kuratiert wurden
    • Mit diesen Daten lassen sich feingranulare Codebearbeitung, Build-Ergebnisse, Bearbeitungen zur Behebung von Build-Problemen, Code-Copy-and-paste-Vorgänge, Anpassungen eingefügten Codes, Code Reviews, Bearbeitungen zur Behebung von Reviewer-Problemen und das Einreichen von Änderungen in Repositories abbilden
  • Die Trainingsdaten bestehen aus ausgerichteten Code-Korpora mit aufgabenbezogenen Annotationen sowohl für Eingaben als auch Ausgaben
  • Die nächste wichtige Auslieferung betraf das Bearbeiten von Code-Review-Kommentaren (derzeit werden mehr als 8 % mit KI-gestützter Unterstützung bearbeitet) sowie die automatische Anpassung eingefügten Codes an den umgebenden Kontext (derzeit etwa 2 % des Codes in der IDE)
  • Weitere Auslieferungen umfassen das Anweisen der IDE zu Codebearbeitungen in natürlicher Sprache und das Vorhersagen von Fixes für fehlgeschlagene Builds
    • Möglich sind auch andere Anwendungen wie das Vorhersagen von Tipps zur Code-Lesbarkeit, wenn diese einem ähnlichen Muster folgen
  • Zusammengenommen waren diese ausgerollten Anwendungen bei Google erfolgreiche und viel genutzte Anwendungen und hatten in realen Industrieumgebungen messbare Auswirkungen auf die Produktivität

Erkenntnisse

  • Aus der bisherigen Arbeit wurden mehrere Dinge gelernt:
    1. Die größte Wirkung wird mit UX erzielt, die sich natürlich in den Workflow der Nutzer einfügt. In allen obigen Beispielen werden den Nutzern Vorschläge präsentiert, sodass sie mit einem Tippen oder Klick zum nächsten Schritt im Workflow übergehen können. Experimente, bei denen sich Nutzer daran erinnern mussten, eine Funktion selbst auszulösen, ließen sich nicht skalieren
    2. Es wurde beobachtet, dass Code-Autoren durch KI-basierte Vorschläge zunehmend zu Reviewern werden. Wichtig ist, ein Gleichgewicht zwischen Review-Kosten und Mehrwert zu finden. Üblicherweise wird dieser Zielkonflikt über Ziele für Akzeptanzraten gelöst
    3. Da Offline-Metriken oft nur grobe Stellvertreter für den Nutzerwert sind, ist schnelle Iteration über Online-A/B-Experimente der Schlüssel. Ein großer Vorteil der Bereitstellung KI-basierter Funktionen in internen Tools besteht darin, dass sich Funktionen leicht ausrollen und iterieren lassen, Nutzungsdaten gemessen werden können und sich per UX-Forschung Nutzer direkt zu ihren Erfahrungen befragen lassen
    4. Hochwertige Daten aus den Aktivitäten von Google-Ingenieuren über alle Software-Tools hinweg, einschließlich der Interaktionen mit den eigenen Funktionen, sind essenziell für die Modellqualität
  • Während UX und Modellverbesserungen genutzt werden, um Engpässe in Zwischenschritten zu beseitigen, ist es wichtig, die Konversion von Chancen (überwiegend Nutzeraktivitäten, oben im Funnel dargestellt) zu Wirkung (angewandte KI-Unterstützung, unten im Funnel) zu optimieren

What's Next

  • Angespornt durch die bisherigen Erfolge liegt der Fokus nun darauf, modernste Basismodelle (die Gemini-Reihe) mit Entwicklerdaten (ein Teil des oben erwähnten DIDACT) zu kombinieren, um bestehende und neue Anwendungen für den Einsatz von ML im Software Engineering bei Google zu stärken
  • Branchenweit hat ML-basierte Codevervollständigung Softwareentwicklern große Hilfe gebracht
    • Es gibt weiterhin Möglichkeiten, die Codegenerierung zu verbessern, aber der Nutzen des nächsten Schritts wird voraussichtlich aus ML-Unterstützung bei breiteren Software-Engineering-Aktivitäten wie Testen, Codeverständnis und Codewartung kommen
    • Letzteres ist besonders in Enterprise-Umgebungen von großem Interesse
    • Diese Chancen fließen auch in die eigene laufende Arbeit ein
  • Es werden zwei in der Branche sichtbare Trends hervorgehoben:
    1. Mensch-Computer-Interaktion verschiebt sich als allgemeines Paradigma in Richtung natürliche Sprache und damit hin zur Nutzung von Sprache als Interface für Software-Engineering-Aufgaben sowie als Gateway für Informationsbedürfnisse von Softwareentwicklern, integriert in die IDE
    2. ML-basierte Automatisierung größerer Aufgaben von der Problemdiagnose bis zur Anwendung von Fixes beginnt erste Belege für praktische Umsetzbarkeit zu liefern
      • Diese Möglichkeiten werden durch Innovationen bei Agenten und Tool-Nutzung angetrieben, die den Bau von Systemen erlauben, die ein oder mehrere LLMs als Bausteine verwenden, um größere Aufgaben zu erledigen
  • Um die oben genannten Erfolge in Richtung dieser Funktionen der nächsten Generation zu erweitern, könnte die Community aus Praktikern und Forschern, die zu diesem Thema arbeitet, von gemeinsamen Benchmarks profitieren, die helfen, das Feld stärker auf praktische Engineering-Aufgaben auszurichten
    • Bisher konzentrierten sich Benchmarks hauptsächlich auf Codegenerierung (z. B. HumanEval)
    • In Enterprise-Umgebungen könnten Benchmarks für breitere Aufgaben wie Code-Migration und Debugging in Produktion jedoch besonders wertvoll sein
    • Benchmarks zur Fehlerbehebung (z. B. SWEBench) und Prototypen, die auf solche Benchmarks abzielen (z. B. Cognition AI), wurden bereits veröffentlicht
  • Die Community wird ermutigt, zusammenzukommen und mehr Benchmarks vorzuschlagen, die ein breiteres Spektrum an Software-Engineering-Aufgaben abdecken

Meinung von GN⁺

  • Die schnelle Evolution von KI: Da sich KI-Technologien rasant weiterentwickeln, ist es wichtig, laufend die neuesten Technologien zu lernen und anzuwenden.
  • UX und Modellqualität: User Experience und Modellqualität sind entscheidende Faktoren für den Erfolg von KI-Tools.
  • Die Bedeutung von Daten: Hochwertige Daten haben großen Einfluss auf die Leistung von KI-Modellen.
  • Möglichkeiten der Zukunft: KI könnte in vielen verschiedenen Aspekten des Software Engineering eine noch größere Rolle spielen.
  • Branchentrends: Natürlichsprachliche Interfaces und die Automatisierung großer Aufgaben werden die Zukunft der Softwareentwicklung prägen.

1 Kommentare

 
GN⁺ 2024-06-10
Hacker-News-Kommentar
  • Wenn AI richtig eingesetzt wird, übernimmt sie zwei Rollen: 1) Sie spart Entwickler:innen Zeit und reduziert die kognitive Last durch unstrittige Änderungen. 2) Durch Vorschläge macht sie die Nutzer klüger und informierter. Zum Beispiel funktioniert Code-Vervollständigung manchmal gut.

  • Es gibt die interessante Behauptung, dass AI-Tools „nicht skalieren“, wenn Nutzer selbst eine Funktion auslösen müssen. Ich denke darüber nach, wie AI innerhalb der IDE sinnvoll Vorschläge auf Design-Ebene und für konzeptionelle Ideen machen kann.

  • Es wird beobachtet, dass Autor:innen von Code durch AI-basierte Vorschläge zunehmend zu Reviewer:innen werden. Wichtig ist, ein Gleichgewicht zwischen den Kosten des Reviewings und dem zusätzlichen Nutzen zu finden.

  • Es wurde als nützlich empfunden, mit GPT-4 in wenigen Minuten React-UIs und Python-UIs zu erzeugen und den Code zu reviewen, um zu verstehen, wie er funktioniert.

  • Wegen des begrenzten menschlichen RAM müssen Ideen in ein externes Medium ausgelagert werden. Vorschläge von AI helfen dabei, die Anfangsphase schneller voranzubringen.

  • Dass LLMs (Large Language Models) fürs Programmieren nützlich sind, lässt sich nicht leugnen. Die richtige UX, um das reibungsloser zu machen, ist die zentrale Herausforderung. Autovervollständigung wurde ausprobiert, aber die meisten Vorschläge waren schlecht, daher wurde sie deaktiviert.

  • Es wurde als nützlicher empfunden, mit der ChatGPT-Desktop-App Fragen zu Code zu stellen. Allerdings ist es lästig, jedes Mal die Details erklären zu müssen.

  • Der Trend, dass der Anteil von mit AI unterstütztem Code-Schreiben auf bis zu 50 % steigt, ist interessant.

  • AI sagt einem, wie man eine angeforderte Aufgabe ausführt, aber nicht, dass sie eine schlechte Idee ist. Die Qualität von ML-generiertem Code hängt von den Trainingsdaten ab.

  • Es stellt sich die Frage, wie lange es dauern wird, bis AI die Softwareingenieur:innen von Google vollständig ersetzt.

  • Das ultimative Ziel von AI ist es, Systeme zu betreiben, Apps zu debuggen, Datenspeicher zu verwalten und anhand von Nutzerfeedback sowie Anforderungsbeschreibungen App-Code zu schreiben.

  • Es ist gut, mit AI-Tools zu experimentieren, aber wenn andere sie blind kopieren, kann das negative Auswirkungen haben. Es ist schwer, das zentrale Verkaufsargument für das Schreiben von Code mit LLMs zu finden.