LLMs und Programmiertrends Anfang 2024
(antirez.com)- ChatGPT und lokale LLMs sind für erfahrene Programmierer zu Werkzeugen geworden, die aufreibende Aufgaben reduzieren: Dokumentation durchsuchen, komplexe APIs erlernen oder Wegwerfprogramme schreiben – weniger das eigentliche Schreiben von Code
- LLMs sind keine übernatürliche Intelligenz, sondern interpolieren nur begrenzt innerhalb des Raums ihrer Trainingsdaten; in Bereichen mit vielen hochwertigen Daten wie der Programmierung sind sie jedoch als „viel wissender Dummkopf“ sehr nützlich
- Bei überprüfbaren Problemen wie PyTorch-Tensor-Transformationen, einem macOS-Objective-C-BLE-Client, der Interpretation von Ein- und Ausgaben eines ONNX-Modells oder CSV-Analyseskripten verkürzt GPT-4 die Arbeitszeit deutlich
- Bei Aufgaben, die komplexes Schlussfolgern erfordern, etwa systemnaher Programmierung in C und Algorithmusimplementierungen, zeigten sich Grenzen beim Hash-Design für Bloom-Filter und bei der Interpretation des Q6_K-Quantisierungsformats von llama.cpp
- Wenn ein großer Teil des Programmierens darin besteht, bestehende Muster leicht verändert zu wiederholen, werden die Fähigkeit, LLMs gut zu nutzen, und die Fähigkeit, Probleme klar zu beschreiben, wichtiger
Warum erfahrene Programmierer LLMs nutzen
- Der Zweck des Einsatzes von LLMs beschränkt sich nicht darauf, Code einfach schneller zu schreiben
- ungewöhnliche Dokumentation suchen
- übermäßig komplexe APIs erlernen
- Programme schreiben, die ein paar Stunden später weggeworfen werden
- intellektuell wenig interessante Details erledigen
- Da Google zu einem von Spam belasteten Suchraum geworden ist, sind LLMs zu einem alternativen Weg geworden, um benötigte Informationen schnell zu erhalten
- Bei High-Level-Code wie Python hat die Nutzung von LLMs zugenommen, bei C-Code werden sie jedoch deutlich seltener eingesetzt
- Der wichtige Unterschied liegt darin, zu erkennen, wann der Einsatz eines LLMs schneller macht und wann er im Gegenteil bremst
- LLMs helfen – ähnlich wie Wikipedia oder YouTube-Vorlesungen – besonders Menschen mit Willen, Fähigkeit und Disziplin; für Zurückliegende können ihre Grenzen deutlicher sein
LLMs sind weder allwissend noch bloße Papageien
- Die internen Abläufe neuronaler Netze und LLMs sind weiterhin ziemlich undurchsichtig
- Einige KI-Experten unterschätzten LLMs als fortgeschrittene Markov-Ketten oder Systeme, die nur Varianten von Trainingsdaten wiedergeben; diese „Papageien“-Sicht wurde angesichts der Evidenz jedoch größtenteils zurückgenommen
- Umgekehrt ist es ebenfalls unzutreffend, LLMs übernatürliche Fähigkeiten zuzuschreiben, die in der Realität nicht existieren
- LLMs können innerhalb des Raums der Daten, die sie im Training gesehen haben, begrenzt interpolieren
- Sie können auch Programme schreiben, die sie nie exakt gesehen haben
- Sie können mehrere Ideen kombinieren, die häufig in den Trainingsdaten vorkamen
- Wenn subtile Schlussfolgerungen nötig sind, können sie deutlich scheitern
- Trotz dieser Grenzen können LLMs als eine der größten Errungenschaften in der Geschichte der KI gelten
Programmierassistent als „viel wissender Dummkopf“
- LLMs können elementares und oft ungenaues Schlussfolgern, Halluzinationen und die Erzeugung nicht existierender Fakten verursachen
- Gleichzeitig funktionieren sie in Bereichen mit vielen hochwertigen Daten, etwa der Programmierung, wie ein Savant mit enormem Wissen
- Als Kollege fürs Pair Programming mögen sie unzureichend sein, doch in einer Struktur, in der der Nutzer Fragen stellt und Antworten überprüft, sind sie nützlich
- Früher konnte man vieles erledigen, wenn man einige Sprachen, klassische Algorithmen und zentrale Bibliotheken kannte
- Heute ist die Komplexität durch die Explosion von Frameworks, Sprachen und Bibliotheken stark gestiegen; in dieser Umgebung wird ein „Dummkopf, der alles weiß“ zu einem nützlichen Begleiter
Erfolgsgeschichten bei High-Level-Code und Dateninterpretation
- Beim Wechsel von Keras zu PyTorch half ein LLM dabei, den für den Modellaufbau nötigen Code zu schreiben, ohne die PyTorch-Dokumentation von Grund auf zu studieren
- Der Nutzer kannte Konzepte wie Embeddings oder Residual Networks bereits
- Effektiv war es, die benötigte Modellstruktur und die Fragen klar zu formulieren
- GPT-4 betrachtete ein PyTorch-Modell und das Batch-Format und schrieb Code, um Tensoren passend zum Eingang des neuronalen Netzes umzuformen
- Der Nutzer überprüfte in der Python-CLI, ob Tensor-Dimensionen und Daten-Batches passten
- Beim Bau eines BLE-Clients für ein ESP32-basiertes Gerät wurde schnell Objective-C-Code geschrieben, um die nativen macOS-APIs zu verwenden
- Multiplattform-Bluetooth-Bindings wurden im Wesentlichen als unbrauchbar eingeschätzt
- Die Objective-C-BLE-API und lange nicht genutzte Objective-C-Details mussten erneut behandelt werden
- Der finale Code befindet sich in SerialBTE.m
- Das LLM schrieb nicht den Großteil des Codes direkt, erklärte aber Ursachen von Problemen und Lösungswege und beschleunigte die Arbeit deutlich
- Der Nutzen dieses Hilfsprogramms im Verhältnis zum Aufwand war gering; ohne ChatGPT wäre der Versuch wahrscheinlich gar nicht unternommen worden
ONNX-Modellinterpretation und Wegwerfprogramme
- Bei der Nutzung eines schlecht dokumentierten ONNX-Convnet-Formats interpretierte ein LLM anhand von Ein-/Ausgabe-Metadaten und Raw-Output-Werten von Testbildern die Funktionsweise
- Anfangs waren Format und Größe des Eingabebilds unbekannt
- Die Ausgabe war keine einfache binäre Klassifikation, sondern bestand aus Hunderten von Werten
- ChatGPT nahm an, dass die Ausgabe normalisierte Boxen für potenzielle Defektbereiche im Bild und Defektwahrscheinlichkeiten darstellen könnte
- Nach einigen Gesprächsrunden entstanden ein Python-Inference-Skript und Code zur Umwandlung des Eingabe-Tensors
- Bei „Wegwerfprogrammen“ wird mitunter das gesamte Schreiben des Codes dem LLM überlassen
- Um während des Trainings eines kleinen neuronalen Netzes die Loss Curve zu visualisieren, erzeugte GPT-4 anhand des CSV-Formats plot.py
- Es wurde darum gebeten, mehrere CSV-Dateien über die Kommandozeile zu übergeben und die Validation-Loss-Curves der einzelnen Experimente zu vergleichen
- Die gesamte Aufgabe dauerte 30 Sekunden
- Auch ein pandas-Programm, das einen AirBnB-CSV-Report einliest, nach Wohnung sowie Monat und Jahr gruppiert und unter Berücksichtigung von Reinigungsgebühren und Übernachtungszahlen die durchschnittliche Monatsmiete berechnet, funktionierte beim ersten Versuch
- Solche Programme sind in der Erstellung langweilig und wenig interessant; wenn ein LLM sie erledigt, kann sich der Nutzer auf wichtigere Aufgaben konzentrieren
Grenzen bei C und Systemprogrammierung
- Beim Schreiben von C-Programmen wird ein LLM fast immer nur als bequemere Form von Dokumentation genutzt
- Systemprogrammierung erfordert komplexes Schlussfolgern, und genau an diesem Punkt scheitern heutige LLMs häufig
- Als GPT-4 um eine Bloom-Filter-Implementierung für 100.000 Elemente und eine maximale False-Positive-Probability von 5 % gebeten wurde, lieferte es keine gute Implementierung
- Es verwendete nur zwei ähnliche Hash-Funktionen
- Es fehlte die Abstraktion, aus demselben String K ausreichend dekorrelierte Hashes zu erzeugen
- Wenn ausdrücklich verlangt wurde, N dekorrelierte Outputs zu erzeugen, schlug es eine bessere Hash-Funktion vor
- GPT-4 konnte, wenn das Problem in kleinere Teilprobleme zerlegt wurde, geeignetere Hash-Funktionen schreiben, wandte diese Idee beim Gesamtdesign des Bloom-Filters aber nicht selbstständig an
- Dieses Ergebnis lässt sich als Kombination aus schwacher Schlussfolgerungsfähigkeit, Mangel an themenspezifischem Material und Material niedriger Qualität betrachten
Unterschiede zwischen lokalen und großen Modellen
- Bei Problemen der Systemprogrammierung ist der Unterschied zwischen kleinen und großen Modellen deutlich
- Mixtral schlug beim selben
hash_id-Problem vor,hash_idan das Ende des Hash-Ergebnisses anzuhängen; das wurde als sehr schlechte Lösung bewertet - Die Ergebnisse mit deepseek-coder 34B, 4-bit-quantisiert auf einem MacBook M1 Max, waren besser
- Der Nutzer gab den Hinweis, dass die Verteilung schlechter wird, wenn
hash_idam Ende angehängt wird - Das Modell erkannte, dass einfache Addition die Ursache des Problems sein könnte
- Es schlug Alternativen vor, bei denen
hash_idmit bitweisen Operationen wie XOR eingemischt wird
- Der Nutzer gab den Hinweis, dass die Verteilung schlechter wird, wenn
- Dieser Fall kommt einer Art Ursachenidentifikation und Lösungsvorschlag nahe, die allein über Dokumentation oder Google-Suche schwer zu erhalten wäre
- Dennoch liefern LLMs erfahrenen Systemprogrammierern insgesamt noch kaum zufriedenstellende Lösungen
Beispiel: Interpretation des llama.cpp-Q6_K-Formats
- Das Projekt ggufflib ist eine Bibliothek zum Lesen und Schreiben von Dateien im GGUF-Format, das llama.cpp beim Laden quantisierter Modelle verwendet
- Bei der Quantisierungscodierung sind die Bits jedes Quants aus Geschwindigkeitsgründen auf komplexe Weise gespeichert
- Zunächst wurde versucht, die Codierung mit ChatGPT zu verstehen, doch direktes Reverse Engineering des llama.cpp-Codes war deutlich schneller
- Obwohl die Funktion klein genug war, um in den Context von GPT-4 zu passen, war das Ergebnis beim Rekonstruieren einer Datenformat-Dokumentation aus Strukturdeklaration und Decoding Function unbrauchbar
- Auch bei der Bitte, das Q6_K-Format zu erklären, konnte es nicht klar darstellen, wie lower/upper bits je nach Weight-Position in
qlundqhgespeichert werden- Selbst bei der Bitte um eine Funktion, die eine einfachere Speicherweise erklärt, waren die Indizes falsch
- Auch die Behandlung der Sign Extension von 6-bit auf 8-bit war falsch
- Letztlich wurde diese Aufgabe mit Papier und Stift, Code-Lektüre und dem Nachverfolgen der vom Decoder extrahierten Bits gelöst
- Es wird erwartet, dass auch solche Aufgaben in den Bereich fallen, der ohne Durchbruch, nur mit etwas Scaling, innerhalb weniger Monate möglich werden könnte
Charakter von Programmierarbeit und Fähigkeit zur LLM-Nutzung
- Ein erheblicher Teil heutiger Programmierung besteht darin, dasselbe in leicht anderer Form zu wiederholen, und erfordert oft kein hohes Maß an Schlussfolgern
- LLMs sind bei solcher repetitiver Programmierung recht stark, doch die Begrenzung der Context-Größe bleibt eine große Einschränkung
- Es lohnt sich zu überlegen, ob es in fünf oder zehn Jahren noch eine gute Position ist, nur Programme der Art zu schreiben, die LLMs teilweise ausführen können
- Die Schlussfolgerungsfähigkeit von LLMs ist schwach und unvollkommen, doch die beobachteten Ergebnisse lassen sich schwer erklären, wenn man sie nur als bloßes Wiedergeben von Wörtern betrachtet
- Das Trainingsziel der Vorhersage des nächsten Tokens erzwingt den Aufbau irgendeiner Form von abstraktem Modell; dieses Modell ist schwach, lückenhaft und unvollständig
Warum jetzt LLMs nutzen?
- Es gibt kaum Gründe, LLMs beim Programmieren nicht zu nutzen
- Die Fähigkeit, LLMs die richtigen Fragen zu stellen, wird zu einer wichtigen Kompetenz
- Die Fähigkeit, ein Problem klar zu erklären, ist nicht nur im Umgang mit LLMs, sondern auch in der Kommunikation mit Menschen nützlich
- Viele Programmierer sind in bestimmten Bereichen hervorragend, können aber Defizite in der Kommunikation haben
- Da Google schwerer nutzbar geworden ist, eignen sich LLMs auch gut als komprimierte Dokumentation
- Der praktische Wert von LLMs liegt darin, dass man weniger „Junk Knowledge“ wie vage Kommunikationsprotokolle oder komplexe Bibliotheksdetails direkt lernen muss
1 Kommentare
Meinungen auf Hacker News
Der Kern ist dieser Teil: „Hätte ich es auch ohne ChatGPT geschafft? Natürlich wäre das möglich gewesen, aber dass es länger gedauert hätte, ist nicht das Interessanteste. Tatsächlich hätte ich es gar nicht erst versucht, weil es sich nicht gelohnt hätte.“
Das eigentliche Potenzial von LLMs bei Code-Assistenz liegt darin, die Einstiegshürde für neue Aufgaben zu senken und einen dazu zu bringen, Dinge tatsächlich anzugehen und fertigzustellen, die sonst auf unbestimmte Zeit im Stapel künftiger Projekte geblieben wären.
Das Internet und Open Source hatten einen ähnlichen Effekt: Auch bei Projekten, an denen man interessiert war, die man aber nicht selbst umgesetzt hat, hatten mit der Zeit genug andere Menschen ähnliche Probleme gelöst, sodass man sie wiederverwenden oder abwandeln konnte; dadurch explodierte die Zahl nützlicher Apps und Libraries.
Ich stimme dem Autor zu: LLMs sind für sich genommen nicht besonders fähig, aber für Menschen mit grundlegenden Fähigkeiten und Motivation werden sie zu einem Verstärker.
Dann merkt man, dass es mit viel weniger Aufwand geht als erwartet.
Einen ähnlichen Effekt kann man erzielen, wenn man sich mit der richtigen Person über Ideen austauscht, aber es steht eben nicht rund um die Uhr mit einem Klick jemand bereit, der zwar das Problemfeld nicht vollständig kennen muss, aber genug sinnvollen Input geben kann.
Bei ein paar Dingen war es hilfreich, aber meistens weiß das Modell an dem Punkt, an dem ich nicht mehr weiß, was ich tue, auch nicht besser Bescheid als ich.
Abgesehen davon fällt es mir schwer, Prompts schneller zu formulieren, als einfach selbst Code zu schreiben.
Ich frage mich, ob ich diese Tools einfach nicht richtig benutzen kann.
Die ow2-asm-Library kannte ich ziemlich gut, aber sie hat mir viel Zeit erspart, die ich sonst damit verbracht hätte, das genaue Descriptor-Format nachzuschlagen.
Außerdem half sie mir zu verstehen, warum andere statische Analyse-Libraries wegen ihrer Art, mit Zustand umzugehen, für mich nicht ausreichend waren.
Für mich erledigt ChatGPT zwei Dinge: Es reduziert triviale StackOverflow-Suchen und das Durchforsten von Library-Code, um konkrete Fragen zu beantworten, und es hilft mir in der Recherchephase vor Projektbeginn einzuschätzen, ob der von mir geplante Ansatz realisierbar ist.
Bei schwerem ADHS sind die einfachen Dinge am schwierigsten; selbst den Müll rauszubringen oder die Post zu öffnen kann nahezu unmöglich sein.
Der innere Monolog schreit einen stundenlang an, diese Sache einfach zu tun, aber der Körper hört nicht darauf.
Man nennt das eine Störung der exekutiven Funktionen, aber in meinem Leben ist es ein ständiges Problem.
Allein dass ein LLM einen dazu bringt, damit anzufangen, ist schon enorm.
Beim Programmieren stimme ich vollkommen zu.
Der Sweet Spot beim Einsatz von LLMs liegt dort, wo man bereits genug über das Thema weiß, um das Ergebnis zu überprüfen, und wo man genau genug – idealerweise knapp und auf den Punkt – erklären kann, was man möchte.
Sie machen einen schneller, bringen einen dazu, Dinge zu tun, die man sonst nicht getan hätte, und helfen enorm dabei, kleine, aber wertvolle Programme zu schreiben, die man auch wieder wegwerfen kann.
Ein weiterer sehr nützlicher Bereich war für mich die Erkundung völlig neuer Themen, egal ob Programmierung oder nicht.
Man kann sagen, dass man sich nicht gut auskennt, dass die Details nicht zwingend nötig sind, man aber über dieses Thema sprechen und beim Sortieren der Gedanken Hilfe möchte.
Besonders nützlich ist das für Menschen, die bereit sind, auf Basis des Gehörten weiter zu recherchieren oder weitere Fragen zu stellen.
Der Einstieg in viele Fachgebiete besteht darin, die Grundbegriffe zu verstehen, zu hören, welche Unterscheidungen Menschen treffen und warum, und zu wissen, wer in diesem Thema als Autorität gilt.
Es entsteht die Situation, dass sie so lange herumstochern, bis sie ein Monster erzeugt haben, das sie nicht verstehen, und es lediglich zum Bauen bringen.
Lernende brauchen Hilfe, aber die Hilfe, die ein LLM in Form von Copilot gibt, ist nicht die richtige Art.
Interessant wäre es, ein Copilot-Modell zu trainieren, das als Partner konzipiert ist, der klärende Fragen stellt und gemeinsam eine Lösung erarbeitet, statt aus den vagen oder falsch spezifizierten Fragen eines Juniors irgendwie Code zu generieren.
Jedes Mal lieferte es subtil falsche oder komplett halluzinierte Prämissen, und ich verschwendete Zeit, bis ich merkte, dass sie falsch waren.
Ohne die unverdiente Selbstsicherheit bei falschen Antworten könnte man sagen, dass es nicht viel schlechter ist, als Dinge zusammenzusetzen, die ich bereits weiß; im Moment taugt es aber eher als Ersatz für Rubber Ducking oder Autocomplete.
Es wäre schön, auf die Website einer neuen Sprache zu gehen und dort ein LLM zu haben, mit dem man über die Dokumentation sprechen und Fragen stellen kann, um sie besser zu verstehen.
Noch besser wäre es, wenn es mit echten Codebeispielen dieser Sprache oder dieses Frameworks trainiert wäre und einem direkt vor Ort beim Schreiben neuer Programme oder Funktionen helfen würde.
Wenn es mit einem Online-REPL verbunden wäre und inline helfen könnte, wäre das ein noch größerer Vorteil.
Der am meisten unterschätzte Aspekt von LLMs ist meiner Meinung nach die Rolle eines Entwicklers, der alles weiß – etwas, das im Artikel zwar gestreift, aber nicht direkt behandelt wurde.
Selbst sehr erfahrene Programmierer stoßen irgendwann auf Technologien, von denen sie fast nichts wissen.
Jeder ist in irgendeinem Bereich Junior.
Selbst ein Gott von Win32, C++ und COM kann beim Paketieren von Software an kryptischen NSIS-Skripten hängen bleiben.
Man kann 25 Jahre lang Web-Apps gebaut haben und im PHP-Sprachkomitee sitzen, aber wenn man eine obskure ISO-Norm implementieren soll, die mit Kreditkartennetzwerken kommuniziert, hat man vielleicht noch nie auf diesem Niveau mit Kreditkartennetzwerken kommuniziert.
Man kann seit dem ersten iPhone iOS-Apps gebaut haben, davor Mac-Apps, ein paar Jahre bei Apple gearbeitet haben und die meisten iOS-APIs auswendig kennen und sogar selbst entworfen haben – und trotzdem nicht einmal wissen, was CalDAV ist, wenn man CalDAV-Support in eine App einbauen soll.
In solchen Situationen kann ein LLM helfen, und auch wenn es nicht den gesamten Code schreiben kann, kann es einen zumindest in die richtige Richtung führen.
Nachdem man den Kopf mit anderen Technologien gefüllt hat, kommt der Moment, in dem man sich an Dinge erinnern und sie auffrischen muss, die man früher gelernt, aber wegen neuer Technologien beiseitegeschoben hat.
Das ist ein seltsames Gefühl.
Man folgt ganz natürlich dem Median dessen, womit sich die Firma beschäftigt, bei der man arbeitet, und plötzlich ist man in der Situation, dass es „schon eine Weile her“ ist, seit man CSS angefasst hat.
Vielleicht braucht man Wochenendlernen, um wieder ein Gefühl für Python-
dataclasszu bekommen.Wenn etwas bei Google zu finden ist, ist die Chance groß, dass ein LLM es schneller und besser findet und aufbereitet.
Zum Glück bin ich bis dahin wahrscheinlich schon im Ruhestand.
Der Trend „Der Code wurde größtenteils per Copy-and-paste aus ChatGPT geschrieben“ ist erstaunlich.
Ich bin immer wieder schockiert, wie viele Menschen so einen schmerzhaften Workflow ertragen.
Der Autor des Originaltexts ist eindeutig kein Anfänger, der mit GPT über sein eigenes Wissen hinaus codet, sondern ein erfahrener Engineer.
Normalerweise wäre das jemand, dem Usability und Effizienz von Coding-Workflows und Tools wichtig sind – und trotzdem ertragen viele, ständig Code zwischen GPT und lokalen Dateien hin- und herzukopieren.
Dieser frustrierende Workflow war ursprünglich der Anlass, aider zu bauen.
aider teilt ein lokales Git-Repository mit GPT, sodass neuer Code und Änderungen direkt auf Dateien angewendet werden.
Auch der relevante Code-Kontext wird mit GPT geteilt, damit es Code schreiben kann, der sich ins Projekt integriert.
Dadurch werden nicht nur isolierte Code-Schnipsel möglich, die sich leicht kopieren und einfügen lassen, sondern auch anspruchsvollere Beiträge.
Am Ende entsteht ein reibungsloser Pair-Programming-Workflow, bei dem ich und GPT im Gespräch gemeinsam Dateien bearbeiten.
https://github.com/paul-gauthier/aider
Aber gibt es eine Möglichkeit, es einfach zum Reden über Code zu verwenden?
Ich nutze LLMs, um Vor- und Nachteile verschiedener Ansätze zu besprechen oder Probleme im Rubber-Duck-Stil durchzugehen.
Dafür muss ich Code kopieren, und weil aider auf das Anwenden von Änderungen fokussiert ist, passte es für diesen Zweck nicht gut.
Meist entscheide ich erst nach mehreren Hin-und-her-Runden über den richtigen Ansatz, ob ich eine Änderung überhaupt anwenden will.
Er ist der Schöpfer von Redis.
Wenn man das Abo ohnehin schon bezahlt, ergibt es Sinn, zu kopieren und einzufügen, statt zusätzlich für die API zu bezahlen.
Außerdem hat jeder andere Maßstäbe dafür, ob der Effizienzgewinn es wert ist, von einem Projekt einer anderen Person abhängig zu sein; solche Projekte können kostenpflichtig werden oder verwaisen.
Der erste Versuch mit einer echten Datei war zu groß und ist geplatzt, und die zweite echte Datei war immer noch zu groß.
Ich fand es überraschend, dass aider große Dateien offenbar nicht so aufteilen kann, dass sie ins Token-Limit passen.
Das Token-Limit von GPT kann gar nicht so große Quelldateien aufnehmen.
Wenn ich die zu bearbeitenden Dateien auswählen und sogar noch daran herumschnippeln muss, damit GPT nicht daran erstickt, weiß ich nicht, ob das gegenüber Copilot in der IDE wirklich Zeit spart.
Anfangs dachte ich, aiders zentraler Beitrag sei der Umgang mit dem Problem „Codegröße ≫ Token-Limit“, aber das scheint es nicht gewesen zu sein.
Ich würde es gern noch einmal versuchen, aber aider fällt für mich in die ungünstige Kategorie „man muss ein Problem und eine Codebasis finden, die einfach genug sind, dass aider damit klarkommt“.
Copilot und ChatGPT dagegen kommen jeden Tag genau dorthin, wo ich tatsächlich arbeite, und helfen mir mit echten Codebasen im echten Job, einschließlich ihrer Macken.
Ich finde, es deckt mit seinen aktuellen Funktionen die Chat- und Review-Anwendungsfälle hervorragend ab.
Die Kommentare hier spiegeln möglicherweise nicht die hohe Zufriedenheit der meisten Softwarenutzer wider.
Aider hilft dabei, den von antirez im Artikel beschriebenen Anwendungsfall tatsächlich umzusetzen.
Besonders dann, wenn man – wie antirez sagt – besser darin wird, LLMs die richtigen Fragen zu stellen.
In den letzten Tagen habe ich versucht, einen Bug in einer Closed-Source-Mac-App zu beheben.
Ich mag diese App, aber dieser Bug hat mich seit Jahren wahnsinnig gemacht.
Ich war ziemlich sicher, welche Objective-C-Methode den Bug ungefähr verursacht, wusste aber nicht, was diese Methode tut, und die dekompilierte Version war ein völlig unsinniges Chaos.
Ich hatte das Gefühl, gegen eine Wand zu laufen.
Dann habe ich den Lärm, den der Decompiler ausgespuckt hat, in GPT-4 gesteckt und es gebeten, daraus eine saubere Version zu machen.
Das Ergebnis war nicht perfekt, aber ich konnte es aufräumen, und nachdem ich dieses Ergebnis in die App geswizzelt hatte, scheint der Bug verschwunden zu sein.
Ich habe nie Reproduktionsschritte gefunden, aber normalerweise wäre das Problem inzwischen aufgetreten.
Ohne GPT-4 hätte ich das nie geschafft.
Wenn man ein Codestück komplett neu schreibt, ist es natürlich unwahrscheinlich, dass es denselben Bug wie die ursprüngliche Implementierung hat – selbst wenn man nicht versteht, was es tut, und ein LLM verwendet.
Allerdings können dabei andere Bugs entstehen, und ich hoffe, dass niemand so mit Code umgeht, bei dem die Folgen eines Bugs wichtig sind, etwa Systemausfälle oder Kosten für Kunden.
Dieser Beitrag ist für mich völlig schockierend
Salvatore ist einer der fähigsten Software Engineers, die heute aktiv sind
Er kann klar erkennen, dass dieses sogenannte Tool in seinem Fachgebiet völlig nutzlos ist
Und trotzdem übernimmt er die Prämisse der Befürworter, man müsse irgendwie einen Nutzen dafür finden, statt es wie einen unpassenden, verbogenen Schraubendreher wegzuwerfen
Wie man in einer Einführungsvorlesung zur Makroökonomie lernt: Wenn eine Insel bei der Produktion von Widget A überlegen ist, entsteht Spezialisierung, bei der Insel A Insel B einsetzt, egal wie schlecht deren Fähigkeit zur Produktion von B ist
Daher ist es nur natürlich, dass antirez’ relative Fähigkeit in der Systemprogrammierung das LLM in andere Programmieraufgaben verdrängt
Aber wir existieren nicht isoliert
Um uns herum gibt es zahlreiche Menschen, die technische Herausforderungen und etwas zu essen wollen
Viele von ihnen haben oder können Fähigkeiten erwerben, die unsere ergänzen
Wenn wir zusammenarbeiten, kann das Ergebnis der Kooperation mehr sein als die Summe der Teile
Vielleicht kann ein LLM PyTorch-Code besser schreiben als antirez
Aber nur weil in der Garage ein alter, verbogener Schraubendreher liegt, heißt das nicht, dass man ihn benutzen muss
Vielleicht ist es besser, heute in den Baumarkt zu gehen
Denn die exakte Syntax oder das Umformen von Tensoren ist für mich nicht besonders wichtig
Wenn es um einen privaten Zweck geht, etwa ein ConvNet für meine Bilder zu bauen und zu trainieren, muss ich keinen Torch-Experten belästigen
Wenn ich das ConvNet selbst ausreichend verstehe und nur die Torch-Syntax oder -Methoden nicht gut genug kenne, kann ich das selbst machen
Die Alternative wäre, die Details des Torch-Handbuchs zu studieren, und das Ergebnis wäre dasselbe
Entscheidend bei dieser Aufgabe ist nicht die Kontrolle über die Details von MLX, Keras oder PyTorch, sondern über die Machine-Learning-Konzepte
Im Moment sind sie bis zu einem gewissen Grad nützlich, aber schwerlich wirklich überzeugend, und man „fällt“ auch nicht „zurück“, wenn man sie nicht nutzt
Alle Beteiligten tun ihr Bestes, um sie leistungsfähiger zu machen; wenn dieser Tag kommt, kann man prompten, was man will
Es gibt keinen Grund, sich jetzt zu beeilen, um aus der aktuellen Generation zwanghaft etwas herauszupressen; derzeit senken sie oft eher die Produktivität, als sie zu erhöhen
Ich frage mich fast, ob wir denselben Text gelesen haben
Er sieht sich ein neues Tool an, das andere interessant finden, findet für sich nützliche Anwendungsweisen und erkennt zugleich an, wo es nutzlos ist
Die Beispiele, in denen es nicht nutzlos war, untermauert er ebenfalls ausreichend
Für Entwickler ist das keine besonders revolutionäre Erkenntnis
Wir verwenden ständig verschiedene Tools wie Programmiersprachen, und jedes Tool hat Stärken und Schwächen
Ich weiß nicht, warum LLMs da so anders sein sollten
Zu behaupten, sie hätten überhaupt keine Stärken, wirkt töricht
Geht das für unter 20 Dollar im Monat?
Wenn man ein neues Projekt startet, gibt es ein Impedanzproblem
Anfangs ist die Arbeit zu 0 % erledigt, und man muss irgendwo anfangen, sei es mit Hello World, einer CMakeLists-Datei oder einem Python-Skript, und das ist schwer
Vor ChatGPT/LLMs musste ich diese Anstrengung aus mir selbst bis in die Fingerspitzen ziehen
Jetzt kann ich sie ChatGPT überlassen
In der Praxis ist das weniger effizient und weniger mächtig, als wenn ich mich „hinsetzen und es selbst machen“ würde, aber es beseitigt die Kosten dafür, mich „dafür zu entscheiden, mich hinzusetzen und es selbst zu machen“
Trotzdem kopiert man weiterhin Schnipsel aus GitHub Code Search, StackOverflow, zufälligen Blogposts, Dokumentation, Discord usw. und knetet sie zusammen
Nach ein paar Versuchen und Neuversuchen hat man einen 5-%-Startpunkt für das Projekt, und sobald es endlich Form annimmt, kann man wirklich daran arbeiten
Am Ende baue ich schnell, indem ich die oberflächlichen Proof-of-Concept-Müllstücke, die ChatGPT ausspuckt, kopiere und einfüge, und wechsle dann, sobald genug Momentum da ist, dazu, selbst tief einzusteigen
Es ist also langsamer und ineffizienter, und ChatGPT ist darin nicht besser als ich, aber es ist leichter und ich muss mich nicht tief hineingraben
Letztlich kann ich dadurch in der Mitte und am Ende, also bei den wirklich wichtigen Teilen des Projekts, viel länger durchhalten und brenne am Anfang nicht aus
Habe ich von Anfang an die richtigen Fragen gestellt, und falls nicht: Kann man diese Arbeit effektiv retten?
Die versunkenen Kosten verschwinden in den 20-Dollar-Abo-Gebühren
Ich denke, die zentrale Einsicht ist die Stelle: „Ich habe ein Problem, und wenn das LLM Unsinn erzählt, muss ich schnell wissen, was ich verifizieren kann. In solchen Fällen nutze ich ein LLM, um schneller an das nötige Wissen zu kommen“
Einer der Gründe, warum Programmierung besonders gut zu LLMs passt, ist, dass die Überprüfung der richtigen Antwort meist trivial ist
Ich probiere gerade ein Konzept aus, um zu bewerten, ob ein LLM das passende Tool für eine Aufgabe ist
Etwa indem man „wie wichtig es ist, dass die Ausgabe korrekt ist“ und „wie leicht sich überprüfen lässt, ob die Ausgabe korrekt ist“ in ein Diagramm einträgt
Eine Liste von Songs zu erstellen, an denen Künstlerinnen beteiligt waren, die mit ChatGPT einen Emmy gewonnen haben, kostet Zeit bei der Genauigkeitsprüfung, aber die Wichtigkeit ist niedrig, und ein paar Fehler sind in Ordnung
Gibt es deshalb in Software überhaupt keine Bugs?
Es sind Probleme, bei denen es schwer ist, eine Lösung zu finden, aber leicht, eine mögliche Lösung zu verifizieren
Und wir alle wissen, wie diese Problemklasse genannt wird
Die Welt ist bereits voller irrelevanter und ungenauer Textfetzen, und wir sollten deren Produktion eher verringern als beschleunigen
Das bezieht sich nicht auf das konkrete Beispiel, sondern auf die gesamte Idee
Ich nutze ChatGPT als Denkpartner beim Schreiben von Code
Ich rede den ganzen Tag über damit und bekomme so meine Arbeit fertig
Das Unternehmen hat Copilot genehmigt, aber die Copilot-Autovervollständigung war eine schreckliche Erfahrung
Das Unternehmen hat Copilot Chat, das ich brauche, nicht genehmigt
Trotzdem fände ich ein ähnliches Tool gut, das auf meinem Laptop für meinen Code Unit-Tests oder Codekommentare usw. generiert
Natürlich auf Basis meiner Eingaben und Anleitung
Kollegen haben sie sehr gelobt, sodass ich mich fragte, ob ich der Seltsame bin, aber sie war extrem ablenkend, und nach ein paar Tagen habe ich sie abgeschaltet
Es fühlte sich an, als würde jemand versuchen, meine Sätze zu beenden, während ich noch rede
Selbst wenn es richtig war, war es nervig und hat meinen Flow unterbrochen, und sehr oft lag es falsch
[0] https://continue.dev/
[1] https://ollama.ai/
Vor ein paar Tagen habe ich Codeninja ausprobiert
Soweit ich mich erinnere, ist es keinesfalls auf dem Niveau von 4, das wohl das Copilot-Backend antreibt, aber für sensible Daten, die nicht nach außen gelangen dürfen, ist es praktisch die einzige Option
Alternativ könnte man sich bei OpenAI eine dedizierte Instanz holen
Das könnte die wichtigste Passage in diesem Text sein, und angesichts dessen, was 2024 bevorsteht, kann man sie kaum oft genug wiederholen
„Haben LLMs also ein gewisses Maß an Schlussfolgerungsfähigkeit, oder ist das alles nur Bluff? Es könnte sein, dass sie manchmal so wirken, als würden sie schlussfolgern, weil der ‚Signifikant‘, wie Semiotiker sagen, den Eindruck einer Bedeutung vermittelt, die in Wirklichkeit gar nicht existiert. Wer jedoch genug mit LLMs gearbeitet hat, weiß trotz der Akzeptanz ihrer Grenzen, dass sich damit allein nicht alles erklären lässt. Die Fähigkeit, bereits Gesehenes neu zu kombinieren, geht weit über das zufällige Wiedergeben von Wörtern hinaus. Auch wenn der Großteil des Trainings während des Pretrainings darin bestand, das nächste Token vorherzusagen, zwingt dieses Ziel das Modell dazu, irgendeine Form eines abstrakten Modells zu bilden. Dieses Modell ist schwach, lückenhaft und unvollständig, aber wenn wir beobachten, was wir beobachten, muss es existieren. Wenn mathematische Gewissheit zweifelhaft ist und selbst führende Experten oft gegensätzliche Positionen vertreten, scheint es klug, den eigenen Augen zu trauen.“