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только тогда, когда он вам нужен.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video