AIエージェントを基礎から作る方法。判断・実行・観察のループ、ツール定義、メモリ、ステップ上限、人による承認、テストまで解説。ステップシミュレーター付き。
AIエージェントとはループです。言語モデルが目標とそれまでの経過をすべて読み、定義済みのツールを1つ呼び出すか、最終回答を返します。あなたのコードがツールを実行し、結果を追記して再びモデルに問い合わせます。ステップ上限、権限、人による承認、テストがこのループを安全に保ちます。
エージェントを構成する5つの要素
シミュレーターを動かして、1つのタスクがループを進む様子を見てみましょう。承認のオンとオフを切り替えると、ガードレールが危険なステップのどこで割り込むかがわかります。トレースは学習用に台本化されています。実際の実行では、判断ステップごとにモデルへ問い合わせます。
必要ありません。このページの例が示すとおり、核となるのは1回のモデル呼び出しを囲むwhileループと、ツール名によるswitchです。フレームワークはリトライ、トレース、連携機能を追加し、後々役に立ちますが、学習中はループの仕組みを隠してしまいます。
リクエストのたびにツール定義を送ります。モデルがツールを使いたいときは、通常のテキストの代わりにツール名と引数を返します。あなたのコードが関数を実行し、その結果を次のメッセージとして返します。
コンテキストは、今回の呼び出しでモデルが見る内容です。指示、目標、これまでのやり取りの記録が含まれます。メモリは、あなたが保存して後でコンテキストに戻すと決めたもので、前回の実行のメモなどがあります。
ステップ数と総支出に上限を設け、どちらかに達したら明確なメッセージで実行を終了させます。OWASPは2025年版の言語モデル応用アプリのリスクの1つにUnbounded Consumptionを挙げています。
結果を確認できる固定タスクのセットを用意します。正しいツールが呼ばれたか、危険な操作が承認を待ったか、最終回答に数値が含まれているか、といった確認です。プロンプトやツールを変更するたびにこのセットを実行し、合格数を比較します。
フレームワークもベンダーSDKも使いません。callModelは固定の判断を再生するスタブなので、ファイルはそのまま動きます。実際には、利用しているモデルサービスへのリクエストに置き換えてください。
ツールは1つのオブジェクトにまとめ、危険なツールには承認を必須にし、ループはステップ上限で停止します。node agent.mjsで実行できます。
OWASP Top 10 for LLM Applications 2025のうち、エージェントに特に重要な項目
目標:3社の仕入れ見積もりのうち最安のものを見つけ、要約をオフィスマネージャーにメールで送る。
モデルが、届いた内容を確認するためにread_quotesを選ぶ。
コードがread_quotes()を実行し、3つのファイルを返す。
結果をメモリに追加:A $1,240、B $1,180、C $1,315。
必要な情報が揃ったので、モデルが要約の下書きを添えてsend_emailを選ぶ。
send_emailは影響の大きい操作に指定されているため、人が下書きを承認するまで実行が一時停止する。
承認済み。コードが承認されたテキストでsend_email()を実行する。
結果をメモリに追加:メッセージ送信済み。
モデルが最終回答を返す:最安は見積もりBの$1,180。要約を送信済み。モデル呼び出しは3回で、10ステップの上限内。
モデルが、届いた内容を確認するためにread_quotesを選ぶ。
コードがread_quotes()を実行し、3つのファイルを返す。
結果をメモリに追加:A $1,240、B $1,180、C $1,315。
必要な情報が揃ったので、モデルが要約の下書きを添えてsend_emailを選ぶ。
承認ルールがないため、コードが下書きをすぐに送信する。事前に誰も確認していない。
結果をメモリに追加:メッセージ送信済み。
モデルが最終回答を返す。今回はうまくいったが、数値の誤りや注入された指示があっても、確認されないまま送信されていた。
判断
実行
観察
ガードレール
完了
次のステップ
リセット
send_emailの前に承認を必須にする
ステップ {n} / {v}
実行が完了しました。
未到達
無料で始める · クレジットカード不要