LangChain を活用した検索拡張型(RAG)アプリケーションの実装に焦点を当て、わずか数分で安全・ローカルな個人用知識アシスタントを構築する方法を紹介します。外部サービスへの依存を排除し、文書データを自環境内に閉じたまま、大規模言語モデル(LLM)による高精度な質問応答を実現できます。
動作デモ
完成後、Gradio インターフェースから「RAG モード」のオン/オフ切り替えが可能です。有効化すると、入力クエリに基づき ChromaDB で類似文書を検索し、その内容をコンテキストとして LLM へ提示。これにより、事実誤認(ハルシネーション)を大幅に抑制できます。
実行環境
Python 3.8.5 以上を推奨(3.7 以下では LangChain の互換性問題が発生)。以下のコマンドで必要ライブラリをインストールします:
pip install gradio chromadb langchain FlagEmbedding fastapi
FlagEmbedding は BGE 系列の埋め込みモデルを提供し、torch や transformers を含む多数の依存パッケージを自動導入します。CPU 版がデフォルトですが、GPU 利用を希望する場合は、事前に CUDA 対応版 PyTorch をインストールしてから FlagEmbedding を導入してください。
知識ベースの準備
任意のテキストデータ(UTF-8 エンコーディング)を .txt 形式で保存し、ローカルディレクトリに配置します。例: /data/knowledge/faq.txt。複数ファイルもサポートされます。
埋め込みモデルの取得
BGE-large-zh(中国語最適化済み)を推奨します。Hugging Face から直接ダウンロードするには:
git lfs install
git clone https://huggingface.co/BAAI/bge-large-zh
ダウンロード完了後、パスをコード内で指定します(例:/models/bge-large-zh)。
LLM サービス連携
本実装では Xunfei Spark API(v2.0)をバックエンドとして使用します。無料で利用可能な API キーを Xunfei 公式サイト から取得し、以下の三つの認証情報が必要です:
SPARK_APP_IDSPARK_API_SECRETSPARK_API_KEY
主要ファイルのカスタマイズ
プロジェクト構成は以下の4ファイルから成ります:
spark_api.py:API 通信処理(変更不要)llm_wrapper.py:LLM 呼び出しラッパー —— 認証情報を設定prompt_engine.py:プロンプトテンプレート管理(変更不要)app_interface.py:Gradio UI エントリーポイント —— パスを修正
llm_wrapper.py の編集箇所(例:行 6–8):
from spark_api import invoke_spark_llm
SPARK_APP_ID = "your_app_id_here"
SPARK_API_SECRET = "your_api_secret_here"
SPARK_API_KEY = "your_api_key_here"
app_interface.py の編集箇所(例:行 15–16):
BGE_MODEL_DIR = "/models/bge-large-zh"
DOCUMENT_ROOT = "/data/knowledge"
起動手順
上記設定を完了後、ターミナルで以下を実行:
python app_interface.py
コンソールに Running on http://127.0.0.1:7860 などのメッセージが出力されれば起動成功です。ブラウザで該当 URL にアクセスし、UI を操作できます。