Das Astro-Team hat heimlich das beste KI-Agenten-Framework entwickelt
BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술
Transcript
00:00:00Dies ist Flu, ein Open-Source-Framework zum Erstellen von KI-Agenten, entwickelt vom Team hinter Astro,
00:00:04das im Grunde das nimmt, was Cloud Code als Rahmen bietet, und es zu 100 % programmierbar macht.
00:00:09Dinge wie Skills, Tools und Sandboxes werden also direkt unterstützt,
00:00:13sodass man mit nur wenigen Zeilen TypeScript einen voll funktionsfähigen Agenten-Rahmen erstellen und überall bereitstellen kann.
00:00:19Aber warum sollte das Astro-Team überhaupt ein Framework für Agenten-Rahmen bauen?
00:00:23Und was hat es mit diesem coolen Trick für Sandboxes auf sich, mit dem man Agenten viel günstiger betreiben kann?
00:00:28Klicke auf Abonnieren und lass es uns herausfinden.
00:00:33Flu wurde vom Mitbegründer von Astro entwickelt, und lustigerweise,
00:00:36hatten sie gar nicht vor, ein Framework für Agenten-Rahmen zu bauen.
00:00:39Fred und das Team bauten Flu, um KI-Workflows im eigenen GitHub-Repo von Astro auszuführen.
00:00:44Aber als ein anderer Ingenieur von Amplitude es in die Finger bekam,
00:00:47wurde dem Team klar, dass dies ein Tool ist, auf das jeder Agent zugreifen können sollte,
00:00:51was eigentlich Sinn ergibt, wenn man darüber nachdenkt.
00:00:53Ich meine, schauen wir uns zum Beispiel Cloud Code an.
00:00:55Unter der Terminal- oder UI-Chat-Oberfläche liegt ein Rahmen,
00:00:58er unterstützt also benutzerdefinierte Tools von MCP-Servern, liest Cloud-MD-Dateien,
00:01:02er bietet Sandbox-Unterstützung und Support für wiederverwendbare Skills.
00:01:05Dies und vieles mehr ermöglicht es dem Modell, echte Arbeit zu leisten,
00:01:08was Flu dir in nur wenigen Codezeilen bieten kann.
00:01:11Es erreicht dies, indem es auf Pi aufbaut, das selbst ein minimaler Agenten-Rahmen ist,
00:01:16dieselbe Basis, auf der auch OpenClaw aufbaut,
00:01:18und es legt ein echtes Framework um den Agenten-Kern von Pi.
00:01:21Flu macht tatsächlich etwas Cleveres mit Sandboxes, damit du sie viel günstiger ausführen kannst,
00:01:25wovon ich später noch etwas erzähle.
00:01:26Aber wenn wir zum Beispiel mit Cloud Code zurückkehren,
00:01:28geht es davon aus, dass ein Mensch am Steuer sitzt und den Agenten bedient,
00:01:31was meistens auch der Fall ist.
00:01:33Aber Flu hat diese Einschränkung nicht.
00:01:35Mit Flu kannst du Agenten wie Cloud Code bauen, die menschliche Eingaben erfordern,
00:01:38du kannst aber auch Workflows erstellen, die gar keine menschliche Eingabe benötigen,
00:01:42was nützlich für agentische Prozesse ist, die sehr spezifisch sind
00:01:44und sich nicht so oft ändern müssen.
00:01:46Nun denkst du vielleicht,
00:01:47das klingt sehr ähnlich wie Mastra oder das Vercel AI SDK,
00:01:52und ich werde später noch auf die Unterschiede eingehen.
00:01:54Tatsächlich werden die Unterschiede viel klarer, wenn wir eine einfache Demo durchgehen.
00:01:57Also lassen Sie uns das tun.
00:01:58Um anzufangen, musst du die Flu-Laufzeitumgebung installieren,
00:02:01was die Umgebung ist, die dein Agent importiert und in der er läuft,
00:02:04und dann musst du die Flu CLI installieren,
00:02:06die deinen Agenten kompiliert und bereitstellt.
00:02:08Du musst auch einen API-Schlüssel von einem der vielen Anbieter einrichten, die Pi unterstützt.
00:02:13Für diese Demo verwende ich jedoch Anthropic,
00:02:15und dann musst du 'flu init' mit den Zielplattformen ausführen,
00:02:18was eine Flu-Konfigurationsdatei erstellt, damit die CLI weiß, wie dein Projekt zu verpacken ist.
00:02:22Du kannst zwischen Node oder Cloudflare wählen,
00:02:24und ich werde gleich auf die Unterschiede eingehen.
00:02:26Aber ich habe diese Schritte bereits gemacht,
00:02:27also schauen wir uns mal an, wie diese Dateien aussehen.
00:02:30Hier sind die typischen Dateien, die man von einem leeren Bun-Projekt erhält,
00:02:33und einige dieser Dateien werden gar nicht verwendet.
00:02:35Wenn wir uns 'index.ts' ansehen, das wird für nichts verwendet.
00:02:38Die Readme-Datei ebenso wenig,
00:02:39aber was tatsächlich verwendet wird, ist diese 'flu config.ts'-Datei,
00:02:42die V im Hintergrund nutzt,
00:02:45die CLI, um Node statt Cloudflare zu verwenden.
00:02:47Und der Unterschied ist: Node verwendet einen HTTP-Server auf Basis von HONO,
00:02:51und Cloudflare stellt dein Projekt auf einem Worker bereit,
00:02:53mit einem 'Durable Object' für die Persistenz.
00:02:55Nachdem du diese Schritte ausgeführt hast,
00:02:56musst du ein neues Verzeichnis erstellen,
00:02:57entweder eines für Agenten oder eines für Workflows.
00:03:00Wir werden später noch auf Workflows eingehen,
00:03:01aber für jetzt habe ich mit einem einfachen Agenten begonnen,
00:03:03der den Code in der Dokumentation enthält.
00:03:05Und das legt im Grunde ein Modell fest
00:03:06und fügt einige Anweisungen hinzu,
00:03:08die an den System-Prompt angehängt werden.
00:03:09Und das war's.
00:03:10Das ist alles, was du brauchst, um einen grundlegenden Flu-Agenten zu erstellen.
00:03:13Lass uns ihn in Aktion sehen.
00:03:14Um ihn auszuführen, können wir 'flu connect' verwenden,
00:03:15was den Agenten baut und ausführt.
00:03:17Und wir gleichen den Namen unserer TS-Datei ab,
00:03:20die 'hello world' heißt,
00:03:21bevor wir ihr eine Instanz-ID geben,
00:03:22die alles sein könnte.
00:03:24Es könnte also sogar ein lokales eins, zwei, drei sein.
00:03:25Aber das ist nützlich, wenn du viele Agenten laufen hast
00:03:27und jeder Agent seine eigene, eindeutige ID haben kann.
00:03:29Dies ist auch für die Bereitstellung auf Cloudflare nützlich,
00:03:31weil diese ID auf seine eigene 'Durable Object'-Instanz gemappt wird.
00:03:35Also, wenn wir jetzt Enter drücken,
00:03:36können wir sehen, wie er die Konfiguration lädt,
00:03:38das Ziel liest und den gefundenen Agenten ausführt.
00:03:40Nun, wir haben keine Agenten-MD-Datei,
00:03:42aber wenn wir eine hätten, würde er diese verwenden.
00:03:43Und jetzt hat er die Agenten in diese 'server.mjs'-Datei gebaut
00:03:46und uns die Möglichkeit gegeben, einen Prompt einzugeben.
00:03:48Ich kann also so etwas sagen wie: Gib mir einen zufälligen Witz.
00:03:50Und hier können wir sehen, wie der Agent anfängt nachzudenken,
00:03:52er antwortet, streamt also seinen Lebenszyklus.
00:03:54Dann erzählt er mir einen Witz und fragt mich nach einem weiteren.
00:03:57Aber dann, hier unten, druckt er das finale JSON,
00:03:59das aus dem Text besteht,
00:04:00sowie einigen Eingabe- und Ausgabetoken,
00:04:02den Kosten des gesamten Prompts
00:04:03und dem verwendeten Modell.
00:04:05Natürlich könnten wir weiter mit diesem Agenten sprechen,
00:04:06aber für jetzt werde ich ihn herunterfahren.
00:04:08Und das ist ein Beispiel für den Aufbau eines grundlegenden Agenten mit Flu.
00:04:11Lass uns etwas Komplizierteres machen.
00:04:13Lass uns einen Workflow erstellen, um einige Titel für dieses YouTube-Video zu generieren.
00:04:15Und um das zu tun, erstellen wir wieder einen Agenten
00:04:16mit etwas komplexeren Anweisungen.
00:04:18Und dieses Mal haben wir tatsächlich einen Skill.
00:04:20Also wird der Skill hier mit einem Skill-Import-Attribut importiert.
00:04:23Und hier, beachte, dass wir nicht mehr den Agenten selbst exportieren,
00:04:26sondern diesmal exportieren wir eine Funktion namens 'run'.
00:04:29Und was das tut, ist den Agenten für den Workflow zu initialisieren
00:04:31und dann eine Sitzung im Rahmen zu öffnen.
00:04:34Nun, was als Nächstes passiert, ist ziemlich interessant.
00:04:36Also hier, was vor sich geht, ist, dass wir den Pfad
00:04:38aus dem Payload bekommen, der hier
00:04:41in diesem Flux-Kontexttyp festgelegt wurde.
00:04:43Wenn wir also den Namen hier in 'file' ändern würden,
00:04:44würden wir einen Typfehler bekommen.
00:04:46Und hier wird die Datei abgerufen,
00:04:47die ich 'script' genannt habe,
00:04:49und als Prompt übergeben.
00:04:50Das wird also alles Sinn ergeben,
00:04:52wenn wir uns die Anweisungen hier ansehen,
00:04:53wo wir es anweisen, das Skript zu studieren
00:04:55und mir 10 Clickbait-YouTube-Titel zu geben,
00:04:57wobei wir den 'Title Score'-Skill verwenden, um sie zu bewerten.
00:04:59Also schauen wir mal, ob das funktioniert.
00:05:01Aber bevor wir das tun,
00:05:02will ich deutlich machen, dass Workflows
00:05:03im 'workflow'-Verzeichnis liegen
00:05:04und Skills im 'skills'-Verzeichnis
00:05:06vom Stammverzeichnis des Projekts aus.
00:05:08Und um diesen Workflow auszuführen,
00:05:09müssen wir 'flu run' mit dem Namen unseres Workflows ausführen.
00:05:10In meinem Fall ist es 'YT titles',
00:05:13gefolgt vom Ziel und dem JSON-Payload,
00:05:14was der Pfad für dieses Skript ist.
00:05:16Wenn wir also Enter drücken,
00:05:18werden wir sehen, dass wir eine Workflow-ID bekommen.
00:05:19Und hier tut er etwas Seltsames.
00:05:21Er sucht tatsächlich nach dem Skill,
00:05:23obwohl ich ihn vorher angegeben habe.
00:05:25Und jetzt in dieser Begründung,
00:05:27sagt er mir, dass es keine Dateien auf dem Dateisystem gibt.
00:05:27Warum tut er das?
00:05:30Standardmäßig
00:05:31führt Flu Agenten in einer Sandbox nur mit Bash aus.
00:05:32Alles, worauf er Zugriff hat, ist die Skill-Beschreibung,
00:05:35die hier registriert wurde,
00:05:37aber er hat keinen Zugriff auf all diese Dateien,
00:05:39die sich auf den Skill beziehen.
00:05:42Und der Skill selbst, wenn wir uns ihn ansehen,
00:05:43führt tatsächlich ein Python-Skript mit Bash aus,
00:05:44um einen genauen 'vidIQ'-Stil-Score
00:05:47für einen YouTube-Titel zu finden.
00:05:50Um das zu beheben,
00:05:51importiere ich 'local' von 'flu runtime node',
00:05:52was Flu anweist, den Agenten auf meinem lokalen System auszuführen,
00:05:54sodass er Zugriff auf alle meine Dateien hat
00:05:57und Python-Skripte ausführen kann.
00:05:59Wenn du sicherheitsbewusst bist,
00:06:01werde ich später im Video erklären, wie du das umgehen kannst.
00:06:02Aber wir werden auch
00:06:03das aktuelle Arbeitsverzeichnis zum Skill ändern,
00:06:04innerhalb des 'skills'-Verzeichnisses dieses Projekts.
00:06:05Sodass Flu nicht herumschauen muss,
00:06:07um die genauen Dateien zu finden, die es braucht.
00:06:10Und jetzt, wenn ich diesen Workflow ausführe,
00:06:11können wir sehen, dass Flu sofort die 'skill MD'-Datei liest
00:06:13und in der Lage ist, die 10 Clickbait-Titel zu generieren
00:06:15mit einem Score für jeden von ihnen.
00:06:17Nun, wenn du deinem Agenten
00:06:20keinen Workflow-Zugriff auf dein lokales System geben willst,
00:06:21könntest du stattdessen
00:06:22ein benutzerdefiniertes Tool aus der Python-Datei erstellen.
00:06:25Ich lade also hier die Python-Datei im Skill
00:06:26und erstelle ein Tool namens 'score title',
00:06:28das Value-Bots verwendet, um die Parameter zu verifizieren
00:06:30und dann das Python-Skript ausführt.
00:06:33Dann können wir dieses Tool in unserem Agenten registrieren
00:06:35und alles sollte wie erwartet funktionieren.
00:06:37Aber kehren wir jetzt zum vorherigen Projekt zurück
00:06:40und sagen wir, wir wollen es über einen HTTP-Post-Aufruf auslösen.
00:06:42Nun, es gibt nur eine Sache, die wir tun müssen, um das zu ermöglichen.
00:06:44Und das ist einfach das Hinzufügen der Root-Middleware.
00:06:47Jetzt müssen wir nur noch das Flu-Projekt bauen,
00:06:50unser Ziel und einen optionalen Port angeben,
00:06:52und dann unsere Server-Datei ausführen.
00:06:54Und jetzt lauscht er auf dem von uns angegebenen Port.
00:06:56Beachte, dass die 'server.js'-Datei
00:06:58alle Agenten oder Workflows, die wir haben, integriert.
00:07:00Wir brauchen also nur diese Datei,
00:07:01wenn wir sie überall dort bereitstellen wollen, wo Node.js unterstützt wird.
00:07:03Jetzt kann ich 'curl' mit der Post-Methode
00:07:05an den angegebenen Port ausführen,
00:07:07einen Workflow auswählen und ihm einige Daten geben,
00:07:09was uns eine Workflow-ID gibt.
00:07:11Und wenn wir dann nach Workflows fragen,
00:07:13unsere spezifische Workflow-ID angeben
00:07:14und an JQ weiterleiten, nur um es lesbarer zu machen,
00:07:16können wir Informationen über unseren Workflow
00:07:18und eine Zusammenfassung der Ergebnisse sehen.
00:07:21Natürlich unterstützt Flu WebSockets statt HTTP,
00:07:23falls du die Workflow-Informationen streamen möchtest.
00:07:25Nun, wie üblich gibt es so viele Funktionen, die Flu hat,
00:07:27dass ich nicht dazu kam, sie alle durchzugehen,
00:07:29wie Agentenprofile für wiederverwendbare Agenten,
00:07:31Support für Daytona, Cloudflare-Sandboxes,
00:07:33oder jede andere Sandbox, einfach durch Verwendung einer URL,
00:07:35das Hinzufügen benutzerdefinierter Routen für Auth oder Gesundheitschecks,
00:07:37und sogar Unterstützung für Sub-Agenten.
00:07:40Aber wie ist das im Vergleich
00:07:42zu einem anderen Open-Source-KI-Agenten-Framework wie Mastra?
00:07:44Nun, das letzte Mal, als ich Mastra verwendet habe,
00:07:45war, als ich dieses Video gemacht habe,
00:07:48welches du anhalten und dir ansehen kannst,
00:07:49wenn du eine Auffrischung brauchst, was es ist.
00:07:50Aber als ich es verwendet habe,
00:07:52musstest du immer noch die Sitzungen,
00:07:54den Speicher, die Sandbox und das Tool-Laden selbst manuell einrichten.
00:07:55Es war ein viel granularerer Schritt-für-Schritt-Prozess,
00:07:58und ich bin mir nicht sicher, ob sich das geändert hat,
00:08:01um einfacher zu werden,
00:08:03aber ich denke, der Ansatz, den Flu verfolgt,
00:08:05ist komplett anders.
00:08:06Es ist eher ein 'Framework-first'-Ansatz
00:08:08und geht davon aus, dass du
00:08:10diese Funktionen von Anfang an verwenden wirst.
00:08:11Apropos Sandboxes,
00:08:13Flu macht tatsächlich etwas wirklich Cleveres mit ihnen.
00:08:14Also bekommt jeder Agent seine eigene Sandbox standardmäßig,
00:08:16was ich in der Demo vorhin erklärt habe,
00:08:18aber diese Sandbox wird von Vercels 'just Bash' betrieben,
00:08:21das Bash in TypeScript reimplementiert.
00:08:22Es führt diese Sandbox also im Speicher aus,
00:08:25statt in einem echten Container,
00:08:27was bedeutet, dass du Zugriff auf 'grep', 'glob' und Lese-Tools hast,
00:08:29ohne jedes Mal für einen Container zu bezahlen,
00:08:31der eine ganze Linux-Maschine hochfahren muss,
00:08:34nur bevor du etwas tun kannst.
00:08:35Das bedeutet, dass Flu Tausende von Agenten
00:08:38fast umsonst ausführt,
00:08:40und du kannst dich für einen echten Container entscheiden,
00:08:41nur wenn du einen brauchst.
00:08:43und du kannst dich für einen echten Container entscheiden,
00:08:44nur wenn du einen brauchst.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video