本文へスキップ
株式会社オープンナレッジ
株式会社オープンナレッジ Open Knowledge Inc.
1. 基本と全体像

この記事の要点と4つの章のご案内

この記事の3つの要点(まずここだけ読めば安心です)に関するイメージ写真
この記事の3つの要点(まずここだけ読めば安心です)
「チャット画面を前にして手が止まる」を解決する、裏方のAI設計に関するイメージ写真
「チャット画面を前にして手が止まる」を解決する、裏方のAI設計
「AIに何を入力すればいいか分からない」をなくす技術指示文不要の業務AIと「制約付きデコーディング」の科学 の各章におけるテーマと要点一覧表
章構成 主なテーマ 要点と確認ポイント
1. 基本と全体像 この記事の3つの要点(まずここだけ読めば安心です) 「プロンプト(指示文)の書き方研修」が現場の負担になっていませんか?: 忙しい医療・物流・製造・事務の現場で、スタッフ全員に「AIへの上手な命令文の書き方」を覚えてもらうのは非現実的です。本当に使いやすいAIは、画面上の3項目を選ぶだけで裏側で自動的に動くべきです。
2. 現場での進め方と対策 「チャット画面を前にして手が止まる」を解決する、裏方のAI設計 AIの「もっともらしい嘘(ハルシネーション)」と「書式崩れ」をどう防ぐか: 自由なチャット形式でAIに回答させると、存在しない法令番号を作ったり、会計システムに取り込めない文章を出力してしまいます。
3. 関連する制度とルール 3項目UIによる業務自動化とハルシネーション防止手順 まずは本ページの図解と3項目チェックリストでご自身でできる範囲からお試しください。もし設定や判断に迷われたときは、過度な営業のないご相談窓口(お助け隊・お問い合わせ窓口)へいつでもご相談いただけます。
4. 詳しい技術仕様としくみ 文脈自由文法(CFG / JSON Schema)からの決定性有限オートマトン(DFA)構築と Logit Masking 推論制御実装 ——人間がAIに気を使って文章を書くのではなく、3つの選択と数学的な文法制約(FSM / CFG)で100%正確な業務データを出力する
第1章〜第4章では、実務チェックリスト・公的制度基準・詳しい技術仕様を確認できます。
AI工学・自然言語処理・型安全アーキテクチャ 監修・執筆:登録情報処理安全確保支援士(第007617号)・上級医療情報技師 加藤 明生

「AIに何を入力すればいいか分からない」をなくす技術指示文不要の業務AIと「制約付きデコーディング」の科学

——人間がAIに気を使って文章を書くのではなく、3つの選択と数学的な文法制約(FSM / CFG)で100%正確な業務データを出力する

この記事の3つの要点(まずここだけ読めば安心です)

  • 01. 「プロンプト(指示文)の書き方研修」が現場の負担になっていませんか?: 忙しい医療・物流・製造・事務の現場で、スタッフ全員に「AIへの上手な命令文の書き方」を覚えてもらうのは非現実的です。本当に使いやすいAIは、画面上の3項目を選ぶだけで裏側で自動的に動くべきです。
  • 02. AIの「もっともらしい嘘(ハルシネーション)」と「書式崩れ」をどう防ぐか: 自由なチャット形式でAIに回答させると、存在しない法令番号を作ったり、会計システムに取り込めない文章を出力してしまいます。
  • 03. 文脈自由文法(CFG)と有限状態機械(FSM)による「トークンマスク制御」: AIが次の1文字(トークン)を予測する瞬間に、Rustの型定義(JSON Schema)に合致しない文字の確率を数学的に「マイナス無限大(選択確率ゼロ)」へマスクすることで、100%構文エラーゼロの出力を保証します。
第1章:背景と仕組みの図解

1. 「チャット画面を前にして手が止まる」を解決する、裏方のAI設計

多くの企業がAIツールを導入したものの、「結局、一部の詳しい人しか使っていない」「毎回違う書式で出力されて手直しに時間がかかる」という壁に直面しています。その原因は、人間に「白紙のチャット欄」を渡してしまうUI設計にあります。

図1:事象の発生構造と3段階の対策フロー

