ハルシネーションしない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)には、どんな閾値を使っていますか?
[link] [comments]


