第6章 AIエージェント概論
更新日:2025年12月16日
1. エージェントとは
AIエージェントは、与えられた目標を達成するために、環境を認識し、判断を下し、行動を実行する自律的なシステムである。単純なAPI呼び出しやRAGとは異なり、エージェントは複数のステップを動的に計画・実行し、フィードバックに基づいて行動を調整する能力を持つ。
1.1 定義と歴史
エージェントの概念は、人工知能研究の初期から存在していた。1990年代には、ルールベースのエキスパートシステムや強化学習エージェントが研究されていた。LLMの登場により、自然言語による指示理解、推論、計画立案が可能になり、より柔軟で汎用的なエージェントの構築が可能になった。
Table 1. エージェントの進化
| 世代 | 特徴 | 例 |
|---|---|---|
| 第1世代 | ルールベース | エキスパートシステム |
| 第2世代 | 機械学習ベース | 強化学習エージェント |
| 第3世代 | LLMベース | ReActエージェント、AutoGPT |
1.2 LLMエージェント
LLMエージェントは、LLMを「頭脳」として使用し、自然言語で推論・計画を行うエージェントである。従来のエージェントとの最大の違いは、タスクの解釈と計画立案を自然言語で行える点にある。
Fig 1. LLMエージェントの基本構造
┌─────────────────────────────────────┐
│ LLMエージェント │
├─────────────────────────────────────┤
│ ┌─────────┐ │
│ │ LLM │ ← 推論・計画・判断 │
│ └────┬────┘ │
│ │ │
│ ┌────▼────┐ ┌──────────┐ │
│ │ Memory │ │ Tools │ │
│ └─────────┘ └──────────┘ │
│ 状態保持 外部機能 │
└─────────────────────────────────────┘
LLMエージェントの主要な構成要素は、LLM(推論エンジン)、Memory(状態・履歴の保持)、Tools(外部機能へのアクセス)の3つである。これらを組み合わせることで、複雑なタスクを自律的に遂行できる。
2. ReActパターン
ReAct(Reasoning and Acting)は、LLMエージェントの基本的な動作パターンである。2022年にGoogle Researchが提案したこの手法は、「推論」と「行動」を交互に行うことで、複雑なタスクを段階的に解決する。
Fig 2. ReActの思考プロセス
ユーザー: 「東京の今日の天気と、傘が必要か教えて」
Thought 1: 東京の天気を調べる必要がある
Action 1: search_weather(location="東京")
Observation 1: 晴れ、降水確率10%
Thought 2: 降水確率が低いので傘は不要だと判断できる
Action 2: final_answer("東京は晴れで降水確率10%です。傘は必要ないでしょう。")
Observation 2: [完了]
ReActパターンでは、LLMが「Thought(思考)」で次のアクションを推論し、「Action(行動)」でツールを呼び出し、「Observation(観察)」で結果を受け取るというサイクルを繰り返す。このプロセスは、目標が達成されるまで続く。
Table 2. ReActの各フェーズ
| フェーズ | 役割 | 内容 |
|---|---|---|
| Thought | 推論 | 現状の分析、次の行動の計画 |
| Action | 実行 | ツールの呼び出し、パラメータの指定 |
| Observation | 観察 | ツールの実行結果の取得 |
3. ツール呼び出し
ツール呼び出しは、LLMが外部の機能やAPIを使用するための仕組みである。LLM自体は計算やデータベースアクセス、Web検索などを行えないが、ツールを通じてこれらの能力を獲得できる。
3.1 Function Calling
Function Callingは、OpenAIが導入したLLMからの関数呼び出し機能である。LLMは、利用可能な関数の定義(名前、説明、パラメータスキーマ)を受け取り、ユーザーの入力に基づいて適切な関数と引数を選択する。
Fig 3. Function Callingの流れ
1. 関数定義をLLMに提供
tools = [{"name": "get_weather", "parameters": {...}}]
2. ユーザー入力
"東京の天気は?"
3. LLMが関数呼び出しを決定
function_call: {"name": "get_weather", "arguments": {"location": "東京"}}
4. アプリケーションが関数を実行
result = get_weather("東京") # "晴れ、25度"
5. 結果をLLMに返却
6. LLMが最終回答を生成
"東京は現在晴れで、気温は25度です。"
Fig 4. OpenAI APIでのFunction Calling
from openai import OpenAI
client = OpenAI()
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "指定された場所の現在の天気を取得する",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "都市名(例: 東京、大阪)"
}
},
"required": ["location"]
}
}
}
]
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "東京の天気を教えて"}],
tools=tools,
tool_choice="auto"
)
3.2 Tool定義
LangChainでは、@toolデコレータを使用してToolを定義する。docstringとタイプヒントから自動的に関数のスキーマが生成される。
Fig 5. LangChainでのTool定義
from langchain_core.tools import tool
from typing import Optional
@tool
def search_web(query: str, num_results: int = 5) -> str:
"""Web検索を実行して結果を返す。
Args:
query: 検索クエリ
num_results: 取得する結果の数(デフォルト: 5)
Returns:
検索結果のテキスト
"""
# 実際の検索処理
return f"'{query}'の検索結果: ..."
@tool
def calculate(expression: str) -> str:
"""数式を計算して結果を返す。
Args:
expression: 計算する数式(例: "2 + 3 * 4")
Returns:
計算結果
"""
try:
result = eval(expression) # 本番では安全な評価器を使用
return str(result)
except Exception as e:
return f"エラー: {e}"
# Toolの情報確認
print(search_web.name) # "search_web"
print(search_web.description) # docstringから生成
print(search_web.args_schema.schema()) # JSONスキーマ
Table 3. Tool定義のベストプラクティス
| 項目 | 推奨 |
|---|---|
| 関数名 | 動詞_名詞形式(search_web、calculate) |
| docstring | LLMが判断できる明確な説明 |
| パラメータ | 型ヒントと説明を必ず付与 |
| 戻り値 | 文字列で返す(LLMが処理しやすい) |
| エラー処理 | 例外をキャッチしてエラーメッセージを返す |
4. エージェントの課題
LLMエージェントは強力だが、いくつかの課題がある。これらを理解し、適切に対処することが実用的なエージェント開発には不可欠である。
Table 4. LLMエージェントの主な課題
| 課題 | 説明 | 対策 |
|---|---|---|
| ループ | 同じ行動を繰り返す | 最大ステップ数制限、履歴チェック |
| 幻覚 | 存在しないツールを呼び出す | ツール選択の検証 |
| コスト | 多数のAPI呼び出し | キャッシュ、安価なモデルの併用 |
| レイテンシ | 複数ステップで遅延蓄積 | 並列実行、ストリーミング |
| 安全性 | 意図しない操作の実行 | 承認フロー、サンドボックス |
特に本番環境では、エージェントの行動を監視・制御する仕組みが重要である。LangGraphでは、Human-in-the-loop(人間による承認)や条件付き実行などの制御機構を組み込むことができる。次章では、LangGraphを使用したより高度なエージェント構築について解説する。
本コンテンツは2025年12月時点の情報に基づいて作成されています。エージェントの安全な運用には十分な検証とモニタリングが必要です。