Python

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

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

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。



スポンサードリンク

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 アプリケーションへと進化する第一歩です 🚀

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Python