従来の課題:白紙のチャット欄と自由出力 ・毎回長い指示文(プロンプト)を考える負担 ・担当者によって出力の品質や書式がバラバラ ・AIが勝手な推測(ハルシネーション)を混ぜる ※主な発生要因の整理 表のUI:迷わない「3項目選択」と自動読取 ・01 対象書類(注文書・日報・点検表)を置く ・02 確認したい項目を3つのボタンから選ぶ ・03 根拠箇所がハイライトされた結果を確認 ※初期設定と運用手順 裏の技術:文法制約デコーディング+Rust検証 ・社内原典(PostgreSQL pgvector)のみを参照 ・JSON型定義に違反する文字の生成確率を0に固定 → 構文エラー0%・根拠なき推測0%の安全な自動化 ※システム層での保護機構
設計原則 01:指示文の入力ゼロ

人が機械に合わせるのではなく機械が人に合わせる

現場のスタッフは普段通りの伝票や点検画面を操作するだけです。裏側でシステムが最適な構造化クエリを自動合成します。

設計原則 02:原典根拠の強制表示

「どの資料の何ページに基づくか」を必ず添付

AIの記憶だけで回答させることを禁じ、必ず社内規程や原典PDFの該当行(引用ID)とセットで出力させるため、一目で真偽を確認できます。

設計原則 03:型安全な出力保証

基幹システムや会計ソフトへそのまま連携

出力されるデータは最初から厳格な型(日付・金額・品目コード・信頼度スコア)に固定されているため、手作業での打ち直しが不要になります。

場面別の実務確認ポイント

現場スタッフ・初めてAIツールに触れる方へ 複雑な指示文(プロンプト)を覚える必要はありません。上の図解の「真ん中の箱(表のUI:迷わない3項目選択)」と、実践チェックリストの3項目を確認するだけで安全に業務へ活用できます。
経営者・総務・医療や現場の責任者の方へ 比較表と導入4ステップをそのまま社内の業務自動化設計シートとしてお使いいただけます。AIの誤出力(ハルシネーション)を防ぐ運用ルールも明記しています。
ろう者・難聴者・発達障害のある方へ 音声や動画のみに頼らず、すべて視覚的な図解と文字で完結しています。画面右上の「文字拡大」「シンプル表示」や、A4印刷にも対応しています。
情報システム担当・エンジニア・研究者の方へ 第3章にて、JSON Schema からの決定性有限オートマトン(DFA)コンパイル、Logit Masking 数理モデル、および Rust Edition 2024(unsafe禁止)による検証コードを公開しています。
第2章:実践手順とセルフチェック

2. 3項目UIによる業務自動化とハルシネーション防止手順

専門的なプロンプト技術を暗記しなくても、受発注・経理・医療事務の現場で今日から順番に確認・実践できる比較表と導入ステップをまとめました。

比較項目一般的なチャット型AI(自由プロンプト入力)定型テンプレート配布運用3項目UI × 制約付きデコーディング(本方式)
現場スタッフの学習コスト 高い(指示文の書き方で結果が大きく変わる) 中程度(コピペの手間と微調整が必要) ほぼゼロ(画面の選択肢を3つ選ぶだけ)
出力フォーマットの安定性 不安定(前置き文章や表記ゆれが混じる) やや不安定(稀にJSONや表が崩れる) 100%決定的(FSMマスクにより構文違反が不可能)
ハルシネーション(嘘)対策 人間が全文を読んでファクトチェックが必要 プロンプトでの注意書きのみ(構造的には防げない) 原典チャンクID束縛+信頼度閾値による自動棄却
個人情報・機密データの保護 うっかり社外AIへ機密を入力するリスク 人為的な貼り付けミスが残る 前処理でのPII自動マスキング+閉域DB完結

プロンプト入力不要(3項目選択式)の業務自動化を導入する4ステップ手順

手順 01(対象帳票・業務の特定)

手作業の転記が発生している「定型外の紙・PDF」を1つ選ぶ

いきなり全業務をAI化するのではなく、取引先ごとに書式が異なるFAX注文書、納品書、または手書きの点検日報など、毎日15分以上の転記作業が発生している書類を1種類選びます。

手順 02(出力スキーマの3項目化)

抽出したい項目と「社内の品目・取引先マスター」を定義する

