フェーズ 1: ドキュメントの取り込み (Ingestion)
ほとんどのRAGシステムは、動き出す前に失敗しています。
RAGシステムの構築は簡単だと思われがちです。ユーザーがPDFをアップロードし、埋め込み(embeddings)を作成すれば、回答が得られる、といった具合に。
それは間違いです。
アップロードボタンからベクトルデータベースに至るまで、そこには15の重要なステップが存在します。もし一つでも飛ばせば、システムは誤った回答を出したり、コストを無駄にしたりすることになります。
以下は、本番環境レベルのドキュメント取り込みのためのロードマップです:
• ファイル・ハッシュ化: ファイル名ではなく、実際のファイル内容をハッシュ化してください。これにより、誰かがファイル名を変更しても、同じファイルを二重に処理することを防げます。
• スマート・パース(解析): 用途に合わせて適切なツールを選択してください。
- シンプルなテキスト: pdf-parse (無料)
- 混合コンテンツ: Unstructured (バランス型)
- 複雑な表やレイアウト: LlamaParse (高品質)
- エンタープライズ向けフォーム: Azure Document Intelligence (スキャンに最適)
• テキスト・クリーニング: 不要な要素を削除します。ヘッダー、フッター、透かし、ページ番号などはノイズとなります。もし全ページに「機密 (Confidential)」という言葉が含まれたまま埋め込みを行うと、AIはすべての回答が機密事項であると判断してしまいます。
• メタデータ抽出: 部門、セクション、バージョンなどのコンテキストを追加します。これにより、すべてを検索することなく、システムが適切なドキュメントを見つけられるようになります。
• スマート・チャンキング: これが最も重要な部分です。
- サイズ: 1000〜1500トークンを目安にします。
- オーバーラップ: コンテキストを維持するために、200トークンのオーバーラップを使用します。
- 境界: 文章の途中で分割しないでください。
• チャンクのハッシュ化と重複排除: すべてのチャンクをハッシュ化します。ファイルが変更された際は、新しいハッシュを古いものと比較します。
• インクリメンタル(増分)取り込み: すべてを再埋め込みしないでください。1000ページのドキュメントのうち1ページだけが変わった場合、その新しいチャンクだけを埋め込みます。これにより、APIコストを大幅に節約できます。
ホビープロジェクトと本番用システムの差は、埋め込みステップの前に行う作業にあります。
未熟なシステムは毎回すべてを再埋め込みしますが、賢いシステムは変更された部分のみを処理します。
寄せ集めのスープを作るのはやめましょう。強固な基盤を築いてください。
Source: https://dev.to/surajrkhonde/phase-1-document-ingestion-the-hidden-complexity-before-embeddings-4d32
Optional learning community: https://t.me/GyaanSetuAi
