ANTIGRAVITY LABEN
記事一覧/アプリ開発
アプリ開発/2026-08-15中級

壁紙アプリの30カテゴリ分類で、エージェントに選ばせる範囲をどこまで狭めるか

画像を見せて30個のカテゴリから選ばせる分類バッチは、定義を1つ足すだけで全件やり直しになります。エージェントには閉じた語彙のタグだけを出させ、カテゴリは決定的な規則で写像する設計へ切り替えた判断と実装を共有します。

antigravity439agents91image-classificationbatch-pipelineapp-dev48

プレミアム記事

配信用の壁紙を _preview に積んで、1枚ずつ見ながら30個のカテゴリへ振り分けていく作業があります。個人開発でアプリを続けていると、この手の「見れば分かるが量が多い」仕事が一定量たまります。画像を読ませてカテゴリ名を返させるだけですから、エージェントに任せる対象としては素直な部類です。

つまずいたのは精度ではありませんでした。運用を数週間続けたあと、カテゴリ定義を1つ増やしたときです。既存の「風景」から夜間の自然風景を切り出したかっただけなのに、過去に分類し終えた画像すべてが対象になりました。どの画像が新カテゴリに該当するかは、保存してある出力(カテゴリ名だけ)からは判定できません。もう一度、全部の画像をモデルに見せ直すしかない状態でした。

このとき、設計を間違えていた場所がはっきりしました。エージェントに「解釈の結果」を出させていたことです。

定義を1つ足した日に、全件やり直しになった理由

出力として保存していたのは、画像IDとカテゴリ名の対応だけでした。「210756 は風景」という1行です。この行には、なぜ風景と判断されたのかが残っていません。夜の森だったのか、朝の山だったのか、行からは復元できません。

カテゴリ定義は、運用していれば必ず動きます。配信枠の都合で細分化したくなりますし、逆に反応の薄いカテゴリは統合します。定義が動くたびに全件の推論をやり直す構造は、画像が増えるほど重くなっていきます。私の運用ではレートリミットの都合で1バッチ50枚、1日2回の実行に抑えているので、数千枚を抱えた状態で全件やり直しになると、それだけで数週間が消えます。

一方で、画像そのものは変わっていません。変わったのは「どう束ねるか」という人間側の都合だけです。変わっていないものを測り直しているのですから、無駄が出るのは当然でした。

エージェントに出させるのは観測、カテゴリは解釈

切り替えた設計は単純です。エージェントには、画像に何が写っているかだけを出させます。カテゴリ名は一切選ばせません。

担当出力定義変更時
観測エージェント(画像を読む)タグの配列再実行しない
解釈決定的なスクリプトカテゴリ所属規則表を差し替えて再実行

観測は画像に固有の事実ですから、一度取れば使い回せます。解釈は人間側の都合ですから、いつでも変わる前提で外に出しておきます。この分け方にしてから、カテゴリ定義の変更にかかる推論回数はゼロになりました。

副産物として、再現性も上がりました。30個の候補から1つを選ばせていた頃は、隣接するカテゴリで実行ごとに答えが揺れることがありました。夜の街並みを「夜景」と返す回と「風景」と返す回が混ざります。どちらも間違いではないので、モデルを責められません。境界の曖昧さがそのまま出力に焼き付いていたわけです。night city skyline というタグを返させる分には、この揺れはほとんど起きませんでした。曖昧なのはカテゴリの定義であって、画像に写っているものではなかった、という話です。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
分類の定義が将来増減する前提で、エージェントに判断させる部分と規則に残す部分の線引きを、自分のプロジェクトで引けるようになります
カテゴリを1つ足すたびに全画像を推論し直す事態を、最初の設計で避けられるようになります
1バッチ50枚のような制約下で途中失敗しても、取りこぼしと二重出力を出さない再開の組み方が分かるようになります
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

アプリ開発2026-07-18
「Compose ファースト」の後で、View の画面をどの順に移すか — 画面数ではなく変更頻度で決める
Google が Android 開発を Compose ファーストと表明しました。View ベースの画面をどの順で移すかを、画面数ではなく git の変更履歴から決める判断軸と、実際に動かしたスコアリングスクリプトをまとめます。
アプリ開発2026-07-13
画像の一括最適化をエージェントに任せる前に置く、見た目の劣化を止めるゲート
壁紙アプリの数百枚のアセットをエージェントに一括再エンコードさせたら、数枚だけ色がくすんでいました。サイズ削減率だけでは劣化を見抜けません。SSIM・ΔE・ファイルサイズの3軸でマージ前に不良変換を弾くゲートの設計と、Pillow と scikit-image で動く判定スクリプトをまとめます。
アプリ開発2026-07-09
エージェントが直した .proto がバイナリ互換を壊す前に — buf breaking で wire 互換を門番する
エージェントに .proto を編集させると、テキストとしては正しくても wire 互換を静かに壊すことがあります。フィールド番号の再利用と型変更をどう機械で止めるか、buf breaking と reserved を組み合わせたゲートを動くコードで示します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →