Источники знаний
Поддерживаемые типы источников, lifecycle ingest-а, стратегии чанкинга и поведение синхронизации в модуле Knowledge.
Data source описывает, откуда берутся документы Knowledge space. Сейчас поддерживается два варианта из коробки — upload файла и URL fetch — а коннекторы (Confluence, Notion, Google Drive) — в roadmap.
Типы источников
sourceType | Статус | Что ingest-ит | Поведение синка |
|---|---|---|---|
FILE_UPLOAD | ✅ Available | PDF, DOCX, TXT, Markdown | One-shot — повторная загрузка для обновления |
URL_FETCH | ✅ Available | Одна веб-страница (HTML → text) | One-shot — re-ingest для обновления |
CONFLUENCE | ⏳ Roadmap | Страницы Confluence (per space / label) | Scheduled, инкрементальный |
NOTION | ⏳ Roadmap | Страницы и базы Notion | Scheduled, инкрементальный |
GOOGLE_DRIVE | ⏳ Roadmap | Папки Drive (docs, slides, sheets) | Scheduled, инкрементальный |
SHAREPOINT | ⏳ Roadmap | SharePoint document libraries | Scheduled, инкрементальный |
Полный enum — KnowledgeSourceType в packages/database/prisma/schema.prisma. Roadmap-значения — заглушки: нет ни DataSource-записей, ни парсеров, ни sync-воркеров.
Поддерживаемые форматы (FILE_UPLOAD)
| Формат | Статус | Заметки |
|---|---|---|
application/pdf | ✅ | Через pdf-parse в parsers.ts |
application/vnd.openxmlformats-…-document (DOCX) | ✅ | mammoth-адаптер |
text/plain (TXT) | ✅ | UTF-8 по умолчанию. Latin-1 / Windows-1251 — эвристическое декодирование. |
text/markdown | ✅ | Markdown режется chunk-aware (см. стратегии ниже). |
application/msword (legacy .doc) | ❌ | Сначала конвертируйте в DOCX. |
application/rtf | ❌ | Сначала конвертируйте в TXT / DOCX. |
| Сканированный PDF (только изображения) | ❌ | OCR — roadmap. PDF должен иметь текстовый слой. |
Лимит размера файла — из тарифа org (MAX_KNOWLEDGE_FILE_SIZE_BYTES). По умолчанию — 25 MB для платных, 5 MB для free.
Lifecycle ingest-а
DataSource ──► IngestionJob (QUEUED)
│
▼
IngestionJob (RUNNING)
│
parse + chunk + embed
│
┌───────────┴───────────┐
▼ ▼
KnowledgeDocument (graph build)
│
▼
KnowledgeChunk × N (+ embedding)
│
▼
IngestionJob (SUCCEEDED / FAILED)Каждая запись IngestionJob:
status—QUEUED → RUNNING → SUCCEEDEDилиFAILED.totalItems— оценка парсера в единицах работы (страницы / секции).processedItems,failedItems— нарастающие счётчики.errorMessage— на провал. Видно в дашборде Ingestion Jobs.
Список — knowledge.listIngestionJobs. Для диагностики смотрите inputMeta (имя файла, mime, размер).
Retry-семантика
Провалившиеся job-ы не ретраятся автоматически. Рекомендованный flow:
- Смотрим
errorMessageв дашборде. - Чиним источник (перекодируем PDF, расширяем URL, заменяем кривой DOCX) или окружение (квота LLM исчерпана).
- Повторно запускаем — переуплоадом или повторным
ingestFile/ingestUrl. Создаётся новаяIngestionJob, существующийDataSourceпереиспользуется.
Re-ingest заменяет предыдущий KnowledgeDocument по ключу (knowledgeSpaceId, externalId) и пересоздаёт чанки + эмбеддинги. Старые чанки удаляются каскадом по documentId.
Стратегии чанкинга
Реализация — packages/api/modules/knowledge/lib/chunking.ts. Стратегия определяет, как распарсенный текст режется перед эмбеддингом:
| Strategy | Когда | Как режет |
|---|---|---|
fixed | По умолчанию. Смешанные форматы. | Фиксированное число слов на чанк с настраиваемым overlap. |
semantic | Длинная проза, статьи. | Разрезает по абзацам/предложениям; fallback на fixed при слишком длинном. |
markdown | Markdown / Confluence-стиль. | Режет по уровням заголовков; старается держать секцию целой. |
code | Документация по коду, API-референсы. | Режет по границам функций/классов; знает про тройные fenced-блоки. |
Параметризуется per call (или per space, Beta):
{
strategy: "semantic",
chunkSize: 350, // целевое число слов
minChunkSize: 60, // слить меньше этого
maxChunkSize: 600,
overlap: 50, // overlapping слов между соседями
}Правило: 250–400 слов на чанк, 30–50 слов overlap — покрывает большинство прозы. Большие чанки — меньше retrieval-ов, но слабее сигнал; маленькие — лучше relevance, но дороже эмбеддинги.
Эмбеддинги
Каждый embedding — Json массив floats размером под выбранную модель:
| Модель | num_dim | Статус |
|---|---|---|
text-embedding-3-small | 1536 | ✅ Default |
text-embedding-3-large | 3072 | 🟡 Beta — per-space выбор |
| Локальный hashing fallback | 128 | ✅ Available — без API-ключа (только dev) |
KnowledgeSpace.ragConfig.embeddingModel переопределяет дефолт per space. Локальный 128-dim fallback (embedTextLocally в chunking.ts) — только dev: бесполезен для retrieval-а, до продакшена настройте реальную модель.
Смена модели эмбеддингов инвалидирует все существующие эмбеддинги чанков. После смены — full re-ingest каждого источника в space.
Ingest файла
const job = await orpc.knowledge.ingestFile.call({
spaceId: "ks_…",
fileName: "handbook.pdf",
mimeType: "application/pdf",
bytes: pdfArrayBuffer,
});
// → { ingestionJobId, dataSourceId }Опрос — knowledge.listIngestionJobs, либо SSE в дашборде.
Ingest URL
await orpc.knowledge.ingestUrl.call({
spaceId: "ks_…",
url: "https://example.com/docs/payments",
cssSelector: "main article", // опционально — сузить экстракцию
});Только публичные HTML-URL — без JS-исполнения, без auth-хедеров, без SPA-render-а. Страницы за логином — roadmap (коннекторы).
Удаление source-ов и файлов
| Действие | API | Эффект |
|---|---|---|
| Удалить один файл/документ | knowledge.deleteFile({ documentId }) | Каскад по KnowledgeChunk. |
| Удалить data source | knowledge.deleteSource({ dataSourceId }) | Каскад по всем KnowledgeDocument и чанкам под ним. |
| Удалить space | knowledge.deleteSpace({ spaceId }) | Каскад по всем sources, документам, чанкам, graph node/edge. |
Каскады — на уровне Postgres FK (onDelete: Cascade в schema.prisma). Удаление durable и необратимое. Подтверждайте в UI.
Квоты
Per-org квоты — из entitlements:
| Квота | Поле плана |
|---|---|
| Max spaces per org | entitlements.knowledge.maxSpaces |
| Max documents per space | entitlements.knowledge.maxDocsPerSpace |
| Max bytes per file | entitlements.knowledge.maxBytesPerFile |
| Месячный бюджет эмбеддингов | entitlements.knowledge.monthlyEmbeddingKopecks |
Исчерпание квоты → 402 Payment Required и активити-эвент quota_warning при 80% месячного бюджета.
Связанные страницы
- Обзор Knowledge RAG
- Evaluation — измерение качества
- GraphRAG entity model — что пишет
buildGraphFromChunks - Plans and limits
- Knowledge module & admin
Обзор Knowledge RAG
Retrieval-augmented Q&A по вашим документам — загруженным файлам, URL, внутренним базам знаний. Как связаны spaces, sources, ingestion jobs и эндпоинт ask.
Оценка качества Knowledge RAG
Прагматичный воркфлоу для измерения и улучшения качества ответов — retrieval, faithfulness, coverage — без исследовательской лаборатории.