AIエージェントの仕組みを徹底解説|LLMと自律AIの実装ガイド
やあ!みんな!探求者のケイだよ!
AIエージェントとは、LLM を頭脳として自律的に計画・行動・修正を繰り返す自動化システムのことだ。
単なるチャットボットとの最大の違いは「ツールを呼び出して現実世界に作用する」点にある。
仕組みの核心は「思考 → 行動 → 観察」のループで、これを止まるまで回し続ける。
プロンプトの設計次第で、エージェントの性能は劇的に変わる。
AIエージェントの全体像
AIエージェントの本質は「自律的なループ」にある。
ユーザーからゴールを受け取り、LLM が計画を立て、ツールを呼び出し、結果を観察する。このサイクルをゴール達成まで自動で回し続ける。チャットボットは「1問1答」で止まるが、エージェントは何十回でも繰り返す点が根本的な違いだ。
実装前にこの流れを図として頭に入れておくと、プロンプト設計やデバッグの見通しが大きく変わる。
LLM・ツール・メモリの役割分担
LLMはエージェントの判断エンジン
LLM がエージェントの中心にある理由は、自然言語で計画を立て、状況を判断できるからだ。GPT-4o や Claude Sonnet 4.6 などのモデルは「次に何をすべきか」を文脈から推論できる。ただし LLM 単体では外部にアクセスできない。ファイル読み込みやウェブ検索には「ツール」と「メモリ」が必要になる。
モデル選択の目安は以下のとおりだ。
| モデルクラス | 用途 | コスト感 |
|---|---|---|
| Haiku 4.5 | ワーカーエージェント、頻繁な呼び出し | 低 |
| Sonnet 4.6 | メイン開発、オーケストレーター | 中 |
| Opus 4.6 | 複雑な推論、アーキテクチャ決定 | 高 |
ツールがエージェントを現実世界につなぐ
ツールを持つことで、エージェントははじめて現実世界に作用できる。代表的なツールは4種類だ。
- 検索ツール: ウェブや社内DBから最新情報を取得する
- コード実行ツール: Python や bash を実行して計算・加工を行う
- API呼び出しツール: カレンダー・メール・Slack などと連携する
- ファイル操作ツール: 読み書きで長期作業を可能にする
LLM はツール一覧をプロンプトで受け取り、「どのツールをどの引数で呼ぶか」を JSON で出力する。ツールの説明文が曖昧だと LLM が誤選択する。具体的な入出力形式を必ず明示し、ツール数は10個以内に絞るのがコツだ。
メモリ4層の設計
エージェントのメモリは4層に分かれている。
| 層 | 内容 | 実装方法 |
|---|---|---|
| 作業メモリ | 現在の会話コンテキスト | コンテキストウィンドウ |
| エピソードメモリ | 過去の会話履歴 | ベクトルDB |
| セマンティックメモリ | ドメイン知識 | RAG |
| 手続きメモリ | 過去の成功手順 | プロンプトへの要約注入 |
長期タスクではコンテキストウィンドウが溢れる。重要な情報はベクトルDBに逃がして、必要なときだけ引き出す設計にしよう。
Pythonで最小AIエージェントを実装する手順
環境セットアップ
pip install openai
export OPENAI_API_KEY="sk-..."
OPENAI_API_KEY を環境変数に設定し、ソースコードに直接書かないこと。
ReActプロンプトの組み込み
ReAct(Reasoning + Acting)は思考を「Thought / Action / Observation」に分ける手法だ。同じLLMでもこのフォーマットを適用するだけで成功率が大幅に上がる。
system_prompt = """
あなたは自律エージェントです。以下の形式で思考してください。
Thought: 現在の状況と次のステップを考える
Action: tool_name({"arg": "value"})
Observation: ツールの実行結果
最終回答は Final Answer: で始めてください。
"""
エージェント本体の実装
import openai
client = openai.OpenAI()
tools = [{
"type": "function",
"function": {
"name": "search_web",
"description": "ウェブ検索を実行して最新情報を返す。queryは日本語または英語の検索クエリ文字列。",
"parameters": {
"type": "object",
"properties": {"query": {"type": "string"}},
"required": ["query"]
}
}
}]
def run_agent(user_goal: str, max_steps: int = 10) -> str:
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_goal}
]
for step in range(max_steps):
resp = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
tool_choice="auto"
)
msg = resp.choices[0].message
if not msg.tool_calls:
return msg.content # Final Answer に到達
messages.append(msg)
for tc in msg.tool_calls:
result = execute_tool(tc.function.name, tc.function.arguments)
messages.append({
"role": "tool",
"tool_call_id": tc.id,
"content": result
})
return f"max_steps={max_steps} に達しました。ゴールを細分化してください。"
max_steps で無限ループを防いでいる。本番環境では必ず上限を設けること。
動作確認チェックリスト
-
OPENAI_API_KEYが環境変数にセットされている -
toolsのdescriptionに入出力形式が明示されている -
max_stepsが設定されている(推奨: 開発時5、本番時15以下) -
execute_toolが存在しないツール名を受け取った場合のエラーハンドリングがある -
ログ出力でステップごとの
ThoughtとActionが確認できる
エラー対処と確認ポイント
ツール誤選択が起きる場合
症状: LLM が的外れなツールを呼び出す。
確認ポイント:
-
descriptionが「いつ使うか」「何を返すか」まで書かれているか確認する - ツール名が役割を端的に表しているか見直す(
tool1→search_webのように) - ツール数が10個を超えていれば削減する
# Bad
"description": "データを取得する"
# Good
"description": "ウェブ検索を実行し、上位5件のURLとスニペットをJSON配列で返す。リアルタイム情報が必要なときに使う。"
max_steps に頻繁に到達する場合
症状: max_steps のメッセージが返り、ゴールが未達で終わる。
確認ポイント:
- ゴールの粒度が大きすぎないか確認する(1回のエージェント実行で達成できる範囲か)
-
Thoughtログで同じ行動を繰り返していないか確認する(ループ検出ロジックが必要なサイン) - ツールが正常に結果を返しているか
Observationを確認する
コストが予想以上に膨らむ場合
確認ポイント:
-
messagesリストにすべての履歴が蓄積されていないか確認する - 不要なコンテキストを削除するサマライズ処理を挟む
- ワーカーエージェントのモデルを Haiku 4.5 に下げる
マルチエージェント構成への拡張
役割分担した複数エージェントのほうが、1つで全部やらせるより精度が上がる。
AutoGen・LangGraph・CrewAI などがこの構成をサポートしている。エージェント間のメッセージが増えるとコストも増えるため、1タスクあたりのトークン数を事前に見積もることが重要だ。
マルチエージェント構成への移行は、単一エージェントが安定してから行うこと。最初から複雑な構成を目指すと原因特定が困難になる。
❓ よくある質問
Q. AIエージェントと普通のチャットの違いは何?
AIエージェントはゴール達成まで自律的に計画・ツール実行・修正を繰り返す。普通のチャットは1往復で終わるが、エージェントは何十ステップでも動き続ける点が根本的に異なる。
Q. 自律AIの仕組みはどうなっているの?
核心は「思考→行動→観察」のループだ。LLMが次の行動を決めてツールを実行し、結果を再びLLMに渡す。このサイクルをゴール達成か上限ステップまで繰り返すことで自律動作が実現する。
Q. LLMエージェントの作り方で一番大事なことは?
プロンプト設計が最重要だ。ReActフォーマットで思考を「Thought/Action/Observation」に分けさせると成功率が大幅に上がる。ツールの description を具体的に書くことも欠かせない。
Q. どんな用途に向いているの?
複数ステップが必要で途中で判断が変わるタスクに向いている。リサーチ→要約→レポート生成や、エラー時に別手法を試すコード自動修正などが典型的な用途だ。
Q. エージェントが暴走しないようにするには?
max_steps で最大実行回数を設定し、コスト上限で自動停止する仕組みを入れるのが基本だ。本番環境ではヒューマン・イン・ザ・ループ構成を採用して意図しない操作を防ごう。
まとめ:実装を始めるための5ステップ
- OpenAI API か Anthropic API のキーを環境変数にセットする
-
pip install openaiで環境を整える - ツールを1個だけ定義し、
descriptionを具体的に書く - ReActプロンプトを組み込んで動作確認する
- ログを見ながら
max_stepsとツールの説明文を調整する
動いてから設計を洗練させよう。プロンプト設計の質がエージェントの性能の大半を決めるため、ツールの description とゴールの粒度を繰り返し見直すことが最速の改善ルートだ。
それじゃあ、また次の探求で会おう!