Astro Team втайне создали лучшую платформу для ИИ-агентов

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00Это Flu, фреймворк с открытым исходным кодом для создания ИИ-агентов, созданный командой Astro,
00:00:04который, по сути, берет то, что делает Claude Code, в качестве основы и делает это на 100% программируемым.
00:00:09Такие вещи, как навыки, инструменты, песочницы, поддерживаются «из коробки»,
00:00:13поэтому вы можете создать полнофункциональную основу для агента и развернуть её где угодно всего за несколько строк TypeScript.
00:00:19Но почему команда Astro вообще решила создать фреймворк для основы агентов?
00:00:23И что это за крутой трюк с песочницами, который позволяет запускать агентов намного дешевле?
00:00:28Подписывайтесь, и давайте узнаем.
00:00:33Flu был создан соучредителем Astro, и, как ни забавно,
00:00:36они не собирались создавать фреймворк для основы агентов.
00:00:39Фред и команда создали Flu для запуска ИИ-рабочих процессов внутри собственного репозитория Astro на GitHub.
00:00:44Но когда другой инженер из Amplitude получил его в свои руки,
00:00:47команда осознала, что это инструмент, к которому будут иметь доступ любые агенты,
00:00:51что на самом деле имеет смысл, если подумать.
00:00:53Я имею в виду, давайте взглянем на Claude Code, например.
00:00:55Под терминалом или интерфейсом чата находится основа,
00:00:58она поддерживает пользовательские инструменты с MCP-серверов, читает файлы Claude MD,
00:01:02имеет поддержку песочницы и поддержку повторно используемых навыков.
00:01:05Это и многое другое позволяет модели выполнять реальную работу,
00:01:08которую Flu может дать вам всего за несколько строк кода.
00:01:11Он делает это, будучи построенным поверх Pi, который сам по себе является минимальной основой для агентов,
00:01:16то же самое, на чем построен OpenClaw,
00:01:18и он оборачивает реальный фреймворк вокруг ядра агента Pi.
00:01:21Flu действительно делает кое-что умное с песочницами, чтобы помочь вам запускать их намного дешевле,
00:01:25о чем я расскажу немного позже.
00:01:26Но если вернуться к примеру с Claude Code,
00:01:28он предполагает, что за рулем агента есть человек,
00:01:31что обычно и бывает.
00:01:33Но у Flu нет такого же ограничения.
00:01:35С Flu вы можете создавать агентов, подобных Claude Code, которым требуется ввод человека,
00:01:38но вы также можете создавать рабочие процессы, которые вообще не требуют участия человека,
00:01:42что полезно для агентных процессов, которые очень специфичны
00:01:44и не требуют частых изменений.
00:01:46Теперь вы можете подумать,
00:01:47это звучит очень похоже на что-то вроде Mastra или Vercel AI SDK,
00:01:52и я расскажу о различиях немного позже.
00:01:54На самом деле, различия станут намного яснее, если мы пройдем через простую демонстрацию.
00:01:57Так что давайте сделаем это.
00:01:58Итак, для начала вам нужно установить среду выполнения Flu,
00:02:01на которой ваш агент импортируется и запускается,
00:02:04а затем вам нужно установить Flu CLI,
00:02:06который компилирует и обслуживает вашего агента.
00:02:08Вам также нужно будет настроить API-ключ от одного из многих провайдеров, которые поддерживает Pi.
00:02:13Для этой демонстрации, однако, я собираюсь использовать Anthropic,
00:02:15а затем вам нужно запустить flu init с целями,
00:02:18что создает файл конфигурации flu, чтобы CLI знал, как упаковать ваш проект.
00:02:22Вы можете выбрать между Node или Cloudflare,
00:02:24и я расскажу о различиях через секунду.
00:02:26Но я уже проделал эти шаги,
00:02:27и давайте посмотрим, как выглядят эти файлы.
00:02:30Итак, вот типичные файлы, которые вы получаете из пустого проекта bun,
00:02:33и некоторые из этих файлов даже не используются.
00:02:35Если мы взглянем на index.ts, он ни для чего не будет использоваться.
00:02:38Ни файл readme,
00:02:39но что на самом деле будет использоваться, так это этот файл flu config.ts,
00:02:42который использует V за кулисами,
00:02:45CI, чтобы использовать Node вместо Cloudflare.
00:02:47И разница в том, что Node использует HTTP-сервер поверх HONO,
00:02:51а Cloudflare развернет ваш проект на воркере
00:02:53с прочным объектом (durable object) для постоянства.
00:02:55Теперь, после того, как вы выполнили эти шаги,
00:02:56вам нужно будет создать новую директорию,
00:02:57либо agents, либо workflows.
00:03:00Мы разберем рабочие процессы чуть позже,
00:03:01но пока я начал с простого агента,
00:03:03который содержит код из документации.
00:03:05И это, по сути, задает модель
00:03:06и добавляет некоторые инструкции,
00:03:08которые добавляются к системному промпту.
00:03:09И это все.
00:03:10Это все, что нужно для создания базового агента flu.
00:03:13Давайте увидим его в действии.
00:03:14Чтобы запустить его, мы можем использовать flu connect,
00:03:15который собирает и запускает агента.
00:03:17И мы сопоставляем имя нашего TS-файла,
00:03:20который называется hello world,
00:03:21прежде чем дать ему ID экземпляра,
00:03:22который может быть любым.
00:03:24Так что это может быть даже локальный один, два, три.
00:03:25Но это полезно, если у вас запущено много агентов,
00:03:27и каждый агент может иметь свой собственный уникальный ID.
00:03:29Это также полезно для развертывания в Cloudflare,
00:03:31потому что этот ID сопоставляется с его собственным экземпляром прочного объекта.
00:03:35Так что теперь, если мы нажмем Enter,
00:03:36мы увидим, что он загружает конфигурацию,
00:03:38читает цель и запускает найденного агента.
00:03:40Теперь у нас нет файла агента MD,
00:03:42но если бы был, он бы использовал его.
00:03:43И теперь он собрал агентов в этот файл server.mjs,
00:03:46и дал нам возможность ввести промпт.
00:03:48Так что я могу сказать что-то вроде: расскажи мне случайную шутку.
00:03:50И здесь мы видим, что агент начинает думать,
00:03:52он отвечает, таким образом, транслируя свой жизненный цикл.
00:03:54Затем он выдает мне шутку, просит еще одну.
00:03:57Но затем внизу он печатает финальный JSON,
00:03:59который состоит из текста,
00:04:00а также из некоторых входных и выходных токенов,
00:04:02стоимости всего промпта
00:04:03и модели, которая была использована.
00:04:05Конечно, мы могли бы продолжать разговаривать с этим агентом,
00:04:06но пока я собираюсь его закрыть.
00:04:08И это пример создания базового агента с помощью Flu.
00:04:11Давайте сделаем что-то более сложное.
00:04:13Давайте создадим рабочий процесс, чтобы помочь создать некоторые заголовки
00:04:15для этого YouTube-видео.
00:04:16И чтобы сделать это, опять же, мы создаем агента
00:04:18с более сложными инструкциями.
00:04:20И на этот раз у нас действительно есть навык.
00:04:23Итак, навык импортируется здесь с атрибутом импорта навыка.
00:04:26И здесь заметьте, мы больше не экспортируем самого агента,
00:04:29но на этот раз мы экспортируем функцию под названием run.
00:04:31И что это делает, так это инициализирует агента
00:04:34для рабочего процесса, а затем открывает сессию в основе.
00:04:36Теперь то, что происходит дальше, весьма интересно.
00:04:38Итак, здесь происходит то, что мы получаем путь
00:04:41из полезной нагрузки, которая была установлена здесь
00:04:43в этом типе контекста flux.
00:04:44Так что если мы изменим имя здесь на file,
00:04:46мы получим ошибку типа.
00:04:47И здесь мы получаем файл,
00:04:49который я назвал script,
00:04:50и передаем это как промпт.
00:04:52Так что все это будет иметь смысл,
00:04:53если мы взглянем на инструкции здесь,
00:04:55которые мы говорим ему изучить сценарий
00:04:57и дать мне 10 кликбейтных YouTube-заголовков
00:04:59используя навык оценки заголовка, чтобы ранжировать их.
00:05:01Давайте посмотрим, сработает ли это.
00:05:02Но прежде чем мы это сделаем,
00:05:03я хочу сделать очевидным, что рабочие процессы
00:05:04находятся в директории workflow,
00:05:06а навыки находятся в директории skills
00:05:08от корня проекта.
00:05:09И чтобы запустить этот рабочий процесс,
00:05:10нам нужно запустить flu run с именем нашего рабочего процесса.
00:05:13В моем случае это YT titles,
00:05:14за которым следует цель и JSON-полезная нагрузка,
00:05:16которая является путем для этого сценария.
00:05:18Так что если мы нажмем Enter,
00:05:19мы увидим, что получаем ID рабочего процесса.
00:05:21И здесь он делает что-то странное.
00:05:23Он на самом деле ищет навык,
00:05:25хотя я указал его ранее.
00:05:27И теперь в этих рассуждениях,
00:05:27он говорит мне, что в файловой системе нет никаких файлов.
00:05:30Почему он это делает?
00:05:31Итак, по умолчанию,
00:05:32flu запускает агентов в песочнице, используя просто bash.
00:05:35Все, к чему он имеет доступ, — это описание навыка,
00:05:37которое было зарегистрировано здесь,
00:05:39но у него нет доступа ни к одному из этих файлов
00:05:42связанных с навыком.
00:05:43И сам навык, если мы взглянем на него,
00:05:44на самом деле запускает Python-скрипт с использованием bash
00:05:47чтобы получить точную оценку в стиле vidIQ
00:05:50для заголовка YouTube.
00:05:51Так что, чтобы исправить это,
00:05:52я собираюсь импортировать local из flu runtime node,
00:05:54что говорит flu запускать агента в моей локальной системе,
00:05:57так что он имеет доступ ко всем моим файлам
00:05:59и может запускать Python-скрипты.
00:06:01Если вы заботитесь о безопасности,
00:06:02я объясню, как вы можете обойти это
00:06:03позже в видео.
00:06:04Но мы также собираемся изменить
00:06:05текущую рабочую директорию на навык
00:06:07внутри директории skills этого проекта.
00:06:10Так что flu не придется искать вокруг,
00:06:11чтобы найти нужные ему файлы.
00:06:13И теперь, когда я запускаю этот рабочий процесс,
00:06:15мы видим, что flu немедленно считывает файл skill MD
00:06:17и способен генерировать 10 кликбейтных заголовков
00:06:20с оценкой для каждого из них.
00:06:21Теперь, если вы не хотите давать своему агенту
00:06:22рабочего процесса доступ к вашей локальной системе,
00:06:25что вы могли бы сделать вместо этого,
00:06:26— это создать пользовательский инструмент из Python-файла.
00:06:28Итак, здесь я загружаю Python-файл в навык
00:06:30и создаю инструмент под названием score title,
00:06:33который использует value bots для проверки параметров
00:06:35а затем запускает Python-скрипт.
00:06:37Затем мы можем зарегистрировать этот инструмент внутри нашего агента,
00:06:40и все должно работать как ожидается.
00:06:42Но теперь давайте вернемся к предыдущему проекту
00:06:44и скажем, что мы хотим вызвать его на основе HTTP post-запроса.
00:06:47Ну, есть только одна вещь, которую нам нужно сделать, чтобы включить это.
00:06:50И это просто добавить корневое промежуточное ПО (middleware).
00:06:52Теперь все, что нам нужно сделать, это собрать проект flu,
00:06:54указать нашу цель, дополнительный порт,
00:06:56а затем запустить наш серверный файл.
00:06:58И теперь он слушает указанный нами порт.
00:07:00Обратите внимание, что файл server.js
00:07:01включает в себя любых агентов или рабочие процессы, которые у нас есть.
00:07:03Так что нам нужен только этот файл,
00:07:05если мы хотим развернуть его где угодно, где поддерживается Node.js.
00:07:07Теперь я могу запустить curl с методом post
00:07:09на порт, который был указан,
00:07:11выбрать рабочий процесс и дать ему некоторые данные,
00:07:13что дает нам ID рабочего процесса.
00:07:14А затем, если мы сделаем curl для рабочих процессов,
00:07:16указав наш конкретный ID рабочего процесса
00:07:18и перенаправив вывод в JQ, просто чтобы было легче читать,
00:07:21мы можем увидеть информацию о нашем рабочем процессе
00:07:23и сводку результатов.
00:07:25Конечно, Flu поддерживает WebSockets вместо HTTP,
00:07:27если вы хотите транслировать информацию о рабочем процессе.
00:07:29Теперь, как обычно, у Flu есть так много функций,
00:07:31которые я не успел разобрать,
00:07:33например, профили агентов для повторно используемых агентов,
00:07:35поддержка Daytona, песочницы Cloudflare,
00:07:37или любая другая песочница просто с использованием URL,
00:07:40добавление пользовательских маршрутов для аутентификации или проверок работоспособности,
00:07:42и даже поддержка субагентов.
00:07:44Но как это сравнивается
00:07:45с другим фреймворком ИИ-агентов с открытым кодом, таким как Mastra?
00:07:48Ну, последний раз, когда я использовал Mastra,
00:07:49было, когда я сделал это видео,
00:07:50которое вы можете поставить на паузу и пойти посмотреть,
00:07:52если хотите освежить в памяти, что это такое.
00:07:54Но когда я его использовал,
00:07:55вам все равно приходилось вручную настраивать сессии,
00:07:58память, песочницу и загрузку инструментов самостоятельно.
00:08:01Это был гораздо более гранулярный, пошаговый процесс,
00:08:03и я не уверен, изменилось ли это,
00:08:05чтобы стать проще,
00:08:06но я думаю, что подход, который использует Flu,
00:08:08совершенно другой.
00:08:10Это скорее подход «сначала окружение»
00:08:11и предполагает, что вы собираетесь использовать
00:08:13эти функции с самого начала.
00:08:14Говоря о песочницах,
00:08:16Flu на самом деле делает кое-что очень умное с ними.
00:08:18Итак, каждый агент получает свою собственную песочницу по умолчанию,
00:08:21что я объяснил ранее в демонстрации,
00:08:22но эта песочница работает на основе just Bash от Vercel,
00:08:25который перереализует Bash на TypeScript.
00:08:27Поэтому он запускает эту песочницу в памяти,
00:08:29вместо реального контейнера,
00:08:31что означает, что вы получаете доступ к инструментам grep, glob и read
00:08:34не платя за контейнер каждый раз,
00:08:35которому нужно загружать целую машину Linux
00:08:38прежде чем вы сможете что-то сделать.
00:08:40Это означает, что Flu запускает тысячи агентов
00:08:41почти бесплатно,
00:08:43и вы можете выбрать настоящий контейнер
00:08:44только тогда, когда он вам нужен.

