7 Punkte von GN⁺ 2024-01-01 | 1 Kommentare | Auf WhatsApp teilen
  • Emacs Copilot erzeugt Code Completion in Emacs-Buffern mithilfe eines lokal ausgeführten LLM (Large Language Model).
  • Das LLM wird als Unterkommando ausgeführt, das sich den lokalen Bearbeitungsverlauf pro Datei merkt, und kann jederzeit mit C-g unterbrochen werden.
  • Beim Löschen von Code kann auch dieser Verlauf aus dem Kontext des LLM entfernt werden, und die Programmiersprache wird unabhängig von der Sprache über die Dateiendung bestimmt.

WizardCoder-34b-Modell

  • WizardCoder 34b ist ein leistungsfähiges LLM, das denselben HumanEval-Score wie GPT-4 erreicht hat.
  • Für die Nutzung dieses Modells wird ein leistungsstarker Rechner wie ein Mac Studio M2 Ultra benötigt; Nutzer eines MacBook Pro können die Q3-Version in Betracht ziehen, allgemeine PC-Nutzer das Modell WizardCoder-Python-13b.
  • Nutzer mit geringerer Rechenleistung, etwa auf einem Raspberry Pi, können das Modell Phi-2 verwenden.

Erste Schritte

  • Nach dem Schreiben der ersten Zeile einer Funktion kann man mit C-c C-k die Kontrolle an das LLM übergeben, das dann den Rest der Funktion implementiert.
  • Das LLM ist so eingestellt, dass es stoppt, wenn die Funktion vollständig ist, und vermeidet Erklärungen oder ELI5-Kommentare.

Referenzimplementierung

  • Nach dem Download des LLM kann man den untenstehenden Code in einen Emacs-Puffer kopieren und M-x eval-buffer ausführen.
  • Der Code lässt sich an persönliche Vorlieben anpassen.

Emacs-Download-Link

  • Falls Emacs nicht installiert ist oder man eine Plattform wie Windows nutzt, auf der es schwieriger zu bekommen ist, gibt es einen Link zu einem ausführbaren Single-File-Build von Emacs, der ohne Installation läuft.

LLM-Download-Links

  • Es werden Links zum kostenlosen Download einiger LLMs bereitgestellt, die bekanntermaßen gut mit Emacs Copilot funktionieren.
  • Die Modellgröße kann passend zur eigenen Hardware gewählt werden.

Cache-Dateien

  • Wenn man sich für einen Modellwechsel entscheidet, müssen alle im lokalen Dateisystem erzeugten FILE.cache-Dateien gelöscht werden.

Hinweise

  • Unter macOS mit Apple Silicon muss Xcode installiert sein.
  • Bei Verwendung von zsh muss es möglicherweise mit sh -c ./llamafile ausgeführt werden.
  • Auf einigen Linux-Systemen können Fehler im Zusammenhang mit der Registrierung von binfmt_misc auftreten.

Unterstützte OS und CPU

  • llamafile unterstützt mehrere Betriebssysteme mit minimalen Installationsanforderungen.
  • llamafile unterstützt bestimmte CPUs; erforderlich ist ein AMD64-Mikroprozessor mit SSSE3 oder höherem Befehlssatz oder ein ARM64-Mikroprozessor mit ARMv8a+.

Hinweise zum Modell

  • Die oben bereitgestellten llamafile-Beispiele dürfen nicht als Unterstützung oder Empfehlung von Mozilla für ein bestimmtes Modell, eine bestimmte Lizenz oder einen bestimmten Datensatz verstanden werden.

