見出し画像

【実証・第5弾】「AIの嘘は、AIに論破させろ。」Gemini APIで構築する『自己修復型』全自動監査システム

こんにちは。

60代、現役会社員のいのちゃんです。

突然ですが、世間では「AIで業務効率化!」だの「これからはAIの時代!」だのと、まるでお祭り騒ぎですね。

しかし、毎朝スーツに身を包んでオフィスへ向かい、今なお最前線でシステムと向き合っている私に言わせれば、実務の現場はそこまでお気楽なものではありません。

「生成AIにトラブル報告を読ませたら、もっともらしい嘘(ハルシネーション)をつかれ、あやうく現場の機械を吹っ飛ばしかけた」

「APIを設定したのに、Googleの仕様変更のせいで翌朝にはエラーを吐いてシステムが黙り込んでいた」

……これ、AIを真面目に実務に組み込もうとした人なら、誰もが一度は直面する「冷や汗ルート」ですよね。

ここで「やっぱりAIは使えないな」と諦めて、せっせと手作業のコピペに戻る。あるいは、夜遅くに黒い画面(エディタ)と格闘して、ただでさえ愛おしい髪の毛と睡眠時間をすり減らす。

私は心からそう思いました。

「定年を控えた私の貴重な時間とエネルギーを、Googleの気まぐれに奪われてたまるか」

そもそも、一歩間違えれば機器の破損や火災、大きなトラブルに直面しかねない現場の意思決定を、1台のAIが吐き出した「様子を見ましょう」なんていう呑気な寝言に委ねられるわけがありません。

そこで今回は、AIの「甘い判断」を、もう1台の冷徹な「監査AI(レッドチーム)」が即座に呼び出し、木っ端微塵に論破して正しいアクションを強制する「ダブル・オーディット(AIによる二重検証)システム」を構築しました。

しかも、Googleがエラーを吐こうが、モデルを突然廃止しようが、システム自身が、

「おっと、あいつが駄目ならこのモデルで!」

と勝手に裏で代役を見つけて力技で処理を終わらせる「自己修復(フォールバック)機構」をGAS(Google Apps Script)に完全実装。

もう、中途半端なツールを導入して「人間がAIの尻拭いをする」という本末転倒な日々はおしまいです。

入力以外は人間が1ミリも触らなくていい、正真正銘の「完全自動化された実務システム」の作り方を、すべて公開します。

1. なぜ普通のAI自動化は現場で死ぬのか?

現場報告から初動案を作るシステムを組んだとします。

たとえば、現場でこんなケースを想定してみてほしい。

「オフィスの主配電盤からバチバチと異音がして、焦げ臭いにおいと発熱がある」という深刻なトラブルが発生しました。これに対して、前段のAIがこう回答したらどうでしょうか。

「要約:配電盤からの異音と発熱。リスク:機器の劣化。初動案:しばらく使用を控え、室温を下げて様子を見る」

一見、もっともらしく見えますが、これは致命的なハルシネーション(甘い判断)です。

配電盤からの異音と焦げ臭さは、トラッキング現象や漏電による「今すぐ火災に至る極めて高い初期兆候」です。

「様子を見る」なんていう甘い判断を真に受けたら、ビルごと燃え落ちかねません。

人間なら真っ青になってブレーカーを落とすリスクを、AIは平気でスルーします。

だからこそ、私たちは「生成するAI」の後ろに、「重箱の隅を突いて、前段AIを徹底的に批判・論破するためだけに訓練された冷徹な監査AI(レッドチーム)」を配置しなければならないのです。

2. 3分で完了するスプレッドシートの設計図

業務で使う以上、設定をコードの中に直接書き込むのは厳禁です。

APIキーの変更やモデルの調整のために、一般のユーザーがGASのコードエディタ(黒い画面)を開くこと自体が事故の元だからです。

そこで、スプレッドシートの中に「設定」「現場報告」という2つのシート(タブ)を作成してください。

①「設定」シート(裏方・非公開)