Key Takeaway

Flu предоставляет разработчикам TypeScript программируемую основу для создания эффективных ИИ-агентов, которая за счет запуска песочниц в памяти значительно снижает расходы на выполнение задач по сравнению с традиционными контейнеризированными решениями.

Highlights

  • Flu — это фреймворк с открытым исходным кодом для TypeScript, предназначенный для создания полностью программируемых ИИ-агентов с поддержкой навыков, инструментов и песочниц «из коробки».

  • Использование песочниц в памяти на базе @vercel/just-bash позволяет выполнять задачи агентов без затрат на запуск полноценных Linux-контейнеров, что делает работу тысяч агентов практически бесплатной.

  • Фреймворк построен на ядре Pi и поддерживает развертывание как в среде Node.js через HTTP-серверы на базе Hono, так и в инфраструктуре Cloudflare с использованием прочных объектов (durable objects).

  • Flu позволяет создавать как интерактивные рабочие процессы, требующие участия человека (подобные Claude Code), так и полностью автономные агентные процессы.

  • Интеграция с локальной файловой системой или внешними Python-скриптами настраивается через простое импортирование модулей в коде агента.

Timeline

Концепция и происхождение Flu

  • Flu создан командой Astro как расширяемая альтернатива Claude Code с полной программной управляемостью.
  • Фреймворк базируется на минимальном ядре для агентов под названием Pi.

