Skip to content

REST API

Проект: ADOLF — AI-Driven Operations Layer Framework Модуль: Knowledge Base / REST API Версия: 1.0 Дата: Февраль 2026


1. Обзор

Knowledge Base API предоставляет HTTP-доступ к базе знаний документов: загрузка файлов, просмотр статусов обработки, поиск и статистика. Работает как часть Doc Converter Service.

КомпонентФайлПроцессПорт
REST APIsrc/api/src.main serve8000
Databasesrc/database.pyвнутри API

2. Общие характеристики

ПараметрЗначение
ФреймворкFastAPI (Python)
ФорматJSON
Базовый путь/api/v1/knowledge
CORSAccess-Control-Allow-Origin: *
Макс. размер файла50 МБ (настраивается, 1–100 МБ)
АутентификацияНет
ДокументацияSwagger UI /api/docs, ReDoc /api/redoc, OpenAPI /api/openapi.json

3. Эндпоинты

Системные

МетодПутьQuery paramsОписание
GET/healthПроверка состояния сервиса и БД
GET/api/v1/knowledge/statsАгрегированная статистика базы знаний

Формат ответа /health

json
{
  "status": "healthy",
  "version": "1.1.17",
  "database": "/path/to/history.db"
}

Формат ответа /stats

json
{
  "total_documents": 142,
  "total_categories": 8,
  "documents_today": 5,
  "moderating": 0,
  "by_category": {"product": 45, "legal": 12},
  "by_status": {"indexed": 130, "failed": 2},
  "by_extension": {".pdf": 80, ".docx": 40},
  "by_brand": {"ohana_market": 90, "ohana_kids": 52},
  "processing": 0,
  "success": 140,
  "indexed": 130,
  "failed": 2,
  "skipped": 0,
  "total_tokens": 125000,
  "avg_processing_seconds": 3.4
}

Документы

МетодПутьQuery paramsОписание
GET/api/v1/knowledge/documentsstatus, categoryСписок документов с фильтрацией
GET/api/v1/knowledge/documents/searchq (обяз.), status, categoryПоиск документов по имени файла
GET/api/v1/knowledge/documents/category-countsКоличество документов по категориям
POST/api/v1/knowledge/documents/uploadЗагрузка одного файла (202)
POST/api/v1/knowledge/documents/upload-batchПакетная загрузка файлов, макс. 20 (202)
GET/api/v1/knowledge/documents/{doc_id}Получение документа по ID
DELETE/api/v1/knowledge/documents/{doc_id}Удаление документа и всех его артефактов (204)

Query-параметры фильтрации

ПараметрТипОписание
statusstringprocessing, success, indexed, failed, skipped
categorystringОдна из категорий (см. Перечисления)
qstringПоисковый запрос — подстрока имени файла (SQLite LIKE)

POST /upload — multipart/form-data

ПолеТипОбязательныйОписание
filefileДаЗагружаемый файл

Поддерживаемые расширения: .csv, .xlsx, .xls, .xlsm, .xlsb, .docx, .pdf, .html, .htm, .rtf, .odt, .txt, .md, .xml, .png, .jpg, .jpeg

