Перейти к основному содержанию
Dify — платформа для LLM-приложений: приложения-чаты, workflow из блоков, агенты, база знаний и публикация результата через API. На неё указывают, когда нужен готовый сценарий без разработки с нуля: загруженные документы, заданный промпт, выбранная модель и выданный наружу эндпоинт. Подключать SpeShu.AI к Dify имеет смысл, когда генерация идёт через один OpenAI-совместимый ключ с рублёвым балансом, а сама логика — визуальный workflow, который должны дорабатывать люди без навыков разработки.
Два значения определяют всю настройку:
  • base URL = https://speshu.ai/api/v1 — с суффиксом /v1
  • API key = значение из раздела API-ключей на speshu.ai/profile
Dify обращается к моделям через OpenAI-совместимые эндпоинты, поэтому отдельный плагин для SpeShu.AI не нужен: подходит штатный провайдер OpenAI-API-compatible, и вся настройка сводится к этим двум полям.

Установка

Для self-hosted: Docker Compose с образом Dify и его зависимостями (PostgreSQL, Redis, Weaviate для базы знаний, sandbox-сервисы). Запуск — по инструкции Dify для вашей платформы; SpeShu.AI ставить не нужно, это внешний API.
Проверьте, что веб-интерфейс открылся и вы вошли под учётной записью администратора. Ключ Dify для вызова приложения из кода создаётся отдельно: Publish → API Access вашего приложения.

Настройка провайдера

Путь в интерфейсе одинаков для Dify Cloud и для self-hosted.
1

Установите провайдер OpenAI-API-compatible

Откройте Settings → Model Provider → Install provider и найдите OpenAI-API-compatible (поставщик — LangGenius). Установите и вернитесь к списку провайдеров.
2

Возьмите идентификатор модели из каталога

Идентификаторы текстовых моделей зашивать в код нельзя: состав каталога меняется, и зашитый в конфиг идентификатор молча устаревает, а запрос падает с 404 model_not_found. Возьмите актуальный и сохраните в переменную:
cURL
.data[0] — первый элемент, чтобы шаг был запускаемым. Выбирайте модель по context_length, cost_completion и наличию зрения. Формат ответа — в разделе Каталог моделей.
3

Заполните форму провайдера

В карточке OpenAI-API-compatible нажмите Edit и заполните три поля:Нажмите Save. Модель появится в выпадающих списках LLM-ноды и сразу станет доступна для тестового вызова из карточки.
В поле API endpoint URL суффикс /v1 обязателен. Dify сам дописывает /chat/completions, поэтому https://speshu.ai/api/v1/v1/chat/completions вернёт 404, а вариант без /v1 уведёт запрос на /api/chat/completions. Хвостовой слэш в конце адреса уберите.
Секреты провайдера хранятся в базе Dify и правятся только через интерфейс — в .env вашего развёртывания их нет. Перед коммитом не переносите значения форм в репозиторий. Model Name — единственное поле, которое при смене каталога нужно обновить вручную: при обновлении подставьте новое значение $SPESHU_MODEL.
SpeShu.AI не отдаёт эндпоинт для эмбеддингов. База знаний Dify требует модель эмбеддингов, и подставить туда текстовую модель нельзя. Два честных варианта:(а) Рекомендуемый. Эмбеддинги считает отдельный провайдер, генерацию — SpeShu.AI. Установите в Dify любой OpenAI-совместимый эмбеддинг-провайдер (тот же плагин, с базой и ключом другого сервиса) и выберите его в настройках датасета:Плата за эмбеддинги идёт этому сервису, а не в кошелёк SpeShu.AI. Ответы и генерация — в рублях по usage.cost.total_cost.(б) Обойтись без базы знаний: приложение-чат, агент или workflow без узлов Knowledge Retrieval. Эмбеддинги тогда не нужны вовсе.

Первый рабочий пример

Проверьте связку не в интерфейсе, а через API самого Dify: так вы убедитесь, что модель, ключ и base URL сошлись на стороне платформы.
cURL
Python
DIFY_API_BASE и DIFY_APP_KEY — ваши собственные переменные окружения для Dify, а не настройки SpeShu.AI. Здесь два разных пространства имён: база Dify заканчивается на /v1 и обслуживает приложение, база SpeShu.AI — https://speshu.ai/api/v1 и обслуживает модель.

Workflow, поток, инструменты

Медиагенерация в workflow

Модели изображений, видео, аудио и музыки живут в отдельном API: запрос создаёт задачу, оплата — сразу при создании, результат приходит по опросу. В Dify это два узла: HTTP Request на создание и HTTP Request на опрос, между ними — цикл или пауза.
Опрос состояния — GET https://speshu.ai/api/v1/async/media/tasks/{task_id}, поле статуса — data.state, ссылка на результат — в data.resultJson. Идентификаторы медиа-моделей стабильны, но каталог всё равно стоит сверять через GET /api/v1/media/models.
Деньги списываются при создании задачи, а не при успешном результате. Не переотправляйте создание вслепую: повтор с тем же Idempotency-Key вернёт исходную задачу, с новым — создаст новую и спишет снова. Один ключ на одну логическую операцию — переиспользуйте его во всех повторах.

Что дальше

Начало работы

Разбор первых запросов к API

Потоковая передача

Разбор SSE и кадра со списанием

Вызов функций

Полный цикл вызова инструмента

Создание медиа-задачи

Входные параметры и опрос статуса

Типичные проблемы

Проверьте Model Name в карточке провайдера: значение должно совпадать с элементом id из GET /api/v1/models, без префикса и без кавычек. Затем убедитесь, что адрес — ровно https://speshu.ai/api/v1. Если каталог обновился, возьмите новый идентификатор и впишите его заново.
В поле API Key попал ключ от другого сервиса либо значение обрезалось при копировании. Проверьте, что там полная строка с префиксом sk- и без переноса строки, и что ключ не отозван в профиле. Заодно проверьте ключ напрямую: curl -s https://speshu.ai/api/v1/balance -H "Authorization: Bearer $SPESHU_API_KEY".
Проверьте адрес ещё раз. С хвостовым слэшем или с двойным /v1 Dify соберёт неверный путь и получит 404 именно на потоковом маршруте — блокирующий вызов при этом может вести себя иначе из-за кэша модели в интерфейсе.
Это ожидаемо: сервис не отдаёт эмбеддинги. Подключите сторонний эмбеддинг-провайдер в Dify и выберите его в настройках датасета либо уберите узлы Knowledge Retrieval из сценария.
На балансе нет положительной суммы. Пополнение — в веб-приложении на speshu.ai/profile. Баланс проверяют до обращения к модели. За отказ деньги не списываются.
Полная таблица кодов, три формата ошибок и цикл повторов — на странице Ошибки. Таймауты и квоты — в разделе Лимиты, списания — в разделе Биллинг.