hubris

CrewAI

Подключение Hubris к CrewAI — фреймворку мультиагентных команд на Python. Один ключ на всех агентов, у каждого своя модель.

CrewAI — фреймворк для команд агентов на Python: у каждого агента своя роль, цель и инструменты, задачи выполняются последовательно или иерархически с агентом-менеджером. Модель задаётся на уровне агента, поэтому в одной команде дешёвые исполнители могут работать под дорогим руководителем.

Hubris подключается как OpenAI-совместимая точка. CrewAI разбирает первую часть имени модели как название провайдера — отсюда одна особенность в написании имени, о ней ниже.

Требования

Подключение

import os
from crewai import LLM

llm = LLM(
    model="openai/anthropic/claude-sonnet-5",
    base_url="https://api.hubris.pw/v1",
    api_key=os.environ["HUBRIS_API_KEY"],
)

Имя модели пишется с двойным префиксом: сначала openai/ — это указание CrewAI «говори по протоколу OpenAI с адресом из base_url», затем наш полный ID вместе с вендором. То есть openai/anthropic/claude-sonnet-5, а не anthropic/claude-sonnet-5.

Без первого префикса CrewAI примет anthropic/ за провайдера и попытается подключиться к Anthropic напрямую: без установленного дополнения упадёт с ImportError: Anthropic native provider not available, с установленным — уйдёт не к нам. Проверено: openai/anthropic/claude-sonnet-5 и openai/openai/gpt-5.6-luna работают, а anthropic/claude-sonnet-5 и openai/gpt-5.6-luna — нет.

Равнозначная запись без двойного префикса — явный провайдер: LLM(model="anthropic/claude-sonnet-5", provider="openai", base_url=..., api_key=...).

Адрес — именно api.hubris.pw, с api. в начале и /v1 в конце. Домен hubris.pw — это сайт и личный кабинет, запросы к API он не обслуживает.

Команда целиком

import os
from crewai import Agent, Crew, LLM, Task

BASE = "https://api.hubris.pw/v1"
KEY = os.environ["HUBRIS_API_KEY"]

# Дешёвая модель на рутину, дорогая — на выводы.
fast = LLM(model="openai/google/gemini-3.7-flash", base_url=BASE, api_key=KEY)
smart = LLM(model="openai/anthropic/claude-sonnet-5", base_url=BASE, api_key=KEY)

researcher = Agent(
    role="Аналитик",
    goal="Собрать факты по теме",
    backstory="Дотошный аналитик, который проверяет источники.",
    llm=fast,
)

writer = Agent(
    role="Редактор",
    goal="Написать связный текст по собранным фактам",
    backstory="Редактор, который пишет коротко и по делу.",
    llm=smart,
)

crew = Crew(
    agents=[researcher, writer],
    tasks=[
        Task(description="Собери ключевые факты по теме", agent=researcher,
             expected_output="Список фактов"),
        Task(description="Напиши по фактам короткий обзор", agent=writer,
             expected_output="Текст на 5–7 предложений"),
    ],
)

print(crew.kickoff())

Разные модели у разных агентов — главный способ управлять счётом: рутину отдают дешёвой модели, а флагман оставляют на шаг, где качество действительно нужно.

Выбор моделей

ID берите из каталога — полностью, вместе с вендором, и не забывайте про openai/ впереди.

Строка для CrewAIКогда подходит
openai/google/gemini-3.7-flashсбор данных, классификация, рутинные шаги
openai/anthropic/claude-sonnet-5рассуждение, длинный контекст, работа с инструментами
openai/deepseek/deepseek-v4-proнедорогое рассуждение и код
openai/openai/gpt-5.6-lunaуниверсальный выбор для сложных задач

Каталог у нас открыт без ключа — список можно посмотреть прямо в браузере: api.hubris.pw/v1/models.

Инструменты

Агенты с инструментами требуют от модели поддержки function calling. Берите модель, у которой в карточке каталога в supported_parameters есть tools. Модель без такой поддержки в CrewAI будет описывать действие текстом вместо вызова инструмента.

Расходы

Команда агентов делает много запросов на один запуск: каждый шаг задачи — отдельный вызов, а история передаётся заново. Счёт растёт быстрее, чем в обычном чате.

  • Заведите под проект отдельный ключ и поставьте ему дневной лимит — так неудачный цикл агентов не съест весь баланс.
  • Смотрите разбор по запросам в расходах: там видно, какой агент и какая модель дали основной расход.

Решение проблем

ImportError: ... native provider not available при создании LLM

Имя модели без префикса openai/. CrewAI разбирает первую часть имени как провайдера: увидев anthropic/ или google/, он пытается подключиться к этому вендору напрямую и просит установить его дополнение. Нужно openai/anthropic/claude-sonnet-5 либо provider="openai".

Ошибка «модель не найдена» от Hubris

Обратная ситуация: префикс openai/ есть, а вендор в ID потерян. openai/gpt-5.6-luna CrewAI превратит в запрос модели gpt-5.6-luna — такого ID у нас нет, ответ будет 404 model_not_found. Нужно openai/openai/gpt-5.6-luna.

Агент не вызывает инструменты

Модель без поддержки tools. Проверьте карточку модели в каталоге.

Ошибка про недостаточный баланс

Пополните баланс в кабинете — от 300 ₽, через СБП, банковской картой или по счёту для юридических лиц.

Проверено на CrewAI 1.15.20, 9 сентября 2026.

Что дальше

Обновлено: