← 作品一覧

KAMIWAZA

帳票の写真から、入力や編集ができるアプリへ。

写真から画面になる流れを見る ↓
  • TypeScript
  • React
  • Next.js
仕組みと技術
AppSpec / JSON
帳票から読み取った項目・表・レコードを記述。
React
その仕様を、入力・編集できる画面にする。
TypeScript / Next.js
データの型を定義し、画面と解析APIをつなぐ。
この作品の目次
評価・ソース

AI HACKATHON 2026 TOKYO · ファイナリスト · 56チーム

アプリ側で検査できる構造を渡す

写真を、項目やレコードを表す仕様に変換します。アプリはその構造を検査し、画面を組み立てます。

工程を選んで、流れをたどれます。仕組みの図解で、抽出処理の実行ではありません。

構造の正しさと、読み取った内容の正しさは別の検査です。
仕組みと検証条件を読む

モデルが出力するのは、アプリをJSONで記述したAppSpecです。項目の型、明細の列、最初のレコードとその明細行を定義し、固定したReactのレンダラーが描画します。この境界は初期実装から存在していました。最初から採ったアーキテクチャ上の選択です。

アプリ側では、生成が完了した出力に対し、許可されたキーや値の型を検査します。アプリ名が空、項目が空配列といった、画面が成立しない状態も拒否します。受信途中のオブジェクトは本来未完成なので、検査は最後に行います。ただし、構造が正しくても内容の確認は必要です。スキーマは「数値である」ことを検査できても、「紙から正しい数値を読めた」ことまでは判定できません。

変更にも、同じ境界を設ける

生成後のテキスト指示も、SpecDiffという操作の型を通します。項目の追加、名称変更、数値の上限・下限、承認ステップの追加など、対応する操作をモデルが選び、決定論的なリデューサーが既存のspecへ適用します。拒否した変更では元のspecを返します。操作によって画面がどう変わるかは、アプリ側が決めています。

読み取りの不確かさには別の経路があります。ライブ実装は、モデルの申告信頼度が閾値を下回る最初の項目を探し、含めるかどうかを尋ねます。これは人が確認するための接点であり、信頼度の数値を較正できている証拠ではありません。項目と画像上の位置を結ぶsourceBoxもありますが、ライブ写真上の座標精度は定量評価していません。

値が正しくても、書類の情報が揃っているとは限らない

値の一致数と、書類全体の判定を一緒に見ます。読み取った値が正しくても、必要な情報が揃っているとは限りません。

同じ50書類に対する2回の評価記録
保存された指標v1v2
採点基準を満たした書類38 / 5048 / 50
部分正解 / 失敗11 / 12 / 0
正しいと採点された値704 / 7071,516 / 1,518
捏造と判定された値00
保存されたLLM採点結果の再集計です。元画像は残っておらず、抽出の再実行や再採点ではありません。
仕組みと検証条件を読む

最初の評価では、抽出された707値のうち704値が正しいと採点されました。一方、50書類のうち成功判定は38件。11件は部分正解で、1件はライブ解析からデモに切り替わったため失敗として数えられています。値の一致率が高くても、書類を十分に読み取れているとは限りません。出力されなかった情報は、出力された値だけの照合では拾えないからです。

この差が表れたのが、繰り返し並ぶ明細でした。初期の表現は平坦な項目の集合が中心で、評価記録には2行目以降の取りこぼしが残っています。次の版では、明細の列定義と行の配列を追加しました。同時に出力上限と小数点の読み取り指示も変更しています。したがって、結果の差をデータ構造の変更だけの効果とは言えません。

2回の結果を、同じ表で読む

同じ50書類に対する2回の評価記録を比べます。保存された採点結果で、抽出を新たに実行した試験ではありません。

50 / 50

各ケースの保存判定と、値の一致

