0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIエージェントで27府県を一括処理したら適用候補0件になった。段階展開へ戻した理由

0
Posted at

適用候補0件 AI一括処理を分割し直した理由

記事の要約

東日本の学校データ整備が終わったので、同じAIエージェントの調査方法とデータ投入ロジックを西日本にも広げました。

対象は27府県。調査工程は全部走り、テストも通り、最終レポートもできました。ところが、本番適用候補は0件でした。

正直、笑えなかった。

先に、今回直した進め方を書きます

結論は、一括処理をやめて次の順番へ戻しました。

1県を最後まで完成
  ↓ 人が確認
3〜4県の小さなブロック
  ↓ 人が確認
次のブロックへ

さらに、学校データと入試データを別々に判定します。

  • 学校と学科が確定したら、学校データは候補に残す
  • 入試情報が非公表なら、その指標だけNULLにする
  • 問題は学校、募集単位、年度、指標まで小さく切る
  • 新規地域が既存DBに0件なのは、失敗ではなく正常と扱う

当たり前に見えます。東日本でも、実際にはこの形で少しずつ広げていました。

それなのに西日本では「前に成功したロジックがあるから、一気にいける」と考えてしまいました。ここが入口でした。

高校選びを、地図と記録で考えられるようにしています

自作でmanabi-mapというWebサービスを作っています。住所を起点に通える高校を地図で見て、親子で比較・記録・検討できる進路管理サービスです。

学校名だけでなく、学科、入試倍率、学校再編、分校や校舎の扱いまでデータとして持つ必要があります。地域を広げるほど、単純なCSV追加では済まなくなります。

リポジトリはこちらです。Starをいただけると励みになります。

東日本では、小さく分けたから進められました

東日本対応でも、最初から全部がきれいだったわけではありません。

都道県ごとに公式資料の形式が違います。推薦と一般選抜を分ける県もあれば、複数志望を延べ人数で数える県もあります。学校全体の募集と、学科単位の募集が同じ表に混ざることもあります。

そこで、東日本では県ごとに次の工程を分けました。

公式資料を探す
  ↓
制度と数字の意味を決める
  ↓
県単位のデータを作る
  ↓
SQLと代表校を確認する
  ↓
小さなまとまりで適用する

公式に学校別合格者が出ていなければ、合格者数はNULLのままにしました。受検者より合格者が多く見える行も、制度上の集計範囲が違うなら補正せず、注意フラグを付けました。

「全部埋める」より「分からないものを分からないまま安全に残す」が効きました。

以前、その過程は次の記事にも書いています。

西日本では、成功した部品を一括実行へ載せました

西日本では、東日本で増えた安全策をかなり盛り込みました。

  • 学校の改称と、廃止・新設を区別する
  • 本校、分校、校舎を名前だけで統合しない
  • 学校と学科へ安定した識別子を付ける
  • 3年度分の公式資料を追跡する
  • 既存地域のデータが変わらないことを検査する
  • 書き込み前にSQLを止める安全装置を置く

個々のルールは必要です。テストも通りました。

ただし、27府県を1回の大きな実行として扱いました。途中で人が確認せず、解決できない部分だけ保留して最後まで走る設計です。

終わってみると、27府県すべてがHOLDでした。調査記録や制度判断は大量に残っています。それでも、適用候補へ昇格した学校、学科、入試データは0件でした。

一括処理の行き止まりから段階展開へ切り替える概念図

最後まで走り切ったように見えて、出口が全部閉じていました。途中に小さな検問所を置かなかったので、間違った通行条件が全地域へ広がっていました。

「西日本が0件」の意味が、おかしかった

最終レポートを見たとき、最初は「安全側へ倒した結果だから仕方ない」と考えました。

でも、会話の中でこう聞かれました。

東日本の調査方法やロジックを適用して、西日本0件ってどういうこと?

その通りです。

西日本に学校がなかったわけではありません。公式資料も見つかっています。学校数の候補や制度上の注意点も整理されています。

0件だったのは「現在の本番DBへ照合できた西日本校」と「今回の適用候補」です。この2つを同じ意味で扱っていました。

新規データなのに、既存DBで先に答え合わせしていました

処理は次の循環に入っていました。

既存DBに西日本の学校がまだない
  ↓
学校IDへ照合すると0件
  ↓
対応先がないので県全体をHOLD
  ↓
学校を追加する候補SQLも除外
  ↓
いつまでも照合結果は0件

新しい家を建てる前に、住所録にその家が載っているか確認していました。載っていないから建築を中止する。そんな順番です。

既存データの更新なら、DB上のIDへ1件だけ対応することは重要です。でも、新規地域ではDBに存在しないことが正常です。

必要だったのは、本番DBとの照合だけではありませんでした。

  • 既存校なら、本番DB上の識別子へ照合する
  • 新規校なら、追加候補の中で決定的な識別子を作る
  • 一時的なDBへ学校、学科、入試データの順に入れる
  • その中で1件だけ対応することを検証する