基幹システムや会計ソフト(freee等)へ連携するために必要な「取引先コード・品目コード・数量・金額」の型定義(JSON Schema)を作成し、存在しないコードをAIが生成できないようDFAマスクを設定します。

手順 03(原典ハイライトと信頼度閾値)

かすれ文字や低信頼度箇所だけを黄色ハイライトで確認する

トークン確率(Confidence Score)が92%未満の項目だけを画面上で自動ハイライトし、元のPDF/FAXの該当箇所と並べて人間が3秒で目視確認できるUI(Human-in-the-Loop)を組み込みます。

手順 04(Rust検算と監査ログ保存)

金額・税額のプログラム検算と改ざん不能ログへの記録

抽出された単価×数量の検算やインボイス登録番号(T+13桁)のチェックディジット検証をRust側で自動実行し、承認者のIDとともに db01.ok.st へ記録します。

現場で陥りやすい3つの落とし穴と、安全な回避策

落とし穴 01:「AIに『原則として嘘をつかないでください』とプロンプトで書けば安心」と思い込む

大規模言語モデル(LLM)は確率的に次の単語を予測する仕組みであるため、自然言語で「嘘をつくな」「JSONだけで出力せよ」と命令しても、一定の確率で命令を無視します。言語でのお願いではなく、推論エンジンの出力層(Logit層)で数学的に禁止トークンを遮断する必要があります。

落とし穴 02:AIが出力した金額や数量を、人間の確認なしにそのまま自動発注・自動送金してしまう

どれほど精度が高くても、かすれた手書きFAXや複雑な表では読み取りの不確実性が残ります。信頼度スコア(Confidence Score)が基準値未満の項目は自動的に黄色でハイライトし、人間がワンクリックで元画像と見比べられるUI(Human-in-the-Loop)が不可欠です。

落とし穴 03:社内の全ファイルを権限整理せずにそのままAI検索(RAG)に入れてしまう

人事評価や経営会議の議事録など、本来閲覧権限が限られているファイルまでAIが参照してしまう事故が起きています。データベース層(PostgreSQL 19 FORCE RLS)で閲覧者の権限に応じたフィルタリングを強制してください。

今日からできる3項目セルフチェック(クリックして確認)

達成状況:0 / 3 項目

職場の業務フローで現在できている項目にチェックを入れてみてください。すべてお使いのブラウザ内でのみ計算され、外部へ送信されることはありません。

上の3項目をクリックすると、現在の達成状況に応じたアドバイスが表示されます。まずは1項目ずつ順番に整えていきましょう。
技術検証リファレンス

文法制約付きデコーディング(DFA Logit Masking)と原典スパン検証の品質基準

検証項目 従来のプロンプト指示のみ DFA Logit Masking + Rust 型検証
JSON構文・型エラー率 1.5% 〜 8.2%(余計な前置き文やカンマ抜けが発生) 0.0%(非許容トークン確率を数学的に0へ固定)
未登録の品目コード出力 類似した架空のコード番号を推測生成するリスクあり 0.0%(品目マスターTrie木に存在する系列のみ許容)
1ステップあたりのマスク計算遅延 N/A(ただしパース失敗時の再生成で数秒遅延) ≤ 15 μs(u64 ビットセット演算によるO(1)参照)

よくあるご質問と、導入時の判断基準

Q1. 現場のスタッフはパソコン操作が苦手なのですが、「3項目UI」なら本当に使えますか?

はい。チャット欄に文章を打ち込む操作は一切なく、「書類のファイルを選ぶ(または撮影する)」「業務の種類をボタンで選ぶ」「黄色くハイライトされた箇所だけ確認して承認ボタンを押す」の3ステップだけで完結するよう設計されています。

Q2. 取引先ごとに注文書のレイアウトがバラバラでも、プログラムの作り直しなしで読み取れますか?

はい。従来のOCRのように「紙の左から何センチの枠を読む」という固定座標方式ではなく、言語モデルが文脈から品名・数量・金額の意味を理解した上で、出力段階だけをDFAマスクで社内マスターの型へ揃えるため、新しい取引先の帳票にもそのまま対応できます。

Q3. 読み取ったデータをそのまま会計ソフト(freee等)や販売管理システムへ取り込めますか?