ケースv1v2v1の値v2の値
K01部分正解通過17 / 1736 / 36
K02通過通過9 / 933 / 33
K03部分正解通過11 / 1148 / 48
K04通過通過10 / 1013 / 13
K05部分正解通過9 / 920 / 20
K06部分正解通過14 / 1435 / 35
K07通過通過13 / 1315 / 15
K08部分正解通過19 / 19112 / 112
K09通過通過4 / 44 / 4
K10部分正解通過16 / 16124 / 124
K11通過通過24 / 2451 / 51
K12通過通過26 / 2668 / 69
K13通過通過21 / 2159 / 59
K14通過通過23 / 2335 / 35
K15通過通過22 / 2241 / 41
K16部分正解通過23 / 2465 / 65
K17通過通過21 / 2156 / 56
K18通過通過26 / 2635 / 35
K19通過部分正解23 / 2341 / 41
K20通過通過22 / 2226 / 26
K21通過通過14 / 1416 / 16
K22通過通過13 / 1315 / 15
K23通過通過14 / 1418 / 18
K24通過通過14 / 1416 / 16
K25通過通過14 / 1416 / 16
K26通過通過10 / 1033 / 33
K27通過通過14 / 1420 / 20
K28通過通過13 / 1315 / 15
K29通過通過15 / 1520 / 20
K30通過通過15 / 1520 / 20
K31通過通過9 / 913 / 13
K32通過通過9 / 910 / 10
K33通過通過9 / 913 / 13
K34通過通過9 / 913 / 13
K35通過通過9 / 914 / 14
K36通過通過9 / 911 / 11
K37部分正解部分正解8 / 910 / 11
K38通過通過9 / 912 / 12
K39通過通過9 / 910 / 10
K40部分正解通過8 / 912 / 12
K41部分正解通過5 / 560 / 60
K42通過通過14 / 1444 / 44
K43失敗通過未評価17 / 17
K44通過通過15 / 1522 / 22
K45通過通過18 / 1835 / 35
K46通過通過未評価未評価
K47通過通過20 / 2022 / 22
K48部分正解通過16 / 1636 / 36
K49通過通過21 / 2122 / 22
K50通過通過18 / 1834 / 34
「通過」は、保存された採点基準上の判定です。全項目が正しいことを意味しません。ケースIDには、書類名や内容を含めていません。 CSV ↓ · JSON ↓
仕組みと検証条件を読む

保存されたv2の判定は、採点基準を通過した書類が48件、部分正解が2件、失敗が0件です。値の一致は1,518値中1,516値、明細行は期待196行・抽出196行と記録されています。同じケースを対応させると、部分正解10件と失敗1件が成功に変わった一方、成功から部分正解へ下がったケースも1件ありました。この退行も比較の一部です。

「通過」は、保存された採点基準上の判定です。すべての細部が正しいという意味ではありません。K12は69値中68値の一致で通過しています。逆にK19は、評価した41値がすべて一致していても、欠落情報を含めた書類全体の判定では部分正解です。この違いを直接読めるよう、ケース表には両方の列を残しています。

この記録が確かめられる範囲

どちらの回でも、LLM採点器が捏造と記録した値は0件でした。合算の2,225値は、同じ50書類に対する2回の評価です。独立した試験の件数ではなく、検出0件も「値を捏造しない」という一般的な保証ではありません。採点器と人の判定の一致率は測定していません。

評価日は2026年7月6日、モデル提供元への直接経路と記録されています。この表は、残っている判定ファイルを再集計して作りました。元画像は手元になく、採点モデルの識別子も保存されていません。公開した数値から合計は計算し直せますが、原本の再採点や同じセットでの再実行はできません。モデルや接続経路を変えた環境に、この成績をそのまま持ち越すこともできません。

KAMIWAZAは、範囲を定めたプロトタイプです。承認ステップは設計として表示するもので、承認・差戻しは実行しません。生成データも再読込では保持されません。紙からアプリを起こす仕組みの実演と、継続して業務を預かる製品の間には、この実装差があります。

根拠と確認方法

確認方法と範囲

v1の707値、v2の1,518値のうち、LLMが捏造と判定した値は0件でした。この50書類での結果であり、合格判定は全項目の正解を意味しません。

56チーム中、ファイナリスト。

日本語の技術記事を読む ↗

制作中

KAMIWAZAのクラウド実装

書類からアプリを作る仕組みを、クラウド上の実装へ広げています。