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.

Key Takeaway

Flu bietet ein Framework-First-Modell zur Erstellung von KI-Agenten, das durch eine in TypeScript implementierte Sandbox-Umgebung kostengünstige Skalierbarkeit für Workflows ohne Container-Overhead ermöglicht.

Highlights

  • Flu ist ein Open-Source-Framework, das es ermöglicht, mit nur wenigen Zeilen TypeScript voll funktionsfähige KI-Agenten zu erstellen und bereitzustellen.

  • Das Framework baut auf 'Pi' auf und bietet native Unterstützung für benutzerdefinierte Tools, MCP-Server, Sandboxes und wiederverwendbare Skills.

  • Flu führt Sandboxes durch eine in TypeScript reimplementierte Bash-Umgebung im Speicher aus, was die Kosten gegenüber containerbasierten Lösungen erheblich senkt.

  • Agenten und Workflows können wahlweise für Node.js oder Cloudflare Worker mit 'Durable Objects' zur Persistenz kompiliert werden.

  • Die Ausführung erfolgt direkt über die Flu CLI, wobei jede Agenten-Instanz durch eine eindeutige ID verwaltet wird.

Timeline

Grundlagen und Architektur von Flu

  • Flu wurde ursprünglich für interne KI-Workflows entwickelt und ist nun ein allgemeines Framework für Agenten.
  • Das System basiert auf dem minimalen Agenten-Rahmen 'Pi' und erweitert diesen um umfassende Funktionalitäten wie Sandbox-Unterstützung.
  • Im Gegensatz zu menschzentrierten Lösungen wie Cloud Code unterstützt Flu sowohl interaktive als auch vollständig autonome Workflows.

Das Framework nimmt die Grundstruktur bekannter Tools wie Cloud Code und macht sie durch TypeScript programmierbar. Es unterstützt benutzerdefinierte Tools und persistente Workflows, ohne dass ein Mensch zwingend am Steuer sitzen muss.

Implementierung und Bereitstellung

  • Die Einrichtung erfolgt über die Installation der Flu-Laufzeitumgebung und der CLI zur Kompilierung des Projekts.
  • Projekte werden durch 'flu init' konfiguriert, wobei zwischen Node.js-HTTP-Servern und Cloudflare Workern gewählt werden kann.
  • Jeder Agent erhält eine eindeutige Instanz-ID, die bei Cloudflare direkt auf ein 'Durable Object' gemappt wird.

Die Konfiguration erfolgt zentral über 'flu config.ts'. Ein einfacher Agent benötigt lediglich eine Modellfestlegung und System-Prompts, während die CLI den Rest für die Bereitstellung in der gewählten Umgebung übernimmt.

Workflows, Skills und lokale Ausführung

  • Workflows werden im 'workflow'-Verzeichnis definiert und über die 'run'-Funktion initialisiert.
  • Standardmäßig isolierte Bash-Sandboxes können durch den Import von 'local' für den Zugriff auf das lokale Dateisystem umgangen werden.
  • HTTP-Middleware ermöglicht es, Workflows per Post-Anfrage oder WebSockets auszulösen, was eine einfache Integration in bestehende Systeme erlaubt.

Die Nutzung von Skills ermöglicht modulare Funktionalität. Wenn Sicherheitsbedenken bestehen, können anstatt des vollständigen Systemzugriffs auch spezialisierte, validierte Tools definiert werden, die Python-Skripte kontrolliert ausführen.

Vergleich und Sandbox-Effizienz

  • Flu unterscheidet sich von Mastra durch einen Framework-First-Ansatz, der Kernfunktionen wie Memory und Sandboxen vorkonfiguriert.
  • Die Sandbox-Technik basiert auf einer Bash-Reimplementierung in TypeScript, die direkt im Speicher läuft.
  • Diese Architektur macht das Hochfahren schwerer Container überflüssig und ermöglicht den parallelen Betrieb tausender Agenten.

Das Framework optimiert die Betriebskosten durch den Verzicht auf containerbasierte Isolierung für einfache Aufgaben. Container werden nur dann geladen, wenn sie explizit für komplexe Prozesse benötigt werden.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video