GitHub не был создан для ИИ-агентов (поэтому Cloudflare разработали свой)

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00Итак, Cloudflare работает над чем-то под названием Artifacts — это распределенная файловая система, которая
00:00:05совместима с Git, создана специально для агентов и позволяет программно создавать, форкать
00:00:10или удалять тысячи репозиториев, независимо от их размера, для таких задач, как параллельные
00:00:15PR-ревью, автоматизированный рефакторинг больших кодовых баз и агентские рабочие области для каждой сессии.
00:00:20Но если это построено на базе Durable Objects, означает ли это, что нужно использовать JavaScript
00:00:25и нельзя получить доступ к командной оболочке для запуска Git?
00:00:28Подписывайтесь, и давайте узнаем!
00:00:33GitHub был создан для людей, а не для агентов, а это значит, что им не нужны никакие социальные
00:00:37аспекты, вроде фолловеров или дискуссий, но агенты очень хорошо разбираются в Git, это есть в их
00:00:42обучающих данных.
00:00:43Поэтому Cloudflare реализовали базовую версию Git на языке Zig, скомпилировали её в Wasm и поместили в
00:00:49Durable Object, чтобы он выполнял роль Git-сервера.
00:00:52В то же время, клиентом может быть что угодно, например, воркер, использующий isomorphic-git
00:00:57внутри, или использующий протокол Git и даже HTTP-клиент, чтобы вы могли подключаться
00:01:03к нему, даже если не используете JavaScript.
00:01:05К сожалению, на момент записи у меня нет доступа к Artifacts, так как проект
00:01:10находится в закрытой бета-версии, но по нему много документации, что означает, что я могу создать демо
00:01:15с кодом из этой документации, и, возможно, когда выйдет публичная бета-версия, вы сможете проверить,
00:01:19работает ли мой код на самом деле.
00:01:20Итак, мы собираемся построить инструмент, который берет список задач для конкретного
00:01:24репозитория и выполняет все эти задачи параллельно, форкая репозиторий множество раз и запуская
00:01:29каждую задачу в отдельном артефакте в облачном репозитории на базе Durable Object.
00:01:34Давайте посмотрим, как это работает.
00:01:35Я начал с того, что следовал документации по Artifacts в разделе "начало работы для воркеров",
00:01:39поэтому я использовал эту команду, а текст после неё — это просто имя проекта,
00:01:44оно может быть любым.
00:01:45Я выполнил все эти шаги, что в итоге дало мне базовый код воркера.
00:01:49Воркеры для Artifacts немного производительнее, чем использование REST API, так как они
00:01:53делают меньше обращений к серверу.
00:01:55После этого вам нужно добавить привязки Artifacts в ваш файл wrangler.jsonc или toml,
00:02:00а затем повторно сгенерировать типы.
00:02:02Документация здесь фокусируется на создании нового репозитория, поэтому используется привязка Artifacts
00:02:07с методом "create" и именем репозитория.
00:02:09Это создает имя, предоставляя токен и удаленный адрес (remote).
00:02:13Удаленный адрес — это местоположение артефакта, а токен или токен авторизации также необходим,
00:02:17чтобы дать вам доступ к нему.
00:02:18И, конечно, вы можете использовать протокол Git, применяя этот адрес и токен для взаимодействия
00:02:22с вашим артефактом.
00:02:23Но мы поступим иначе.
00:02:25Вместо создания абсолютно нового репозитория в Durable Object с Artifacts, мы сначала
00:02:29проверим, существует ли уже репозиторий с названием "baseline".
00:02:31Если его нет, мы импортируем Git-репозиторий, дадим ему имя "baseline"
00:02:35и вернем это значение.
00:02:39Конечно, если вы посмотрите API документацию для привязок воркеров, вы увидите больше
00:02:43параметров, которые можно добавить к методу "import".
00:02:45Но после того, как мы получили существующий репозиторий, мы можем делать с ним очень крутые вещи.
00:02:49Итак,
00:02:50вот задачи, которые я хочу выполнить с репозиторием. Я, конечно, захардкодил
00:02:53их, но они могут подаваться на вход или через какой-нибудь интерфейс.
00:02:56Здесь, внутри дефолтного экспорта воркера, у меня есть SDK Anthropic, а также мой
00:03:00репозиторий baseline.
00:03:02Я собираюсь пройтись циклом по всем задачам, и здесь я форкаю репозиторий с
00:03:06этим именем.
00:03:07Затем у нас есть эта функция (я разберу её позже), которая запускает задачу внутри
00:03:10форкнутого репозитория, заставляет агента внести изменения и возвращает его резюме.
00:03:15То есть, последнее, что сказал агент, а затем, после каждого цикла for, я возвращаю эту
00:03:19информацию.
00:03:20Я возвращаю имя задачи, имя форка, удаленный адрес и токен,
00:03:23чтобы мы могли получить доступ к нему в любое время, проверить, хороши ли изменения, и увидеть резюме
00:03:27того, что было сделано.
00:03:28Прямо сейчас привязки воркеров не дают вам возможности делать "pull", "commit" и "push".
00:03:33Поэтому в моем коде мне пришлось делать это с помощью isomorphic-git, а затем использовать систему хранения в оперативной памяти,
00:03:38чтобы временно хранить изменения.
00:03:39Итак, в агентском коде мы создаем файловую систему в памяти, а затем у нас есть
00:03:43системный промпт, который говорит агенту внести соответствующие изменения, а затем закоммитить их.
00:03:47код.
00:03:48Мы клонируем форкнутый репозиторий, используя предоставленный удаленный адрес, а также
00:03:51токен.
00:03:52И затем мы определяем инструменты: "read", "write" и "commit".
00:03:55Здесь мы выбираем модель, даем ей системный промпт и передаем задачу
00:03:59как пользовательское сообщение.
00:04:00Остальной код — это стандартный агентский цикл.
00:04:02Итак, если есть вызов инструмента, прекращаем рассуждения и выполняем вызов, в нашем случае — "read", "write"
00:04:07или "commit", который также выполняет "push" кода после коммита.
00:04:10Преимущество артефакта в том, что весь этот код будет существовать в Durable Object,
00:04:14храниться в базе данных SQLite этого объекта, и если Durable Object упадет, информация
00:04:20может быть извлечена из базы SQLite в любой момент, когда он вернется в работу.
00:04:23А ниже мы продолжаем рассуждения модели после вызова инструмента перед возвращением
00:04:27последнего сообщения от модели.
00:04:29Я знаю, очень сложно представить, как всё это происходит, раз я не могу
00:04:32запустить этот код, но надеюсь, вы можете увидеть, что можно сделать с артефактами и
00:04:37каков их полный потенциал.
00:04:38Представьте, если бы у вас был интерфейс для просмотра всех изменений, происходящих в этих артефактах,
00:04:42и вы могли бы общаться с отдельными агентами или с единым агентом-оркестратором, чтобы вносить изменения
00:04:46в разные репозитории.
00:04:48Кстати об агенте-оркестраторе: мы могли бы иметь одного воркера, который координировал бы
00:04:52все эти изменения и объединял их в основной репозиторий после того, как агент-ревьюер
00:04:56проверит код.
00:04:57Мы можем даже комбинировать артефакты с динамическими воркерами, чтобы агенты могли запускать измененный ими код
00:05:02и проверять, работает ли он.
00:05:03А если это не JavaScript, мы можем использовать песочницы Cloudflare для запуска любого языка,
00:05:07какого захотим, и даже выполнять shell-команды.
00:05:09Не говоря уже о браузере Cloudflare, который запускает браузер на базе Puppeteer, чтобы
00:05:13модель могла посмотреть и увидеть, корректно ли реализован код, если это фронтенд-изменение.
00:05:18Честно говоря, я получил много удовольствия, размышляя о возможностях артефактов, даже несмотря на то, что
00:05:21пока не могу их запустить.
00:05:22Но одна вещь, которую я заметил: нет команды "git diff".
00:05:25Она не представлена в API привязок воркера или в isomorphic-git.
00:05:30Так что, возможно, единственный способ сделать "git diff" — через протокол Git, или они могут добавить это
00:05:35в будущем.
00:05:36В любом случае, прямо сейчас, если вы хотите сделать это без использования протокола Git, полагаю, можно использовать
00:05:40isomorphic-git, применяя "git log", чтобы найти Git-дерево, пройтись по нему и сравнить
00:05:45различия.
00:05:46В любом случае, я думаю, что это очень крутой релиз от Cloudflare.
00:05:50И хотя существуют другие инструменты для файловых систем, такие как S3 Files, ZeroFS и JuiceFS, которые
00:05:55уже существуют, я не думаю, что эти варианты совместимы с Git, что является очень крутой функцией
00:05:59и делает их более дружелюбными к агентам.
00:06:01Кстати об S3, если вы когда-нибудь хотели запустить его локально на своей машине, то посмотрите
00:06:05это видео от Джоша, которое в точности рассказывает, как это сделать.

