
OpenAI の Decisions API に書類の種類を分類させて Clef と比べてみた
こんにちは、けーまです。
Cloudflare の Clef に書類の種類を分類させてみた | DevelopersIO で、Cloudflare の Clef に書類画像だけを渡して請求書・見積書といった種類に分類させたところ、28枚中27枚を正しく分類でき、外した1枚は確信度の低さで見分けられました。
OpenAI の Decisions API(モデルは gpt-6-luna)も画像を受け取って選択肢から1つを選べるため、同じような使い方ができるはずです。
そこで今回は、Clef の検証と同じ28枚・同じ質問を Decisions API に渡し、正解率・確信度・処理時間・費用を Clef と比較してみました。
書類の自動仕分けにどちらを使うか検討する際の参考になれば幸いです。
1. 検証の条件
| 項目 | 内容 |
|---|---|
| モデル | Decisions API の gpt-6-luna。比較対象は Clef の clef・clef-flash |
| 入力 | 書類画像1枚(PNG、1240×1754)。書類のテキストは渡さない |
| 書類 | 架空の28枚(日本語14枚・英語14枚) |
| 質問 | choice 1問。選択肢は7種類と other の8個 |
| 呼び出し方 | REST API で1画像1リクエスト、1回ずつ |
choice は、選んだ選択肢・選択肢ごとの確率・確信度(confidence)を返す質問の型です。
確率は8個の選択肢の合計が1になる値で、確信度はその回答をどれだけ迷わずに選べたかを0〜1で表します。
Clef の検証では、確信度が 0.8 未満の書類だけを人が確認すれば誤分類をすべて拾えました。
Decisions API へのリクエストは次の形です(choices は8個のうち2個だけ載せています)。
コメントは説明用で、実際に送る JSON には含めません。
{
"model": "gpt-6-luna",
"input": [{
"role": "user",
"content": [
// 判断の前提(添付画像はビジネス書類の1ページ。何の書類か判定せよ)
{"type": "input_text", "text": "The attached image is one page of a business document. Decide what kind of document it is."},
{"type": "input_image", "image_url": "data:image/png;base64,..."}
]
}],
"questions": [{
"type": "choice", // 選択肢から1つ選ぶ
"name": "doc_type",
// 画像に写っているビジネス書類の種類はどれか
"instructions": "Which kind of business document is shown in the image?",
"choices": [
// invoice(請求書):提供済みの商品・サービスの支払いを請求する書類(請求額・支払期日あり)
{"value": "invoice", "description": "Invoice / bill: the seller requests payment for goods or services already provided, with an amount due and a payment deadline."},
// quotation(見積書):発注前に価格を提案する書類(通常は有効期限あり)
{"value": "quotation", "description": "Quotation / estimate: the seller proposes prices before an order is placed, usually with a validity period."}
]
}]
}
2. データ
データは Clef の検証と同じです。
請求書・見積書・領収書・納品書・注文書・契約書・履歴書の7種類について、日本語と英語を2枚ずつ用意し、2枚目には次のような紛らわしい要素を入れています。
-
タイトルが無い、小さい、または別名(Estimate、Packing Slip、発注書、職務経歴書)
-
本文で別の書類に言及する(請求書の本文に見積書番号、見積書の注意書きに注文書と請求書)
-
業務書類の用語が並ぶ履歴書(請求書や注文書を扱った職務経験)

