Crew), который выполняет задачи по заданному процессу. Направлять его на SpeShu.AI имеет смысл, когда нужно вести несколько ролей на разных моделях под одним ключом и с одного баланса, не поднимая собственный LLM-шлюз.
Подключение сводится к двум вещам:
base_url = "https://speshu.ai/api/v1" и API-ключ. CrewAI обращается к моделям через OpenAI-совместимые эндпоинты, поэтому пользовательский базовый URL — обычно весь необходимый объём настройки.Установка
Возьмите идентификатор модели
Идентификаторы текстовых моделей меняются вместе с составом каталога, поэтому константа в коде — это отложенный404 model_not_found. Возьмите идентификатор из каталога и сохраните его в переменную окружения:
cURL
.data[0] — первый элемент, чтобы пример был запускаемым. В своём коде выбирайте модель по context_length, наличию зрения и цене; формат ответа разобран в разделе Модели и цены.
Конфигурация
КлассLLM из crewai принимает base_url и api_key напрямую:
Python
Набор параметров конструктора меняется между версиями CrewAI. Проверьте сигнатуру в своей версии:
python -c "import inspect, crewai; print(inspect.signature(crewai.LLM))". Имена model, base_url, api_key, temperature и timeout устойчивы в линейке 0.x и 1.x.Первый рабочий пример
Два агента, две задачи, один запуск. Модель — из переменнойSPESHU_MODEL, адрес и ключ — из конфигурации выше.
Python
Один запуск экипажа — это несколько запросов к
/api/v1/chat/completions: каждый агент со своей ролью делает собственный вызов на каждую задачу. Считайте расход по usage.cost.total_cost каждого ответа; разбор — на странице Учёт средств.Структурированный вывод
Task умеет возвращать не текст, а объект pydantic: результат лежит в result.pydantic.
Python
Инструменты
Инструменты объявляются декоратором@tool и передаются агенту списком. Модель получает их описание, решает, что вызвать, а выполняете код вы.
Python
Agent(tools=[find_cheapest_model], ...). Описание в docstring — единственное место, где модель читает, когда звать инструмент; формулировка «полезная функция» работает хуже, чем её отсутствие. Полный цикл вызова — в гайде Вызов функций.
Генерация изображения
Отдельного медиа-инструмента в CrewAI нет, но любой вызов API оборачивается в@tool за несколько строк. Деньги списываются при создании задачи, а не при успешном результате.
Python
GET /api/v1/media/models, разбор — в Создание задачи.
Потоковая передача
Поток включается флагом на экипаже, а не параметром запроса:Python
stream=True и итерация по result.stream относятся к CrewAI 0.8x и новее; в более старых версиях такого параметра нет, и поток включается на уровне HTTP-клиента. Формат кадров, [DONE] и кадр со списанием разобраны в гайде Потоковая передача.
Про RAG и эмбеддинги
Честных вариантов два. (а) Эмбеддинги — отдельный провайдер, генерация — SpeShu.AI. Это предпочтительный путь: векторы считает сторонний сервис, а текст пишет ваша платная модель.Python
embed() кладите в любой векторный индекс, а найденные фрагменты передавайте в задачу как context: к этому моменту генерация уже идёт через SpeShu.AI.
(б) Экипаж без эмбеддингов. Если индекс не нужен, оставьте CrewAI в роли оркестратора: агенты, задачи, инструменты и память между задачами работают без векторов. Пример из раздела выше — как раз такой случай.
Если что-то не работает
404 на каждый запрос к API
404 на каждый запрос к API
Неверный
base_url. Должно быть ровно https://speshu.ai/api/v1 — с суффиксом /v1 и без завершающего слэша. Вариант https://speshu.ai/api даст 404 на маршруте, а .../api/v1/ — путь с двойным слэшем, который тоже не пройдёт.401 invalid_api_key
401 invalid_api_key
Ключ не передан или не тот. Проверьте, что в
LLM(...) задан api_key, либо что задана переменная OPENAI_API_KEY. Подробности — в разделе Аутентификация.404 model_not_found
404 model_not_found
Идентификатор устарел или скопирован с ошибкой. Возьмите
id заново из GET /api/v1/models и подставьте как есть. Если проверили каталог, а отказ остался — посмотрите на модель со слэшем в идентификаторе: это разбор префикса провайдера, описанный выше.422 content_too_large
422 content_too_large
Экипаж накапливает историю: результат первой задачи уходит в контекст второй, и сумма быстро упирается в окно модели. Сравните длину задач с
context_length из каталога, сократите expected_output или возьмите модель с окном побольше. Полный разбор — на странице Ошибки.Запуск зависает или падает с ошибкой конструктора
Запуск зависает или падает с ошибкой конструктора
Проверьте таймаут: запрос к
/api/v1/* ограничен 300 секундами, а мультиагентный прогон делает их несколько подряд — клиентский таймаут должен покрывать весь запуск, а не один вызов. Если ошибка про неизвестный параметр, сверьтесь с сигнатурой crewai.LLM в вашей версии. Коды и цикл повторов — на странице Ошибки, таймауты — в разделе Лимиты.Что дальше
Модели и цены
Как выбрать модель под роль агента
Вызов функций
Как модель вызывает ваши инструменты
Потоковая передача
SSE,
[DONE] и кадр со списаниемУчёт средств
Сколько стоит запуск экипажа
