🎓 レベル:発展 | 重要度:B(推奨)
📎 前提:LLMアプリの構成(プロンプト・推論・オーケストレーション) | 関連:ツール使用とエージェント(機械学習)
⚠️ 要最新確認:エージェント技術・フレームワークは最も変化が速い領域。具体名は執筆時点の例。
要点(BLUF)
- エージェントは「LLM がツールを呼びながら、多段の思考と行動で問題を解く」仕組みです。観察→思考→行動(ツール実行)→観察…のループを回します。
- 運用の難所は2つ:ツール実行の安全な制御(外部副作用・無限ループ・権限)と、評価の難しさ。エージェントの良し悪しは単発の出力でなく、トラジェクトリ(軌跡)全体——どんな手順でゴールに到達したか——で測ります。
- だから運用基盤の核は**トレース(軌跡の記録)**です。各ステップの思考・ツール呼び出し・結果を記録し、成否・ステップ数・コスト・ツール使用を評価する。エージェントの原理(ReAct 等)は機械学習(ツール使用とエージェント)へ wikilink します。
1. エージェントのループ
flowchart LR G["ゴール"] --> OBS["観察:現在の状態"] OBS --> THINK["思考:次の一手を決める(LLM)"] THINK --> ACT["行動:ツールを実行"] ACT --> OBS THINK -->|"ゴール達成と判断"| DONE["完了"] ACT -.->|"上限超過で打ち切り"| STOP["強制終了"]
各ステップで LLM が「次に何をするか」を決め、ツール(検索・計算・API 呼び出し)を実行し、結果を観察してまた考える。この自律ループが強力さと危うさの両方を生みます。
2. ツール実行の安全な制御
エージェントは外部に副作用を及ぼせる(メール送信・DB 更新・課金)ので、制御がないと危険です。
| リスク | 対策 |
|---|---|
| 無限ループ・暴走 | 最大ステップ数・タイムアウトで打ち切る |
| 危険な操作 | ツールごとの権限・許可リスト、人間の承認ゲート |
| コスト爆発 | ステップ数・トークン上限(LLMの評価・ガードレール・コスト管理) |
| 副作用の取り消し不能 | 破壊的操作はドライラン・確認を挟む |
3. トラジェクトリで評価する
通常の ML は「入力→出力」を評価しますが、エージェントは到達までの軌跡を評価します:
- タスク成功率:最終的にゴールを達成したか
- 効率:ステップ数・所要時間・コスト(無駄に回っていないか)
- ツール使用の適切さ:正しいツールを正しく呼んだか
- 軌跡の健全性:同じ失敗を繰り返していないか、ループに陥っていないか
4. 動く最小例:エージェントのトラジェクトリを記録・評価する
LLM もツールも擬似化し、エージェント運用の核である「軌跡の記録と評価」を最小化します。
class AgentTracer:
def __init__(self, max_steps=6):
self.steps = []
self.max_steps = max_steps
def log_step(self, thought, tool, result):
self.steps.append({"thought": thought, "tool": tool, "result": result})
def evaluate(self, goal_reached):
n = len(self.steps)
tools_used = [s["tool"] for s in self.steps]
return {
"success": goal_reached,
"n_steps": n,
"within_budget": n <= self.max_steps,
"tools_used": tools_used,
"unique_tools": len(set(tools_used)),
"looping": len(tools_used) != len(set(tools_used)) and not goal_reached,
}
# 擬似エージェント実行:検索 -> 計算 -> 回答 でゴール到達
tracer = AgentTracer(max_steps=6)
tracer.log_step("情報が必要", "search", "MLOpsの定義を取得")
tracer.log_step("数値を計算", "calculator", "成熟度スコア=5/7")
tracer.log_step("回答をまとめる", "finish", "回答生成")
report = tracer.evaluate(goal_reached=True)
print(f"成功 : {report['success']}")
print(f"ステップ数 : {report['n_steps']}(上限内: {report['within_budget']})")
print(f"使用ツール : {report['tools_used']}")
print(f"ループ検知 : {report['looping']}")
出力:
成功 : True
ステップ数 : 3(上限内: True)
使用ツール : ['search', 'calculator', 'finish']
ループ検知 : False
出力の意味:エージェントが3ステップ(検索→計算→回答)でゴールに到達し、ステップ上限内で、ツールの重複もないクリーンな軌跡だったと評価できました。単発の最終回答だけでなく、「どう辿り着いたか」を記録・評価するのがエージェント運用の核です。もしステップ数が上限に張り付いたり、同じツールを無駄に繰り返していれば(looping=True)、ゴールに着いても運用上は問題ありとして調査します。実運用ではこのトレースを可観測性基盤に集約します(要最新確認)。
5. 運用の勘所
- 必ずステップ上限とタイムアウトを置く:自律ループの暴走・コスト爆発を防ぐ最低限の安全装置。
- トレースを全ステップ記録する:思考・ツール・結果を残し、失敗を後から再現・分析できるようにする。
- 破壊的ツールに承認ゲートを置く:取り消し不能な操作(送信・課金・削除)は人間の確認かドライランを挟む。
- 軌跡で評価する:最終出力だけでなく、効率・ツール使用・ループの有無を見る。
- ツールを最小権限にする:エージェントに与えるツールと権限を必要最小限にする。
なぜそうするのか
エージェントを「軌跡で評価し、ツールを厳しく制御する」のは、自律性が価値と危険の両方の源泉だからです。エージェントは自分で手順を決められるから強力ですが、同じ理由で予測不能に暴走し、外部に取り返しのつかない副作用を及ぼしえます。最終出力だけ見ても「たまたま当たった」のか「健全に解いた」のか区別できません。だから軌跡を記録して過程の健全性を評価し、ツール実行に上限・権限・承認という制御を課す——自律性を活かしつつ事故を防ぐ、という運用設計になります。
⚠️ よくある落とし穴
- ステップ上限を置かない:暴走・無限ループでコストが爆発する。必ず上限とタイムアウトを。
- 最終出力だけ評価する:非効率な軌跡・偶然の成功を見逃す。トラジェクトリ全体を見る。
- 破壊的ツールを無制限に与える:取り消し不能な副作用のリスク。権限と承認ゲートを置く。
- トレースを残さない:失敗を再現・分析できず改善できない。全ステップ記録する。
- エージェントの原理をここで詳述する:ReAct・計画手法は機械学習(ツール使用とエージェント)。
対応 lab
- なし(概念ノート)。トラジェクトリ記録・評価は本文 §4。
関連ノート
- LLMアプリの構成(プロンプト・推論・オーケストレーション)(エージェントはオーケストレーションの発展形)
- LLMの評価・ガードレール・コスト管理(コスト上限・出力ガード)
- リリース戦略(シャドー・カナリア・A-Bテスト)(エージェント版の安全な投入)
- ツール使用とエージェント(機械学習・エージェントの原理)
- 第7章 LLM・生成AIの運用基盤 目次
- MLOps・AI基盤 全体目次