はい。DFAマスクとRustの型検査を通過したデータは、スキーマ違反が100%存在しない正規化JSONまたはCSVとして出力されるため、API連携やインポート機能で手直しなしに直結できます。

4. 詳しい技術仕様としくみ:技術アーキテクチャ仕様

文脈自由文法(CFG / JSON Schema)からの決定性有限オートマトン(DFA)構築と Logit Masking 推論制御実装

Rust Edition 2024 / Primary Spec

本節では、自己回帰型言語モデル(Autoregressive LLM)のトークン生成ステップ t において、語彙集合 V 上のロジットベクトル z_t ∈ ℝ|V| に対し、DFA 状態 s_t ∈ S が許容する遷移トークン集合 A(s_t) ⊆ V 以外のロジットを -∞ へマスクすることで、構文違反確率を厳密に P(syntax_error) = 0 とする Rust Edition 2024 実装を示します。

DECODING
DFA / CFG Constrained Logit Mask
SYNTAX ERROR
Strictly 0.0% (Mathematical Proof)
COMPLEXITY
O(1) Bitmask Lookup per Step
CALIBRATION
Token Logprob ECE Verification

1. プロトコル内部構造・数理モデルと設計根拠

1. ロジットマスキングによる条件付き確率分布の正規化: 時刻 t におけるモデルの生ロジットを zt ∈ ℝ|V|、現在のオートマトン状態 st における許容トークンマスクを m(st) ∈ {0, -∞}|V|(ただし v ∈ A(st) ⟺ mv(st) = 0、それ以外は -∞)と定義すると、マスク後の確率分布は P(yt = v | y<t, st) = exp(zt,v + mv(st)) / (∑u ∈ A(s_t) exp(zt,u)) となり、非許容トークン v ∉ A(st) の選択確率は厳密に 0 となります。

2. 原典引用アンカー(Citation Span)と信頼度ゲート: 各抽出フィールドは必ず入力ドキュメントのバイトオフセット区間 [bstart, bend) およびトークン対数確率の幾何平均 p = exp((1 / k) ∑i=1k ln P(yi)) を伴い、p < τconf(例:0.92)の場合は自動確定を保留し、Human-in-the-Loop 確認キューへルーティングします。

2. 技術パラメータ・検証仕様一覧

推論パイプライン段階数理・アルゴリズム処理不変条件(Invariant)障害・不確実性発生時の挙動
Stage 1: Schema Compilation Rust 型定義 -> JSON Schema -> DFA 状態遷移表事前計算 全状態から受理状態(Accept)への到達可能性を保証 コンパイル時に不正スキーマを静的に拒否
Stage 2: Stepwise Logit Mask z'_t = z_t + m(s_t), m_v = 0 if delta(s_t, v) != Dead else -inf 任意の生成系列 y_1..T が正規言語 L(DFA) に100%属する 構文エラー・パースエラーの発生確率 = 0
Stage 3: Citation Verification 抽出文字列が原典テキスト slice[start..end] の部分文字列か照合 原典に存在しない固有表現・金額の創作(Hallucination)を遮断 不一致時は CitationMismatch エラーとして即時棄却
Stage 4: Confidence Gate 幾何平均確率 exp(mean(logprobs)) >= 0.92 の判定 低信頼度データの無審査DBコミットを防止 0.92未満の項目のみ黄色ハイライトで確認UIへ提示
3. リファレンス実装コード(crates/ok-constrained-decoder/src/dfa_logit_mask.rs) #![forbid(unsafe_code)]
#![forbid(unsafe_code)]

pub const NEG_INFINITY_LOGIT: f32 = f32::NEG_INFINITY;

#[derive(Debug, Clone)]
pub struct DfaStateMask {
    pub state_id: u32,
    pub is_accepting: bool,
    /// Bitset over vocabulary (1 bit per token: 1 = allowed, 0 = forbidden)
    pub allowed_token_bits: Vec<u64>,
}

impl DfaStateMask {
    pub fn new(state_id: u32, vocab_size: usize, is_accepting: bool) -> Self {
        let words = (vocab_size + 63) / 64;
        Self {
            state_id,
            is_accepting,
            allowed_token_bits: vec![0u64; words],
        }
    }

