Загружайте документы, извлекайте смысл через OCR и векторизацию,
ищите через семантический и полнотекстовый поиск.
API спроектирован под tool_calls AI-агентов.
// 1. Загрузить документ POST /api/documents ← multipart file, max 100 MB { "task_type": "transforming", "status": "pending" } // 2. Семантический поиск после обработки GET /api/documents/{id}/vector-text?query="ставка рефинансирования" { "results": [{ "text": "...", "score": 0.94, "page": 7 }], "cost_usd": 0.000012 }
От загрузки файла до результатов семантического поиска — автоматически, асинхронно, с трекингом статуса.
Файл до 100 МБ. Документ и BackgroundTask в статусе pending.
RU + EN распознавание. Структурирует в DocumentElement[].
Чанкинг, батчинг 36 чанков, 5 конкурентных запросов через Http::pool().
Cosine distance. Векторы сохранены, готов к поиску.
Топ-K чанков с оценкой релевантности + cost_usd.
OpenAI-эмбеддинги + Qdrant cosine distance. Находит смысловые совпадения, не ключевые слова. Возвращает cost_usd каждого запроса.
Группируйте документы в коллекции. Единый поиск по всем документам — vector-text и full-text на уровне коллекции.
Чтение постранично или сквозной скролл по всему документу с offset, limit и has_more.
Задачи transforming и vectorizing в очередях Horizon. Polling через GET /tasks/{id}.
Глобальный UserScope на уровне модели — каждый пользователь видит только свои данные без явных проверок в контроллерах.
Токены хранятся в background_tasks.tokens_used. Стоимость по конфигурируемой цене за млн токенов возвращается в cost_usd.
API спроектирован под паттерн Anthropic tool_calls. Агент загружает документ, поллит статус задачи, делает семантический поиск и читает релевантные страницы — всё через одни и те же эндпоинты.
docs/tool_calls.md
pending → processing → completed
vector-text запросе
// 1. Загрузить документ upload_document(file) → task { status: "pending", type: "transforming" } // 2. Поллить до завершения парсинга get_task_status(document_id, task_id) → { status: "completed" } // 3. Запрос → автозапуск векторизации search_document_vector(document_id, query) → task { status: "processing", type: "vectorizing" } → поллить → повторить вызов → { results: [...], cost_usd: 0.000012 } // 4. Прочитать контекст страницы get_document_page(document_id, page: 3) → { content: "...", has_more: true }
Открой Дэшборд чтобы следить за состоянием фоновых задач: трансформирование, векторизация, ошибки.
Открыть Дэшборд