APIキーを安全に管理するためのシートです。

  • A1セル: Gemini APIキー

  • B1セル: あなたのAPIキー(AIzaSy...で始まる文字列)

  • A2セル: 状態ステータス

  • B2セル: 自動取得中

💡 いのちゃんの実務ワンポイント:
B1セルの背景色を「薄い黄色」にしておきましょう。 人間は『色がついた枠』を見ると、本能的にそこが入力場所だと理解し、他のセルを誤ってぶっ壊すリスクを最小限に抑えられます。

②「現場報告」シート(メイン画面)

トラブル報告を入力し、AIが一気通貫で処理を行うメイン画面です。

A列に以下の「見出し」をあらかじめ入力しておきます。

  • A2(現場報告): (ここにトラブル内容を入力)

  • A3(要約): (前段AIが自動書き込み)

  • A4(リスク): (前段AIが自動書き込み)

  • A5(初動案): (前段AIが自動書き込み)

  • A6(監査判定): (★監査AIが自動で「承認」or「棄却」)

  • A7(強制アクション): (★監査AIが自動で具体的な指示を書き込み)

これで画面の準備は完了です。

3. 完全自動&自己修復型GASコード

ここからプログラムコードの紹介に入ります。

「うわ、英語だらけのコードだ……無理!」と画面を閉じそうになったあなた、ちょっと待ってください。

安心してください。コードの意味なんて、1ミリも理解できなくて大丈夫です。

GAS(Google Apps Script)を開いて、以下の文字列を「丸ごとコピーして貼り付ける」だけで動くように、私が裏側で「防弾処理」を完璧に施しておきました。

スプレッドシートの上部メニュー「拡張機能」>「Apps Script」を開き、もともと入っているコードをすべて消去して、以下をそのまま貼り付けてください。保存(Ctrl + S / Cmd + S)もお忘れなく。

JavaScript

/**
 * 業務自動化:生成AI(前段) -> 監査AI(後段) を一気通貫で実行
 */
function executeBusinessPipeline() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const settings = ss.getSheetByName('設定');
  
  if (!settings) {
    SpreadsheetApp.getUi().alert("「設定」シートが見つかりません。");
    return;
  }
  
  const apiKey = settings.getRange('B1').getValue();
  const inputData = sheet.getRange(2, 2).getValue();

  if (!inputData) { 
    SpreadsheetApp.getUi().alert("B2セル(現場報告)が空です。トラブル内容を入力してください。");
    return;
  }

  // --- 1. 前段AI:要約・リスク・初動案の生成 ---
  const genPrompt = `以下の現場報告を分析し、必ずJSONのみで返せ。
{"summary": "要約", "risk": "リスク", "action": "初動案"}
現場報告: ${inputData}`;
  
  const genResult = callGeminiApi(genPrompt, apiKey);
  if (!genResult) {
    sheet.getRange(6, 2).setValue("⚠️ 生成AIエラー(通信失敗)");
    return;
  }

  // B3-B5へ自動書き込み
  sheet.getRange(3, 2).setValue(genResult.summary);
  sheet.getRange(4, 2).setValue(genResult.risk);
  sheet.getRange(5, 2).setValue(genResult.action);

  // --- 2. 後段AI:監査(レッドチーム)による二重チェック ---
  const auditPrompt = `あなたは監査役です。以下の内容を論理的に精査し、機器破損や安全リスクを見逃している場合は必ず「棄却」せよ。特に様子を見るなどの甘い対応は許さない。
要約:${genResult.summary}
リスク:${genResult.risk}
初動案:${genResult.action}
必ずJSONのみで返せ。{"decision": "判定", "forcedAction": "強制アクションまたは承認理由"}`;
  
  const auditResult = callGeminiApi(auditPrompt, apiKey);
  if (!auditResult) {
    sheet.getRange(6, 2).setValue("⚠️ 監査AIエラー(通信失敗)");
    return;
  }

  // B6-B7へ自動書き込み
  sheet.getRange(6, 2).setValue(auditResult.decision);
  sheet.getRange(7, 2).setValue(auditResult.forcedAction);
}

