aider hilft bei der KI-Programmierung mit kompletten GitHub-Repositories

Das Open-Source-Tool aider erweitert die Möglichkeiten von Code-Assistenten wie ChatGPT, indem es ihren Kontext auf die komplette Code-Basis ausdehnt.

In Pocket speichern vorlesen Druckansicht 8 Kommentare lesen
World,Philosophy,Day,Education,Concept,With,Tree,Of,Knowledge,Planting

(Bild: Chinnapong / Shutterstock.com)

Lesezeit: 3 Min.

Das neue, quelloffene Befehlszeilen-Tool aider erweitert die Funktionen eines Code-Assistenten, indem es die Bearbeitung und Sichtung einer größeren Code-Basis beziehungsweise eines kompletten Git-Repositories in den Coding-Chat einbezieht. Das hilft Developern nicht nur punktuell bei akuten Methoden und Funktionen, sondern ermöglicht ihnen komplexe Aufgaben im größeren Projektkontext zu lösen.

Damit geht aider deutlich über die Standardfunktionen von ChatGPT oder GitHub Copilot hinaus, die nur in der unmittelbaren Code-Umgebung funktionieren, aber beispielsweise keine Abhängigkeiten berücksichtigen. Entwicklerinnen und Entwickler arbeiten mit aider direkt in ihren lokalen Quelldateien in GitHub und fügen dem Chat die relevanten Aufgaben und Daten hinzu, die aider mit ChatGPT 3.5 oder 4 abarbeitet. Es ermittelt dabei den Kontext der Aufgabe im gesamten Projekt und fordert bei Bedarf einzelne Dateien oder Code-Abschnitte nach, die es für das Gesamtverständnis benötigt. Änderungen committet das Tool direkt mit – laut der Beschreibung des Herstellers – sinnvollen Beschreibungen in Git.

Beim Start von aider ist es möglich, mehrere Quelldateien anzugeben oder das komplette Repository. Es koordiniert die Änderungen von GPT in einen einzigen Commit. Anwenderinnen und Anwender können parallel zum Chat Dateien von Hand im Editor bearbeiten, was aider registriert und GPT auf dem neuesten Stand hält. Wer GPT-4 direkt über OpenAI verwendet, kann sogar Bilddateien dem Kontext hinzufügen.

Bei einer Anweisung wie "switch all the print statements in class Foo to use the BarLog logging system" benötigt ChatGPT nicht nur die Foo-Klasse, sondern muss auch verstehen, wie das Projekt BarLog verwendet. aider liefert ChatGPT nun Informationen über die komplette Basis durch eine mit tree-sitter erstellte Repository Map, die alle Dateien zusammen mit den darin jeweils festgelegten Schlüsselelementen (key symbols) enthält. Die Map zeigt ferner für jedes dieser Elemente Definitionen und kritische Codezeilen, hier ein Beispiel:

aider/coders/base_coder.py:
⋮...
│class Coder:
│    abs_fnames = None
⋮...
│    @classmethod
│    def create(
│        self,
│        main_model,
│        edit_format,
│        io,
│        skip_model_availabily_check=False,
│        **kwargs,
⋮...
│    def abs_root_path(self, path):
⋮...
│    def run(self, with_message=None):
⋮...

aider/commands.py:
⋮...
│class Commands:
│    voice = None
│
⋮...
│    def get_commands(self):
⋮...
│    def get_command_completions(self, cmd_name, partial):
⋮...
│    def run(self, inp):
⋮...

Ein Repo-Baum dieser Art hilft GPT, den Code in größeren Repositories zu verstehen, darin zu navigieren und ihn zu bearbeiten. Es kann etwa herausfinden, wie man die von einem Modul exportierte API auf Grundlage der in der Karte angezeigten Details verwendet. Welchen Code es darüber hinaus benötigt, findet GPT anhand der Map selbst heraus, und bittet dann darum, diese spezifischen Dateien zu sehen. aider fügt diese dann automatisch dem Chat hinzu.

Weitere Informationen zum Apache-2.0-lizenzierten Projekt finden sich im GitHub-Repository von aider.

Ein Ausschnitt aus einem Chat-Beispiel mit aider.

(Bild: aider)

(who)