DeepSeek Agent 開発チュートリアル
ゼロからインテリジェントエージェントを構築。ReAct推論パターン、Function Callingツール呼び出し、マルチエージェント協調、メモリ管理、計画と実行を習得。完全なPythonコードですぐに使えます。
学習を始めるAIエージェントとは何か?なぜ必要か?
AIエージェントは、環境を自律的に認識し、計画を立て、ツールを呼び出し、タスクを実行できるAIシステムです。従来のチャットボットとは異なり、エージェントは質問に答えるだけでなく、能動的に考え行動し、複雑なワークフローを完了できます。
Agent 概要
AI Agent の核心理念、アーキテクチャ構成要素、および従来の Chatbot との本質的な違いを理解することは、インテリジェントな Agent を構築するための理論的基盤です。
Agent vs 従来の Chatbot
| 比較項目 | 従来の Chatbot | AI Agent |
|---|---|---|
| 対話方式 | 単一ターンの Q&A、一問一答 | 多段階の推論、タスクチェーンを自律的に実行 |
| 能力の範囲 | トレーニングデータに基づいてテキストを生成するのみ | 外部ツール、API、データベースを呼び出し可能 |
| 記憶能力 | コンテキストウィンドウ内の一時的な記憶 | 短期記憶 + 長期記憶(ベクトルストレージ) |
| タスクの複雑さ | 簡単な対話、情報検索 | 多段階タスク、ワークフローの自動化 |
| 典型的なシナリオ | カスタマーサービス Q&A、雑談、コンテンツ生成 | データ分析、自動レポート、コード実行、プロセスオーケストレーション |
Agent の4つの主要コンポーネント
| コンポーネント | 英語 | 役割 | 技術実装 |
|---|---|---|---|
| 大規模言語モデル | LLM | Agent の頭脳であり、推論と意思決定を担当 | DeepSeek-Chat / DeepSeek-Reasoner |
| ツール | Tools | Agent の手足であり、具体的な操作を実行 | Function Calling / API / コード実行エンジン |
| 記憶 | Memory | 履歴情報の保存と検索 | 会話履歴 / ベクトルデータベース / 知識グラフ |
| 計画 | Planning | タスクを分解し、実行戦略を策定 | ReAct / Plan-and-Execute / Tree-of-Thought |
Agent のワークフロー
- 知覚(Perception):ユーザー入力を受け取り、タスクの意図と目標を理解する
- 思考(Thinking):タスクを分析し、実行計画を立て、次の行動を決定する
- 行動(Action):ツールを呼び出して具体的な操作を実行する(検索、計算、API 呼び出しなど)
- 観察(Observation):ツールの実行結果を取得し、目標が達成されたか評価する
- ループ(Loop):観察結果に基づいて、実行を継続するか最終回答を出力するかを決定する
この「思考-行動-観察」ループが Agent の核となる動作パターンです。DeepSeek モデルの基礎知識については、DeepSeek モデルアーキテクチャの詳細 をご覧ください。
ReAct モード
ReAct(Reasoning + Acting)は、Agent の中核となる推論モードです。推論と行動を交互に行い、モデルが思考しながらツールを呼び出し、行動によって推論を検証します。
ReAct ループ: Thought - Action - Observation
| ステップ | 説明 | 例 |
|---|---|---|
| Thought | 現在の状態を分析し、次に何をするか決定する | "今日の天気を調べて、傘を持っていくかどうかを決める必要がある" |
| Action | 具体的なツール呼び出しを実行する | get_weather("北京") 関数を呼び出す |
| Observation | ツールの結果を取得し、タスクが完了したか評価する | "北京は今日晴れ、気温25度、傘は不要" |
DeepSeek + ReAct 完全実装
以下のコードは、DeepSeek モデルを使用して推論し、検索および計算ツールを呼び出す完全な ReAct Agent を示しています。
ReAct モードの重要ポイント
- 一度に1つのActionのみ実行し、Observationを待ってから続行する
- ThoughtとActionは厳密にフォーマットを守り、正規表現で解析しやすくする
- 無限ループを防ぐためにmax_stepsを設定し、通常5〜10ステップで十分
- ツール関数はエラーハンドリングを適切に行い、意味のある結果を返す
- DeepSeekの推論能力はReActモードに非常に適している
Function Calling ツール呼び出し
DeepSeekはネイティブのFunction Calling機能をサポートしており、モデルがツールを呼び出すタイミングを自動的に認識し、構造化された関数呼び出しパラメータを生成できます。これは手動でReAct形式を解析するよりも信頼性が高く、効率的です。
ツールスキーマの定義
OpenAI互換のFunction Calling形式でツールを定義します:
Function Calling Agent メインループ
Function Calling の利点
- モデルがツール呼び出しの必要性を自動判断し、手動でのフォーマット解析が不要
- パラメータは構造化された JSON で渡され、正規表現の解析エラーを回避
- 複数ツールの並列呼び出しをサポート(tool_choice を "auto" に設定)
- DeepSeek API は OpenAI Function Calling 形式と完全互換
- 混合使用可能:モデルは1回の応答でツール呼び出しとテキスト生成を同時に行える
LangChain Agent 統合
LangChain は、ReAct ループとツール管理をカプセル化した高レベルな Agent 抽象化を提供します。LangChain を使用することで、Agent 開発はより簡潔で保守しやすくなり、複数の Agent タイプとツールの組み合わせをサポートします。
依存関係のインストール
LangChain Agent の作成
AgentExecutorパラメータの説明
| パラメータ | 説明 | 推奨値 |
|---|---|---|
| verbose | 詳細な実行プロセスを出力するかどうか | 開発時はTrue、本番ではFalse |
| handle_parsing_errors | モデル出力の形式エラーを自動処理する | True |
| max_iterations | 無限ループを防ぐための最大反復回数 | 5-10 |
| early_stopping_method | 最大反復回数に達した後の処理方法 | "generate"(最終回答を生成) |
マルチエージェント協調
単一のエージェントの能力には限界があり、複雑なタスクには複数のエージェントが役割分担して協調する必要があります。CrewAIは現在最も人気のあるマルチエージェントフレームワークで、異なる役割のエージェントを定義し、プロセスに沿って協調してタスクを完了することができます。
CrewAIマルチエージェントアーキテクチャ
- エージェント:役割、目標、バックストーリー、利用可能なツールを定義します
- タスク:実行する具体的な作業を定義します。説明、期待される出力、割り当てられたエージェントを含みます
- クルー:複数のエージェントを組織し、順次または階層的に協調させて一連のタスクを完了します
- プロセス:タスクの実行順序を制御し、sequential(順次)とhierarchical(階層)をサポートします
CrewAI完全な例
マルチエージェント連携のベストプラクティス
- 各エージェントは明確な役割を1つだけ担当し、責任の重複を避ける
- タスクの説明は具体的にし、明確なexpected_output形式を含める
- リサーチエージェントには検索ツール、実行エージェントにはコードツールを設定できる
- 階層プロセスは複雑なプロジェクトに適しているが、追加のマネージャーエージェントが必要
- allow_delegation=Falseを設定して、エージェント間でタスクを押し付け合わないようにする
Agentメモリ管理
メモリは、Agentを通常のChatbotと区別する重要な能力です。適切なメモリ管理により、Agentは過去の会話、ユーザーの好み、長期的な知識を記憶し、よりパーソナライズされ一貫性のある対話体験を提供できます。
3種類のメモリ
| メモリタイプ | 保存方法 | ライフサイクル | 適用シナリオ |
|---|---|---|---|
| 短期メモリ | メッセージリスト(コンテキストウィンドウ) | 単一セッション | 現在の会話コンテキスト、マルチターン対話 |
| 長期メモリ | ベクトルデータベース / 知識グラフ | セッションをまたいで永続化 | ユーザーの好み、履歴知識、プロジェクト背景 |
| 作業メモリ | 構造化データストレージ | 単一タスク | タスクの中間結果、実行状態 |
短期メモリ:会話履歴管理
長期記憶:ベクトルストア実装
ハイブリッド記憶アーキテクチャ
推奨される記憶アーキテクチャの組み合わせ:
- 短期記憶: ConversationBufferWindowMemory(k=10)を使用し、最近の会話を保持
- 長期記憶: ChromaDB ベクトルストアを使用し、ユーザー設定とプロジェクト知識を保存
- 作業記憶: Python の辞書を使用し、単一タスク内で中間結果を渡す
- 記憶検索: 各会話の前に自動的に関連する長期記憶を検索し、System Prompt に注入
計画と実行
複雑なタスクの場合、Agentはまずタスクを実行可能なサブタスクに分解し、段階的に実行する必要があります。Plan-and-Executeパターンは計画と実行を分離し、Agentがより複雑なマルチステップタスクを処理できるようにします。
Plan-and-Executeパターン
- Plan(計画フェーズ):LLMがタスクを分析し、詳細な実行計画(ステップリスト)を生成します
- Execute(実行フェーズ):Agentは計画に従って段階的に実行し、各ステップの結果を観察します
- Replan(再計画):ステップが失敗した場合や結果が期待に沿わない場合、後続の計画を動的に調整します
- Finalize(完了):すべてのステップの結果を集約し、最終回答を出力します
Plan-and-Executeの完全な実装
動的プラン調整
あるステップの実行が失敗した場合、Agentに残りのステップを再計画させることができます。execute_stepが失敗を返した後、完了したステップの履歴を渡してcreate_planを呼び出し、モデルに新しい実行計画を生成させます。この適応能力は高度なAgentの特徴です。
RAG Agent
RAG Agentは、検索拡張生成(RAG)とAgentのツール呼び出し機能を組み合わせ、ナレッジベースからの情報検索と外部ツールの呼び出しの両方を可能にします。これはエンタープライズ向けAgentで最も一般的なアーキテクチャパターンです。
RAG Agentのアーキテクチャ
RAG Agentは2つの能力を統合します:
- 知識検索:ベクトルデータベースから関連ドキュメントを取得し、正確なコンテキスト情報を提供
- ツール呼び出し:外部APIの呼び出し、コード実行、データベースクエリなど
- ハイブリッド意思決定:Agentがナレッジベースを検索すべきか、ツールを呼び出すべきかを自律的に判断
RAG Agentの完全な実装
RAG Agent の意思決定フロー
| ユーザー質問タイプ | Agent の決定 | 使用ツール |
|---|---|---|
| "API の呼び出し方は?" | 知識に関する質問、ナレッジベースを検索 | ナレッジベース検索 |
| "100万トークンの費用を計算して" | まず価格を検索し、次に計算 | ナレッジベース検索 + Python実行 |
| "DeepSeek と GPT-4 の比較" | 知識に関する質問、両モデルの情報を検索 | ナレッジベース検索(複数回呼び出し) |
RAG ナレッジベース構築の詳細については、DeepSeek RAG ナレッジベース構築チュートリアル をご覧ください。
安全とガードレール
エージェントはツール呼び出し機能を持つため、危険な操作を実行する可能性があります。安全ガードレールはエージェントシステムの必須コンポーネントであり、エージェントが制御された範囲内で動作することを保証します。
エージェント安全の4層防御
| 防御層 | 役割 | 実装方法 |
|---|---|---|
| 入力検証 | 悪意のある入力をフィルタリングし、インジェクション攻撃を防ぐ | 正規表現フィルタ + コンテンツモデレーションAPI |
| ツール権限制御 | エージェントが呼び出せるツールとパラメータ範囲を制限する | ホワイトリスト + パラメータ検証 + レート制限 |
| 出力フィルタリング | 機密情報をフィルタリングし、データ漏洩を防ぐ | 正規表現によるマスキング + 不適切な言葉のフィルタリング |
| 監査ログ | すべてのエージェント操作を記録し、追跡可能性を確保する | 構造化ログ + データベース保存 |
安全ガードレールのコード実装
セキュリティのベストプラクティス
- Agentにファイルシステムやデータベースへの直接アクセス権限を与えず、制限付きAPIを使用する
- コード実行ツールはサンドボックス環境(Dockerコンテナまたは制限付きPython)を使用する
- すべての外部API呼び出しはプロキシを経由し、レートとアクセス範囲を制限する
- Agentログを定期的に監査し、異常な動作を早期に発見する
- System Promptを使用して、Agentにセキュリティ境界と禁止行為を明確に伝える
本番デプロイ
Agentを開発環境から本番環境に移行するには、完全なエンジニアリングソリューションが必要です。この章では、FastAPIを使用してAgentサービスを構築し、Dockerコンテナでデプロイし、監視とログシステムを設定する方法を紹介します。
FastAPI Agentサービス
Dockerコンテナデプロイ
監視とログ
本番環境チェックリスト
| カテゴリ | チェック項目 | ツール/ソリューション |
|---|---|---|
| セキュリティ | 入力検証、出力フィルタリング、ツール権限 | SafeAgent ラッパー |
| 監視 | リクエスト量、レイテンシ、エラー率、ツール呼び出し | Prometheus + Grafana |
| ログ | リクエストログ、ツール呼び出しログ、エラーログ | ELK / Loki / 構造化ログ |
| レート制限 | API レート制限、並行制御 | slowapi / Redis + トークンバケット |
| フォールトトレランス | リトライ機構、デグラデーション戦略、ヘルスチェック | tenacity + /health エンドポイント |
| デプロイ | コンテナ化、ローリングアップデート、自動スケーリング | Docker + K8s + HPA |
デプロイ推奨事項
小規模アプリケーションの場合、単一マシンでの Docker Compose デプロイで十分です。本番グレードのアプリケーションでは、Prometheus + Grafana による監視と ELK によるログ収集を備えた K8s クラスタデプロイを推奨します。Agent サービスはステートレスであり、水平展開が可能ですが、LLM API の並行制限に注意する必要があります。
DeepSeek Agent開発よくある質問
DeepSeek関連チュートリアル
DeepSeekモデルの使用方法、デプロイ、エコシステムツールについてさらに学びます。
DeepSeekモデルの使い方
4つの使用方法、ゼロから始める入門チュートリアル。
DeepSeek RAG知識ベース
ドキュメント読み込み、ベクトル埋め込み、検索拡張生成の完全チュートリアル。
DeepSeek LangChain開発
LangChain統合、Chain開発、ツール呼び出しの入門。
DeepSeekプロンプトエンジニアリング
System Prompt設計、few-shot、思考連鎖のテクニック。
DeepSeekエコシステムツール
WebUI、IDEプラグイン、Agentフレームワーク、RAGプラットフォーム。
DeepSeekデプロイチュートリアル
Ollama、Docker、vLLM、K8sデプロイソリューション。