「まだ存在しない」と「対応不能」を分ける必要がありました。

既存DBだけで照合する循環と一時DBを使う改善経路

図にすると、既存DBだけを答え合わせ先にした瞬間に循環が生まれています。候補データを一度組み立てる場所を間に置けば、新規追加と本当の未解決を分離できます。

入試データの不足で、学校データまで落としていました

もう1つありました。

西日本の判定では、学校、学科、3年度分の入試データ、公式出典、本番対応を1つの県判定へまとめていました。

たとえば学校一覧が確定していても、ある年度の学校別合格者が公式に出ていなければ、3年度の表が完成しません。その結果、入試データだけでなく学校データまで県ごとHOLDになります。

東日本では、公式非公表をNULLとして通した県があります。西日本では、安全策を増やした結果、その余白を失っていました。

安全に厳しくすることと、全部そろわないと何も通さないことは別でした。

調査完了率と、成果完成率を混ぜない

今回、一番痛かったのは進捗の見方です。

表面上は、27府県すべてで調査、裁定、生成、監査の工程が終わっています。工程消化率だけを見れば100%です。

ところが、実際に使える学校・学科・入試の候補行は0でした。

後から見積もり直すと、実質的な進捗は3分の1ほどでした。公式資料の入口、制度差、学校数候補、安全用の共通処理は再利用できます。しかし、利用者に届くデータは完成していません。

大量のAIエージェントやトークンを使うと、「たくさん調べた」と「成果物が完成した」が近く見えます。ここは別の数字で持つべきでした。

  • 調査を開始した県数
  • 学校データが非空になった県数
  • 入試データが非空になった県数
  • 一時DBでSQL検証を通過した県数
  • 人が代表校を確認した県数

進捗バーに入れるなら、下の4つです。最初の1つだけでは足りません。

調査完了率と成果完成率を分けて数える対比図

見えていた進捗と、数え直した進捗はこれだけ違いました。左の数字だけを見ている間は、全部が順調に見えていました。

1県、3県、4県へ広げ直します

新しい計画では、まず1県だけを最後まで完成させます。

学校と学科を作り、入試データをつなぎ、一時DBでSQLを通し、数校の表示まで確認します。そこで人が止めて見る。通過したら、次は3〜4県です。

判定も2層へ分けました。

学校データ: PASS / 一部除外付きPASS / HOLD
入試データ: PASS / 一部除外付きPASS / HOLD

入試データがHOLDでも、学校データのPASSは取り消しません。公式に出ていない数字はNULLでよく、怪しい数字を推計して埋める必要もありません。

確認回数は増えます。でも、共通の間違いを27倍に広げてから戻るより、ずっと安いです。

今回の教訓は、ロジックより順番でした

東日本で使ったデータ形式、検査、識別子、出典管理は、西日本でも使えます。部品は間違っていませんでした。

ハマったのは、部品を置く順番です。

  • 新規データを、存在する前の本番DBだけで照合しない
  • 学校masterと周辺データの完成条件を分ける
  • 非公表と未調査と対応不能を、同じHOLDへ入れない
  • 一括処理の前に、非空の1県を最後まで通す
  • 作業工程ではなく、利用可能な候補行で進捗を見る

AIエージェントは、決めた工程をかなり粘り強く回してくれます。だからこそ、最初の停止線がずれていると、ずれたまま遠くまで走ります。

これは効いた。悪い意味で。

manabi-mapはこんなときに刺さります

  • 自宅から通える高校を地図で眺めたい人
  • 親子で学校を比較し、気になる理由や見学メモを残したい人
  • 学校名だけでなく、学科や入試情報も一緒に確認したい人
  • AIを使った地域データ整備の実例を追いたい人

リポジトリは公開しています。IssueやPRも歓迎です。

Starをいただけると開発の励みになります。使ってみて「ここが分かりにくい」があれば、IssueでもXのDMでも大歓迎です。

おわりに

次は、1県を最後まで完成させてから確認します。

一気に進められそうなときほど、小さく止める。しばらくは、このやり方でいきます。


📎 図解版・関連リンクをまとめたページがあります:
https://ishizakahiroshi.github.io/articles/2026/2026-07-17_ai-agent-zero-release-candidates/


※ ヘッダー画像とインフォグラフィックは AI(画像生成)で作成しています。

※ 本文の挿絵も AI(画像生成)で作成しています。

書いた人: ishizakahiroshi
群馬の北部で、保護猫2匹と暮らす、在宅エンジニア(何でも屋)
https://ishizakahiroshi.github.io/
https://github.com/ishizakahiroshi
X(業務委託・各種相談はこちら):
https://x.com/ishizakahiroshi

バックエンド・インフラ・AI連携まわりで、業務委託のご相談を受け付けています。フルリモートです。スポットや週2〜3時間からでも歓迎で、いろんな案件に携われたらうれしいです。こんな相談、歓迎です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?