Skip to content

File extractors (AI)

Реестр: ai.fileExtractors (target ai).

Экстракторы извлекают текст из файлов проекта перед RAG-индексацией. Регистрация через extension SDK — по аналогии с ai.artifactTypes.

Контракт

ts
import type { FileTextExtractor } from '@artiroute/extension-sdk';

const pdfExtractor: FileTextExtractor = {
  extensions: ['.pdf'],
  priority: 10,
  async extract(buffer, { originalName }) {
    // … вернуть plain text / markdown
    return '…';
  },
};

Регистрация в extension

ts
import { getExtensionRegistry } from '@artiroute/extension-sdk';
import type { FileTextExtractor } from '@artiroute/extension-sdk';

getExtensionRegistry<FileTextExtractor>('ai.fileExtractors').register(
  'my-pdf',
  pdfExtractor,
  50,
);

В extension.manifest.mjs:

js
contributes: {
  extendsRegistries: [
    { registryId: 'ai.fileExtractors', keys: ['my-pdf'] },
  ],
},

Поведение индексации

  1. При upload non-asset файла (не аудио) → задача rag_sync_file.
  2. AI-сервис ищет экстрактор по расширению originalName.
  3. Есть экстрактор и текст извлечён → полная индексация (kind: file.md, file.docx, …).
  4. Нет экстрактора или ошибка → индексация только метаданных (kind: file:unreadable): имя файла, fileId, служебный текст для FTS.
  5. Полная переиндексация проекта (rag_reindex_project) обрабатывает артефакты и файлы.

Core-экстракторы (txt, md, office, xlsx) встроены в ai-agent-service и регистрируются при старте. Extension-экстракторы с большим priority перекрывают core для того же расширения.

AI / чат

  • Каталог файлов в system prompt чата с флагом readable: true | false.
  • readable: false — ИИ может ссылаться на файл, но не должен выдумывать содержимое.
  • searchKnowledge помечает unreadable-чанки в snippet.

Ограничения

  • Аудио не индексируется в RAG.
  • virtualPath не используется в индексе.
  • Editor assets (asset: true) не индексируются.

AI workspace для командных материалов и знаний