Selectools: фреймворк с открытым кодом для ИИ-агентов

Достали прерывания в LangGraph, заставляющие делать сайд-эффекты идемпотентными ради паузы человека? Selectools возобновляет ровно с места yield. Этот open-source-монстр упаковывает мультиагентный интеллект в один pip.

Selectools: pip-установка, спасающая от ада ИИ-агентов — theAIcatchup

Key Takeaways

  • Selectools использует генераторы Python для точного возобновления прерываний — избавление от полных перезапусков узлов в LangGraph.
  • SupervisorAgent для мультиагентов предлагает четыре стратегии, включая Magentic-One с экономией 70–90% за счёт ModelSplit.
  • 50 встроенных оценщиков и маскировка PII — готово к продакшену одной pip-установкой.

Все думали, что фреймворки для ИИ-агентов так и будут ковылять на кривых чекпоинтах 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 как послемысль».

Почему это ва

James Kowalski
Written by

Investigative tech reporter focused on AI ethics, regulation, and societal impact.

Worth sharing?

Get the best AI stories of the week in your inbox — no noise, no spam.

Originally reported by Dev.to