2026年10月8日に、NISTの現行AI RMFページを再読しました。AI RMFは任意利用で、AI製品・サービス・システムの設計、開発、利用、評価へ信頼性の観点を組み込む枠組みです。AI RMF 1.0は改訂中で、2026年4月7日には重要インフラ向けプロファイルのコンセプトノートが公開されています。この記事の工程分解、架空の通過・保留件数、評価ループは現場へ翻訳した教材であり、NISTの必須手順や改善率・事故率の保証ではありません。
AIで業務を改善するとき、最初に決めたいのは「どのモデルを使うか」より、誰の、どの仕事を、どの完成条件まで軽くするかです。下書きが速くても、確認や修正が増えれば仕事全体は軽くなりません。
ここでは、プロセスの分析、改善案の比較、効果の測定を、顧客対応・データ処理・意思決定支援に当てはめます。数値と企業設定は説明用の仮想例です。実在企業の導入成果や、一定の削減率を約束するものではありません。
30秒で要点
- 対象の入口・出口、担当者、品質、例外を先に決め、現在の作業を測る。
- AIの生成時間だけでなく、人の確認・修正・引継ぎ、運用費を含めて比較する。
- 提案を出す機能と、送信・更新・支払いを実行する権限を分ける。
- 小さく試し、重大な誤り、権限外の動作、負担の増加があれば停止・切戻しする。
自動化・最適化・変革で、変える範囲が違う
業務プロセスは、依頼を受けてから成果を渡すまでの仕事のつながりです。AI活用を考えるときは、次の三つを区別すると範囲を決めやすくなります。これは整理のための分類で、成熟度を採点する規格ではありません。
表が収まらない場合は、横にスクロールできます
| 変え方 | 例 | 判断すること |
|---|---|---|
| 自動化 | 既存書式の下書きや分類を補助する | 定型部分と例外を分けられるか |
| 最適化 | 待ち・重複入力・確認の順序を見直す | 部分の短縮が仕事全体の短縮になるか |
| 変革 | 顧客と担当者の受渡し自体を設計し直す | 提供価値、責任、支援の仕組みを維持できるか |
入力の統一や承認の整理だけで改善できることもあります。AIを使わない案を比較から外さないでください。NIST AI RMFのMAP・MEASURE・MANAGEは、用途や人の監督、費用、利用条件に似た評価、停止する責任を考える枠組みです。導入効果を保証するものではありません。
心理面では「慣れた手順を変える不安」を怠慢と決めつけず、担当者が守っている品質や例外対応を聞きます。統計面では、簡単な案件だけ選んだ試験と日常の全件を区別します。AI、現場の知識、比較の方法を一緒に設計することが出発点です。
分析する:作業時間と待ち時間を分ける
まず一つの仕事を、同じ入口から同じ完成条件まで追います。「請求書を処理する」なら、受領から承認済みデータの登録までなのか、振込完了までなのかを明記します。並行して進む仕事の時間を足した値は、受付から完了までの経過時間と同じではありません。
分析メモ
対象:どの依頼を含み、何を除くか
完成:誰が、何を確認したら完了か
記録:作業分数、待ち時間、件数、差戻し理由
比較:同じ期間・難しさ・資料・品質条件か
未確認:例外や欠測をゼロとして扱っていないか
次はPython 3の標準機能だけで動く集計教材です。実モデルには接続せず、同じ仮想100件について測った担当者の延べ作業分数を合計します。大きい工程を見つけても、それだけでボトルネックやAI化すべき工程とは断定しません。
class ProcessAnalyzer:
def analyze_process(self, stages):
if not stages:
raise ValueError("stages must not be empty")
for name, minutes in stages.items():
if not isinstance(name, str) or not name:
raise ValueError("stage name is required")
if type(minutes) is not int or minutes < 0:
raise ValueError("minutes must be nonnegative integers")
return {
"total_minutes": sum(stages.values()),
"largest_stage": max(stages, key=stages.get),
}
analysis = ProcessAnalyzer().analyze_process(
{"draft": 20, "review": 30, "rework": 10}
)
assert analysis == {"total_minutes": 60, "largest_stage": "review"}
この例なら確認30分が最大です。しかし、安全に必要な確認を削ればよいとは限りません。資料が散在して照合に時間がかかるなら、まず参照元を整える案が考えられます。待ち行列や同時処理能力を評価するには、この集計とは別のデータが必要です。
改善する:提案と実行の境界を置く
AIには改善案を出させられますが、案の採用、権限の付与、顧客への送信は別の判断です。OWASPの2026年版Excessive Agencyは、過剰な機能・権限・自律性を区別し、認可をモデル任せにしないことや、高影響の行為の確認を挙げています。
改善案の比較
候補A:書式と参照資料を整理し、現行手順を続ける
候補B:AIが下書きし、人が根拠と送信先を確認する
候補C:対象を限定した自動処理を別途設計する
共通条件:品質、費用、責任者、停止条件、戻せる手順
採用前:提案内容と実行権限を別々に承認する
次の教材は試行候補に進めるかを返すだけで、改善を実行しません。重大な誤りが一つも観測されなくても、危険がゼロと証明したことにはなりません。承認の真偽を実運用で入力する仕組みには、本人確認や監査可能な記録が別途必要です。
class ProcessOptimizer:
def choose_trial(self, *, reviewed, quality_met,
critical_errors, authorization_confirmed):
if any(type(v) is not bool for v in
(reviewed, quality_met, authorization_confirmed)):
raise ValueError("approval flags must be bool")
if type(critical_errors) is not int or critical_errors < 0:
raise ValueError("critical_errors must be nonnegative int")
if critical_errors:
return "stop_and_investigate"
if not (reviewed and quality_met and authorization_confirmed):
return "hold"
return "limited_trial_candidate"
decision = ProcessOptimizer().choose_trial(
reviewed=True, quality_met=True, critical_errors=0,
authorization_confirmed=False,
)
assert decision == "hold"
送信や更新を伴う仕組みでは、対象データ、実行回数、金額、送信先などを制限します。停止時に未処理の仕事を誰へ戻すか、同じ依頼を二度処理しない方法も決めます。掲載コードはその認証・永続化・重複防止を実装していません。
測定する:分母と完成条件をそろえる
OpenAIの評価ガイドは、課題に合う評価例と基準、人の判断、変更後の継続的な評価を重視しています。本記事ではこの評価の考え方を参照し、特定の評価サービスやモデルの実行手順には依存しません。測定メモ
対象件数:保留・失敗を含む同じ100件
時間:下書き+人の確認+修正の延べ作業分数
品質:同じ採点基準を満たした件数/対象件数
費用:作業時間の評価額+利用料。導入・保守は別欄
再確認:重大誤り、個人情報、例外、担当者の負担
表が収まらない場合は、横にスクロールできます
| 仮想100件の比較 | 現行手順 | AI下書き+人の確認 |
|---|---|---|
| 延べ作業時間 | 120分 | 20+30+10=60分 |
| 同一基準を満たした件数 | 95件 | 97件 |
| 作業時間の評価額(50円/分) | 6,000円 | 3,000円 |
| 今回配賦した利用料 | 0円 | 1,000円 |
| 上の2費目の計 | 6,000円 | 4,000円 |
作業時間は50%減、品質の合格割合は95%から97%へ2ポイント増、上の2費目は約33.3%減です。時間に単価を掛けた評価額が減っても、給与などの支出が直ちに減るとは限りません。導入費や保守費を含めれば総費用の結論も変わります。
次のコードは、同じ分母と完成条件で得た集計の差を計算する教材です。件数がゼロなら品質を0%とせず、計算を拒否します。基準費用がゼロなら削減率を定義せず、Noneを返します。
from fractions import Fraction
class ProcessMetrics:
def compare(self, before, after):
for row in (before, after):
for key in ("n", "accepted", "minutes", "cost"):
if type(row[key]) is not int or row[key] < 0:
raise ValueError("counts, minutes and cost must be integers")
if row["n"] == 0 or row["accepted"] > row["n"]:
raise ValueError("invalid denominator or accepted count")
if before["n"] != after["n"]:
raise ValueError("use the same comparison denominator")
def reduction(old, new):
return None if old == 0 else Fraction(old - new, old)
return {
"time_reduction": reduction(before["minutes"], after["minutes"]),
"cost_reduction": reduction(before["cost"], after["cost"]),
"quality_points": 100 * (
Fraction(after["accepted"], after["n"]) -
Fraction(before["accepted"], before["n"])),
}
comparison = ProcessMetrics().compare(
{"n": 100, "accepted": 95, "minutes": 120, "cost": 6000},
{"n": 100, "accepted": 97, "minutes": 60, "cost": 4000},
)
assert comparison == {"time_reduction": Fraction(1, 2),
"cost_reduction": Fraction(1, 3),
"quality_points": Fraction(2)}
コードは難しさや品質基準が同じかを自動判定できません。前後で担当者・季節・案件構成が違えば、差をAIの因果効果とは断定しないでください。少数の試験結果には不確かさも残ります。
三つの業務に当てはめる
顧客対応:下書きと解決を分ける
問い合わせ100件に対して100件の文章を生成できても、100件解決したとは限りません。参照規約の版、例外の返金条件、宛先を確認し、説明不足の再問い合わせも見る必要があります。最初は定型質問への下書きに範囲を絞り、送信は担当者が判断します。規約にない約束や別人の情報が混ざったら、件数達成より停止を優先します。
データ処理:速さより照合できる単位を作る
入力票から項目を取り出す場合は、一件の書類か一つの項目か、正解率の分母を決めます。空欄とゼロ、単位違い、重複、読み取れない文字を含む試験例を用意します。曖昧な値を推測して埋めるより、保留として原票へ戻す経路を作ります。定型ルールで扱える部分なら、AIを使わない処理も比較対象になります。
意思決定支援:案の質と採用結果を分ける
AIに代替案や前提の抜けを挙げさせても、将来需要や施策効果が確定するわけではありません。案ごとの根拠、反対の情報、実施費用、試す条件を担当者が検討します。案の提出数ではなく、比較可能な案になっているかを確認します。実施後の成果が変わった理由には、AI以外の要因もあります。
小さな試行から、続行と停止を決める
受渡しの記録
現場担当:通常例・例外・困っている点を示す
実装担当:入力範囲、権限、記録、切戻しを設計する
評価担当:同じ基準で出力と再作業を確認する
責任者:試行範囲、上限、停止後の担当を決める
見直し:資料・モデル・業務条件が変われば再評価する
最小の検証は、一つの定型業務を選び、匿名化した通常例と困る例を同じ完成条件で比べることです。例数は扱うリスクに合わせ、少数の成功で全業務へ展開しません。確認不能な入力、権限外の動作、重大な誤りが出た場合の保留先を先に決めます。
現場の抵抗を「AIに慣れていないから」で片づけず、教育時間、確認の集中、仕事の受渡しを記録します。例外が多い、資料が古い、作業を戻せない場合は、展開より設計の見直しを選べます。AI事例の比較条件とAIと人の分担を合わせて、速さだけでなく仕事を完了できる仕組みを点検してください。