紛らわしさを入れた例。タイトルが無く、本文で見積書(quotation)の番号に言及している
3. 結果
28枚の特徴と、各モデルの回答・確信度は次のとおりです(誤りを太字にしています)。
| 正解 | 言語 | 書類の特徴 | Decisions API | clef | clef-flash |
|---|---|---|---|---|---|
| 請求書 | 日本語 | 標準(タイトル「請求書」あり) | 請求書 1.0 | 請求書 0.9416 | 請求書 0.8884 |
| 請求書 | 日本語 | タイトルなし。本文で見積書番号に言及 | 請求書 1.0 | 請求書 0.948 | 請求書 0.9439 |
| 請求書 | 英語 | 標準(タイトル「INVOICE」あり) | 請求書 1.0 | 請求書 0.957 | 請求書 0.9131 |
| 請求書 | 英語 | タイトルなし。本文で受諾済みの見積書(quotation)番号に言及 | 請求書 1.0 | 請求書 0.9619 | 請求書 0.9386 |
| 見積書 | 日本語 | 標準(タイトル「御見積書」あり) | 見積書 1.0 | 見積書 0.9265 | 見積書 0.9105 |
| 見積書 | 日本語 | タイトルが右上に小さく「お見積り」だけ。注文書と請求書に言及 | 見積書 1.0 | 見積書 0.8698 | 請求書 0.5175 |
| 見積書 | 英語 | 標準(タイトル「QUOTATION」あり) | 見積書 1.0 | 見積書 0.9507 | 見積書 0.9416 |
| 見積書 | 英語 | タイトルが別名の「Estimate」。「This is not an invoice」と書き、purchase order にも言及 | 見積書 1.0 | 見積書 0.9437 | 見積書 0.9044 |
| 領収書 | 日本語 | 標準(タイトル「領収書」あり、但し書き・収入印紙欄) | 領収書 1.0 | 領収書 0.9126 | 領収書 0.7957 |
| 領収書 | 日本語 | タイトルなしの POS レシート(お預り・お釣り) | 領収書 1.0 | 領収書 0.9597 | 領収書 0.9115 |
| 領収書 | 英語 | 標準(タイトル「RECEIPT」あり、PAID IN FULL) | 領収書 1.0 | 領収書 0.9707 | 領収書 0.9491 |
| 領収書 | 英語 | タイトルが別名の「Payment Confirmation」。表に請求書番号と請求額が載る | 領収書 1.0 | 領収書 0.9687 | 領収書 0.9017 |
| 納品書 | 日本語 | 標準(タイトル「納品書」あり、受領印欄) | 納品書 1.0 | 納品書 0.8453 | 納品書 0.8766 |
| 納品書 | 日本語 | タイトルが小さい「納品書(控)」。注文書番号に言及、金額欄なし | 納品書 1.0 | 納品書 0.9429 | 納品書 0.9338 |
| 納品書 | 英語 | 標準(タイトル「DELIVERY NOTE」あり、受領署名欄) | 納品書 1.0 | 納品書 0.9601 | 納品書 0.9399 |
| 納品書 | 英語 | タイトルが別名の「Packing Slip」。顧客の PO 番号に言及、金額欄なし | 納品書 1.0 | 納品書 0.9542 | 納品書 0.8768 |
| 注文書 | 日本語 | 標準(タイトル「注文書」あり) | 注文書 1.0 | 注文書 0.9106 | 注文書 0.9293 |
| 注文書 | 日本語 | タイトル「発注書」。見積書・納品書・請求書の3つに言及 | 注文書 1.0 | 請求書 0.2384 | 注文書 0.9436 |
| 注文書 | 英語 | 標準(タイトル「PURCHASE ORDER」あり) | 注文書 1.0 | 注文書 0.9586 | 注文書 0.9461 |
| 注文書 | 英語 | タイトルなし。「Please supply the following items」と承認者欄だけ | 注文書 1.0 | 注文書 0.9506 | 注文書 0.9477 |
| 契約書 | 日本語 | 標準(秘密保持契約書) | 契約書 1.0 | 契約書 0.9597 | 契約書 0.9167 |
| 契約書 | 日本語 | 業務委託契約書。報酬条項で見積書・請求書に言及 | 契約書 1.0 | 契約書 0.9543 | 契約書 0.9009 |
| 契約書 | 英語 | 標準(NON-DISCLOSURE AGREEMENT) | 契約書 1.0 | 契約書 0.9666 | 契約書 0.8993 |
| 契約書 | 英語 | Master Services Agreement。条項見出しに Purchase Orders と Invoices and Payment | 契約書 1.0 | 契約書 0.9679 | 契約書 0.9388 |
| 履歴書 | 日本語 | 標準(JIS 様式に近い「履歴書」、写真欄) | 履歴書 1.0 | 履歴書 0.9036 | 履歴書 0.9211 |
| 履歴書 | 日本語 | 「履歴書」ではなく「職務経歴書」。本文に見積書・注文書・請求書の語が並ぶ | 履歴書 1.0 | 履歴書 0.8985 | 履歴書 0.8865 |
| 履歴書 | 英語 | 小さく「RESUME」。本文に invoices・purchase orders・receipts の語が並ぶ | 履歴書 1.0 | 履歴書 0.949 | 履歴書 0.9358 |
| 履歴書 | 英語 | タイトルなし。氏名と見出しだけの研究者 CV(論文名に invoices を含む) | 履歴書 1.0 | 履歴書 0.9065 | 履歴書 0.916 |
3.1 正解率
| 条件 | Decisions API | clef | clef-flash |
|---|---|---|---|
| 全体 | 28 / 28 | 27 / 28 | 27 / 28 |
| 日本語 | 14 / 14 | 13 / 14 | 13 / 14 |
| 英語 | 14 / 14 | 14 / 14 | 14 / 14 |
| 紛らわしさを入れた書類(2枚目) | 14 / 14 | 13 / 14 | 13 / 14 |
Decisions API は28枚すべてを正しく分類できました。
Clef の2モデルがそれぞれ外した日本語の発注書や、タイトルが小さい見積書についても、Decisions API は正しく分類できています。
3.2 確信度
Decisions API の確信度は28件すべて 1.0 で、選んだ種類の確率も 1.0、ほかの7種類は 0.0 でした。
一方の Clef は、正解した書類でも確信度が 0.7957〜0.9707 に散らばり、誤分類した書類では 0.2384 や 0.5175 まで下がっていました。
今回の28枚では、Decisions API の確信度から「迷った書類」を見分けることはできませんでした。
全問正解だったので実害はありませんが、Clef の検証のように「確信度 0.8 未満だけを人が確認する」運用を組むには、Decisions API が誤分類したときに確信度が下がるかどうかを別のデータで確かめる必要があります。
3.3 時間と費用
時間は日本からの REST API 呼び出しの往復実測値で、換算レートは1ドル150円です。
| モデル | 往復時間(中央値) | 入力トークン(1枚) | 入力単価(100万トークン) | 費用(28枚) |
|---|---|---|---|---|
| Decisions API | 0.517秒(517ms) | 2,444 | $0.10 | $0.0068(約1.03円) |
| clef | 0.976秒(976ms) | 1,367 | $0.24 | $0.0092(約1.38円) |
| clef-flash | 0.3535秒(354ms) | 1,367 | $0.09 | $0.0034(約0.52円) |
Decisions API は同じ画像でも入力トークンが Clef の約1.8倍になりましたが、単価が安いため、費用は clef の約4分の3に抑えられました。
Decisions API も、課金は入力トークンだけです。
Input costs $0.10 per 1M tokens. You pay only for input tokens: there are no cache-read, cache-write, or output-token charges.
引用元: Decisions API | OpenAI API
4. まとめ
今回の28枚の検証では、Clef の2モデルが外した日本語の書類を含め、Decisions API はすべて正しく分類でき、費用も clef より安く収まりました。
Jev や Clef は英語中心で日本語への対応に課題が残ることも少なくありませんが、Decisions API は Luna ベースであるので日本語のビジネス書類にも強い手応えを感じました。
一方で、業務システムへ組み込む decision model としては、どれくらい確信を持てているかを示す確信度の値が運用設計の鍵になります。
すべての判定で確信度が 1.0 として返ってくると、誤分類のリスクがある書類を人の確認へ回すエスカレーションの設計が組めず、自動化システムを単独で運用するには不安が残ります。
常に 1.0 を出されるのではなく、迷ったときには適切に数値が下がるかどうかが実運用では問われます。
今回は用意したサンプルの条件が良く、モデルにとって判断が容易だった可能性もあります。
より紛らわしい書類や多様なサンプルでさらに調査を深め、確信度がどの程度ばらつくのか、どの位置にしきい値を設定するのが適切かを見極めた上で、システムへの組み込みを進めたいと考えています。











