Все думали, что фреймворки для ИИ-агентов так и будут ковылять на кривых чекпоинтах LangGraph — перезапуск целых узлов при возобновлении, код в идемпотентных узлах-претзелях. Но Selectools выкатил v0.20.1, и это один pip — удар под дых устоявшемуся порядку: мультиагентные графы, вызов инструментов, RAG, 50 оценщиков, маскировка PII. Всё на борту, Apache-2.0 с открытым кодом, поддержка OpenAI, Anthropic, Gemini, Ollama.
Для разработчиков, уставших латать протекающие абстракции, это меняет всё.
Почему прерывания LangGraph сводят с ума
Прерывание в LangGraph по дизайну перезапускает весь узел после паузы. Официальное решение? Делать сайд-эффекты идемпотентными, выносить дорогие операции после вызова или раскидывать их ниже по потоку. Теоретически ок. На практике — ад. Каждый узел с человеком в петле корчится под семантикой возобновления. Протекает, как решето.
А Selectools? Генераторы Python. Yield InterruptRequest. Возобновление через generator.send() — строго с yield. Без перевыполнения. Дорогой анализ LLM? Один раз. Чисто.
Вот смотрите:
async def review_node(state):
analysis = await expensive_llm_analysis(state.data["draft"]) # runs once
decision = yield InterruptRequest(prompt="Approve?", payload=analysis)
state.data["approved"] = (decision == "yes") # resumes here
Бац.
«Возобновление точно с точки yield (LangGraph перезапускает весь узел).»
Прямо из чейнджлога v0.18.0. Без хайпа — код говорит сам за себя.
Моё мнение: этот трюк с генераторами напоминает ранние корутины Node.js, укротившие асинхронный хаос. Selectools не изобретает велосипед — просто расчищает трассу, по которой агенты реально ездят. Прогноз? К Q2 2025 переманят толпы пользователей LangGraph, разбивая миф о «единственном фреймворке», как Kubernetes разнёс Docker-рой.
Как Selectools работает с мультиагентными графами?
AgentGraph: направленный граф для узлов-агентов. Роутинг? Обычные Python-функции — без LLM-рулетки, без раздутого DSL. Детерминированный поток, LLM рассуждают внутри узлов. Умно.
ContextMode держит историю в узде: LAST_MESSAGE (по умолчанию), LAST_N, FULL, SUMMARY, CUSTOM. Без утопления downstream-агентов в upstream-шуме.
Параллельное выполнение с MergePolicy — LAST_WINS, FIRST_WINS, APPEND. Fan-out, fan-in, без драм.
Циклы? Застой? Хэширование состояния чует неизменные состояния. Без дедлоков.
Но есть SupervisorAgent — это уже огонь. Четыре стратегии:
| Strategy | Description | Best for |
|---|---|---|
| plan_and_execute | План в JSON от LLM, последовательное выполнение | Структурированные задачи |
| round_robin | По кругу, супервизор проверяет | Итеративная доработка |
| dynamic | LLM выбирает агента на шаг | Гетерогенные задачи |
| magentic | Magentic-One с учётом + перепланирование | Автономные исследования |
Magentic копирует паттерн Microsoft Research. ModelSplit? Планировщики на GPT-4o, исполнители на Llama — на 70–90% дешевле. Производственная хитрость.
Eval-свит Selectools — это реально полезно?
50 оценщиков из коробки. Без платных сервисов. 30 детерминированных (точное совпадение, regex), 20 на суде LLM (в стиле G-Eval).
Маскировка PII? Встроенная, сканирует выводы перед деплоем. RAG? Векторные хранилища, цепочки ретрива — подключайте Ollama или Pinecone. Вызов инструментов? Структурированный, параллельный.
Не раскидано по углам. Eval-фреймворк привязан к AgentGraph: запускайте свиты на графах, агрегируйте scores. Разрабы получают бенчмарки без vendor lock.
Скепсис? Был и у меня. Но фишка в реализации: оценщики как полноценные узлы графа. Прерывание посреди eval для правок. Возобновление точное.
Один короткий абзац.
Такая плотность оценщиков — 50 готовых — напоминает взрыв pytest в Python-тестировании 2008-го. Тогда unittest был отстой; pytest сделал TDD нормой. Selectools может провернуть то же с надёжностью агентов. Корпо-жаргон зовёт это «батарейки включены» — нет, это полный арсенал, обходящий ловушку «eval как послемысль».