GENAI-RON🧠生成AI論🥦

生成AIのしくみ 超詳解 07

停止条件と検証ループ

agentはいつ続行し、いつ止まるのか。agentic loopを、続行・検証・停止・handoffを選ぶ制御ループとして読む。

  • ページ作成日時:2026-07-20 10:45 JST
  • 最終更新日時:2026-07-20 10:45 JST

agentという言葉には、どこか「自律的に動き続けるもの」という印象がある。

ユーザーが目的を与える。

AIが計画を立てる。

toolを呼ぶ。

結果を見る。

また考える。

また実行する。

このloopを見ると、agentとは「目的に向かって自動的に進み続けるAI」のように見える。

しかし、agentic systemを安全に設計するうえで、本当に重要なのは「どう続けるか」だけではない。

むしろ重要なのは、いつ止まるかである。

agentic loopとは、モデルが自律的に動き続けることではない。observe、decide、act、verifyを繰り返しながら、明示された停止条件・検証条件・予算・権限・安全条件に従って、続行または停止を選ぶ制御ループである。

07では、agentが「続行する」「再試行する」「検証する」「人間に確認する」「別agentへ渡す」「停止する」を、何を根拠に決めるのかを扱う。

1. agentic loopは無限ループではない

agentic loopを単純化すると、次のようになる。

receive task
  ↓
observe context
  ↓
decide next action
  ↓
act / call tool / answer / ask user / handoff
  ↓
observe result
  ↓
verify
  ↓
continue or stop

ここで重要なのは、最後が continue だけではないことだ。

agentic loop = continue forever

ではない。

より正確には、次である。

agentic loop = decide whether to continue

agentは、まだできることがあるから続けるのではない。

続ける理由があり、続ける権限があり、続ける予算があり、続ける安全性があり、続けた結果を検証できるときだけ続ける。

more steps ≠ better agent
more tool calls ≠ more autonomy
longer loop ≠ better completion
safe stopping ≈ reliable agent

agentの賢さは、長く走り続けることでは測れない。

不要に続けないこと、危険なまま進めないこと、根拠なく完了扱いしないことが重要である。

2. stopはfailureではない

停止という言葉は、失敗のように聞こえる。

処理が止まった。

先へ進めなかった。

完了できなかった。

しかし、agentic workflowにおいて、停止は必ずしも失敗ではない。

むしろ、正しく止まることはagentの能力である。

停止種別 意味
completed 成功条件を満たして完了した レポートを作成し、検証も通った
failed 必要な処理に失敗し、回復不能 必須APIが失敗し続けた
blocked 外部条件が足りず進めない 権限、ファイル、接続、情報が不足している
needs_user ユーザー判断が必要 曖昧な選択、承認、追加情報が必要
manual_review 人間の確認なしに進めるべきではない 法務、財務、削除、送信、公開など
handoff 別agent・別workflowへ渡す 専門agent、承認者、外部systemへ移す
aborted 安全・権限・方針により中止 危険操作、policy conflict、意図不明な破壊的操作

ここで大事なのは、すべてを failed にしないことである。

ユーザー確認が必要な状態は、失敗ではない。

権限が足りない状態も、失敗とは限らない。

成功条件を満たして止まることは、もちろん失敗ではない。

安全上止めることも、むしろ成功した制御である。

stop ≠ failure
blocked ≠ failed
needs_user ≠ failed
handoff ≠ failed
safe abort ≠ failed

3. success criteriaがないagentは止まれない

agentが止まれない最大の理由は、成功条件が曖昧なことである。

たとえば、ユーザーがこう依頼したとする。

この件を調べて、いい感じにまとめて。

この依頼だけでは、agentはどこで止まればよいか分かりにくい。

何件調べるのか。

どのsourceを信頼するのか。

どの深さまで読むのか。

どの形式でまとめるのか。

矛盾があったらどうするのか。

最新情報をどこまで確認するのか。

ユーザー判断を挟むべきか。

success criteriaが曖昧なままagentにtoolを渡すと、次のような挙動になりやすい。

search
  ↓
read
  ↓
more search
  ↓
more read
  ↓
maybe enough?
  ↓
summary
  ↓
maybe more search?

これは賢く調べているように見える。

しかし設計上は、停止条件が弱い。

agentには、次のような明示条件が必要である。

stop when:
  - required sources have been checked
  - contradictions have been noted
  - confidence threshold is met
  - output format is complete
  - no unresolved required fields remain
  - budget is not exceeded
  - no approval-gated action remains pending

停止条件は、task goalから自動的には出てこない。

application側が、成功条件、失敗条件、確認条件、handoff条件として定義する必要がある。

4. loop stateとbudget

agentic loopを制御するには、現在の状態を持たなければならない。

今、何step目なのか。

どのtoolを何回呼んだのか。

どの試行が失敗したのか。

あと何回retryできるのか。

