Wenn Sie neu im Bereich der Bauagenten sind, sollten Sie zuerst die Intro zu Agenten und die geführte Besichtigung von smolagents.
Code-Agenten #
Mehrere Forschung Papiere haben gezeigt, dass es viel besser ist, wenn der LLM seine Aktionen (die Werkzeugaufrufe) in Code schreibt, als das derzeitige Standardformat für Werkzeugaufrufe, das in der Branche verschiedene Schattierungen von "Schreiben von Aktionen als JSON von Werkzeugnamen und zu verwendenden Argumenten" aufweist.
Warum ist Code besser? Nun, weil wir unsere Codesprachen speziell dafür entwickelt haben, dass sie die von einem Computer ausgeführten Aktionen gut ausdrücken können. Wenn JSON-Snippets ein besserer Weg wäre, wäre dieses Paket in JSON-Snippets geschrieben worden und der Teufel würde uns auslachen.
Code ist einfach eine bessere Möglichkeit, Aktionen auf einem Computer auszudrücken. Er ist besser:
- Zusammensetzbarkeit: Können Sie JSON-Aktionen ineinander verschachteln oder eine Reihe von JSON-Aktionen definieren, um sie später wiederzuverwenden, so wie Sie eine Python-Funktion definieren können?
- Objektverwaltung: wie speichert man die Ausgabe einer Aktion wie
generate_image
in JSON? - Allgemeinheit: Der Code ist so aufgebaut, dass er einfach alles ausdrücken kann, was man einen Computer machen lassen kann.
- Repräsentation im LLM-Trainingskorpus: Warum sollte man sich nicht den Segen des Himmels zunutze machen, dass bereits zahlreiche hochwertige Klagen in den Korpus der LLM-Ausbildung aufgenommen wurden?
Dies wird in der folgenden Abbildung veranschaulicht, die aus Ausführbare Code-Aktionen führen zu besseren LLM-Agenten.

Deshalb haben wir uns darauf konzentriert, Code-Agenten vorzuschlagen, in diesem Fall Python-Agenten, was bedeutete, dass wir größere Anstrengungen unternahmen, um sichere Python-Interpreter zu entwickeln.
Lokaler Python-Interpreter #
Standardmäßig wird die CodeAgent
führt LLM-generierten Code in Ihrer Umgebung aus. Diese Ausführung erfolgt nicht durch den normalen Python-Interpreter: Wir haben einen sichereren LocalPythonInterpreter
von Grund auf neu entwickelt. Dieser Interpreter ist für die Sicherheit von konzipiert:
- Beschränkung der Importe auf eine vom Benutzer ausdrücklich übergebene Liste
- Begrenzung der Anzahl der Operationen, um Endlosschleifen und Ressourcenüberlastung zu vermeiden.
- Führt keine Operationen durch, die nicht vordefiniert sind.
Wir haben dies in vielen Anwendungsfällen eingesetzt, ohne jemals eine Schädigung der Umwelt zu beobachten.
Diese Lösung ist jedoch nicht wasserdicht: Es sind Fälle denkbar, in denen LLMs, die auf bösartige Aktionen abgestimmt sind, Ihrer Umgebung dennoch schaden können. Zum Beispiel, wenn Sie ein harmloses Paket wie Kopfkissen
um Bilder zu verarbeiten, könnte der LLM Tausende von gespeicherten Bildern erzeugen, die Ihre Festplatte aufblähen. Es ist sicherlich nicht wahrscheinlich, wenn Sie die LLM-Engine selbst ausgewählt haben, aber es könnte passieren.
Wenn Sie also besonders vorsichtig sein wollen, können Sie die unten beschriebene Option zur Remotecodeausführung verwenden.
E2B-Code-Ausführer #
Für maximale Sicherheit können Sie unsere Integration mit E2B nutzen, um Code in einer Sandbox-Umgebung auszuführen. Dabei handelt es sich um einen Fernausführungsdienst, der Ihren Code in einem isolierten Container ausführt, so dass es unmöglich ist, dass der Code Ihre lokale Umgebung beeinträchtigt.
Hierfür müssen Sie Ihr E2B-Konto einrichten und Ihre E2B_API_KEY
in Ihren Umgebungsvariablen. Gehen Sie zu E2Bs Schnellstart-Dokumentation für weitere Informationen.
Dann können Sie es installieren mit pip install e2b-code-interpreter python-dotenv
.
Jetzt sind Sie bereit!
Um den Code-Executor auf E2B zu setzen, übergeben Sie einfach das Flag use_e2b_executor=True
bei der Initialisierung Ihrer CodeAgent
. Beachten Sie, dass Sie alle Abhängigkeiten des Werkzeugs in zusätzliche_autorisierte_Importe
damit der Executor sie installiert.
Kopiert
von smolagents import CodeAgent, VisitWebpageTool, HfApiModel agent = CodeAgent( tools = [VisitWebpageTool()], model=HfApiModel(), additional_authorized_imports=["requests", "markdownify"], use_e2b_executor=True ) agent.run("Was war das bevorzugte Haustier von Abraham Lincoln?")
Die Ausführung von E2B-Code ist im Moment nicht mit Multi-Agenten kompatibel - denn wenn ein Agent einen Code-Blob aufruft, der remote ausgeführt werden soll, ist das ein Chaos. Aber wir arbeiten daran, es hinzuzufügen!