Key Takeaway

Cloudflare создала Artifacts, распределенную файловую систему на базе Durable Objects, которая предоставляет ИИ-агентам программный доступ к Git-репозиториям для параллельной обработки кода и автоматизации рефакторинга.

Highlights

Artifacts — это распределенная файловая система от Cloudflare, совместимая с протоколом Git и оптимизированная для работы ИИ-агентов.

Система позволяет программно создавать, форкать и удалять тысячи репозиториев для параллельного выполнения задач.

Базовая версия Git реализована на языке Zig, скомпилирована в Wasm и работает внутри Durable Object, выполняя роль Git-сервера.

ИИ-агенты взаимодействуют с артефактами через такие инструменты, как isomorphic-git, используя хранилище в оперативной памяти для временных изменений.

Данные внутри артефактов сохраняются в базе SQLite, что обеспечивает устойчивость к сбоям Durable Objects.

В отличие от S3 Files, ZeroFS и JuiceFS, система Artifacts обеспечивает нативную совместимость с Git-инфраструктурой.

Timeline

Архитектура Artifacts для ИИ-агентов

  • GitHub ориентирован на людей, поэтому Cloudflare разработала специализированную систему для нужд агентов.
  • Реализация Git выполнена на языке Zig и скомпилирована в Wasm для запуска внутри Durable Object.
  • Взаимодействие с системой возможно через любой Git-клиент или HTTP-запросы, независимо от используемого языка программирования.

