RagFlow работает через OpenAI-совместимый слой, поэтому от вас требуется ровно два значения:
base_url = "https://speshu.ai/api/v1" и API-ключ. Никакой отдельной интеграции, специального SDK или адаптера не требуется.Установка RagFlow
RagFlow разворачивается официальным self-hosted compose-файлом. Требования по ресурсам высокие: от 4 ядер CPU и 16 ГБ RAM.http://localhost:9380. Сборку выбранной версии фиксируйте явно (git checkout v0.x.y) — состав полей в настройках между релизами меняется.
Инструкции по установке меняются от версии к версии. Ориентируйтесь на раздел Installation в документации именно той сборки, которую вы зафиксировали.
Подготовка ключа и модели
1
Создайте ключ
Откройте speshu.ai/profile, войдите и создайте ключ в разделе API-ключей. Полное значение показывается один раз.
2
Проверьте баланс
Запрос баланса не стоит токенов и сразу покажет, принят ли ключ.
cURL
3
Возьмите идентификатор модели из каталога
Идентификаторы текстовых моделей не зашивайте в код: состав каталога меняется, и зашитая в конфиг строка рано или поздно отвалится с
404 model_not_found. Значение нужно один раз получить из API и положить в переменную окружения.cURL
.data[0] — первый элемент, чтобы шаг был запускаемым. Для продакшена выбирайте модель по cost_completion, context_length и наличию зрения. Формат ответа — в разделе Модели и цены.$SPESHU_MODEL — единственное место, где появляется идентификатор модели: он уходит в UI RagFlow, в .env и в переменную окружения контейнера. Перед регистрацией убедитесь, что модель отвечает:
Python
Регистрация модели в RagFlow
Дальнейшие шаги зависят от версии RagFlow: подписи полей в UI менялись. Ориентируйтесь на раздел System Settings → Model в вашей сборке.Вариант A: через интерфейс
- Откройте Model в настройках системы.
- Нажмите Add model и выберите фабрику OpenAI.
- Заполните Model name (
$SPESHU_MODEL), API key и Base URL.
- Сохраните модель и отметьте её как используемую по умолчанию в чате и агентах.
Если в вашей версии диалог фабрики OpenAI не содержит поля Base URL, вариант A не подходит — переходите к варианту B. Это не ошибка конфигурации, а разница между релизами.
Вариант B: через конфигурацию сервиса
Определение фабрики лежит вconf/llm_factories.json: у фабрики OpenAI есть поле base_url, у каждой модели — model_name, api_key, model_type и support_tools.
docker/.env — они перекрывают значения фабрики при старте контейнера:
Модель эмбеддингов
Эмбеддинги RagFlow требует всегда: без зарегистрированной эмбеддинг-модели разбиение документа на чанки и индексация не запустятся. SpeShu.AI такой модели не предоставляет, поэтому зарегистрируйте её у другого провайдера — локальный inference, отдельный API или любой OpenAI-совместимый сервис с эндпоинтом/embeddings. Провайдер остаётся отдельной сущностью: свой ключ, своя фабрика, свой идентификатор модели.
В RagFlow обе модели используются раздельно: эмбеддинг-модель обслуживает внутренний индекс, а зарегистрированная в SpeShu.AI — только генерацию ответа и вызов инструментов.
Первый рабочий пример
Официальный Python-клиент RagFlow (ragflow-python) работает с самим RAG-движком: он создаёт датасет, загружает документ, запускает разбор и выполняет поиск. Внутри этих вызовов RagFlow обращается к LLM через SpeShu.AI по настройкам из предыдущего шага.
Python
Набор классов и методов клиента менялся между версиями RagFlow, а параметры конструктора — между его релизами. Приведённый вариант соответствует ветке
ragflow-python 0.x; в более ранних сборках используйте HTTP-эндпоинты RagFlow напрямую, сверяясь с документацией вашей версии.RAGFLOW_API_KEY — токен доступа к вашему инстансу RagFlow, SPESHU_API_KEY — ключ платформы, который RagFlow подставляет сам при обращении к модели.
Что дальше подробнее
Потоковая передача. RagFlow отдаёт ответ по частям, а внизу показывает ссылки на источники. Формат кадров, маркер[DONE] и кадр со списанием разобраны на странице Потоковая передача. Учтите, что RagFlow ограничивает длину генерации: если ответ не успевает, снижайте объём контекста, а не отключайте поток.
Вызов функций. Если вы зарегистрировали модель с поддержкой инструментов (флаг support_tools в фабрике), RagFlow может вызывать MCP-серверы и встроенные агенты. Формат tools[] и цикл вызова — в разделе Вызов функций.
Структурированный вывод. Для извлечения полей из документов RagFlow просит модель вернуть JSON по схеме. Схемы, json_schema и обработка отказов разобраны в разделе Структурированный вывод.
Генерация изображений, видео и аудио в этом API живёт в отдельных эндпоинтах и не входит в OpenAI-совместимый слой чата, поэтому штатный конвейер RagFlow через них не проходит. Если такие задачи нужны, вызывайте их напрямую — разбор в разделе Создание медиа-задачи.
Расход
RagFlow сам не считает деньги: списание происходит на стороне SpeShu.AI и возвращается вusage.cost.total_cost каждого ответа. Суммируйте это поле по всем запросам агента — длинный RAG-сеанс с несколькими итерациями инструментов легко съедает заметную часть баланса. Подробнее — в разделе Тарификация и оплата.
Типичные проблемы
404 на /api/v1/chat/completions, RagFlow пишет «connection refused»
404 на /api/v1/chat/completions, RagFlow пишет «connection refused»
В
Base URL указан https://speshu.ai или https://speshu.ai/api — без сегмента /v1. Открытый каталог моделей работает без ключа, поэтому по нему это не видно: проверяйте адрес именно на чат-эндпоинте.В Base URL стоит адрес с завершающим слэшем
В Base URL стоит адрес с завершающим слэшем
Строка вида
https://speshu.ai/api/v1/ даёт пути вида //chat/completions, и прокси между RagFlow и API отвечает 404. Уберите слэш в конце.401 invalid_api_key при первом же вопросе к базе знаний
401 invalid_api_key при первом же вопросе к базе знаний
Ключ не доехал: в RagFlow он часто лежит в отдельном поле фабрики, а не в переменных окружения контейнера. Проверьте, что значение содержит префикс
sk- целиком, без кавычек и переносов строки, и что оно записано именно в ту фабрику, к которой привязана модель.404 model_not_found на генерации, хотя модель видна в UI
404 model_not_found на генерации, хотя модель видна в UI
Идентификатор в поле Model name устарел или обрезан. Возьмите его заново из
GET /api/v1/models и подставьте как есть — вместе со слэшем в именах вида группа/имя.Ответ приходит целиком, без постепенного текста
Ответ приходит целиком, без постепенного текста
Обычно это не поломка API, а буферизация на стороне RagFlow или UI-фронтенда. Отдельно убедитесь, что сам вызов доходит до
/chat/completions с stream: true — формат кадров описан в разделе Потоковая передача.Что дальше
Начало работы
Практический маршрут от ключа до первого ответа
Модели и цены
Каталог,
owned_by и цены за миллион токеновПотоковая передача
SSE,
[DONE] и кадр со списаниемОшибки
Коды, форматы и что с ними делать
