Два значения решают всё остальное:
base_url = "https://speshu.ai/api/v1" и API-ключ. Больше ничего прописывать не нужно.Установка
Langflow ставится как обычный Python-пакет и запускается локальным веб-сервером на порту7860 по умолчанию.
http://127.0.0.1:7860. Адрес и порт переопределяются переменными LANGFLOW_HOST и LANGFLOW_PORT; полный список — в langflow run --help. Узнать установленную версию:
Поля компонентов меняются между мажорными версиями Langflow. Названия ниже относятся к ветке 1.x; в 0.x блок OpenAI называется
ChatOpenAI и имеет те же по смыслу поля. Сверяйтесь с фактической версией из команды выше.Возьмите идентификатор модели из каталога
Идентификаторы текстовых моделей зашивать в код нельзя: состав каталога меняется, и зашитый в конфигid начинает падать с 404 model_not_found. Возьмите его из GET /api/v1/models и положите в переменную окружения.
cURL
.data[0] — первый элемент, чтобы пример был запускаемым. В своём flow выбирайте модель по context_length, cost_completion и наличию зрения; провайдер модели виден в поле owned_by. Формат ответа — в разделе Каталог моделей, выбор — в Модели и цены.Настройка компонента модели
Соберите минимальный flow: Chat Input → OpenAI → Chat Output. В компоненте OpenAI заполните три поля:
Поле OpenAI API Base — это и есть тот самый переключатель на OpenAI-совместимого провайдера. Без него компонент пойдёт на официальный эндпоинт провайдера по умолчанию и вернёт
401 или ошибку маршрутизации.
Параметризованный вариант: компонент Code
Если значения должны приходить из окружения, а не из формы, замените компонент OpenAI на компонент Code. Этот путь работает одинаково во всех версиях Langflow, потому что использует публичный классChatOpenAI из пакета langchain-openai:
Python
.env в его рабочий каталог — процесс подхватит переменные при старте:
Первый работающий пример
Тот же flow можно вызвать по HTTP, не открывая интерфейс. ЭндпоинтPOST /api/v1/run/{flow_id} принадлежит самому Langflow, а не SpeShu.AI: flow_id — идентификатор сохранённого flow из его URL. Запрос авторизуется секретом самого Langflow в заголовке x-api-key.
cURL
LANGFLOW_SECRET_KEY при первом запуске и печатается в лог сервера. Без него интерфейс пускает вас через автоматический вход суперпользователя, а API-запросы отклоняются с 401.
Внутри flow итоговая стоимость генерации в рублях недоступна: Langflow отдаёт только текст ответа. Списание при этом происходит — по каждому запросу к SpeShu.AI. Сверяйте расход по эндпоинту баланса либо логируйте
usage.cost.total_cost на стороне прокси, если вам нужен учёт по каждому запуску flow.Потоковая передача
Поле Streaming в компоненте OpenAI включает поточный режим: вместо целого ответа Chat Output получает текст по мере генерации. Транспорт при этом тот же — блок OpenAI уходит вPOST /api/v1/chat/completions с stream: true.
На стороне Langflow тот же поток включается параметром stream_mode в теле запроса к /api/v1/run/{flow_id} — тогда ответ приходит как Server-Sent Events:
cURL
[DONE] и поведение при обрыве — на странице Потоковая передача.
Инструменты и структурированный вывод
Оба механизма приходят в SpeShu.AI через OpenAI-совместимый эндпоинт, поэтому в Langflow они включаются штатно: подключите к модели блок Tools, а в промпте опишите функции в формате JSON Schema. Отдельной настройки на стороне API не требуется.- Вызов функций — полный цикл: схема,
tool_calls, возврат результата. - Структурированный вывод — когда вместо свободного текста нужен объект по схеме.
Изображения во входе
Визуальные модели изGET /api/v1/models принимают вход как блок контента image_url. В Langflow это работает, когда в сообщении лежит URL: загрузите файл в хранилище SpeShu.AI через POST /api/v1/storage/upload и передайте полученную ссылку в компонент Chat Input как изображение.
cURL
400 invalid_request — картинка не игнорируется молча. Форматы блоков контента разобраны в гайде Медиаввод.
Генерация медиа
Langflow не имеет готового компонента под асинхронный медиа-API: задача создаётся, оплачивается сразу и доводится до результата опросом статуса. Встраивается это компонентом Custom Tool или компонентом Code, которые делают два запроса к SpeShu.AI и возвращают ссылку на результат.Python
Про эмбеддинги
Вариант A — эмбеддинги у другого провайдера, генерация у SpeShu.AI. Оставьте блок OpenAI Embeddings на адресе и ключе стороннего сервиса, а компонент модели направьте на SpeShu.AI. Это две независимые настройки, и в спецификации vector store хранитсяembedding_provider отдельной конфигурацией — вектор из чужого провайдера туда попадает, а не подменяется на лету.
Python
Возможные проблемы
404 на маршруте, которого нет
404 на маршруте, которого нет
Проверьте base URL. Нужно
https://speshu.ai/api/v1 — с /v1 и без завершающего слэша. Если сработала попытка вызвать эмбеддинги, дело в этом же: такого маршрута в API не существует.401 invalid_api_key при нажатии Run
401 invalid_api_key при нажатии Run
Ключ не попал в компонент модели: поле OpenAI API Key пустое, в нём кавычки или обрезанное значение. Проверьте переменную командой
echo "$SPESHU_API_KEY" | wc -c. Формат ключа — на странице Аутентификация.404 model_not_found
404 model_not_found
Идентификатор в поле Model Name устарел или скопирован с ошибкой. Возьмите
id заново из GET /api/v1/models и подставьте как есть — без префикса провайдера и без обрезки.Модель отвечает, но поток приходит целиком в конце
Модель отвечает, но поток приходит целиком в конце
Не включён Streaming в компоненте модели либо не задан
stream_mode в теле запроса к /api/v1/run/{flow_id}. Формат кадров — в гайде Потоковая передача.402 insufficient_quota или 422 content_too_large
402 insufficient_quota или 422 content_too_large
Первое — на балансе нет положительной суммы; пополнение — в профиле. Второе — входные токены плюс зарезервированный выход не влезают в
context_length модели: сократите переданный контекст или возьмите модель с окном побольше.Что дальше
Каталог моделей
Формат
GET /api/v1/models и выбор идентификатораПотоковая передача
SSE,
[DONE] и кадр со списаниемВызов функций
Полный цикл вызова инструмента
Медиаввод
Ссылки, base64 и хранилище
Тарификация и оплата
Как считается расход и списываются деньги
Создание медиа-задачи
Асинхронная генерация изображений, видео и аудио