これ以上続けるとcostやriskが高すぎないか。

状態を持たないloopは、自分が同じ場所を回っていることに気づけない。

予算を持たないloopは、どこまで続けてよいかを判断できない。

loop without state
  → 自分が何をしたか分からない

loop without budget
  → どこまで続けてよいか分からない

agentic workflowで扱うbudgetには、少なくとも次がある。

budget 意味 停止・分岐例
turn budget 思考・応答step数の上限 上限到達でsummary / handoff / stop
tool call budget tool実行回数の上限 検索やAPI呼び出しの暴走を防ぐ
time budget 実行時間の上限 時間切れならpartial resultやhandoff
cost budget APIや外部処理の費用上限 高額処理前に確認
token budget context / output量の上限 要約・分割・圧縮へ切り替える
retry budget 失敗時の再試行上限 無限retryを防ぐ
risk budget 許容される危険度の上限 権限・安全・法務境界で止める
side effect budget 外部状態変更の許容量 送信、削除、公開、決済などを制御

特に重要なのは、read-onlyなtool callとstate-changingなtool callを分けることである。

ファイルを読む、検索する、カレンダーを見る。

これらは基本的に観測である。

一方で、メールを送る、予定を作る、ファイルを削除する、PRをmergeする、支払いを実行する。

これらは外部状態を変える。

read-only action
  ≠ state-changing action

state-changing action
  requires stronger gate

5. verification loop

agentが「完了しました」と言うことと、実際に完了していることは違う。

モデルは、もっともらしく完了を宣言できる。

tool resultは、呼び出しが成功したことを示すかもしれない。

JSONはschema validationを通るかもしれない。

しかし、それだけではtaskが完了したとは限らない。

model says completed ≠ task completed
tool call succeeded ≠ task goal achieved
valid JSON ≠ correct answer
file created ≠ useful artifact

verification loopとは、agentの自己申告やtool resultの存在を完了とみなさず、成功条件・証拠・成果物・差分・テスト・reconciliationを通じて、taskが本当に完了したかを確認する仕組みである。

検証には、少なくとも次の種類がある。

verification 確認するもの
schema validation 形式が契約に合うか JSON Schemaに通る
tool result verification toolの返り値が期待通りか 作成したページのURLが返る
artifact verification 成果物が存在し、内容が入っているか 作成した文書をfetchして確認する
evidence check 主張が根拠に支えられているか 引用元と本文が対応している
diff check 変更が意図通りか 不要な削除がないか確認する
dry run / test 実行前に安全に試せるか 本番前にpreviewやtestを走らせる
reconciliation 複数sourceが一致するか 会計データや在庫数を照合する

completedは、自己申告ではない。

completedとは、成功条件を満たし、必要な検証を通った状態である。

6. guardrailsとstop gates

guardrailsは、単なる注意書きではない。

「危ないことをしないでください」とpromptに書くだけでは、agentic workflowの制御としては弱い。

guardrailは、各stepで続行可否を判定するstop gateである。

observe
  ↓
guardrail check
  ↓
decide
  ↓
guardrail check
  ↓
act
  ↓
guardrail check
  ↓
verify
  ↓
continue or stop

主なguardrailには次がある。

guardrail 対象
input guardrail ユーザー入力 危険依頼、個人情報、意図不明な破壊的操作
output guardrail agent出力 機密漏洩、誤った断定、禁止された形式
tool guardrail tool call 許可されないAPI、危険な引数、過剰実行
permission guardrail 権限 認可不足、他人のデータ、未承認操作
safety guardrail 安全性 危険行為、違法行為、身体的・経済的被害
privacy guardrail 個人情報・機密情報 不要な露出、越境共有、保存範囲違反

重要なのは、policy failureとtask failureを混同しないことである。

ユーザーの依頼を完了できない理由が、技術的失敗なのか、権限不足なのか、安全上の停止なのかで、返すべき状態は変わる。

task failure
  = 目的達成に失敗した

policy failure
  = その目的または手段では進めない

permission failure
  = 権限が足りない

verification failure
  = 完了したと確認できない

不確実なときは、安全側に倒す。

これがfail closedである。

if uncertain and risk is high:
  do not proceed silently
  ask user / require approval / handoff / stop

fail openは、危険なまま続ける設計である。

fail closedは、危険なときに止まる設計である。

7. ask user / manual review / handoff

agentは、自分だけで完結するほどよいとは限らない。

正しいagentは、必要なときにユーザーへ確認し、人間のreviewを挟み、別agentや別workflowへhandoffできる。

ここでは、三つを分ける。

分岐 意味
ask user ユーザー判断や追加情報が必要 候補A/Bの選択、曖昧な条件の確認
manual review 人間の確認なしに進めるべきではない 送信、公開、削除、契約、支払い
handoff 別agent・別workflowへ責務を渡す 専門agent、承認者、別システムへ移す