/**
 * フォールバック機能付きAPI通信関数(Googleの仕様変更・クォータ制限を無効化)
 */
function callGeminiApi(prompt, apiKey) {
  // 優先的に試すモデルのリスト(どれかが死んでも他が自動でカバーする)
  const models = ['gemini-2.5-flash', 'gemini-2.0-flash', 'gemini-2.5-pro'];
  
  for (const model of models) {
    try {
      const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`;
      const payload = {
        "contents": [{ "parts": [{"text": prompt}] }],
        "generationConfig": { "temperature": 0.2 }
      };
      
      const res = UrlFetchApp.fetch(url, {
        method: 'post',
        contentType: 'application/json',
        payload: JSON.stringify(payload),
        muteHttpExceptions: true
      });
      
      if (res.getResponseCode() === 200) {
        const jsonResponse = JSON.parse(res.getContentText());
        const text = jsonResponse.candidates[0].content.parts[0].text;
        // JSON部分のみを強引に抽出してパースする防弾処理
        return JSON.parse(text.match(/\{[\s\S]*\}/)[0]);
      }
    } catch (e) {
      continue; // エラーが発生した場合は、自動的に次のモデルで再試行
    }
  }
  return null; // すべてのモデルが全滅した場合のみnullを返す
}

4. 実際の動作画面(スクショ)

私が実際にB2セルに、適当で中途半端な報告(「エアコンがおかしい」程度)を書き込んで実行した際の、「現場報告」シートの実際の画面がこちらです。


前段AIの「様子を見ましょう」というヌルい回答に対し、後ろに控える監査AIが「棄却」を叩き込み、冷徹に「ただちに停止せよ」と強制アクションを出しているのが一目瞭然です。

人間がサボればサボるほど、AIが真顔で引き戻してくれる極めて頼もしい設計です。

5. このシステムが「業務品質」を名乗る2つの理由

普通の技術ブログに載っている「とりあえず動いた!」レベルのコードと、今回のシステムには、実務における戦闘力に決定的な差があります。

①「ダブル・オーディット(多重監査)」の完全同期自動化

前段のAIが考えた「要約・リスク・初動案(B3〜B5)」を、人間が一度もコピペすることなく、同じプログラムの処理の中で、後段の「監査AI(B6〜B7)」へと一撃で受け渡します。

B2にトラブルを入力して実行ボタンを押すだけで、システム内部でAI同士が「生成 ➔ 検問」のディベートを繰り広げ、コンマ数秒で最も安全な結論がシートに書き込まれます。

② エラーをその場でねじ伏せる「自己修復(フォールバック)」

APIを使った業務システムが最もよく死ぬ原因は、Googleの「無料枠の上限(Quota Limit)」や「モデル名の突然の廃止・変更」です。

このコードは、最初に指定した gemini-2.5-flash が「クォータ制限で動かない」と判断した瞬間、即座に次の 2.0-flash、さらに 2.5-pro へと、プログラム自身が裏で代替ルートを勝手に模索して、何事もなかったかのように処理を完了させます。

管理者が真夜中にエラー通知で叩き起こされることはもうありません。

おわりに:中途半端なツールから、本物の業務システムへ

AIを活用して業務を楽にするはずが、いつの間にか「AIのエラーを直す作業」に追われていませんか?

それはシステムが、外部要因に依存しきったデリケートな作りのままだからです。

「エラーが出たら、システム自身に代役を見つけさせる」

「AIが嘘をつくなら、もう1台のAIに論破させる」

この思想こそが、現場を本当に救うB2Bレベルの設計であり、私の note で一貫して追求している「現場で本当に役立つ実用性」の本質です。

ぜひあなたのスプレッドシートにコピペして、その圧倒的な堅牢性と、一気通貫で処理が終わる快感を体感してください。

実務の現場からのフィードバックや、動作報告、コメントをお待ちしています。

そして——

「自社の現場にこういう仕組みを入れたいが、自分では組めない」という方は、声をかけてほしい。

現場を知る60代の実務家として、一緒に考えます。

いいなと思ったら応援しよう!