Первоначально инструмент предназначался для внутренних рабочих процессов репозитория Astro на GitHub. Система поддерживает пользовательские инструменты с MCP-серверов, чтение файлов конфигурации и управление навыками, позволяя реализовать функционал сложных агентов с помощью нескольких строк кода.

Настройка и создание базового агента

  • Развертывание агента требует установки среды выполнения Flu и CLI для компиляции проекта.
  • Файл flu.config.ts определяет целевую платформу — Node.js или Cloudflare.

Процесс инициализации создает структуру проекта, где ID экземпляра агента сопоставляется с объектом в памяти или прочным объектом в Cloudflare. Базовый агент настраивается через импорт модели и добавление инструкций к системному промпту, после чего Flu выдает финальный JSON-ответ с данными о потреблении токенов и стоимости исполнения.

Сложные рабочие процессы и управление ресурсами

  • Рабочие процессы организуются в папке workflows, а навыки — в директории skills.
  • Для работы с локальными Python-скриптами Flu переключается в локальный режим выполнения агента.

Для выполнения сложных задач, таких как ранжирование заголовков YouTube, используются навыки, вызывающие Python-скрипты. Безопасность системы обеспечивается возможностью регистрации пользовательских инструментов, которые изолируют исполнение кода от прямого доступа к файловой системе хоста.

Развертывание, HTTP-интерфейс и сравнение

  • Агенты легко превращаются в HTTP-сервисы с помощью корневого middleware и команды запуска.
  • Flu использует подход «сначала окружение», автоматически управляя сессиями, памятью и песочницами.

В отличие от решений, требующих ручной настройки сессий и инструментов, Flu автоматизирует эти аспекты на уровне фреймворка. Использование песочниц на базе TypeScript-реализации Bash позволяет избежать накладных расходов на запуск полноценных виртуальных машин, обеспечивая масштабируемость при минимальных затратах.

Community Posts

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

Write about this video