本ドキュメントは、LangChainフレームワークを用いたLLMアプリケーション開発の学習リポジトリ「langchain_tutorial」の仕様書、設計書、および開発工程をまとめた技術文書である。基礎から応用(RAG、エージェント)までを体系的にカバーする。
本プロジェクトは、Large Language Model (LLM) を活用したアプリケーション開発のための「LangChain」フレームワークを習得することを目的とする。チャットモデルの基本操作から、独自のドキュメントを参照するRAG (Retrieval Augmented Generation)、および自律的にツールを選択して動作するエージェントの構築までを段階的に学習できる環境を提供する。
- マルチプロバイダ対応:OpenAI, Google, Anthropic, およびローカル実行のOllamaを環境変数で容易に切り替え可能。
- RAG (検索拡張生成):テキストおよびPDFファイルに基づく知識ベースの構築。
- 高度なPDF解析:Unstructuredを用いたテーブル抽出やレイアウト解析、およびTesseract OCRによる画像化されたPDFの読み取り。
- エージェントとツール:ReActプロンプティングを用いた自律型エージェントの実装と、Tavily等の検索ツールの統合。
- ベクトルストア管理:ChromaDB等を使用したドキュメントベクトルの永続化と検索。
- プロダクション対応:デプロイ時のネットワーク待機時間を削減するためのモデル事前ダウンロード機能。
- オフライン対応:事前ダウンロードスクリプトにより、オフライン環境でも埋め込みモデル等が動作すること。
- 堅牢なエラー処理:PDFローダーのフォールバックロジック(Unstructured失敗時にPyPDFを使用)の実装。
- ポータビリティ:Dockerによる一貫した実行環境の提供。
- ドキュメント性:各ディレクトリにおける詳細なREADMEとインラインコメントによる学習効率の向上。
- LangChainを初めて学ぶAIエンジニア
- LLMアプリケーションを試作・プロダクション導入したい開発者
- ローカルLLM (Ollama) を活用したセキュアなRAG環境を構築したい組織
本プロジェクトは、学習ステップに合わせて以下の5つのモジュールで構成される:
- Chat Models:LLMとの基本的な対話インターフェース。
- Prompt Templates:再利用可能なプロンプトの管理。
- Chains:複数の処理を連結するLCEL (LangChain Expression Language) の活用。
- RAG:外部データ連携による知識拡張。
- Agents & Tools:動的な推論とツール実行。
langchain_tutorial/
├── 1_chat_models/ # チャットモデルの基礎例
├── 2_prompt_templates/ # プロンプト設計の例
├── 3_chains/ # Runnableなチェーンの構成
├── 4_rag/ # ドキュメント読み込みとベクトル検索
├── 5_agents_tools/ # エージェントの実装(高度なRAG含む)
├── scripts/ # モデルセットアップ用ユーティリティ
└── pdfs/ # 解析対象のドキュメント配置
- ドキュメントモデル: LangChain
Documentクラスを使用。page_content: 抽出されたテキスト内容。metadata:source(ファイルパス),page(ページ番号),content_type等の属性。
- 埋め込みモデル (Embeddings):
BAAI/bge-large-en-v1.5: 高精度な検索を実現する HuggingFace モデル。- ローカルキャッシュによるオフライン動作をサポート。
- ベクトルストア: ChromaDB を採用。
- ドキュメントのベクトル表現とメタデータを永続化。
- エージェント構成:
ReAct(Reasoning and Acting) ロジックに基づき、ユーザーの質問を分析して適切なツールを選択。 - 利用ツール:
Tavily Search: 最新の情報を取得するためのウェブ検索ツール。PDF Retriever: 自社ドキュメントや特定のPDFから回答を生成するRAGツール。Custom Python Tools: 必要に応じて計算やデータ処理を行うカスタムツール。
- LLMプロバイダ(OpenAI, Ollama等)の柔軟な切り替え要件の策定。
- RAG(検索拡張生成)におけるPDF解析精度(テーブル抽出、OCR)の定義。
- エージェントが自律的に判断・実行できるタスク範囲の特定。
- LCEL (LangChain Expression Language) を用いたチェーン・パイプラインの設計。
- ベクトルストアのディレクトリ構造とメタデータフィルタリング戦略の策定。
- 依存モデルの事前ダウンロードおよび Docker コンテナ化の設計。
- 各学習ステップごとのスクリプト実装(1_chat_models ~ 5_agents_tools)。
UnstructuredPDFLoaderとPyPDFLoaderによる堅牢なPDF読み込み処理の実装。setup_models.pyによるモデルデプロイ自動化の実装。.envによる環境変数管理の統合。
rag_pdf_advanced.py等によるドキュメント検索精度の検証。- エージェントの推論ログ(Verboseモード)による思考プロセスの妥当性確認。
- 各LLMプロバイダ間での互換性テスト。
scripts/setup_models.pyを活用したプロダクション/オフライン環境への配備。- Dockerによる一貫したアプリケーション実行環境の維持。
CHANGELOG_IMPROVEMENTS.mdに基づく継続的な機能改善とリファクタリング。