Python

Pythonで始めるLangChain入門 – PDF・Markdown・Notion連携とFAISS/Chroma活用

ⓘ本ページはプロモーションが含まれています


スポンサードリンク

1. はじめに

LLM(大規模言語モデル)を自社アプリやデータ分析ツールに組み込みたいとき、「Python + LangChain」 が最も手軽です。本稿では以下の流れで解説します。

  1. 開発環境の構築方法(Python バージョン・仮想環境・パッケージインストール)
  2. API キーや環境変数の安全な管理方法
  3. 基本的なチェーン (LLMChainConversationalRetrievalChain) の実装例
  4. PDF / Markdown / Notion ローダーとベクトルストア (FAISS・Chroma) を組み合わせた RAG パイプライン
  5. 完全動作するミニプロジェクトのコードとデバッグ手法

この記事を読み終えると、「PDF だけで質問応答できるアプリ」 がローカル環境で動かせます。


2. LangChain の位置付け

機能説明
Chainプロンプト生成 → LLM 呼び出し → 結果加工 を一連のオブジェクトとして定義でき、コードの再利用性が高まります。
Agent外部ツール(検索 API、データベース等)を動的に呼び出すロジックをシンプルに記述できます。
エコシステムPDFLoader・FAISS・Chroma など多数のプラグインが公式で提供されており、RAG(Retrieval‑Augmented Generation)構築が数行で完結します。

LangChain は「LLM アプリの土台」を提供し、ビジネスロジックに集中できる実務向けフレームワークです。


3. 開発環境のセットアップ

3.1 Python バージョンと仮想環境

推奨理由
Python 3.10 以上(3.11 が最も安定)LangChain 本体・FAISS・Chroma が公式にサポートしている範囲です。
venv または conda の仮想環境プロジェクトごとの依存関係を分離でき、CI/CD でも再現性が保てます。

venv の作成例

3.2 必要パッケージとバージョン指定

2024 年時点で推奨されるインストールコマンドは次の通りです。langchain-community はローダー系機能を提供する別パッケージなので明示的に入れます。

基本パッケージ + すべての公式プラグイン

OpenAI ライブラリは別パッケージとして提供

ポイント
- requirements.txt に上記行を書き出しておくと、チーム開発や CI が楽になります。
- GPU 環境で高速検索をしたい場合は faiss-gpu に置き換えてください。

requirements.txt の例

langchain[all]==0.2.*
langchain-community==0.2.*
langchain-openai==0.2.*
faiss-cpu==1.8.0
chromadb==0.5.*
python-dotenv==1.0.*
loguru==0.7.*

3.3 環境変数の管理

API キーはコードに直書きせず .env に保存し、.gitignore で除外します。Notion 用トークン名は NOTION_TOKEN と統一しました。

.env.example

.gitignore に追加すべき行

gitignore
.env
__pycache__/
.venv/

Python 側での読み込みは次のようにします。


4. 基本的なチェーン構築例

4.1 LLMChain(シンプルな要約)

langchain-openai が提供する OpenAI クラスを使用します。インポートパスは langchain.llms ではなく langchain_openai に変更しました。

プロンプトテンプレート(日本語だけで可読性を保ちます)

実行例

4.2 ConversationalRetrievalChain(対話型検索)

会話履歴とベクトル検索を組み合わせたチェーンです。FAISS インデックスは事前に作成しておく想定です。

実行例


5. データローダーとベクトルストアで RAG パイプラインを作る

5.1 ローダーの統一インタフェース

ローダー用途インポート
PDFLoaderPDF ファイルからテキスト抽出from langchain_community.document_loaders import PDFLoader
MarkdownLoaderMarkdown ファイルを読み込みfrom langchain_community.document_loaders import UnstructuredMarkdownLoader(内部は UnstructuredFileIOLoader
NotionDBLoaderNotion データベースのページ取得from langchain_community.document_loaders import NotionDBLoader

ローダー使用例

注意点
- UnstructuredMarkdownLoader は内部で unstructured ライブラリを利用します。インストールが必要な場合は pip install "unstructured[md]" を追加してください。

5.2 ベクトルインデックスの作成

5.2.1 FAISS(オンプレミス向け高速検索)

5.2.2 Chroma(ローカル永続化が簡単)

persist_directory に自動で保存され、次回ロード時は同名ディレクトリを指定すれば OK

5.2.3 パラメータ調整の目安

パラメータ推奨設定
k(上位取得件数)4〜8
score_threshold(FAISS のみ)0.7 以上で高信頼性
distance_metric"cosine" が直感的

6. 完全動作ミニプロジェクト

以下のファイル一式で PDF → RAG QA が実行できます。コードは日本語コメントのみで統一し、可読性を高めました。

6‑1 requirements.txt

text
langchain[all]==0.2.*
langchain-community==0.2.*
langchain-openai==0.2.*
faiss-cpu==1.8.0
chromadb==0.5.*
python-dotenv==1.0.*
loguru==0.7.*

6‑2 .env.example(先ほどと同様)

dotenv
OPENAI_API_KEY=sk-XXXXXXXXXXXXXXXXXXXXXXXX
ANTHROPIC_API_KEY=claude-xxxxxxxxxxxxxxxxxxxx # 任意
NOTION_TOKEN=secret_yyyyyyyyyyyyyyyyyyyyyyyy # Notion を使う場合のみ

6‑3 run_qa.py

実行手順

6‑4 デバッグ・ロギングのポイント

シーン推奨ロガーメッセージ
ローダーが失敗したときlogger.error("PDF のロードに失敗しました: {e}")
インデックス作成が遅いlogger.info(f"Embedding に要した時間: {elapsed:.2f}s")
LLM 呼び出しでタイムアウトlogger.warning("OpenAI API が応答しません。リトライを検討してください")

loguru の利点はシンプルな設定だけで日時・レベルが自動付与され、開発中の情報取得が容易になることです。


7. 次に挑戦したいテーマ

  • CI/CD での API キー管理
    GitHub Actions の secretsOPENAI_API_KEY 等を登録し、デプロイ時に自動ロードする。

  • マルチソース RAG
    NotionLoader と WebScraper(langchain_community.document_loaders.WebBaseLoader)を追加し、検索対象を増やす。

  • エージェント化
    Tool インタフェースで SerpAPI や Wikipedia API を組み込み、ユーザーの質問に対して外部情報も取得できるようにする。

  • 評価指標とトラッキング
    LangSmith(LangChain の公式 MLOps ツール)を導入し、質問ごとの正答率やトークン使用量を可視化する。


8. まとめ

  1. 環境構築は Python 3.10+ + venv/conda が基本。langchain[all]langchain-community、そして langchain-openai をインストールすれば最新機能が揃います。
  2. API キーは .env に保存し、環境変数名は統一(NOTION_TOKEN して安全に扱いましょう。
  3. LLMChain と ConversationalRetrievalChain を使えば、シンプルな要約から対話型検索まで幅広く実装できます。インポートパスは最新版に合わせて langchain_openai 系を利用してください。
  4. PDF・Markdown・Notion のローダーと RecursiveCharacterTextSplitter でテキストを統一フォーマットに変換し、FAISS または Chroma に埋め込むだけで RAG パイプラインが完成します。
  5. 本稿のミニプロジェクト run_qa.py をローカルで走らせれば、すぐに「PDF への質問応答」体験ができます。その先はデータソース拡張やエージェント化、評価可視化です。

さあ、手元の PDF で QA ボットを動かし、LangChain の実力を体感してください。あなたのプロジェクトが次世代 AI アプリケーションへと進化する第一歩です 🚀

スポンサードリンク

-Python
-, , , , , , , , ,