• TOP
  • トピックス

トピックス

Topics

「LLMの判断だから仕方ない」と言わないための責務分担

「LLMの判断だから仕方ない」と言わないための責務分担
鳥


2026.08.14

BTMAIZの鳥と申します。
主に、生成AI関連やAI開発ツールについて発信していきます。

 

LLMに任せる仕事、コードに任せる仕事

LLMを使ったシステムを設計していると、「この判断もLLMに任せてよいのか」「ここから先はプログラムで固定すべきなのか」と迷う場面があると思います。

一般的に、LLMは自然言語の理解や文脈に応じた要約・分類・候補生成を得意としますが、厳密な数値計算や形式の検証、最新のシステム状態の確認、決められた順序での外部操作は、LLMだけに任せると不安定になりやすい領域です。

LLMの誤りによる結果を誰が検証し、どのように止め、どう復旧するかを考える必要があります。

この記事では、障害対応エージェントの改善過程を通してLLMとプログラムの責務分担について具体的に考えていきます。

 

最初の設計:LLMに切り分けから復旧まで任せる

まずは、障害対応エージェントを作り始めたばかりの状態を想像してみましょう。

プロンプト(初期version)

アラートとログを確認し、原因を特定してください。
必要に応じて関連サービスを調査し、原因が分かったらサービスを再起動してください。
対応結果を担当者へ報告してください。

この指示は一見すると分かりやすいのですが、LLMに多くの判断と実行を同時に求めています。どのサービスを調べるか、再起動してよいか、失敗したらどうするかまで、モデルの判断に委ねられています。

処理フロー(初期version)

ところが、実際に動かしてみると、プロンプトだけでは決めきれない場面がいくつも見えてきます。初期フローには、たとえば次のような懸念があります。

  • 対象を取り違える
    ログの読み違いによって、障害とは関係のないサービスを調査したり、再起動したりする可能性があります。
  • 環境を取り違える
    本番環境と検証環境を正しく区別できなければ、同じ操作でも影響の大きさが大きく変わります。
  • 調査の途中で変更まで進んでしまう
    ログを確認するだけの安全な操作と、再起動や設定変更のように影響が出る操作の境目が、プロンプトだけでは曖昧です。原因を十分に確認する前に、復旧操作へ進んでしまう可能性があります。
  • 処理が止まらない
    原因が分からないまま、調査ツールを繰り返し呼んだり、再試行を続けたりする可能性があります。
  • 失敗時の出口が曖昧になる
    復旧操作に失敗したとき、再試行するのか、いったん停止するのか、人へ引き継ぐのかがプロンプトの解釈に委ねられています。

ここから、設計を一つずつ見直していきます。

 

修正1:実行責任をコード側へ移す

ここでコード側へ移すのは、単なる「LLMが苦手な処理」の一覧ではありません。もし間違えたときに外部へ影響が出るか、失敗したあとに誰かが復旧しなければならないか。そうした観点から、実行に関わる責任を整理します。

プロンプト(修正version1)

アラートとログを分析し、障害の原因候補と推奨する対応を提示してください。
外部システムの変更やサービスの再起動は実行しないでください。
判断に必要な情報が不足している場合は、不足している情報を列挙してください

LLMには状況の分析と対応案の提示までを依頼し、外部操作は明示的に禁止します。これにより、LLMの提案をコード側で確認してから実行できるようになります。

処理フロー(修正version1)

処理項目修正1後の担当修正1の意図
ログ・メトリクスの取得コード取得対象や環境を固定し、調査を安全に行うためです。
状況・原因候補の整理LLM複数の情報から意味を読み取り、候補を整理する仕事はLLMに任せられるためです。
対応案の生成LLM原因候補に応じた対応案を複数出し、人やコードが検討できる形にするためです。
実行条件の確認コード対象環境、権限、現在の状態、許可範囲を同じ基準で確認するためです。
復旧操作コード再起動や設定変更が、LLMの判断から直接実行されないようにするためです。
失敗時の扱いコード再試行、停止、承認、オンコールへの引き継ぎをあらかじめ決めるためです。
 

修正2:LLMには意味理解と候補生成を残す

ここまで読むと、「それなら全部コードで決めればよいのでは」と感じるかもしれません。ですが、人の依頼や障害の状況報告は不完全で、意図や背景が埋もれているケースもあります。そこから意味を取り出し、候補を並べ、説明できる形に整える仕事は、LLMが力を発揮しやすい部分です。

大切なのは、LLMに任せる範囲をなくすことではなく、提案と実行を分けることです。修正前は、LLMに原因の特定から復旧操作までを一度に任せていました。修正後は、LLMには状況の解釈と対応案の提示までを任せ、実行してよいかの確認と実際の操作をコード側に移しています。