Meinung von GN⁺

  • Innovatives Editor-Erlebnis: Emacs Copilot bietet Entwicklern eine neue Stufe der Coding-Unterstützung und hat das Potenzial, Effizienz und Produktivität deutlich zu steigern.
  • Zugänglichkeit und Anpassbarkeit: Nutzer können das LLM passend zu ihren Anforderungen und Vorlieben auswählen und ihre Emacs-Umgebung anpassen, wodurch sich eine personalisierte Entwicklungsumgebung schaffen lässt.
  • Technische Kompatibilität: Durch die Unterstützung verschiedener Betriebssysteme und CPUs kann Emacs Copilot von einer breiten Nutzerbasis eingesetzt werden, was Inklusion und Zugänglichkeit in der Entwickler-Community verbessert.

1 Kommentare

 
GN⁺ 2024-01-01
Hacker-News-Kommentare
  • Zweifel am Nutzen der LLM/IDE-Integration

    Ich bin nicht sicher, ob die Integration von LLMs in IDEs bei gewöhnlichen Coding-Aufgaben wirklich große Produktivitätssteigerungen bringt. Die durchschnittliche Produktivität von Programmierern liegt vielleicht bei etwa 100 LOC pro Tag, aber beim Erstellen von Prototypen kann man leicht mehr als 1000 LOC pro Tag schreiben. Der Unterschied in der Produktivität zwischen produktionsreifem Qualitätscode und Hacking/Prototyping liegt in der Qualität, und die meisten fähigen Programmierer können durch eigenes Schreiben Code mit besserer Qualität erzeugen als mit etwas, das aus einem LLM oder aus anderen Quellen kopiert wurde. Die Zeit, die man dafür braucht, den Code zu analysieren und zu prüfen, ob er frei von Schwachstellen ist und ob das Design für die künftige Wartung geeignet ist, scheint den Zeitgewinn aufzuwiegen, den man dadurch erzielt, dass man den Code nicht selbst schreibt. Zum Lernen oder zum Schreiben von einmaligem Code, bei dem Qualität nicht wichtig ist, können LLMs nützlich sein, aber bei Produktionscode ist es meiner Meinung nach noch ein weiter Weg, bis die Ausgabe von LLMs das Niveau eines Entwicklers erreicht und nicht mehr sorgfältig geprüft oder überarbeitet werden muss.

  • Dank für die Entwicklung selbst gehosteter LLM-Tools

    Es wird Dank an Justine dafür ausgesprochen, die Entwicklung selbst gehosteter LLM-Tools voranzutreiben. Llamafiles sollten zum Standard werden. Es wird gefragt, ob es eine Möglichkeit gibt, sich mit einem entfernten LLM zu verbinden, das im selben LAN gehostet wird; Apple-Geräte werden zwar nicht genutzt, aber es gibt eine leistungsstarke Maschine im Netzwerk, die dafür verwendet werden soll. Ob Llamafile eine API bereitstellen könnte; das gehe in den Bereich von LSP, und es wäre gut, Llamafiles zu nutzen.

  • Geteilte Erfahrungen mit der LLM-Integration in Emacs

    Ich nutze Emacs für den Großteil meiner Arbeit an Code und technischer Dokumentation. Ich verwende phind-v2-codellama, openhermes, ollama, gptel und GitHubs Copilot. Mir gefällt die Möglichkeit, beliebige Bereiche an ein LLM zu senden und Prompts abzusetzen. Die UX ist noch in einem frühen Stadium, aber stell dir vor, das Basismodell könnte den gesamten Kontext aufnehmen, etwa orgmode-Dateien und geöffnete Datei-Buffer, und Werkzeuge wie LSP verwenden.

  • Erfahrungen mit dem Betrieb eines LLM auf einem MacBook Pro M1 Max

    Ich nutze ein MacBook Pro M1 Max mit 64 GB RAM und habe ein 34B-Q55-Modell (ein großes Modell) heruntergeladen, das nachweislich gut funktioniert. Es ist langsam, aber nutzbar. Es läuft auf einer Asahi-Fedora-Linux-Partition, und ich weiß nicht, wie die GPU dabei genutzt wird. Meine Umgebung ist mit ZSH 5.9 eingerichtet, und wenn ich das LLM direkt über SUDO aufrufe, wird es schnell als Webserver geladen, sodass ich über localhost:8080 im Webbrowser damit interagieren kann. Wenn ich jedoch versuche, das LLM aus Emacs heraus auszuführen, erscheint der Fehler "Doing vfork: Exec format error.". Wenn ich der Demo im Readme folge, den Anfang der Funktion isPrime eingebe und dann C-c C-k tippe, tritt dieser Fehler auf. Irgendwelche Ideen, was dabei schiefläuft?

  • Kritik an der Funktion is_prime in der Videodemonstration

    Die in der Videodemonstration gezeigte Funktion is_prime ist sehr schlecht. Sie prüft weiterhin per Modulo gegen 4, 6, 8 usw., selbst wenn die Eingabe nicht durch 2 teilbar ist, was völlig sinnlos ist. Mit nur einer zusätzlichen Codezeile (Prüfung auf ungerade Zahlen) könnte man die Schleife auf nur ungerade Zahlen beschränken und sie doppelt so schnell machen. Hoffentlich prüfen die Leute, die solche LLMs verwenden, den Code, bevor sie ihn nach prod pushen.

  • Frage zu einem Llamafile-Build, das auf NixOS nicht ausführbar ist

    Es wird gefragt, ob man ein eigenes Llamafile ohne cosmopolitan/eine tatsächlich portable ausführbare Datei bauen kann. Auf NixOS lässt es sich nicht ausführen.

  • Wunsch nach einer allgemeineren LLM-Integration

    Ich bin mit dem aktuell Gebotenen zufrieden, möchte aber eine allgemeinere LLM-Integration, die dies und alles andere kann, was ein LLM leisten kann. Zum Beispiel könnte ein Tastendruck „diesen Code vervollständigen“ bedeuten, während ein anderer den aktuellen Buffer unverändert an das LLM sendet, einen Bereich an das LLM sendet oder einen Bereich sendet und durch das Ergebnis ersetzt. Es gibt einige orthogonale Funktionen dafür, Eingaben auf verschiedene Arten in ein LLM zu bringen (Bereich, Buffer, Datei, Inline-Prompt) und Ergebnisse auf verschiedene Arten auszugeben (am Punkt einfügen, Bereich überschreiben, in einen neuen Buffer legen usw.); darauf aufbauend könnte man verschiedene automatische System-Prompts wie Code-Vervollständigung, Prosa und Ähnliches erstellen.

  • Vim-Nutzer teilt benutzerdefinierten Befehl für die LLM-Integration

    Ich verwende einen benutzerdefinierten Befehl, der den aktuell ausgewählten Code nimmt, ein Browserfenster öffnet und verschiedene AI-Engines um Verbesserungen bittet. Es wurde der in der vimrc verwendete Befehl geteilt.

  • Frage zum Upgrade-Pfad von Llamafile

    Es wird nach dem Upgrade-Pfad von Llamafile gefragt. Es wird so verstanden, dass es sich um eine Kombination aus llama.cpp (eine kleine Datei, die häufig aktualisiert wird) und den Modellgewichten (große Dateien, die nicht oft aktualisiert werden) handelt. Es stellt sich die Frage, ob man jedes Mal, wenn eine Änderung an llama.cpp nötig ist, mehrere Gigabyte des unveränderten Modells erneut herunterladen muss.

  • Ausdruck von Interesse an LLM-Integration und Bereitschaft zum Ausprobieren

    Sehr interessant, ich werde es auf jeden Fall ausprobieren. Allerdings unterscheidet es sich stark von der Funktionsweise von GitHub Copilot, daher ist der Name vielleicht nicht ideal gewählt. Angesichts der Architektur von Emacs und Ähnlichem ist es überraschend, dass es nicht mehr Entwicklung bei der Integration mit LLMs gibt, aber an den meisten Projekten wurde seit einigen Monaten nicht gearbeitet. Andererseits könnte es auch sein, dass die meisten Emacs-Nutzer gegen die Nutzung von LLMs sind.