0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIエージェントの仕組みを徹底解説|LLMと自律AIの実装ガイド

0
Posted at

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 が環境変数にセットされている
  • toolsdescription に入出力形式が明示されている
  • max_steps が設定されている(推奨: 開発時5、本番時15以下)
  • execute_tool が存在しないツール名を受け取った場合のエラーハンドリングがある
  • ログ出力でステップごとの ThoughtAction が確認できる

エラー対処と確認ポイント

ツール誤選択が起きる場合

症状: LLM が的外れなツールを呼び出す。

確認ポイント:

  1. description が「いつ使うか」「何を返すか」まで書かれているか確認する
  2. ツール名が役割を端的に表しているか見直す(tool1search_web のように)
  3. ツール数が10個を超えていれば削減する
# Bad
"description": "データを取得する"

# Good
"description": "ウェブ検索を実行し、上位5件のURLとスニペットをJSON配列で返す。リアルタイム情報が必要なときに使う。"

max_steps に頻繁に到達する場合

症状: max_steps のメッセージが返り、ゴールが未達で終わる。

確認ポイント:

  1. ゴールの粒度が大きすぎないか確認する(1回のエージェント実行で達成できる範囲か)
  2. Thought ログで同じ行動を繰り返していないか確認する(ループ検出ロジックが必要なサイン)
  3. ツールが正常に結果を返しているか Observation を確認する

コストが予想以上に膨らむ場合

確認ポイント:

  1. messages リストにすべての履歴が蓄積されていないか確認する
  2. 不要なコンテキストを削除するサマライズ処理を挟む
  3. ワーカーエージェントのモデルを 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ステップ

  1. OpenAI API か Anthropic API のキーを環境変数にセットする
  2. pip install openai で環境を整える
  3. ツールを1個だけ定義し、description を具体的に書く
  4. ReActプロンプトを組み込んで動作確認する
  5. ログを見ながら max_steps とツールの説明文を調整する

動いてから設計を洗練させよう。プロンプト設計の質がエージェントの性能の大半を決めるため、ツールの description とゴールの粒度を繰り返し見直すことが最速の改善ルートだ。

それじゃあ、また次の探求で会おう!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?