イスラム金融のノーハルシネーションRAG構築で学んだこと:プロンプト設計より類似度ゲートが効く

Reddit r/artificial / 2026/4/24

💬 オピニオンDeveloper Stack & InfrastructureModels & Research

要点

  • イスラム金融のような高リスク領域では、「不確かなら拒否して」といったプロンプト指示だけではノーハルシネーションは不十分で、LLMが推測してしまう点を指摘しています。
  • 実際に効いた対策として、検索時にLLM呼び出し自体を止める方式(上位チャンクのコサイン類似度が閾値未満なら固定の拒否文を返す)を紹介しています。
  • 実運用上の注意点として、FAISSをHuggingFace Spacesの無料枠に置くとコールドスタートで消えるため、インデックスを非公開のHF Datasetに保存しFastAPIのlifespanで起動時にロードする解決策を述べています。
  • さらに、スキャンPDFではPyPDF2が抽出できないため画像のAAOIFI資料では工夫が必要で、Web版があればOCRよりtrafilaturaの方が有利だとしています。加えて、各チャンクに必ず管轄(jurisdiction)メタデータを持たせることの重要性も強調しています。

ハルシネーションしないRAGを構築して学んだこと:プロンプトエンジニアリングよりも、イスラム金融の類似性ゲートが効く

これを共有しようとするとブロックされ続けてしまったので、技術面の核心からストレートに書きます。

問題:イスラム金融の判断(ファトワー/判決)は管轄(jurisdiction)によって変わり、誤答には実際の重大な結果があります。システムプロンプトで「確信がなければ拒否せよ」とLLMに伝えただけでは不十分です。それでも推測してしまいます。

実際にうまくいった修正:検索(retrieval)時にLLM呼び出し自体を完全に殺す。

上位kチャンクのスコアが0.7のコサイン類似度を下回る場合、関数はハードコードされた拒否文字列を返します。LLMはクエリを見ることがありません。巧妙なプロンプトの工夫よりも、「モデルを呼ばない」ことのほうが確実です。

他にも知っておくとよいこと:

HuggingFace Spacesの無料枠におけるFAISSは一時的です。コールドスタートのたびに消えます。解決策:インデックスをプライベートなHF Datasetにプッシュし、FastAPIのlifespanイベントで起動時に取り込む。

スキャンPDF上のPyPDF2は何も返しません。AAOIFIのドキュメントはスキャン画像です。クリーンなHTMLが存在するなら、OCRよりもtrafilaturaのほうが毎回勝ちます。

各チャンクに管轄メタデータを付けるのは任意ではありません。すべてのチャンクにsource_name + source_url + jurisdictionを入れてください。同じ質問でも、マレーシアのSC判決と湾岸のファトワーは逆のことを言い得ます。

構成:FastAPI + LlamaIndex + FAISS + sentence-transformers + HF Inference API経由のMistral-Small-3.1-24B。資格情報がブラウザに触れないように、Netlify Functionをプロキシとして使う。

高リスク領域での検索拒否(retrieval refusal)には、どんな閾値を使っていますか?

submitted by /u/Particular-Plate7051
[link] [comments]