Log in to leave a comment
No posts yet
Werkzeuge wie Cursor oder Devin sind praktisch. Es ist jedoch schwer zu verstehen, was genau im Inneren passiert, und manchmal wird der Code auf eine Weise zerstückelt, die man nicht möchte. Für Backend-Entwickler ist es viel wirtschaftlicher und sicherer, einen eigenen, optimierten Agenten zu erstellen, indem sie die Python-Standardbibliothek mit LLM-APIs kombinieren.
Um einen Agenten dazu zu bringen, nicht nur Code zu schreiben, sondern Terminalbefehle direkt auszuführen, muss man das subprocess-Modul präzise handhaben. Die unbedachte Verwendung der Option shell=True setzt Sie Shell-Injection-Angriffen aus oder führt dazu, dass Prozesse bei Timeouts nicht sterben und als Zombies zurückbleiben.
Setzen Sie bei der Implementierung von subprocess.run() die Option shell=False und übergeben Sie Befehle als Liste. Legen Sie das Timeout kurz fest (ca. 30 Sekunden) und rufen Sie sofort process.kill() auf, um Ressourcen freizugeben, falls eine TimeoutExpired-Ausnahme auftritt. Es ist auch nicht notwendig, das gesamte Ergebnis an das Modell zu senden. Wenn der Text 1.000 Zeichen überschreitet, kürzen Sie ihn und geben Sie primär die letzten 20 Zeilen zurück. Das spart Token und bietet dem Modell dennoch genügend Informationen, um die Fehlerursache zu verstehen.
Je länger das Gespräch dauert, desto mehr Daten sammeln sich im Context Window an, was schnell zu einer Kostenexplosion führen kann. Laut Anthropic lassen sich durch die Verwendung von cache_control-Markern im Claude 3.5-Modell die Kosten für das Lesen zwischengespeicherter Daten um bis zu 90% senken. Das entspricht etwa 0,30 $ pro 1 Million Token.
Um Kosten zu sparen, sollten Sie Systemnachrichten und Benutzereingaben strikt trennen. Fixieren Sie Informationen, die sich nicht ändern, wie z. B. die Projekt-Dateibaumstruktur, oben im System-Prompt und setzen Sie sie als Cache-Punkt. Wenn die Token-Anzahl durch die Historie zu groß wird, berechnen Sie die Menge mit tiktoken und nutzen Sie eine hierarchische Zusammenfassung, bei der alte Nachrichten durch einen separaten LLM-Aufruf zusammengefasst werden. Wenn Sie dieses Sliding Window anwenden, bei dem nur der zusammengefasste Kontext oben bleibt und aktuelle Nachrichten angehängt werden, können Sie die Kosten in langen Entwicklungssitzungen um über 40% senken und gleichzeitig die Argumentationsgenauigkeit des Modells wahren.
Den Agenten anzuweisen, die gesamte Datei neu auszugeben, ist ineffizient und langsam. Je mehr Output-Token generiert werden, desto höher ist die Wahrscheinlichkeit, dass das Modell Code weglässt oder halluziniert. Der sogenannte "Edit Trick" leitet das Modell dazu an, nur den Text (Anchor) vor und nach dem zu ändernden Teil zu finden und zu ersetzen. Diese Technik kann die Anzahl der Output-Token in realen Daten um bis zu 86% reduzieren.
Nutzen Sie Pythons re.sub(), um Funktionen zu erstellen, die nur Änderungen an lokalen Dateien vornehmen, die über spezifische XML-Tags oder reguläre Ausdrücke übermittelt wurden. Anstatt alle technischen Dokumente in den Prompt zu packen, sollten Sie eine leichtgewichtige Vektor-DB wie LanceDB anbinden, um nur die absolut notwendigen Dokumentfragmente abzurufen. Mit dieser Struktur wird die Bearbeitungsgeschwindigkeit gefühlt um mehr als 79% beschleunigt, und das chronische Problem, dass das Modell bei großen Dateien den Überblick verliert, wird gelöst.
Entwickler sollten aufhören, mühsam Debugging-Meldungen zu kopieren und in das Modell einzufügen. Lassen Sie den Agenten pytest-basierten Testcode schreiben, bevor er den eigentlichen Code verfasst.
Bauen Sie einen Feedback-Loop auf, der den vollständigen Traceback bei einem Testfehler ohne Vorverarbeitung an das Modell zurückgibt, damit es sich selbst korrigieren kann. Gefährliche Befehle wie rm oder deploy müssen jedoch unbedingt mit Leitplanken versehen werden, indem die input()-Funktion von Python für eine Benutzerfreigabe genutzt wird. Sobald dieser Kreislauf steht, muss der Entwickler nur noch die git diff-Zusammenfassung des Agenten prüfen und auf den Commit-Button klicken.
Letztlich liegt der Kern beim Bau eines Agenten nicht in glänzenden Frameworks, sondern darin, wie präzise Daten zwischen dem Terminal und dem LLM bereinigt und zwischengespeichert werden. 600 Zeilen selbstgeschriebener Python-Code spiegeln Ihre Absichten oft besser wider als ein Blackbox-Tool mit zehntausenden Zeilen Code.