プロンプト(修正version2)

アラート、ログ、メトリクスを分析し、次のJSON形式で障害対応案を返してください。

{
“observations”: [“確認できた事実”],
“hypotheses”: [“原因候補”],
“recommended_checks”: [“追加で確認すべき項目”],
“recommended_action”: “推奨する対応”,
“confidence”: 0.0,
“missing_information”: [“不足している情報”]
}

JSON以外の文章は返さないでください。
サービスの再起動、設定変更、データ更新などの外部操作は実行しないでください。
事実と推測を分けて記載してください。

修正2では、LLMの提案をさらに整理します。自由な文章で返してもらうのではなく、JSONの項目として事実、推測、追加調査、推奨対応を分けることで、コード側が形式と内容を検証しやすくなります。

ただし、JSON形式をプロンプトで要求するだけで、出力の妥当性を保証できるわけではありません。実装側でスキーマに適合しているかを検証し、形式が崩れていた場合は実行へ進めず、再生成または人への引き継ぎに切り替えます。

処理フロー(修正version2)

観点修正1修正2修正2の意図
出力形式自由な文章で状況と対応案を提示JSONの項目に分けて出力コードが項目ごとに形式を検証しやすくするためです。
事実と推測同じ文章の中に混在する可能性がある確認できた事実と原因候補を別々に出力推測を事実として扱う誤りを減らすためです。
追加確認必要な調査を文章の中から読み取るrecommended_checksとして明示する不足している調査をコード側や担当者が把握しやすくするためです。
対応案推奨する対応を文章で提示recommended_actionとconfidenceを分けて出力対応案と、その判断の確からしさを分けて扱うためです。
実行前の連携コードが自由文を読み取って判断JSONの項目を検証してから実行条件を確認LLMの文章をそのまま実行判断に使わないためです。
実行後の説明実行結果をそのまま扱うコードが結果を確認し、LLMは担当者向けの説明を生成実行の責任と、結果を説明する役割を分けるためです。

この流れなら、LLMは「何が起きていそうか」「何を試すべきか」を考え、コードは「実行してよいか」「どの順序で実行するか」「失敗したらどう止めるか」を決めます。LLMが「再起動してよい」と説明していても、コード側の前提条件を満たさなければ実行しない。この境界が、設計全体の安心感につながります。

 

具体例:CPU使用率急上昇の一次切り分けに当てはめる

最後に、具体的なインシデントを一つ追ってみます。注文APIのCPU使用率が95%を超え、5xxエラーも増加しているというアラートが発生したとします。10分前には新しいバージョンがデプロイされていますが、アクセス数の急増も起きています。

段階LLMが担当することコードが担当すること
1. 状況の整理CPU、5xxエラー、デプロイ履歴から、起きている事象と原因候補を整理する。対象サービスと本番環境を特定し、ログ・メトリクスの確認を行う。
2. 追加調査の提案「デプロイ後のエラー増加」と「アクセス数増加」のどちらを確認すべきか提案する。調査対象、環境、許可された操作かを確認し、実行する。
3. 復旧案の提示ロールバックや再起動など、考えられる対応案と確信度を提示する。本番変更の権限、対象バージョン、承認の要否を確認する。
4. 復旧と報告実行結果を担当者向けに要約し、残る懸念を説明する。承認済みの操作だけを実行し、成功・失敗・引き継ぎを判定する。

この例では、LLMが原因候補や対応案を考え、コードが調査の範囲と復旧操作の条件を管理しています。最初からロールバックを実行するのではなく、調査、追加確認、承認、復旧という順に進めることで、LLMの提案を活かしながら本番環境への影響を制御できます。

 

まとめ

AIエージェントの処理を分けるとき、つい「LLMが苦手かどうか」を基準にしたくなります。ですが、より重要な問いは、「LLMに任せた結果が悪いものだったときに、『LLMの判断なので仕方ない』と済ませられるか」です。

もし「仕方ない」と済ませられない結果につながるなら、その処理をLLMの判断だけに任せてはいけません。意味理解と候補生成はLLMに任せても、外部状態、前提条件、実行順序、失敗時の責任はコード側に置きます。そうすることで、LLMの柔軟さを活かしながら、結果に対する説明責任も持てるようになります。

今のエージェントの設計に迷っているなら、まずはエージェントが起こす外部変化を書き出してみてください。その結果が悪かったときに誰が説明し、どこで止め、どう復旧するのかを考えると、LLMに任せる範囲とコードへ切り出す範囲が自然に見えてきます。

 

参考にしたサイト

投稿日2026年08月14日

カテゴリーTech Blog

タグ AIエージェント、LLM評価

トップへ戻る