Задача: Необходимо разработать сервис-чанкер для RAG-пайплайна. Текст документа
перед эмбеддингом нужно разбить на чанки, которые укладываются в лимит токенов
эмбеддер-модели. Реализуйте endpoint POST /chunk-document.
Нужно написать FastAPI-приложение с одним endpoint, который принимает текст
документа и лимит, а возвращает список чанков с количеством токенов в каждом.
Входные данные
{
"text": "ИПР — индивидуальный план развития.\n\nОн содержит цели, сроки и показатели.\n\nВ конце — короткий итог.",
"max_chunk_tokens": 12
}
Выходные данные
{
"chunks": [
{"index": 0, "text": "ИПР — индивидуальный план развития. Он содержит цели, сроки и показатели.", "tokens": 11},
{"index": 1, "text": "В конце — короткий итог.", "tokens": 5}
],
"total_chunks": 2
}
Правила алгоритма:
\n\n
(эквивалентно regex \n\s*\n — строка с одними пробелами/табами между
абзацами тоже считается разделителем).
Пример: "Первый абзац.\n\nВторой абзац." → абзацы "Первый абзац." и
"Второй абзац.".\s+ (в Python —
str.split() без аргументов).
Пример: абзац "Один два\tтри\nчетыре" при лимите 2 → единицы
"Один", "два", "три", "четыре".\t, \n, двойные и множественные
пробелы схлопываются в один пробел.
Пример: "a\t\tb\n c" → слова a, b, c.max_chunk_tokens < 1 → ошибка 422 (валидация Pydantic).Можно использовать tiktoken, либо для простоты len(text.split()). Главное — алгоритм.