ask userは、agentの失敗ではない。

むしろ、判断権限を人間に戻す正常な制御である。

manual reviewは、情報不足とは限らない。

情報が足りていても、人間の責任や承認が必要な場面がある。

handoffは、放棄ではない。

責務範囲の移転である。

ただし、handoffにはcontext lossが起きやすい。

何を引き継ぐのか、どこまで確認済みなのか、何が未解決なのかをmanifestとして渡す必要がある。

type HandoffManifest = {
  taskId: string;
  fromAgent: string;
  toAgent: string;
  reason:
    | "specialized_skill_required"
    | "permission_required"
    | "manual_review_required"
    | "insufficient_context"
    | "budget_exceeded"
    | "risk_too_high";
  currentState: string;
  completedSteps: string[];
  verifiedResults: string[];
  unresolvedQuestions: string[];
  requiredApprovals: string[];
  artifacts: {
    name: string;
    url?: string;
    status: "draft" | "verified" | "needs_review";
  }[];
  recommendedNextAction: string;
};

handoffが成立するには、単に「次お願いします」と言うだけでは足りない。

context packが必要である。

8. trace / audit / evaluation

agentic loopは、その場でうまく動くだけでは不十分である。

後から説明できなければならない。

再現できなければならない。

評価できなければならない。

改善できなければならない。

そのために必要なのが、trace / audit / evaluationである。

traceは単なるログではない。

重要なのは、「何をしたか」だけではない。

「なぜそのactionを選んだのか」「なぜ別のactionを選ばなかったのか」「なぜ止まったのか」を再構成できることである。

trace = what happened
       + why it happened
       + what was considered
       + what was rejected
       + why it stopped

agentic workflowでは、実行したactionだけでなく、実行しなかったactionも重要になる。

たとえば、メールを送れるtoolがあったが、承認がなかったため送らなかった。

ファイルを削除できたが、破壊的操作なので止めた。

追加検索できたが、必要なsource確認が済んでいたため止めた。

これらはすべて、agentの正常な判断である。

type AgentDecisionLog = {
  runId: string;
  stepId: string;
  observedState: string;
  candidateActions: {
    action: string;
    expectedBenefit: string;
    risk: "low" | "medium" | "high";
    cost: "low" | "medium" | "high";
    requiresApproval: boolean;
    selected: boolean;
    reason: string;
  }[];
  verificationStatus?: "not_checked" | "passed" | "failed" | "inconclusive";
  stopReason?:
    | "completed"
    | "failed"
    | "blocked"
    | "needs_user"
    | "manual_review"
    | "handoff"
    | "aborted"
    | "budget_exceeded";
};

traceは、debugのためだけではない。

監査のためでもある。

どのtoolが呼ばれたか。

どのデータが読まれたか。

どの外部状態が変更されたか。

どの承認があったか。

どのguardrailが発火したか。

どこで停止したか。

これらがなければ、agentic workflowは運用できない。

9. evaluationとregression test

agentの評価は、答えの良し悪しだけではない。

停止できたかも評価対象である。

  • 成功条件を満たしたら止まれたか
  • 根拠不足のまま完了扱いしなかったか
  • budgetを超えて走らなかったか
  • 危険なtool callの前で止まれたか
  • 承認が必要な場面でask userできたか
  • handoff時にcontextを失わなかったか
  • 同じ失敗を次回防げるか

agentic systemの評価では、成功例だけでなく停止例もtest caseにする必要がある。

should_continue cases
should_stop cases
should_ask_user cases
should_handoff cases
should_fail_closed cases

replayは、過去のrunを再実行または再検討する仕組みである。

regression testは、以前防げた失敗を再発させない仕組みである。

agentは、その場限りの会話相手から、運用可能なsystemへ移るほど、traceとevaluationが重要になる。

10. 07まとめ

agentic loopとは、AIが勝手に動き続けることではない。

observe、decide、act、verifyを繰り返しながら、停止条件、budget、verification、guardrails、handoff、traceに従って、続行または停止を選ぶ制御loopである。

model
+ tools
+ context
+ loop state
+ budget
+ verification
+ guardrails
+ handoff
+ trace
+ evaluation
= operable agentic system

ここまで来ると、生成AIアプリケーションは単なる「モデルへの入力と出力」ではなくなる。

01でrequest objectを組み立てた。

02でinstruction hierarchyを扱った。

03でcontext windowを扱った。

04でtool call loopを扱った。

05でstructured outputsを扱った。

06でmemoryとpersonalizationを扱った。

07でagentic loopの停止条件と検証を扱った。

次の08では、これらを一つの全体アーキテクチャとして組み直す。

model、application、runtime、context、memory、tools、schema、guardrails、trace、人間の承認。

これらがどの層にあり、どこで接続し、どこで失敗し、どこで制御されるのかを、全体図として整理する。