json
{
  "filename": "report_1.pdf",
  "original_filename": "report.pdf",
  "size_bytes": 245760,
  "status": "accepted",
  "message": "File accepted for processing",
  "document_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

POST /upload-batch — multipart/form-data

ПолеТипОбязательныйОписание
filesfile[]ДаСписок файлов (макс. 20)
json
{
  "uploaded": [
    {
      "filename": "report.pdf",
      "original_filename": "report.pdf",
      "size_bytes": 245760,
      "status": "accepted",
      "message": "File accepted for processing"
    }
  ],
  "failed": [
    {
      "filename": "broken.exe",
      "error": "Unsupported file extension: .exe"
    }
  ],
  "total_accepted": 4,
  "total_failed": 1
}

DELETE /documents/

Удаляет документ полностью:

  • Запись в SQLite
  • Векторы в Qdrant (все чанки документа)
  • Markdown-файл из output_dir
  • Оригинальный файл из archive_dir
КодСитуация
204Документ удалён
404Документ не найден

Формат ответа /documents/

json
{
  "id": "abc123",
  "original_filename": "report.pdf",
  "extension": ".pdf",
  "file_hash": "sha256...",
  "file_size": 245760,
  "output_path": "./output/report.md",
  "archive_path": "./archive/product/ohana_market/report.pdf",
  "title": "Product Catalog Q1 2025",
  "category": "product",
  "brand_id": "ohana_market",
  "access_level": "staff",
  "confidence": 0.95,
  "classified_by": "claude",
  "kb_file_id": null,
  "status": "indexed",
  "error_message": null,
  "processing_seconds": 4.2,
  "tokens_used": 1500,
  "detected_at": "2025-01-15T10:30:00",
  "created_at": "2025-01-15T10:30:05",
  "indexed_at": "2025-01-15T10:30:09"
}

Модели ответов

DocumentResponse

Основная модель документа, используемая во всех эндпоинтах, возвращающих документы.

ПолеТипОписание
idstringУникальный ID документа
original_filenamestringИсходное имя загруженного файла
extensionstringРасширение файла (.pdf, .docx и т.д.)
file_hashstring?SHA-256 хеш файла
file_sizeint?Размер файла в байтах
output_pathstring?Путь к сконвертированному markdown
archive_pathstring?Путь в директории архива
titlestring?Извлечённый/классифицированный заголовок
categorystring?Категория документа
brand_idstring?ohana_market, ohana_kids или all
access_levelstring?staff, manager, senior или director
confidencefloat?Уверенность классификации (0–1)
classified_bystring?Источник классификации
kb_file_idstring?Ссылка на внешний файл в KB
statusstringprocessing, success, indexed, failed, skipped
error_messagestring?Детали ошибки при сбое
processing_secondsfloat?Время обработки
tokens_usedintИспользовано токенов
detected_atdatetimeКогда файл обнаружен
created_atdatetime?Когда запись создана
indexed_atdatetime?Когда проиндексирован в векторное хранилище

Вспомогательные модели

DocumentListResponse — обёртка списка документов.

ПолеТипОписание
itemsDocumentResponse[]Список документов
totalintОбщее количество

StatsResponse — агрегированная статистика.

ПолеТипОписание
total_documentsintОбщее количество документов
total_categoriesintКоличество уникальных категорий
documents_todayintДокументов обработано сегодня
moderatingintДокументов на модерации
by_categorydict[str, int]Количество по категориям
by_statusdict[str, int]Количество по статусам
by_extensiondict[str, int]Количество по расширениям файлов
by_branddict[str, int]Количество по брендам
processingintДокументов в процессе обработки
successintУспешно сконвертировано
indexedintПроиндексировано в векторном хранилище
failedintОшибка обработки
skippedintПропущено (дубликат и т.д.)
total_tokensintВсего использовано токенов
avg_processing_secondsfloatСреднее время обработки

HealthResponse — состояние сервиса.

ПолеТипОписание
statusstring"healthy"
versionstringВерсия API
databasestringПуть к БД или "unavailable"

CategoryCountsResponse — количество по категориям.

ПолеТипОписание
categoriesdict[str, int]Количество документов по категориям

FileUploadResponse — результат загрузки файла.

ПолеТипОписание
filenamestringСохранённое имя файла (может содержать суффикс для дедупликации)
original_filenamestringИсходное имя файла от клиента
size_bytesintРазмер файла
statusstringВсегда "accepted"
messagestring"File accepted for processing"
document_idstringUUID документа для отслеживания статуса обработки

BatchUploadResponse — результат пакетной загрузки.

ПолеТипОписание
uploadedFileUploadResponse[]Успешно загруженные файлы
failedFileUploadErrorDetail[]Файлы, не прошедшие валидацию
total_acceptedintКоличество принятых файлов
total_failedintКоличество отклонённых файлов

FileUploadErrorDetail — детали ошибки загрузки.

ПолеТипОписание
filenamestringИмя отклонённого файла
errorstringОписание ошибки

4. Коды ответов

КодСитуация
200Успех
202Файл принят для обработки (upload)
204Документ успешно удалён (DELETE)
400Ошибка валидации (неподдерживаемое расширение, пустой файл, слишком большой файл, >20 файлов в batch)
404Документ не найден
409Файл с идентичным содержимым (SHA256) уже существует
422Ошибка валидации параметров запроса (FastAPI)
500Внутренняя ошибка

5. Перечисления (Enums)

ПеречислениеЗначения
DocumentStatusprocessing, success, indexed, failed, skipped
Categoryproduct, regulation, contract, finance, analytics, hr, logistics, marketing, technical, correspondence, legal, other
BrandIdohana_market, ohana_kids, all
AccessLevelstaff, manager, senior, director

Документ подготовлен: Февраль 2026 Версия: 1.0 Статус: Актуальный

Документация ADOLF Platform