Традиционные платформы вроде GitHub содержат избыточные социальные функции, не требующиеся автоматизированным системам. Artifacts решает эту проблему, предлагая легковесную, программно управляемую файловую систему. Использование Wasm и Durable Objects позволяет гибко масштабировать рабочие области для каждой агентской сессии.

Создание воркеров и работа с репозиториями

  • Воркеры для Artifacts выполняют меньше обращений к серверу по сравнению с использованием REST API.
  • Метод 'create' позволяет генерировать новые репозитории с уникальным токеном доступа.
  • Рабочий процесс включает проверку наличия существующего базового репозитория 'baseline' с последующим его форканием для каждой задачи.

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

Агентский цикл и потенциальные возможности

  • Интеграция с isomorphic-git позволяет выполнять операции чтения, записи и коммита изменений внутри агентского цикла.
  • Весь код и состояние файлов хранятся в базе SQLite, привязанной к Durable Object, что гарантирует сохранность данных при перезагрузках.
  • Для тестирования изменений можно применять песочницы Cloudflare и браузерный движок Puppeteer.

Агент действует в рамках стандартного цикла: чтение задачи, внесение изменений в память, фиксация изменений и push в удаленный артефакт. Оркестратор может координировать действия нескольких агентов, объединяя их правки после проверки. Хотя в текущем API отсутствует нативная команда 'git diff', задача решается анализом Git-дерева через логи.

Community Posts

View all posts