DESIGN / CODE / INFRA / AI

解説

AIの分類ラベルが毎回ぶれる?許可する値とunknownの扱いを先に決めよう

AIへ作業の状態を分類させたら、done・完了・DONEが混ざった。読み手には似ていても、そのまま集計するプログラムでは別の値になるかもしれないよ。

AIの分類ラベルが毎回ぶれる?許可する値とunknownの扱いを先に決めよう
保存リストを見る →
この記事の道しるべ 6項目

AIへ作業の状態を分類させたら、done・完了・DONEが混ざった。読み手には似ていても、そのまま集計するプログラムでは別の値になるかもしれないよ。

この記事では、架空の作業メモをtodo・doing・done・unknownへ整理する。実際の業務データや有料APIは使わず、許可する値の確認を小さく練習しよう。

ラベルの意味と、文字列をそろえる

値 この練習での定義
todo まだ着手していないと分かる
doing 作業中と分かる
done 完了したと分かる
unknown 資料だけでは判断できない

unknownを設けるのは、情報がない状態を勝手にtodoへ入れないため。実際の業務では、保留や中止など、必要な状態が別にあるかも検討しよう。

定義が曖昧なまま文字だけそろえても、分類の意味がそろうとは限らないんだ。

enumは、許可値を並べる指定

JSON SchemaはJSONデータの条件を表す仕組み。enumを使うと、受け入れる値を列挙できる。

{
  "type": "string",
  "enum": ["todo", "doing", "done", "unknown"]
}

このスキーマでは、doneは許可されるが、DONEや完了は列挙されていない別の文字列。nullや数値も、この条件には合わない。

enumという指定を書いた資料をAIへ見せただけで、どの実行環境でも厳密に強制されるわけではない。利用するサービスの出力制約と、受け取ったあとの検証も分けて考えよう。

許可値の確認をPythonで試す

allowed = {"todo", "doing", "done", "unknown"}
def allowed_status(value):
    return isinstance(value, str) and value in allowed

for value in ["done", "unknown", "DONE", "完了", None]:
    print(value, allowed_status(value))

結果は順にTrue・True・False・False・False。編集部では、この例と、空文字や数値のケースを実行して確認した。この関数はラベルの許可値だけを調べる例で、JSON Schema全体を検証する実装ではないよ。

表記を直すなら、対応表を明示する

「完了はdoneへ変える」と決めたいなら、許可する変換の対応表を用意する。どんな文字も小文字へ直せば安全、あるいは未知の値を一律にunknownへ変えればよいとは限らない。

AIが仕様外の値を返した場合と、資料が不足してunknownと判断した場合を同じ記録にしない。原因を見分けるため、元の値と、変換・再確認した理由を残そう。

形式が通っても、分類は間違うことがある

「来週完了する予定」という文へdoneを付けても、許可値の検証だけなら通ってしまう。文字列が正しい候補であることと、根拠に合う分類であることは別。

代表的な例、不足する例、否定や予定を含む例で意味も確認する。受け取りの条件を整えたあとに、分類の評価を省略しないようにしよう。

JSON全体の確認は構文・型・必須項目の検証、確認例の分け方は調整用と最終確認用へ。

参照した公式資料

確認日:2026年10月26日。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。