DeepSeek + LangChain 開発チュートリアル
LangChain は LLM アプリケーションを構築するための最も人気のあるフレームワークです。このチュートリアルでは、ゼロから始めて、DeepSeek モデル + LangChain を使って完全な AI アプリケーションを構築する方法を学びます。
学習を始めるなぜ DeepSeek + LangChain なのか?
DeepSeek は非常に高い性能と低価格の API サービスを提供し、LangChain は成熟した LLM アプリケーション開発フレームワークを提供します。この2つを組み合わせることで、AI アプリケーション開発がシンプルかつ効率的になります。
環境準備
コーディングを始める前に、Python 開発環境と必要な依存パッケージを準備する必要があります。
1.1 Python のインストール
システムに Python 3.9 以上がインストールされていることを確認してください。パフォーマンス向上のため、Python 3.11+ を推奨します。
1.2 仮想環境の作成(推奨)
仮想環境を使用すると、プロジェクトの依存関係を分離し、他のプロジェクトとの競合を防ぐことができます。
1.3 LangChain と依存パッケージのインストール
1.4 DeepSeek API キーの取得
platform.deepseek.com にアクセスし、登録・ログイン後、「API Keys」ページでキーを作成します。API キーは環境変数として設定することをお勧めします:
セキュリティに関する注意
API キーをコードにハードコードしないでください。環境変数または .env ファイルを使用して機密情報を管理してください。.env ファイルを .gitignore に追加してください。
基本呼び出し — LangChain で DeepSeek を呼び出す
LangChain は ChatOpenAI クラスを通じて OpenAI 形式の API と互換性があります。base_url と model パラメータを変更するだけで DeepSeek に接続できます。
2.1 最も簡単な呼び出し
2.2 ストリーミング出力
ストリーミング出力により、AI がタイピングのように一文字ずつ返答でき、ユーザー体験が向上します。
2.3 DeepSeek R1 推論モデルの使用
DeepSeek R1 は推論強化モデルで、数学、論理、プログラミングなどの複雑なタスクで優れた性能を発揮します。呼び出し方法は V3 と完全に同じで、モデル名を変更するだけです。
モデル選択の推奨
- deepseek-chat (V3): 日常会話、コンテンツ作成、翻訳、一般的なコード生成に最適で、コストパフォーマンスが最も高い
- deepseek-reasoner (R1): 数学的推論、複雑な論理分析、アルゴリズム設計、科学研究に最適
Chain チェーン呼び出し
Chain は LangChain の核となる抽象化です。複数のコンポーネントを連結して、再利用可能な処理フローを形成します。単純な LLMChain から複雑な SequentialChain まで、段階的に AI ワークフローを構築します。
3.1 LLMChain — 最も単純なチェーン
LLMChain は PromptTemplate と LLM を組み合わせた、最も基本的なチェーン呼び出しパターンです。
3.2 SequentialChain — 複数のチェーンを順次実行
SequentialChain は複数のステップを連結し、前のステップの出力を次のステップの入力として使用します。
3.3 LCEL(LangChain 式言語)の使用
LCEL は LangChain が推奨するチェーン構築方法で、パイプ演算子 | を使用してコンポーネントを組み合わせ、コードをより簡潔で読みやすくします。
ConversationChain 対話メモリ
メモリは対話システムの中核です。LangChain は多様なメモリコンポーネントを提供し、DeepSeek が文脈を記憶し、自然なマルチターン対話を実現できるようにします。
4.1 ConversationBufferMemory — 完全メモリ
すべての会話履歴を保持します。短い会話に適しています。会話が長くなるとトークン消費が増加します。
4.2 ConversationBufferWindowMemory — スライディングウィンドウメモリ
直近の K ターンのみを保持し、トークン消費の増大を防ぎます。長い会話に適しています。
4.3 ConversationSummaryMemory — 要約メモリ
LLM を使用して過去の会話を自動的に要約し、重要な情報を保持しながらトークン消費を抑えます。
4.4 RunnableWithMessageHistory の使用(推奨)
LangChain の新しいバージョンでは RunnableWithMessageHistory の使用を推奨しており、より柔軟で制御しやすくなっています。
メモリコンポーネントの選択推奨
- 短い会話(<10 ターン):ConversationBufferMemory、全コンテキストを保持
- 長い会話(>10 ターン):ConversationBufferWindowMemory または ConversationSummaryMemory
- 本番環境:RunnableWithMessageHistory を推奨、Redis などの外部ストレージと組み合わせる
Agent ツール呼び出し
Agent は LangChain の最も強力な機能の1つです。LLM が自律的に意思決定し、外部ツールを選択して呼び出し、複雑なタスクを完了できるようにします。
5.1 カスタムツール — 計算機
@tool デコレータを使用してカスタムツールを定義し、Agent が必要に応じて呼び出せるようにします。
5.2 ウェブ検索ツール
Tavily Search API を統合し、エージェントが最新情報をリアルタイムにインターネット検索できるようにします。
エージェント開発の注意点
- temperature を 0 に設定:エージェントは決定論的な出力を必要とし、ランダム性によるツール呼び出しの失敗を避けます。
- ツールの説明を明確に:docstring 内の説明は、エージェントがツールを正しく呼び出すかに直接影響します。
- 安全第一:eval() はデモ専用です。本番環境では安全な式パーサーを使用してください。
- langgraph を使用:LangGraph は LangChain 推奨のエージェントフレームワークで、旧来の AgentExecutor よりも安定しています。
RAG 検索拡張生成
RAG(Retrieval-Augmented Generation)により、DeepSeek はあなたのプライベートドキュメントに基づいて質問に回答できます。これはエンタープライズ知識ベースのQ&Aシステムを構築するための核となる技術です。
6.1 完全なRAGフロー
ドキュメントのロードからベクトルストア、検索ベースのQ&Aまで、完全なRAG実装プロセス。
6.2 ローカル埋め込みモデルの使用
OpenAI Embedding APIに依存したくない場合は、ローカルモデルを使用できます。
RAG最適化のヒント
- chunk_sizeの調整:小さすぎるとコンテキストが失われ、大きすぎると検索精度が低下します。中国語ドキュメントでは300〜800文字が推奨されます。
- ハイブリッド検索:キーワード検索(BM25)とベクトル検索を組み合わせて再現率を向上させます。
- 再ランキング:検索後にCross-Encoderを使用して結果を再ランキングします。
- 引用の追跡:プロンプトでモデルに具体的なドキュメント断片を引用させ、信頼性を高めます。
Ollamaローカルモデルとの統合
OllamaでDeepSeekモデルをローカル実行する場合、LangChainはシームレスな統合を提供します。データは完全にローカルで処理され、プライバシーとセキュリティが保証されます。
7.1 ChatOllamaを使用したローカルモデルへの接続
7.2 ローカルOllama + RAG
ローカルOllamaモデルとRAGワークフローを組み合わせて、完全にローカルな知識ベースQ&Aシステムを構築します。
ローカルデプロイの注意点
- Ollamaサービスが実行中:Ollamaがバックグラウンドで実行され、デフォルトでlocalhost:11434をリッスンしていることを確認してください
- モデルがダウンロード済み:
ollama listを使用してモデルが存在することを確認してください - Embeddingモデル:ローカルRAGには、nomic-embed-textやbge-m3などの別のEmbeddingモデルが必要です
- パフォーマンスはハードウェアに依存:8BモデルはコンシューマーGPUで良好に動作しますが、CPU推論は遅くなります
完全なプロジェクト例 — インテリジェントカスタマーサービスボット
これまで学んだすべての知識を統合して、完全なインテリジェントカスタマーサービスボットを構築します。会話メモリ、ナレッジベース検索、ツール呼び出し、ストリーミング出力機能を備えています。
8.1 プロジェクト構造
8.2 config.py — 設定ファイル
8.3 tools.py — カスタムツール
8.4 knowledge.py — ナレッジベース管理
8.5 chatbot.py — コアチャットロジック
8.6 main.py — メインエントリ
8.7 プロジェクトの実行
DeepSeek のその他のチュートリアル
DeepSeek の使用方法、デプロイ、モデル知識をさらに探求します。