Хватит уже клепать агентов на LangChain, где одна простая цепочка превращается в многоэтажный торт из callback'ов, пулов потоков и багов с контекстом. Я серьёзно. Последние полгода каждый второй проект тянет десятки мегабайт зависимостей ради того, чтобы LLM вызвала поиск в Википедии. IBM, похоже, тоже устала смотреть на этот цирк и выпустила CUGA.
Что за зверь и почему о нём заговорили
CUGA (расшифровывается как Configurable Unified Generative Agent) — легковесный open-source каркас от IBM Research, появившийся в начале 2025 года. К июню 2026 проект дорос до версии 0.8.5 и оброс тем, чего так не хватало всем, кто пытался делать агентов на коленке:
- Модульная система инструментов без необходимости наследоваться от абстрактных классов (просто декораторы).
- Встроенная поддержка стриминга и vision начиная с v0.7.
- Нативная работа с любыми LLM через LiteLLM — подсуньте хоть GPT-4o, хоть локальный Qwen2.5.
- Автоматическое приведение типов и валидация аргументов инструментов через Pydantic.
Главное слово — конфигурируемый. Вместо того чтобы писать тонну кода для orchestration, вы описываете поведение агента в YAML или JSON. А сам агент использует технику ReAct (Reasoning + Acting) с дополнительным внутренним мониторингом. IBM выложила больше 24 рабочих примеров в своём репозитории — от парсинга веб-страниц до мультимодальных ассистентов. Они прямо заявляют: CUGA создан, чтобы убить рутину «plumbing» — склеивания LLM с внешними API.
Если не сталкивались с CUGA раньше, начните с обзора конфигурируемого агента для веб и API задач — там разобраны принципы работы. Для продвинутых — наша подборка 24 рабочих примеров, где можно подсмотреть архитектурные приёмы.
Ставим за 30 секунд и пишем первого агента
Установка — до смешного простая:
pip install cugaВот и всё. Никаких компиляций, нативных библиотек и танцев с бубном. Теперь создадим агента, который умеет искать в Википедии и гуглить через DuckDuckGo. Классическая задача, на которой ломаются новички в LangChain, когда забывают передать инструменты в executor.
from cuga import Agent, tool
from duckduckgo_search import DDGS
import wikipedia
@tool(name="web_search", description="Search the web using DuckDuckGo")
def web_search(query: str) -> str:
with DDGS() as ddgs:
results = list(ddgs.text(query, max_results=3))
return "\n".join([r["body"] for r in results])
@tool(name="wikipedia", description="Get summary from Wikipedia")
def wikipedia_summary(query: str) -> str:
try:
return wikipedia.summary(query, sentences=2)
except Exception as e:
return f"Error: {e}"
agent = Agent(
model="gpt-4o-mini",
tools=[web_search, wikipedia_summary],
system_prompt="You are a helpful assistant that searches web and Wikipedia."
)
response = agent.run("Tell me about the latest news on Mars rovers")
print(response)Десять строк на агента. Запускаем — получаем ответ. CUGA сам решает, в каком порядке вызывать инструменты, отслеживает историю диалога и отдаёт результат. Кстати, внутри он использует асинхронный движок, но наружу даёт синхронный интерфейс — для быстрых прототипов не надо париться с asyncio.
Почему CUGA лучше (и хуже) LangChain, CrewAI и AutoGPT
Давайте честно: LangChain — это не фреймворк, а платформа для разработки платформ. В нём запутаться легко, а отладка агента, который зациклился в бесконечном вызове инструментов, превращается в квест. CrewAI — красивая абстракция, но её агенты тяжеловесны для простых задач. AutoGPT — монстр, который требует Docker и файловой системы. CUGA берёт лучшее от каждого, но режет жир.
| Параметр | CUGA | LangChain | CrewAI |
|---|---|---|---|
| Вес зависимостей | ~5 MB | ~50 MB | ~35 MB |
| Поддержка streaming | Да (с версии 0.7) | Да | Нет нативно |
| Работа с vision | Встроенная | Через интеграции | Не поддерживает |
| Время первого агента | 5 минут | 30 минут | 20 минут |
| Гибкость конфигурации | YAML/JSON | Только код | Код + yaml |
CUGA не идеален. Если вам нужно управление памятью с векторными хранилищами из коробки — придётся допиливать самому. В LangChain это уже есть. Но для 80% задач классический ReAct с парой инструментов — это всё, что нужно.
Как НЕ надо делать: типичная ошибка с контекстом
Посмотрите, как легко сломать агента, перегрузив его системным промптом. Некоторые считают, что чем больше инструкций, тем лучше. Реальность — LLM начинает путаться и галлюцинировать инструменты.
# ❌ Плохо: агент тонет в инструкциях
bad_prompt = """You are a search assistant with web_search, wikipedia, calculator, translate, weather, news and stock_price.
When searching, always check Wikipedia first, then fallback to web_search.
If the user asks for numbers, use calculator. For currency, use translate..."""
# ✅ Хорошо: кратко и по делу
good_prompt = "You have access to search and Wikipedia. Use them to answer factual questions."CUGA сам умеет управлять порядком вызовов через внутренний планировщик (на основе LLM). Зачем дублировать эту логику в промпте? Оставьте агенту пространство для манёвра.
Когда CUGA реально вывозит — production кейсы
На практике видел, как ребята заменили связку LangChain + Celery на один CUGA-агент для обработки заявок в техподдержку. Вместо микросервисного ада — один Python-процесс с асинхронными воркерами. CUGA позволяет подключать инструменты через HTTP (FastAPI), так что каждый инструмент может быть отдельным сервисом. Вот как выглядит запуск агента как веб-приложения:
from cuga import Agent, tool
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
agent = Agent(model="gpt-4o", tools=[my_custom_tool]) # my_custom_tool определён ранее
class Query(BaseModel):
text: str
@app.post("/ask")
def ask_agent(query: Query):
return {"result": agent.run(query.text)}
Собрали, завернули в Docker, запустили на одном инстансе — и он пашет под нагрузкой в сотню запросов в минуту. CUGA поддерживает батчинг и автоматическое кэширование ответов LLM (через diskcache). Без лишних телодвижений.
Если вы работаете с локальными моделями — в 2025-2026 их стало много. CUGA отлично дружит с Qwen2.5, Llama 3.3, Mistral. Для тех, кто не хочет зависеть от облачных провайдеров, мы собрали список топ-5 open-source моделей для агентов — в них CUGA показывает высокую точность выполнения инструментов.
Кому нужен этот каркас (и кому не нужен)
- Соло-разработчикам и стартапам: CUGA позволяет быстро сделать MVP агента, не погрязая в архитектурных решениях. Выкатили за день — тестируете гипотезу.
- Командам, уже использующим FastAPI: встраивается как middleware, не требует отдельного рантайма.
- Исследователям: можно легко менять модели и стратегии промптинга. CUGA поддерживает кастомные планировщики.
- Хардкорным продакшен-инженерам: скорее всего, нет. Если вам нужна распределённая трассировка, A/B тестинг агентов и сложное управление памятью — LangChain с LangSmith пока вне конкуренции.
Но не обольщайтесь. CUGA — не серебряная пуля. Его документация ещё сыровата, а сообщество гораздо меньше, чем у «тяжеловесов». Однако сам факт, что IBM поддерживает проект и выпускает релизы каждые две недели, внушает доверие.
Будущее, которое уже наступило
В 2026 году агенты перестают быть игрушкой. CUGA — это попытка сделать агентное программирование таким же простым, как написание обычной функции. В версии 0.8.5 появилась экспериментальная возможность обучения агента на своих трейсах (imitation learning) — вы записываете, как человек выполняет задачу, а CUGA воспроизводит цепочку действий. Мы уже писали о записи и дискретизации действий — с CUGA этот процесс становится автоматическим.
Совет напоследок: не пытайтесь скопировать архитектуру больших корпоративных агентов. Начните с малого. Напишите агента, который отвечает на вопросы по вашей базе знаний с помощью web_search и read_file. Увидите, как просто. А когда упрётесь в лимиты — тогда и думайте о миграции на что-то более тяжёлое. CUGA идеален именно для первого шага.
P.S. Если решите попробовать — загляните на страницу проекта в Hugging Face Spaces, там есть работающие демо. И да, не забудьте pip install cuga --upgrade — к лету 2026 вышло уже больше 20 версий.