~3m13:21
Swag

Pi Durable: как построить персистентного AI-агента

23 окт. 2026 г.

Read: ~3m · You save: 10 min

Pi Durable: как построить персистентного AI-агента

Как создать AI-агента, который работает 24/7, переживает сбои и помнит контекст. Разбираем Pi Durable и пример на Cloudflare с DeepSeek.

Pi Durable — фреймворк на основе минималистичного агента Pi, который позволяет создавать долгоживущих агентов. Такие агенты работают без постоянного участия пользователя и восстанавливаются после сбоев. Фреймворк выпущен в октябре. Он предназначен для построения собственных агентных систем и их интеграции в веб-приложения.

Что такое Pi и Pi Durable

Pi — агент, написанный на JavaScript. Его запускают локально, задают промпты, и агент отправляет запросы к LLM-модели и возвращает ответы. Это классический агент.

Pi Durable добавляет к этой модели постоянную работу. Агента можно развернуть на сервере, и он будет работать круглосуточно. К одному агенту можно обращаться с нескольких устройств: мобильного приложения, веб-приложения или терминала. Сессии создаются параллельно, и каждая сессия уникальна.

По оценке автора, Pi входит в число трех его любимых агентов. Первое место он отдает Open-Interpreter, однако отмечает, что недавно этот проект был взломан, и поэтому его позиция снижается до третьей. Второе место занимает агент, название которого в исходном материале не разобрано, и Pi.

Сравнение с Temporal и Cadence

Системы Temporal и Uber Cadence позволяют управлять персистентными workflow, которые выполняются пошагово. При сбое одного шага workflow можно откатить и перезапустить с этого шага.

Pi Durable реализует подобные durable execution только для собственного агента. Temporal поддерживает несколько языков: Python, Go, TypeScript и Ruby.

Механизмы надежности

Сохранение состояния и восстановление

Каждый шаг агента является персистентным. Между шагами состояние сохраняется в небольшую базу данных, в примере — SQLite. После перезагрузки страницы или создания нового процесса выполнение продолжается с того места, где произошел сбой.

Пример последовательности: модель запрашивает вызов инструмента, затем происходит компактизация контекста, затем возникает сбой. В обычном агенте выполнение пришлось бы начинать заново. В Pi Durable восстановление происходит с последнего сохраненного шага.

Повторное выполнение инструментов

Решение о повторе принимает сам инструмент:

  • операции чтения, помеченные как безопасные для повтора (replay-safe), повторно выполняются после сбоя;
  • команды, например деплой, не повторяются.

Инструмент сам определяет, какие команды безопасны для повтора. Эта логика встроена во фреймворк.

Exactly-once и идемпотентность

Каждый запрос имеет идентификатор. Запрос, который уже был отправлен, не повторяется. Таким образом реализуется доставка exactly-once.

Сохранение решений пользователя

Фреймворк сохраняет подтверждения, данные пользователем между сессиями. Если пользователь ответил «да, деплой», агент не запрашивает подтверждение повторно. Решение сохраняется в памяти агента. Для этого используется функция memo.

Отмена операций

Отмена реализована по дереву операций. При отмене операции отменяются связанные с ней операции вверх по дереву.

Компактизация контекста и ветвление диалогов

Компактизация выполняется в фоновом режиме. Когда диалог достигает лимита, контекст сжимается, и разговор продолжается. Старые сообщения не удаляются, а сохраняются в сжатом виде в контексте. Автор проводит аналогию со сборщиком мусора в Java.

Диалоги можно ветвить. Из любого сообщения агента создается форк, и разговор продолжается в новой ветке.

Архитектура и развертывание

Pi Durable написан полностью на TypeScript и работает в любой среде с JavaScript runtime. Его можно запускать в браузере или на сервере. Для работы необходимо реализовать примитивы памяти и хранилища.

Фреймворк поддерживает версионирование:

  • при повторном развертывании старые сессии продолжают работать на прежней версии агента;
  • новые сессии запускаются на новой версии;
  • каждый workflow хранит версию, с которой был запущен.

Автор отмечает, что минимализм фреймворка и использование одного языка TypeScript обеспечивают такую работу версий. Pi Durable содержит около 15 000 строк кода. Это позволяет передать весь код агенту и поручить ему расширение функциональности.

Практический пример

Автор развернул сервис Pi Durable и назвал его Paidura (сокращение от Pi Durable). Развертывание выполнялось одним промптом, отправленным модели Claude Opus 3.5. Промпт содержал:

  • задачу построить сервис Paidura;
  • инструкцию развернуть его в Cloudflare с использованием примитивов платформы: Durable Objects, SQL и других;
  • ссылку на описание развертывания;
  • указание использовать модель DeepSeek.

Второй командой был запрос на деплой. Далее автор попросил добавить базовую аутентификацию (basic auth), чтобы ограничить доступ к агенту.

В ходе демонстрации автор:

  • открыл сессию в веб-интерфейсе и назвал ее;
  • отправил сообщение «hello» и получил ответ;
  • сообщил, что живет в Лондоне; агент подтвердил это;
  • запросил погоду; агент вызвал функцию get_weather;
  • создал форк диалога и спросил о лучших пабах в текущем городе; агент не имел инструмента поиска, но сохранил контекст о Лондоне из предыдущей ветки.

