AIエージェントの仕組み — 道具を使い、結果を見て次を決める
提案を確かめて、実際の結果を受け取る
まずは、提案と実行結果を分ける
「りんごの在庫を調べたい」という仕事なら、モデルからlookup_stockという道具の呼び出し提案を受け、アプリが在庫の記録を読みます。Python 3で次をagent-tool-demo.pyへ保存し、python agent-tool-demo.pyで試しましょう。
stock = {"りんご": 3, "みかん": 0}
proposal = {"name": "lookup_stock", "item": "りんご"}
if proposal["name"] != "lookup_stock":
raise ValueError("許可していない道具です")
if proposal["item"] not in stock:
raise ValueError("扱っていない商品です")
result = {"item": proposal["item"], "count": stock[proposal["item"]]}
print("道具の結果:", result["item"], result["count"])
道具の結果: りんご 3
これは提案を固定した、アプリ側の検査と道具の実行の練習です。生成モデルへ接続しておらず、完全なエージェントではありません。実際の構成では、モデルから提案を受け、アプリが実行した結果をモデルへ返します。モデルが呼び出しを出しただけで、実行成功とは扱いません。
目標・道具・結果をつなぐ
- 目標と、使える道具を与える。
- モデルが次の操作を提案する。
- アプリが権限・入力・対象を確かめ、実行する。
- 実際の結果をモデルへ返す。
- 次の操作、回答、停止を判断する。
在庫を読む道具と、注文を確定する道具は別の権限にします。在庫が3個という応答だけでは、注文が予約されたことにはなりません。再試行した変更が二重になる場合も、アプリで対処します。
固定したワークフローと、動的な判断
順番が明確な仕事はコードで組み立てる方が分かりやすい場合があります。状況に応じた検索や道具の選択をモデルへ任せる場合に、エージェントの構成を検討します。道具や記憶の種類を固定した数で覚える必要はありません。
会話の入力へ結果を残す方法、外部DBで関連情報を取り出す方法、実行ログを保存する方法等があります。保存したからいつでも正しく思い出せるわけではなく、何を次の判断へ渡すかも設計します。
停止と、完了の確認
ReActは推論と行動を組み合わせ、外部の結果を使う提案です。必ずエラーを修復したり、必ず利用者へ適切に報告したりする保証ではありません。呼び出し回数・時間・費用の上限、進まない場合の停止、必要な人の判断を用意します。
評価では、道具の呼び出しが成功したかだけでなく、元の目標が達成されたか、根拠と結果が一致するかを確認します。資料中の命令等の信頼できない入力で、許す操作が広がらないことも確かめます。
🐧 ペンギン先生のまとめ:「AIエージェント」って出てきたら「目標に向け、道具の結果を見ながら次の動きを選ぶ仕組み」と思えばだいたいOK!
資料の参照はRAGの仕組み、役割分担はマルチエージェントの仕組みで学べます。
参考資料
- Anthropic:Building effective agents — 固定ワークフローと動的判断・環境の結果・停止条件
- OpenAI:Function calling — モデルの呼び出し提案・アプリの実行・結果返却
- Yaoほか:ReAct — 推論と行動の組み合わせ
- OpenAI:Safety best practices — 出力・入力の検証と人の確認