味噌の醸造所が手書きの仕込み・天地返し・熟成点検の記録を読み取り、桶ごとの熟成の台帳と出荷の予定表を作る
蔵の中で手書きする仕込み・天地返し・熟成点検の記録票を読み取り、桶の番号でつないで、桶ごとの熟成の台帳を更新します。熟成の予定の月が来る桶と、天地返しが遅れている桶を、出荷の予定表の下書きにまとめます。
- 生成AI
- Azure OpenAI Service/ChatGPT/Claude
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Python
- 対象業界
- 小売/製造
- 対象部門
- 品質管理/生産
- 対象業務
- データ入力・転記/台帳・マスタ管理
- 主な課題
- 入力作業が多い/属人化している/期限・対応漏れが起きる
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/属人化解消/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 職人が蔵の中で、仕込み・天地返し・熟成点検のたびに記録票を書き、事務所の箱に入れる
- 事務の担当が週に2回、箱から記録票を出し、種類ごとに分ける
- 1枚ずつ読み、桶の番号から台帳の行を探して、日付・量・状態を写す
- 字が読めない、桶の番号が台帳に無いものは、付箋を付けて職人に聞きに行く
- 月末に、製造の責任者が台帳と記録票の束を見ながら、翌月以降に出せそうな桶を書き出す
- 天地返しの予定が過ぎている桶に気づいたら、職人に声をかける
- 書き出した候補をもとに、漉し・包装の予定と、直売所・通信販売の在庫の見込みを決める
- 人職人が蔵の中で記録票を書き、事務所の複合機でスキャンする(または蔵のタブレットで撮影する)
- 自動毎日夕方、共有フォルダに入った画像とPDFをスクリプトが拾い、形式・寸法・ページ数を確かめる
- 自動Azure AI Document Intelligence のレイアウトモデルが、表・チェック欄・手書きかどうか・単語ごとの信頼度を返す
- 自動生成AIが、読み取った表を記録票の種類ごとの項目(桶の番号、日付、量、状態)に書き分ける
- 自動スクリプトが桶の番号を桶のマスタと照合し、台帳の更新の案を作る
- 自動仕込み日と予定の熟成期間から、予定の月・天地返しの予定日を計算し、出荷の予定表の下書きを作る
- 人事務の担当が、照合できなかった記録票と信頼度の低い項目だけを画像と見比べて直す
- 人製造の責任者が出荷の予定表の下書きを見て、実際に味見をする桶を決める
- 人味見の結果で、漉し・包装に回す桶と月を確定し、台帳に書き込む
各工程の詳しい説明を読む
- 職人が蔵の中で、仕込み・天地返し・熟成点検のたびに記録票を書き、事務所の箱に入れる
- 事務の担当が週に2回、箱から記録票を出し、種類ごとに分ける
- 1枚ずつ読み、桶の番号から台帳の行を探して、日付・量・状態を写す
- 字が読めない、桶の番号が台帳に無いものは、付箋を付けて職人に聞きに行く
- 月末に、製造の責任者が台帳と記録票の束を見ながら、翌月以降に出せそうな桶を書き出す
- 天地返しの予定が過ぎている桶に気づいたら、職人に声をかける
- 書き出した候補をもとに、漉し・包装の予定と、直売所・通信販売の在庫の見込みを決める
(a)写す作業が週2回では追いつかない。 1枚の記録票を読み、140行の台帳から桶の行を探し、写すまでに数分かかります。束が厚くなるほど後回しになり、台帳は常に1〜2週間遅れています。 遅れた台帳では、月末の出荷の見込みに使えません。
(b)桶の番号が書き間違えられている。 「A-12」を「A-21」と書く、「12」とだけ書いて蔵の棟を書かない、といった誤りは月に何枚か出ます。別の桶の行に写すと、ある桶には天地返しが2回あり、別の桶には0回になります。 写す側は番号を信じるしかなく、気づくのは出荷の直前です。
(c)天地返しの遅れは、誰かが気づくまで残る。 天地返しは仕込みから数か月後と決めていても、繁忙期には後回しになります。予定の日が台帳に書かれていないので、遅れていることを示すものがありません。 責任者が束をめくって気づくか、点検の所見で「たまりが多い」と書かれて初めて分かります。
(d)出荷の見込みが1人の頭の中にある。 5番目の作業は、台帳だけを見て同じ答えが出せる状態になっていません。
- 【人】 職人が蔵の中で記録票を書き、事務所の複合機でスキャンする(または蔵のタブレットで撮影する)
- 【自動】 毎日夕方、共有フォルダに入った画像とPDFをスクリプトが拾い、形式・寸法・ページ数を確かめる
- 【自動】 Azure AI Document Intelligence のレイアウトモデルが、表・チェック欄・手書きかどうか・単語ごとの信頼度を返す
- 【自動】 生成AIが、読み取った表を記録票の種類ごとの項目(桶の番号、日付、量、状態)に書き分ける
- 【自動】 スクリプトが桶の番号を桶のマスタと照合し、台帳の更新の案を作る
- 【自動】 仕込み日と予定の熟成期間から、予定の月・天地返しの予定日を計算し、出荷の予定表の下書きを作る
- 【人】 事務の担当が、照合できなかった記録票と信頼度の低い項目だけを画像と見比べて直す
- 【人】 製造の責任者が出荷の予定表の下書きを見て、実際に味見をする桶を決める
- 【人】 味見の結果で、漉し・包装に回す桶と月を確定し、台帳に書き込む
7番目が、この構成の分かれ目です。人が見るのは、照合できなかったものと信頼度の低い項目だけです。 300枚を全部開き直すと、30.0時間はほとんど減りません。
8番目と9番目は、AIを入れても人の仕事として残します。 予定表の下書きは「予定の月が来た」という事実を並べたもので、出してよいかの答えではありません。 責任者が判断する材料を、束をめくらずに手元にそろえるところまでが、この構成の役目です。
02今回想定するシステム構成
記録票(仕込み/天地返し/熟成点検) │ 複合機でスキャン、または蔵のタブレットで撮影 ▼【トリガー】毎日17時、共有フォルダの新しいファイル Python スクリプト(事務所のPCでタスクとして実行) ├──▶ 形式・寸法・ページ数の確認、記録票の種類の判定(様式の見出しの文字) ▼ Azure AI Document Intelligence(レイアウトモデル prebuilt-layout) │ 表のセル・チェック欄(☒/☐)・手書きの行・単語の信頼度 ▼ Azure OpenAI(Microsoft Foundry)── 表を記録票の種類ごとの項目へ書き分ける ▼ Python ── 桶のマスタと照合/経過の月数・予定の月・天地返しの予定日の計算 ▼ 台帳の更新の案(確認待ち) + 出荷の予定表の下書き ▼ 【人】事務が照合できなかったものを直す → 責任者が味見する桶を決める
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence(レイアウトモデル) | Google Document AI |
| 生成AI | Azure OpenAI(Microsoft Foundry)(表の項目への書き分け) | Claude API、OpenAI API |
| 連携 | Python(ファイルの受け取り、APIの呼び出し、照合と日付の計算、台帳への書き出し) | Google Apps Script |
| 保管 | 社内の共有フォルダ(記録票の画像、読み取りの結果、更新の案) | クラウドのストレージ |
桶ごとの台帳のスプレッドシートは、新しく足すものではありません。 いまの台帳に「天地返しの日」「最後の点検日と所見」「予定の熟成期間」「予定の月」の列を足し、更新の案を確かめてから書き込みます。
土台になるのは、Azure AI Document Intelligence のレイアウトモデルです。 文書から文字・表・チェック欄などの選択マーク・文書の構造を取り出すモデルで、手書きの文字の対応言語に日本語(ja)が含まれています。 言語の指定は任意で、公式のページは「言語が確かでない限り指定しない」よう勧めています。
入力はPDFと画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)です。 PDFとTIFFは2,000ページまで(無料のレベルでは最初の2ページだけ)、ファイルの大きさは有料(S0)のレベルで500MB、無料(F0)のレベルで4MBです。画像の寸法は50×50から10,000×10,000ピクセル、取り出せる文字の高さの下限は1024×768の画像で12ピクセル(150dpiで約8ポイント)とされています。
この題材で効くのは3つの返り値です。 表のセルが行と列の番号付きで返ること、チェック欄が位置・信頼度・状態(selected/unselected)付きで返ること、そして行ごとに手書きかどうか(isHandwritten)が信頼度付きで返ることです。単語ごとにも信頼度が付きます。様式に印刷された文字と、職人が書き込んだ文字を分けられるので、空欄の検出に使えます。
手引書も確認しておきます。 厚生労働省のページに掲載されている味噌製造の HACCP の手引書(全国味噌工業協同組合連合会)は、米味噌の工程を「混合仕込→発酵・熟成→漉し→金属探知→包装→出荷」と示し、一連の記録を3年間は保管しておくよう書いています。熟成の記録の保管も3年にそろえます。
03どうやって実装するのか
処理の起点を決める
毎日17時に、共有フォルダに入った新しいファイルを処理します。 蔵の作業は朝から夕方までで、記録票は作業のたびに書かれます。夕方にまとめて読めば、翌朝には前日の記録が台帳の更新の案になっています。
ファイルの保存ごとに動かす形にはしません。同じ桶の仕込みと天地返しが同じ日に書かれることがあり、1日分をまとめて照合したほうが、桶の番号の書き間違いに気づきやすいからです。 1日分の記録票を並べると、「A-12 に天地返しが2枚、A-21 に0枚」のような偏りが見えます。
入る経路は2つです。事務所の複合機でスキャンしたPDFと、蔵のタブレットで撮影した画像です。どちらも同じフォルダに入れ、そこから先は区別しません。処理が終わったファイルは処理済みのフォルダへ移し、移すのは読み取りと書き出しの両方が成功したときだけにします。 元のフォルダに残っている数が、そのまま未処理の数になります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 記録票の画像・PDF | 仕込み/天地返し/熟成点検の3種類。撮影日時と経路 | 共有フォルダ |
| 読み取りの結果 | 表のセル(行・列の番号)、チェック欄の状態と信頼度、手書きかどうか、単語の信頼度、Markdown の本文 | Azure AI Document Intelligence |
| 桶のマスタ | 桶の番号、蔵の棟、容量、材質(木桶/樹脂)、いま入っている仕込みのロット | 自社で用意する表 |
| 商品の熟成の決まり | 商品ごとの予定の熟成期間(月数)、天地返しの目安(仕込みから何日後か) | 製造の責任者が決めた表 |
| 現在の台帳 | 桶ごとの仕込み日、天地返しの日、最後の点検、予定の月 | 桶ごとの台帳 |
質を決めるのは、桶のマスタと商品の熟成の決まりです。 マスタが無ければ、読み取った桶の番号が実在するかを確かめられません。熟成の決まりが無ければ、予定の月も天地返しの予定日も計算できず、台帳は「写した記録の集まり」で止まります。
熟成の決まりは、責任者の頭の中から表に出す必要があります。 「麦の1年物は仕込みから3か月前後で天地返し」のような目安を、商品ごとに1行ずつ書き出します。これがこの構成でいちばん時間のかかる準備で、AIの有無にかかわらず、責任者が休んでも出荷の見込みが立つようにするために要る作業です。
データの取得方法を決める
読み取りは、スクリプトからレイアウトモデルを呼ぶだけです。このとき出力の形式を Markdown にします(outputContentFormat=markdown)。 v4.0(2024-11-30 GA)では、Markdown の表は結合セルや複数行の見出しを表せる HTML の表になり、チェック欄は ☒ と ☐ の文字で表されます。生成AIに渡すのは、この Markdown の本文です。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| Markdown の本文 | content | 生成AIに渡し、項目へ書き分けさせる |
| 表のセル | tables の cells(rowIndex・columnIndex・columnSpan) | 行と列のずれの確認 |
| チェック欄 | pages の selectionMarks(状態と信頼度) | 点検の所見(カビ・たまり・異臭など)の有無 |
| 手書きかどうか | styles の isHandwritten と信頼度 | 様式の印刷の文字と書き込みを分ける |
| 単語の信頼度 | pages の words の confidence | 低いものを人の確認に回す |
記録票の種類は、生成AIに渡す前にスクリプトで決めます。 様式の上端に「仕込記録」「天地返し記録」「熟成点検表」と印刷しておき、手書きでない行(isHandwritten が付かない行)からこの文字を探します。種類をAIに推させないことで、書き分けの指示を種類ごとに短くできます。
ロットの番号は仕込みのときにしか書かれないので、 天地返しと点検の記録は桶の番号だけでつなぎます。
AIへ渡す前に整形する
- 形式の確認 … PDFまたは画像であることを確かめます。撮影の画像が HEIF で届いても、そのまま入れられます
- ページ数と大きさの確認 … 有料(S0)のレベルで500MB、PDFとTIFFは2,000ページまで。実際の記録票は1〜2ページなので、超えるのは束ごとスキャンした場合だけです
- 画像の寸法の確認 … 50×50から10,000×10,000ピクセルの間であることを確かめ、範囲外は撮り直します
- 文字の大きさの確認 … 1024×768の画像で12ピクセルが下限です。鉛筆のかすれた字は、この下限より先に読めなくなります
- 1枚に1つの記録票かの確認 … 公式のページは、写真やスキャンは1文書につき1枚の鮮明なものを勧めています。2枚を重ねて撮ったものは撮り直します
- 重複の検知 … 同じ桶・同じ日付・同じ種類の記録票が直近にあれば、二重のスキャンとして印を付けます
4番目を軽く見ないでください。 蔵の中の記録票は、濡れた手で触られ、味噌の色が付きます。読めないのは字の癖より紙の汚れのことが多く、 スキャンの濃さを上げるか、記録票を透明のファイルに入れて書くほうが効きます。
AIに処理させる
させるのは、読み取った記録票の本文を、種類ごとに決めた項目へ書き分けることだけです。 書いていないことを補わせず、日付の計算もさせません。
| 記録票の種類 | 書き分ける項目 | 判断できないときの扱い |
|---|---|---|
| 仕込み | 桶の番号、仕込み日、商品の区分(米・麦、熟成の期間)、大豆・米麹(麦麹)・塩の量、種水の量、担当 | 量の単位が書かれていなければ単位を空にして unit_missing |
| 天地返し | 桶の番号、実施日、移し替え先の桶の番号(ある場合)、所見のチェック、担当 | 移し替え先が書かれていなければ空のまま |
| 熟成点検 | 桶の番号、点検日、所見のチェック(カビ・たまり・異臭・重石のずれ)、色と香りのメモ、担当 | チェック欄の信頼度が低ければ uncertain |
| 共通 | 読み取った文字列そのもの(根拠) | 桶の番号が読めなければ unreadable |
右端の列で次の作業が変わります。 空欄は職人に聞く、unreadable は撮り直す、uncertain は画像を見る、です。
略し方の書き分けは、言い換えの一覧で行います。 「天返」「天地」「切返し」は天地返し、「タマリ多」「たまり有」は所見の「たまり」というように、蔵で使われている略し方を一覧にして指示に添えます。 一覧にない言葉は、原文のまま「その他のメモ」に入れさせます。
| させないこと | 理由 |
|---|---|
| 熟成が十分か、出してよいかの判断 | 色・香り・味を見る責任者の仕事。記録票の文字からは分からない |
| 日付の計算(経過の月数・予定の月) | スクリプトで計算する。AIに数えさせると月末や閏年で外れる |
| 桶の番号の補完・訂正 | 「12」を「A-12」と推して埋めない。照合はスクリプトの側で行う |
| 量の換算 | 「1俵」「1袋」などをkgに直さない。単位はそのまま写す |
| 所見の重さの評価 | 「カビ少々」を問題なしと読み替えない。チェックとメモをそのまま写す |
いちばん起きやすいのは3行目です。 桶の番号の棟の記号が抜けていると、AIは前後の記録票から「たぶん A 棟」と補います。補った番号で照合が通ると、間違いが台帳まで素通りします。 補わせず、照合できないものとして人に回します。
指示内容を固定する
あなたは味噌の醸造所で、蔵の記録票を台帳の項目に書き分ける係です。
渡すのは、OCR が読み取った記録票1枚分の本文(Markdown)と、記録票の種類です。
本文に書かれていることだけを使ってください。推測で埋めないでください。
【記録票の種類】{record_type}(shikomi / tenchigaeshi / tenken のいずれか)
【書き分ける項目】
- tank_no:桶の番号。書かれた文字のまま。棟の記号が無くても補わない
- date:日付。書かれた文字のまま(例「10/14」「R8.10.14」)。年を補わない
- product:商品の区分(仕込みのときだけ)。書かれた文字のまま
- amounts:大豆・麹・塩・種水の量と単位(仕込みのときだけ)
- move_to_tank:移し替え先の桶の番号(天地返しのときだけ。無ければ空)
- findings:所見のチェック欄。☒ を checked、☐ を unchecked として写す
- memo:色・香り・その他の手書きのメモ。原文のまま
- worker:担当の名前または印。書かれた文字のまま
【status の付け方】(項目ごと)
- ok ............ 値が読み取れている
- blank ......... 欄はあるが何も書かれていない
- unreadable .... 文字はあるが読めない
- uncertain ..... 読めたが確かでない(チェック欄の判定が怪しい、字が二通りに読める)
迷ったときに ok を選ばないでください。
【厳守事項】
- 桶の番号・日付・量を補ったり直したりしないでください。
「12」は「12」のまま。前後の記録票から棟を推さないでください。
- 日付から経過の月数や予定の月を計算しないでください。
- 量の単位を換算しないでください。単位が書かれていなければ unit を空にしてください。
- 所見のメモを要約したり、問題の有無を判断したりしないでください。
- 熟成が十分か、出してよいかについて書かないでください。
- 略し方の一覧にある言葉は一覧のとおりに直し、
一覧に無い言葉は memo に原文のまま入れてください。
- evidence には、その項目の根拠にした文字列をそのまま写してください。
- 記録票でない紙と判断した場合は、record_type_mismatch を true にして、
項目を書き分けないでください。
【略し方の一覧】{abbreviation_list}
【記録票の本文】{markdown_content}
「棟を推さない」と名指しで書かないと、補います。 同じ日の記録票の多くが A 棟なら、AIはそれを手がかりに埋めます。禁じるのは「それらしい値に寄せる」ことそのものです。
出力形式を固定する
次の形の JSON で受け取ります。 Azure OpenAI の構造化出力で、response_format に json_schema と strict: true を指定します。
{
"record_type": "shikomi | tenchigaeshi | tenken",
"record_type_mismatch": false,
"items": [
{ "field": "tank_no", "value": "A-12", "unit": "",
"status": "ok | blank | unreadable | uncertain", "evidence": "A-12" }
],
"findings": [
{ "label": "たまり", "state": "checked | unchecked", "status": "ok | uncertain" }
],
"memo": "",
"other_words": []
}
1つ目の理由は、構造化出力の決まりに合わせて、あとの処理を固定できることです。 公式のページによると、構造化出力ではすべての項目を required にし、すべての object に additionalProperties: false を付けます。任意の項目は、null との組み合わせの型で表します。項目が抜けることが無いので、スクリプトは毎回同じ列を読めます。
2つ目は、文字列の長さや数値の範囲の制約に頼らない設計にしてあることです。 Azure OpenAI の構造化出力は、文字列の minLength・maxLength・pattern・format、数値の minimum・maximum、配列の minItems・maxItems などに対応しません。桶の番号の形(英字1文字と数字2桁)や量の範囲は、スキーマではなくスクリプトの側で確かめます。 1つの schema の object のプロパティは合計100個まで、入れ子は5段までという上限にも収まる形にしてあります。
3つ目は、status と台帳の更新を別の層に置けることです。 AI が付けるのは項目ごとの status までで、台帳へ書き込むか・人に回すかはスクリプトの規則で決めます。
| 条件 | スクリプトの扱い |
|---|---|
桶の番号が ok で、マスタに1件だけ当たる | 台帳の更新の案に入れる |
| 桶の番号がマスタに無い、または複数に当たる | tank_not_found として事務の確認へ |
日付が ok だが、前回の記録より前の日付 | date_order_error として事務の確認へ |
unreadable または uncertain が1つでもある | 画像と並べて事務の確認へ |
record_type_mismatch が true | 記録票でない紙として除き、担当へ戻す |
日付が前回より前の記録は、日付か桶の番号のどちらかが誤っています。 どちらかは決めずに、両方を人に見せます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 共有フォルダ | スクリプトが読む | 新しい記録票の画像・PDF を拾う |
| Azure AI Document Intelligence | API の呼び出し | 表・チェック欄・手書きかどうか・信頼度を返す |
| Azure OpenAI(Microsoft Foundry) | API の呼び出し | 本文を項目へ書き分ける |
| 桶のマスタ・熟成の決まり | スプレッドシートの読み取り | 照合と予定の計算に使う |
| 桶ごとの台帳 | 更新の案を別のシートに書き出す | 人が確かめてから本体へ移す |
| 出荷の予定表 | 下書きを別のシートに書き出す | 責任者が見て味見の桶を決める |
台帳の本体には直接書き込みません。 更新の案は「確認待ち」のシートに書き出し、事務の担当が確かめたものだけを本体へ移します。桶の番号を1つ取り違えた更新を本体に入れると、2つの桶の熟成の履歴が同時に壊れます。
出荷の予定表の下書きは、計算の結果だけを載せます。 載せるのは「予定の月が今月か来月の桶」「天地返しの予定日を過ぎて記録が無い桶」「直近の点検でカビ・たまり・異臭にチェックがある桶」の3つの一覧です。3つ目は所見の有無を並べるだけで、良し悪しは書きません。
人が確認する
人が開くのは、照合できなかったもの・日付の前後がおかしいもの・unreadable と uncertain を含むものだけです。 それ以外の更新の案は、桶の番号と日付を一覧で流し見て本体へ移します。
- 照合できなかったものを先に見る … 画像を開き、桶の番号を目で読みます。多くは棟の記号の書き忘れで、書いた職人に聞けば1分で解決します
- 日付の前後がおかしいものを見る … 前回の記録と並べ、どちらが誤っているかを決めます
- 信頼度の低い項目を見る … チェック欄の判定と、かすれた数字を画像と見比べます
- 直したら記録する … どの項目を、何から何へ直したかを残します
責任者は出荷の予定表の下書きを見て、味見をする桶を選び、味見の結果で出す月を決めます。
目標は、300枚をならして1枚2分です。 開くのは2割前後という想定で、それより多い月は、紙の汚れが増えているか、桶のマスタが実際の配置とずれています。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワード付きのPDF | 送信の前にロックを外す必要がある。複合機の設定を見直す |
| 画像の寸法が範囲外、文字が小さすぎる | 50×50〜10,000×10,000ピクセル、12ピクセルの下限を下回るものは撮り直し |
| 記録票の種類が判定できない | 見出しが読めないもの。種類を人が選んで再投入する |
| 桶の番号がマスタに無い | tank_not_found。棟の記号の書き忘れをまず疑う |
| 同じ桶に同じ日の天地返しが2枚 | 二重のスキャンか、別の桶の書き間違い。両方を人に見せる |
| 天地返しで別の桶へ移した | 移し替え先の桶にロットを引き継ぎ、元の桶を空にする案を作る。本体へは人が移す |
| チェック欄が二重に付いている | uncertain。消した跡と新しいチェックを区別できないことがある |
| 読み取りや書き分けが応答しない | ファイルを元のフォルダに残し、翌日に再処理する |
| 生成AIの入力が安全の判定で止まる | 原文の Markdown をそのまま確認待ちに回し、人が項目を埋める |
大半は紙の扱いと記録票の書き方の問題です。 桶の番号の欄に棟の記号を印刷しておくだけで、照合できない記録票は大きく減ります。
記録を残す
- 元の記録票の画像・PDF と、撮影日時・経路(スキャン/タブレット)
- レイアウトモデルが返した JSON の全文と Markdown の本文
- 生成AIの書き分けの結果(
items、findings、status)と、そのとき使った略し方の一覧の版 - 照合の結果と、台帳の更新の案
- 人が直した記録 … どの項目を、何から何へ直したか、誰が直したか
- 出荷の予定表の下書きと、責任者が味見をして決めた結果
略し方の一覧の版を残すのは、 新しい職人が入ると一覧が増え、過去の書き分けをやり直す範囲を決めるのに要るためです。
保管の期間は3年にそろえます。 先に見た手引書が、衛生管理の一連の記録を3年間保管するよう書いているためで、熟成の記録も同じ棚・同じ期間で管理すると、保健所の求めにも同じ場所から出せます。
04実装レベルの3段階
本記事の想定は半自動化です。 1枚6分が2分になる見込みは、この段階で置いています。差が大きいのは、桶の行を探して写す作業と、日付を数える作業が無くなるからです。 本格構成は、半自動化を数か月回してからにします。 在庫の見込みまで下書きすると、熟成の決まりの表の誤りがそのまま販売の数字に出るためです。
05工数削減シミュレーション
導入後 300件 × 2分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 木桶や樹脂の仕込みタンクを数十〜数百本持ち、熟成の期間が半年〜2年に分かれる味噌の醸造所。仕込み・天地返し・熟成点検の記録を蔵の中で紙に手書きし、事務所でスプレッドシートの台帳へ写している場合。どの桶がいつ出せるかを製造の責任者が頭の中で把握していて、休むと出荷の予定が立たない場合。毎月仕込みがあり、記録の様式を蔵の中で統一できる場合。
- 桶が十本ほどで、壁の黒板で全体が見渡せる規模の場合。仕込みと点検の記録をすでにタブレットで入力していて、紙が残っていない場合(読み取りは要らず、入力の画面を整えるほうが早く済みます)。記録の様式が担当者ごとにばらばらで、そろえる予定が無い場合。なお、熟成が十分か・出荷してよいかの見極めは、この構成では行いません。
07最小構成で試す方法
- 先月の記録票から、仕込み・天地返し・熟成点検を10枚ずつ、計30枚選ぶ(うち数枚は、字がかすれたものや汚れたものを入れる)
- その30枚について、事務の担当が台帳に写した結果を取り出しておく
- 30枚をスキャンし、Document Intelligence Studio でレイアウトモデルにかけて、表とチェック欄がどう返るかを見る
- 返ってきた Markdown を手元の生成AIの画面に貼り、「桶の番号・日付・量・所見を、書かれたとおりに項目に分けてください。書かれていないものは空のままにし、補わないでください」と指示する
- 出てきた項目を、台帳に写した結果と突き合わせる
30枚は必ず種類を混ぜてください。 仕込みの記録票は項目が多く、点検の記録票はチェック欄が中心で、読み取りでつまずく場所が違います。
| 出てきた内容 | 判断 |
|---|---|
| 台帳と同じ値が出た | スクリプトと照合の作成に進む |
| 棟の記号を補った、日付の年を補った | 指示の書き方で直る。構成は有効 |
| チェック欄の判定が多く外れた | 様式のチェック欄が小さすぎる。 様式を直してから取り直す |
| かすれた字が読めない枚数が多い | 紙の扱いとスキャンの設定が先。 AI の問題ではない |
3行目と4行目は、様式と書く道具の問題です。 チェック欄を大きくする、鉛筆をボールペンに替える、透明のファイルに入れて書く、のどれかで変わります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 棟の記号が抜けた桶の番号を AI が補う | 補わせない。 照合できないものとして人に回す |
| 日付の年や経過の月数を AI が埋める | 日付は書かれたまま写させ、計算はスクリプトで行う |
| チェック欄の判定が外れる | 欄を大きくし、☒/☐ と信頼度を見る。消した跡は uncertain |
| 濡れた紙・味噌の色で字が読めない | 透明のファイルに入れて書く。スキャンの濃さを上げる |
| 様式の印刷の文字を値として拾う | isHandwritten で書き込みと印刷を分ける |
| 略し方が一覧に無い | 原文のまま memo に入れさせ、月に1回一覧を足す |
| 天地返しで桶を移すと履歴が切れる | 履歴をロットの行で持つ |
| 熟成の決まりの表が無い | 予定の月が計算できない。責任者と最初に作る |
| 予定表の下書きを出荷の決定と読む | 表の題に「味見の候補」と書く。決めるのは責任者 |
| 台帳の本体へ自動で書き込む | 確認待ちのシートを挟む |
上の2行が、この構成の失敗のほとんどです。 どちらも「それらしい値で埋める」という同じ動きから出ています。埋めた値が正しいかではなく、書かれていないという事実が消えることが問題です。
下の2行も早く効いてきます。 味見をせずに予定の月だけで出すと、熟成の足りない味噌が直売所に並びます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 桶ごとの仕込みの配合(大豆・麹・塩・種水の量)、熟成の期間、点検の所見、担当の職人の名前です。配合と熟成の期間は、蔵の味を決める営業上の情報です。
- 外部へ渡す範囲を、記録票1枚分に限る … 生成AIに渡すのは1枚分の Markdown と略し方の一覧だけです。商品ごとの熟成の決まりの表や、台帳の全体は渡しません。 照合と計算はスクリプトの側で行います
- 読み取りと生成AIのリソースの地域を決めておく … Azure のリソースを作るときに地域を選びます。記録票の画像と配合の数字がどこで処理されるかを、導入の前に社内で確かめてください
- この構成は熟成の見極めを代替しません … 予定の月が来た桶を並べるだけです。出してよいかは、色・香り・味を見て責任者が決めます
- 所見の欄を AI に評価させない … 「カビ少々」「たまり多」を問題なしと読み替えさせないでください。品質上の判断は品質管理の担当と責任者のものです
- 担当の職人の名前は、記録の確認のためだけに使う … 個人の評価に使わないでください
- 元の記録票を原本として残す … 読み取りの結果は写しです。紙またはスキャンの画像を原本とし、3年間保管します
誤りが起きた場合のリスクは、桶の番号の取り違えで2つの桶の履歴が壊れることと、予定表の下書きを出荷の決定と取り違えることの2つです。 前者は補わせない指示と確認待ちのシートで、後者は表の題と責任者の味見で防ぎます。どちらも、AI に判断を渡さない設計で守ります。
10まず何から始めるか
1週目:桶のマスタと熟成の決まりの表を作る
140本の桶の番号・棟・容量・材質を書き出し、責任者と、商品ごとの予定の熟成期間と天地返しの目安を表にします。 仕込みの多い商品から埋めます。
2週目:30枚で試す
仕込み・天地返し・熟成点検を10枚ずつ選び、Studio で読み取って生成AIに項目へ分けさせます。台帳に写した結果と突き合わせ、棟の記号や日付の年を補っていないかを最優先で見ます。
3週目:記録票の様式を直す
様式の上端に種類の見出しを、桶の番号の欄に棟の記号を印刷します。チェック欄を大きくし、記録票を透明のファイルに入れて書く運用を蔵で試します。
4週目:毎日の読み取りと照合をつなぐ
スクリプトで共有フォルダを読み、レイアウトモデルと生成AIを呼び、桶のマスタと照合して確認待ちのシートに書き出すところまで作ります。この時点では出荷の予定表を出さず、更新の案だけを見ます。
2か月目: 熟成の決まりの表から予定の月と天地返しの予定日を計算し、出荷の予定表の下書きを出します。3か月目以降: 確認に回る枚数と、責任者が味見で決めた月と予定の月の差を毎月数えます。予定の月と責任者の判断がおおむね合い、責任者が休んでも予定表から味見の候補が選べるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
Read と Layout のモデルの手書きの対応言語に日本語(ja)が含まれること。言語の指定は任意で、言語が確かでない限り指定しないよう勧めていること | Microsoft Learn: Language support for Read and Layout | 2026-10-29 |
| レイアウトモデルが文字・表・選択マーク・構造を取り出すこと。入力がPDFと画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)であること。PDFとTIFFが2,000ページまで(無料は最初の2ページ)、大きさがS0で500MB・F0で4MBであること。画像が50×50〜10,000×10,000ピクセル、文字の高さの下限が1024×768で12ピクセル(150dpiで約8ポイント)であること。パスワード付きPDFは送信前に解除が要ること。表のセルが行・列の番号と結合の幅付きで返ること。選択マークが位置・信頼度・状態(selected/unselected)付きで返ること。行ごとに手書きかどうかが信頼度付きで返り、単語に信頼度が付くこと。Markdown 出力(outputContentFormat=markdown)で表が HTML の表、選択マークが ☒/☐ になること | Microsoft Learn: Document layout analysis | 2026-10-29 |
構造化出力が response_format の json_schema と strict: true で使えること。すべての項目を required にし、object に additionalProperties: false を付けること。プロパティは合計100個・入れ子は5段まで。minLength・maxLength・pattern・format・minimum・maximum・minItems・maxItems などに対応しないこと | Microsoft Learn: Structured outputs(Azure OpenAI) | 2026-10-29 |
| 味噌製造の手引書が米味噌の工程を混合仕込→発酵・熟成→漉し→金属探知→包装→出荷と示していること。一連の記録を3年間保管するよう書いていること | 厚生労働省掲載: 味噌製造における「HACCPの考え方を取り入れた衛生管理」のための手引書(全国味噌工業協同組合連合会) | 2026-10-29 |
熟成が十分か、出荷してよいかは、製造の責任者が味見をして決めてください。 本記事は公開されている製品の仕様と資料で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2238)についてのご相談はこちらから。