По данным интерфейса, стоимость работы составила 0,0005 доллара. Платной частью был только ключ DeepSeek. Сервис работал в браузере на бесплатном тарифе Cloudflare.

Агент также подключил инструменты «получить расписание» и «поиск по истории». Автор попросил отправить текущую погоду через пять минут. Агент создал задачу. Через пять минут сообщение пришло, даже когда все вкладки были закрыты. Автор также указал, что сообщение должно прийти через 30 секунд.

Агент может добавлять собственные MCP-инструменты. Автор предлагает использовать его для создания инструмента, который возвращает список пабов в Лондоне. Агент запоминает добавленный инструмент.

Ограничения

  • Pi Durable является экспериментальным проектом.
  • Фреймворк реализован на TypeScript.
  • При одном процессе используется одна единица хранения, то есть одна сессия.
  • Пометка инструментов и MCP-серверов как replay-safe возлагается на разработчика. Непомеченные инструменты не защищены от повторного выполнения.

Выводы

Pi Durable позволяет развернуть персистентного агента с сохранением состояния, восстановлением после сбоев, доступом с нескольких клиентов и версионированием. Фреймворк подходит для создания корпоративных агентов, которые можно вызывать из мессенджеров, мобильных приложений и других клиентов. Надежность выполнения зависит от корректной разметки инструментов как replay-safe.

Введение

Автор представляет Pi Durable как новую версию минималистичного агента Pi, выпущенную в октябре, и объясняет, зачем её изучать.

  • В выпуске рассматривается, как построить персистентных агентов с помощью Pi Durable.
  • Pi — минималистичный агент на JavaScript, который автор использует; в его списке любимых агентов он на втором месте.
  • Pi Durable выпущен в октябре и представляет собой harness для создания собственных агентных систем и их интеграции в веб-приложения.

Что такое Pi Durable

Pi Durable — фреймворк на базе Pi для долгоживущих агентов, которые работают без присмотра и восстанавливаются сами.

  • Обычный Pi запускается локально и отправляет запросы к LLM-модели.
  • Pi Durable можно развернуть на сервере и запускать круглосуточно (24/7).
  • К агенту можно обращаться с нескольких мест: мобильное приложение, веб-приложение, терминал; сессии работают параллельно и уникальны.
  • Концепция похожа на Temporal и Uber Cadence: персистентные workflow с откатом и перезапуском с упавшего шага.

Восстановление после сбоев

Каждый шаг сохраняется в базу, поэтому после сбоя агент продолжает работу с того же места, а инструменты решают, можно ли повторять операцию.

  • Пример: вызов модели, запрос на вызов инструмента, компакция, затем сбой.
  • Обычный агент пришлось бы запускать с начала, а в Pi Durable состояние сохраняется между шагами в небольшую базу (пример — SQLite).
  • Новый процесс продолжает работу с места падения, даже после обновления страницы.
  • Инструменты, помеченные как replay-safe (например, чтение), повторяются при сбое; команды (например, деплой) не повторяются.
  • Реализованы exactly-once доставка и идемпотентность через request ID: повторный запрос не отправляется.
  • Человеческие подтверждения (например, «yes, deploy») сохраняются между сессиями и не запрашиваются повторно; есть функция «memo».
  • Отмена реализована по дереву: отменённая операция отменяет вышестоящие.

Компакция, форки и архитектура

Компакция выполняется в фоне, диалоги можно форкать, фреймворк работает в браузере и на сервере, версии агентов изолированы.

  • Компакция происходит в фоне при достижении лимита; старые сообщения сохраняются сжатыми в контексте, аналогия с garbage collector.
  • Диалоги можно форкать и продолжать в другой ветке.
  • Pi Durable написан полностью на JavaScript/TypeScript и работает везде, где есть JavaScript-рантайм: в браузере или локально на сервере.
  • Для запуска нужно реализовать примитивы: память и хранилище, а также способ хранения сессий.
  • При редеплое старые сессии продолжают работать на прежней версии агента, новые сессии получают новую версию.
  • Фреймворк минималистичный: около 15 000 строк кода, поэтому агент может прочитать и расширить его сам.
  • Фреймворк экспериментальный; если процесс один, это одна единица хранения; маркировка инструментов и MCP-серверов как replayable — задача разработчика.

Пример: Paidura на Cloudflare

Автор развернул агента Paidura на Cloudflare одним промптом Claude Opus и показал работу в браузере: сессии, форки, погоду и отложенные задачи.

  • Сервис назван Paidura (сокращение от Pi Durable), развёрнут на домене .py.
  • Агент создан одним промптом в Claude (версия Opus 3.5), затем командой deploy; позже попросили добавить basic auth.
  • Развёртывание на Cloudflare использует Durable Objects, SQL; используется модель DeepSeek.
  • В демонстрации: приветствие, «I live in London», запрос погоды (вызов функции get_weather), стоимость около пяти десятитысячных доллара.
  • Диалог форкается после последнего сообщения ассистента; в новой ветке агент помнит, что пользователь в Лондоне, но не имеет инструмента поиска пабов.
  • Отложенная задача «через пять минут отправь погоду» выполнилась, даже когда чаты были закрыты.
  • Агент может создать MCP-инструменты сам, например, список пабов в Лондоне; Pi Durable помнит добавленные инструменты.