AISpect(AI OCR)の生成AIのプロンプト設定を進めていく中で、
「抽出時の条件を増やしたら、読み取り結果が不安定になった」
というお問い合わせをいただく場合があります。
一見すると、条件を細かく指定すればするほど精度は上がりそうですが、
実際の現場では逆の結果になることも多くあります。
プロンプトが長いほど、出力は不安定になる
結論から言うと、
プロンプトが長くなるほど、出力の揺らぎは大きくなります。
例えば、
- 条件が3つ程度 → 比較的安定
- 条件が10個以上 → 解釈がぶれやすくなる
というのは、生成AIではよくある挙動です。
なぜプロンプトが長いと不安定になるのか
生成AIは複数の指示を同時に処理することができますが、
条件が増えるほど、どの指示を優先すべきかの判断が曖昧になります。
その結果、次のような問題が発生します。
- 一部の条件が無視される
- 指示の解釈が揺らぐ
- 帳票内の項目と値の対応関係が崩れる
特に帳票読み取りの場合は、
「どの値がどの項目に属するか」という対応づけが重要なため、
この揺らぎがそのまま精度低下につながります。
AISpectで起きやすい理由
通常の生成AIでは、
解釈が曖昧な場合にユーザーへ確認する仕組みがあります。
例えば、
「この指示で正しいですか?」
「追加情報を教えてください」
といったやり取りです。
一方でAISpectは、
業務フローの中で自動実行されることを前提に設計されており、
- ユーザーとの対話なし
- 1回の処理で結果を出力
という動作になります。
この設計により、
条件が多すぎる場合AIが判断しきれない、
という状況が発生し、結果の揺らぎにつながります。
プロンプトは「シンプルで分かりやすく」
この問題の解決方法はシンプルで、
プロンプトを整理して、解釈しやすくすることです。
以下のポイントが重要です。
① 簡単な条件は項目とセットで書く
条件をまとめて箇条書きにするのではなく、
項目ごとに紐づけて記述します。
この時、例を一緒に記述することで、
よりAIが理解しやすくなります。
❌ダメな例
# 項目
日付
製品名
仕様コード
数量
# 条件
・日付はYYYY/MM/DD形式で出力
・仕様コードはアルファベットと数字を含むコードで、製品名の下あたりにあります
・仕様コードの「数字 + コロン(:)」で始まる項目については、先頭の数字とコロンを無視し、
その後に続く文字列のみを抽出してください。
・数量が記載されていない場合は出力しないでください
👍いい例
# 項目
日付(YYYY/MM/DD形式で出力)
製品名
仕様コード(例:5:X01234→X01234。製品名の右下)
数量
# 条件
・数量が記載されていない場合は出力しないでください
上記のように、各項目に関する指示は項目の後ろに記載し、全体に関わる指示は条件に記載するようにします。
また文章で細かく指示するのではなく、
例を書くだけで精度を簡単に上げることが可能です。
② 曖昧な指示は入れない
以下のような指示は一見よさそうですが、
読み取り結果がよくなることはありません。
- 正確に抽出してください
- 間違えずに読み取ってください
- しっかり確認してください
これらは具体的な処理内容ではないため、
かえってAIの判断を曖昧にする要因になります。
③ 出力内容を具体的にする
項目名が曖昧な場合、
AIは「何を出力すべきか」を正しく判断できません。
たとえば「工程1、工程2、工程3を読み取って」という指示に対して、
皆さんはどのような内容が記載されているかイメージはつきますか?
答えはノーです。
では「生産数_工程1、生産数_工程2、生産数_工程3」のような書き方ではいかがでしょうか。
この場合は「各工程の生産数を読み取りたい」ということが分かりますね。
実際の帳票に「生産数」という表現がなかったとしても、
「生産数_工程1」と指示することで生成AIは「工程1の数字を取ればいい」と理解します。
そのため、より分かりやすい項目指示を行うことが重要です。
まとめ
プロンプトは、長くすれば精度が上がるわけではありません。
むしろ、
- 条件が増えすぎると解釈が曖昧になる
- 項目と条件の関係が崩れる
- 結果として出力が不安定になる
という問題が発生します。
改善のポイントはシンプルで、
- 条件は項目ごとに整理する
- 曖昧な指示は入れない
- 出力内容を具体的にする
といった基本を押さえることです。
プロンプトが複雑になってきたと感じた場合は、
一度シンプルな形に戻して整理することで、
読み取りの安定性を大きく改善できる可能性があります。