Skip to content

Latest commit

 

History

History
108 lines (77 loc) · 6.3 KB

File metadata and controls

108 lines (77 loc) · 6.3 KB

LangChain-Tutorialプロジェクト

本ドキュメントは、LangChainフレームワークを用いたLLMアプリケーション開発の学習リポジトリ「langchain_tutorial」の仕様書、設計書、および開発工程をまとめた技術文書である。基礎から応用(RAG、エージェント)までを体系的にカバーする。

1. 仕様書(要件定義)

1.1 プロジェクト概要

本プロジェクトは、Large Language Model (LLM) を活用したアプリケーション開発のための「LangChain」フレームワークを習得することを目的とする。チャットモデルの基本操作から、独自のドキュメントを参照するRAG (Retrieval Augmented Generation)、および自律的にツールを選択して動作するエージェントの構築までを段階的に学習できる環境を提供する。

1.2 機能要件

  • マルチプロバイダ対応:OpenAI, Google, Anthropic, およびローカル実行のOllamaを環境変数で容易に切り替え可能。
  • RAG (検索拡張生成):テキストおよびPDFファイルに基づく知識ベースの構築。
  • 高度なPDF解析:Unstructuredを用いたテーブル抽出やレイアウト解析、およびTesseract OCRによる画像化されたPDFの読み取り。
  • エージェントとツール:ReActプロンプティングを用いた自律型エージェントの実装と、Tavily等の検索ツールの統合。
  • ベクトルストア管理:ChromaDB等を使用したドキュメントベクトルの永続化と検索。
  • プロダクション対応:デプロイ時のネットワーク待機時間を削減するためのモデル事前ダウンロード機能。

1.3 非機能要件

  • オフライン対応:事前ダウンロードスクリプトにより、オフライン環境でも埋め込みモデル等が動作すること。
  • 堅牢なエラー処理:PDFローダーのフォールバックロジック(Unstructured失敗時にPyPDFを使用)の実装。
  • ポータビリティ:Dockerによる一貫した実行環境の提供。
  • ドキュメント性:各ディレクトリにおける詳細なREADMEとインラインコメントによる学習効率の向上。

1.4 想定ユーザー

  • LangChainを初めて学ぶAIエンジニア
  • LLMアプリケーションを試作・プロダクション導入したい開発者
  • ローカルLLM (Ollama) を活用したセキュアなRAG環境を構築したい組織

2. 設計書

2.1 アーキテクチャ設計

本プロジェクトは、学習ステップに合わせて以下の5つのモジュールで構成される:

  1. Chat Models:LLMとの基本的な対話インターフェース。
  2. Prompt Templates:再利用可能なプロンプトの管理。
  3. Chains:複数の処理を連結するLCEL (LangChain Expression Language) の活用。
  4. RAG:外部データ連携による知識拡張。
  5. Agents & Tools:動的な推論とツール実行。

2.2 ディレクトリ構造

langchain_tutorial/
├── 1_chat_models/      # チャットモデルの基礎例
├── 2_prompt_templates/ # プロンプト設計の例
├── 3_chains/           # Runnableなチェーンの構成
├── 4_rag/              # ドキュメント読み込みとベクトル検索
├── 5_agents_tools/     # エージェントの実装(高度なRAG含む)
├── scripts/            # モデルセットアップ用ユーティリティ
└── pdfs/               # 解析対象のドキュメント配置

2.3 データおよび埋め込み設計

  • ドキュメントモデル: LangChain Document クラスを使用。
    • page_content: 抽出されたテキスト内容。
    • metadata: source (ファイルパス), page (ページ番号), content_type 等の属性。
  • 埋め込みモデル (Embeddings):
    • BAAI/bge-large-en-v1.5: 高精度な検索を実現する HuggingFace モデル。
    • ローカルキャッシュによるオフライン動作をサポート。
  • ベクトルストア: ChromaDB を採用。
    • ドキュメントのベクトル表現とメタデータを永続化。

2.4 エージェント・ツール設計

  • エージェント構成: ReAct (Reasoning and Acting) ロジックに基づき、ユーザーの質問を分析して適切なツールを選択。
  • 利用ツール:
    • Tavily Search: 最新の情報を取得するためのウェブ検索ツール。
    • PDF Retriever: 自社ドキュメントや特定のPDFから回答を生成するRAGツール。
    • Custom Python Tools: 必要に応じて計算やデータ処理を行うカスタムツール。

3. 開発工程まとめ(要件定義 → 設計 → 実装 → テスト → 運用)

3.1 要件定義工程

  • LLMプロバイダ(OpenAI, Ollama等)の柔軟な切り替え要件の策定。
  • RAG(検索拡張生成)におけるPDF解析精度(テーブル抽出、OCR)の定義。
  • エージェントが自律的に判断・実行できるタスク範囲の特定。

3.2 設計工程

  • LCEL (LangChain Expression Language) を用いたチェーン・パイプラインの設計。
  • ベクトルストアのディレクトリ構造とメタデータフィルタリング戦略の策定。
  • 依存モデルの事前ダウンロードおよび Docker コンテナ化の設計。

3.3 実装工程

  • 各学習ステップごとのスクリプト実装(1_chat_models ~ 5_agents_tools)。
  • UnstructuredPDFLoaderPyPDFLoader による堅牢なPDF読み込み処理の実装。
  • setup_models.py によるモデルデプロイ自動化の実装。
  • .env による環境変数管理の統合。

3.4 テスト工程

  • rag_pdf_advanced.py 等によるドキュメント検索精度の検証。
  • エージェントの推論ログ(Verboseモード)による思考プロセスの妥当性確認。
  • 各LLMプロバイダ間での互換性テスト。

3.5 運用工程

  • scripts/setup_models.py を活用したプロダクション/オフライン環境への配備。
  • Dockerによる一貫したアプリケーション実行環境の維持。
  • CHANGELOG_IMPROVEMENTS.md に基づく継続的な機能改善とリファクタリング。