RAG Pipeline 前処理 — 能力境界の説明
本ドキュメントは、RAG Pipeline 前処理システムの能力範囲、既知の制限、およびリスク閾値を参考用として定義します。
1. ファイルタイプ対応マトリクス
1.1 直接対応しているファイルタイプ
| ファイルタイプ | 拡張子 | 解析ステップ | 備考 |
|---|---|---|---|
.pdf | PDF_CONTENT_EXTRACTION / TEXTIN / AZURE_DI / ALI_OCR / LLM_CONTENT_EXTRACTION | 基本解析はテキスト型 PDF のみに適用され、スキャン文書は OCR ステップが必要 | |
| Word 文書 | .docx | DOCX_CONTENT_EXTRACTION | pypandoc により Markdown へ変換し、段落/表/埋め込み画像をサポート |
| 旧版 Word | .doc | 先に FILE_CONVERT_WITH_SPIRE または FILE_CONVERT_WITH_LIBREOFFICE で変換が必要 | 直接解析不可、必ず .docx または .pdf に変換する必要あり |
| Markdown | .md | MD_CONTENT_EXTRACTION | ネイティブ対応 |
| プレーンテキスト | .txt | TXT_CONTENT_EXTRACTION | ネイティブ対応 |
| Excel | .xlsx .xls | TABULAR_CONTENT_EXTRACTION | 行数・列数の制限あり、§2 を参照 |
| CSV / TSV | .csv .tsv | TABULAR_CONTENT_EXTRACTION | — |
| PowerPoint | .pptx .ppt | 先に FILE_CONVERT_WITH_SPIRE または FILE_CONVERT_WITH_LIBREOFFICE で変換が必要 | 直接内容抽出は不可、先に PDF へ変換する必要あり |
| 画像 | .png .jpg .jpeg .gif .webp .svg | IMAGE_CONTENT_EXTRACTION | Vision LLM(例: GPT-4o)を使用して画像内容を記述、上限 300 語 |
| 動画 | .mp4 .avi .mkv .mov | VIDEO_CONTENT_EXTRACTION | 音声トラックを抽出 → テキストへ文字起こし |
| 音声 | .mp3 .wav .flac .aac | AUDIO_CONTENT_EXTRACTION | 60 秒ごとの断片に分割して順次文字起こし |
1.2 非対応 / 明示的に禁止されているファイルタイプ
| タイプ | 説明 |
|---|---|
.exe | ハードコードされたブラックリスト(_UNSUPPORTED_EXTENSIONS) |
.zip / .rar などの圧縮ファイル | 解凍ステップがなく、Pipeline では処理しない |
.html / .xml | 専用の解析ステップなし |
.json / .yaml | 専用の解析ステップなし |
.eml / .msg メール | 非対応 |
.dwg / .dxf CAD ファイル | 非対応 |
.rtf | 専用ステップなし(LibreOffice による変換は試行可能だが保証なし) |
| 暗号化 / パスワード保護ファイル | すべての形式で暗号化ファイルは処理不可 |
2. ファイルサイズとリソース制限
2.1 事前チェック制限(file_limit_checker)
アップロード時に軽量な事前チェックが実行され、制限超過ファイルはアップロード拒否または警告付きでマークされます:
| 次元 | デフォルト閾値 | 設定可能 | 説明 |
|---|---|---|---|
| 文字数 | 15,000 文字 | ✅ FILE_LIMIT_CHECK_CONFIG 環境変数で設定 | PDF/DOCX/TXT/MD/CSV/XLSX などのテキスト系ファイルに適用 |
| ページ数 | 25 ページ | ✅ 同上 | PDF は物理ページ数、Excel は Sheet 数、PPT はスライド数で計算 |
⚠️ ナレッジベースのファイルソース一括インポートはこの事前チェック制限の対象外ですが、ファイルが大きすぎる場合は依然として OOM リスクがあります。
2.2 Pipeline 処理内のリソース閾値
| リソース次元 | 閾値 / 設定 | リスク |
|---|---|---|
| PDF 並列ページ変換 | 1 バッチあたり 50 ページ(PDFConversionDefaultOptions.CHUNK_SIZE) | 超大規模 PDF(500+ ページ)は pdf2image 変換時のメモリ使用量が高く、OOM を引き起こす可能性あり |
| 表の行数 | 1 Sheet ≤ 20,000 行 | 超過時は直接エラーとなり解析拒否 |
| 表の列数 | 1 Sheet ≤ 200 列 | 超過時は直接エラーとなり解析拒否 |
| 表の画像 | 1 ファイル ≤ 150 枚(_MAX_IMAGES) | 超過分の画像は無視 |
| ベクトル化バッチ | 1 バッチあたり 100 セグメント(batch_size) | — |
| セグメント画像密度 | 1 セグメント ≤ 5~8 枚の画像 | 超過時は token オーバーフロー回避のため早期分割を実施 |
| 音声スライス | 60 秒 / セグメント | 長時間の音声/動画では大量の文字起こし API 呼び出しが発生 |
| TextIn OCR | API レベル設定で最大 1,000 ページ | クォータ枯渇時はエラー |
2.3 OOM / リソース過負荷リスクのシナリオ
| シナリオ | リスクレベル | 原因 | 推奨 |
|---|---|---|---|
PDF > 200 ページ + pdf2image | 🔴 高 | pdf2image は 300 DPI で各ページをメモリ上の bitmap としてレンダリングし、200 ページ ≈ 数 GB のメモリ | 基本解析の代わりに OCR ステップ(TextIn/Azure DI)を使用 |
| Excel 単一 Sheet > 10,000 行 | 🟡 中 | 全量をメモリに読み込み、大量の段落を生成 | ファイルを事前分割するか worker メモリを増やす |
| 動画 > 2 時間 | 🟡 中 | ffmpeg による音声抽出 + 120 回の 60s 文字起こしリクエスト | 動画長を制限するか事前に分割 |
| 単一ファイルに 100+ 枚の埋め込み画像 | 🟡 中 | 各画像ごとに Vision LLM 呼び出しが必要で、時間とコストが高い | 重要な画像のみ抽出 |
| 1,000+ ファイルの一括インポート | 🟡 中 | Celery worker キューが滞留し、gevent の並列上限は 100 | 分割してインポートし、キュー深度を監視 |
3. ファイル解析能力のレベル分け
3.1 解析エンジン比較
| エンジン | 解析方式 | 適用シナリオ | 不適用シナリオ | 依 存関係 |
|---|---|---|---|---|
| Basic(pypdf / pdfplumber) | テキストレイヤーを直接抽出 | ネイティブテキスト PDF(Word 出力、LaTeX 生成など) | スキャン文書、画像 PDF、複雑なレイアウト | 外部依存なし |
| TextIn OCR | クラウド OCR + レイアウト解析 | スキャン文書、伝票、混在レイアウト PDF | — | TEXTIN_APP_ID / TEXTIN_APP_SECRET |
| Azure Document Intelligence | クラウド Layout/Read モデル | 表構造の保持、複数カラムレイアウト | — | azure_ocr_endpoint / azure_ocr_key |
| Ali OCR | Alibaba Cloud OCR | 中国語シナリオのスキャン文書 | — | Alibaba Cloud API 認証情報 |
| LLM 解析(PDF LLM) | ページスクリーンショット → Vision LLM 認識 | 極めて複雑な版面、図文混在 | 大容量ファイル(高コスト・低速) | Vision LLM(GPT-4o など) |
| pypandoc | Pandoc 形式変換 | DOCX → Markdown | 複雑なマクロ、ActiveX コントロール | Pandoc バイナリ |
| LibreOffice / Spire | 形式変換エンジン | .doc→.docx、.ppt→.pdf | — | LibreOffice または Spire ランタイム |