    #[inline]
    pub fn allow_token(&mut self, token_id: usize) {
        let word = token_id / 64;
        let bit = token_id % 64;
        if word < self.allowed_token_bits.len() {
            self.allowed_token_bits[word] |= 1u64 << bit;
        }
    }

    #[inline]
    pub fn is_token_allowed(&self, token_id: usize) -> bool {
        let word = token_id / 64;
        let bit = token_id % 64;
        self.allowed_token_bits
            .get(word)
            .map_or(false, |w| (w & (1u64 << bit)) != 0)
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MaskError {
    VocabSizeMismatch,
    NoValidTokensInState { state_id: u32 },
}

pub fn apply_dfa_logit_mask(logits: &mut [f32], mask: &DfaStateMask) -> Result<usize, MaskError> {
    let max_tokens = mask.allowed_token_bits.len() * 64;
    if logits.len() > max_tokens {
        return Err(MaskError::VocabSizeMismatch);
    }

    let mut allowed_count = 0usize;
    for (token_id, logit) in logits.iter_mut().enumerate() {
        if mask.is_token_allowed(token_id) {
            allowed_count += 1;
        } else {
            *logit = NEG_INFINITY_LOGIT;
        }
    }

    if allowed_count == 0 {
        return Err(MaskError::NoValidTokensInState {
            state_id: mask.state_id,
        });
    }

    Ok(allowed_count)
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_forbidden_tokens_are_masked_to_neg_infinity() {
        let mut mask = DfaStateMask::new(1, 128, false);
        mask.allow_token(10);
        mask.allow_token(42);

        let mut logits = vec![1.5f32; 128];
        let allowed = apply_dfa_logit_mask(&mut logits, &mask).unwrap();
        assert_eq!(allowed, 2);
        assert_eq!(logits[10], 1.5f32);
        assert_eq!(logits[42], 1.5f32);
        assert!(logits[0].is_infinite() && logits[0].is_sign_negative());
        assert!(logits[127].is_infinite() && logits[127].is_sign_negative());
    }
}

4. 参照一次規格(RFC 8259 / JSON Schema Draft 2020-12 / NIST AI 100-1 / OWASP LLM)および検証マトリクス

本モジュールの制約付きデコーディング実装および信頼度ゲートは、以下の国際標準規格・AIリスク管理フレームワークに準拠しています。

規格・標準区分 文書番号・仕様 要求される技術的統制内容 本実装での充足方式
IETF RFC 8259 / ECMA-404 The JavaScript Object Notation (JSON) Data Interchange Format UTF-8文字列エスケープ・数値リテラル・オブジェクト構造の厳密な構文整合性 語彙ビットセットマスク DfaStateMask により非準拠トークンを -inf へ遮断
IETF / W3C Draft JSON Schema Draft 2020-12 Validation 必須プロパティ(required)、列挙型(enum)、数値範囲の決定的強制 Rust serde / schemars ASTからの決定性オートマトン事前合成
NIST AI 100-1 Artificial Intelligence Risk Management Framework (AI RMF 1.0) MEASURE 2.6 / MANAGE 2.4:モデルの不確実性定量化と人間による監督(HITL) トークン対数確率の幾何平均 p < 0.92 の自動ハイライトと承認保留ゲート
OWASP LLM Top 10 LLM02 (Insecure Output Handling) & LLM09 (Misinformation) 後段システムへのインジェクション防止および原典根拠のない創作の排除 原典バイトオフセット区間 [b_start, b_end) の部分文字列照合器
ご質問・公的制度の活用に関するお問い合わせ窓口

掲載資料に関するご質問・公的制度活用のご案内

本ページの図解や解説内容に関するご質問、経済産業省「SCS評価制度」やIPA「SECURITY ACTION・サイバーセキュリティお助け隊サービス」等の公的制度の確認方法について、落ち着いた参考窓口としてご案内しております。売り込みや営業連絡は一切行いませんので、社内勉強会やご家庭での確認資料としてご自由にご活用ください。

図解・ビジュアルの拡大表示

図表内のテキストもそのまま選択・検索可能です(ベクターSVG描画) 枠外クリックまたは ESC キーで閉じます