Skip to content
記事一覧に戻る
AI/AGI13 min

DeepSeek でエージェントを組む: ツール呼び出し・自己反省・並列実行の実装パターン

Building Agents with DeepSeek: Tool Use, Reflection, Parallel Execution

Kenji WatanabeAI Engineer
2026-04-1513 min
DeepSeekAI AgentsTool CallingReflectionParallelism

なぜ DeepSeek でエージェントを組むのか

エージェント実装はトークン消費が大きく、Claude / GPT-4o では月額がすぐに数百万円規模になる。DeepSeek V3.2 は同程度の精度を 1/20 のコストで提供しており、社内自動化や非機密エージェントの主役として最適である。本稿では DeepSeek を中核に置いたエージェント実装の典型パターンを示す。

ツール呼び出しの基本形

```python from openai import OpenAI client = OpenAI(base_url="https://api.deepseek.com", api_key=...)

tools = [{ "type": "function", "function": { "name": "search_kb", "description": "社内ナレッジベースを検索", "parameters": { "type": "object", "properties": { "query": {"type": "string"}, "top_k": {"type": "integer", "default": 5} }, "required": ["query"] } } }]

resp = client.chat.completions.create( model="deepseek-chat", messages=[...], tools=tools, tool_choice="auto", ) ```

DeepSeek V3.2 の tool calling は OpenAI 互換だが、複雑な JSON スキーマでは時折 `description` を無視するケースがある。`description` の文末に「必ずこの順序で呼び出すこと」のような制約を追記すると改善する。

自己反省ループ

R1 系列は推論プロセスを内部で展開するため、明示的な reflection ステップは V3.2 のほうが効果が大きい。基本パターンは「計画 → 実行 → 自己評価 → 計画修正」の 4 段。各ステップは独立したメッセージとして履歴に積む。

並列ツール実行

エージェントが複数ツールを連続で呼ぶ場合、依存関係のないツール呼び出しは並列実行することでレイテンシを大きく短縮できる。LangGraph の `parallel` ノードや、独自実装でも asyncio.gather で 2-3 倍速化する。

```python import asyncio

async def run_tools(tool_calls): tasks = [run_one(tc) for tc in tool_calls] return await asyncio.gather(*tasks) ```

フォールバックと安全網

  • DeepSeek 公式 API がエラー → OpenRouter の DeepSeek 経由に自動切替(LiteLLM)
  • ツール呼び出しが 5 回連続失敗 → エージェントを停止しヒトに引き継ぎ
  • センシティブ判定 → 出力前に Llama Guard 3 でフィルタ
  • ループ検出: 同じツール呼び出しを 3 回以上繰り返したら強制終了

観測

OpenTelemetry + Langfuse で各ステップを span として可視化。トークン使用量、ツール呼び出し回数、最終的な成功フラグをタグ付けし、エージェントの「失敗パターン」をクラスタリングする。社内 R&D では失敗の 60% が「ツール選定ミス」由来で、ツール記述の改善で大半が解消した。

まとめ

DeepSeek を中核に置いたエージェントは、Claude / GPT-4o 系に対して 1 桁安いコストで動かせる代わりに、ツール呼び出しの厳密性で若干劣る。明示的なフォールバック、リトライ、ヒト介入トリガを組み込んだうえで、社内自動化の主戦力として十分実用的である。

まずは無料相談から

お客様のIT課題をお聞かせください。最適なソリューションをご提案いたします。

お問い合わせはこちら