新しい稟議を起案・審査するときに、過去の稟議と決裁時のコメントから似た案件を探し、付いた条件と判断の理由を稟議番号付きで返す
新しい稟議の内容をもとに、過去の稟議書と決裁時のコメントから似た案件を探します。そのとき付いた条件と判断の理由を、根拠の稟議番号付きで審査担当に返します。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI/Google Vertex AI/OpenSearch
- 対象業界
- 商社/建設/物流/製造
- 対象部門
- 経営企画/財務
- 対象業務
- 情報検索/比較検討
- 主な課題
- 判断に時間がかかる/属人化している/情報が見つからない
- AIで行う処理
- 検索(RAG)
- 主な効果
- 判断支援/属人化解消/検索時間短縮
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 新しい稟議を受け取り、種類・金額・相手先・起案部門を確かめる
- 電子稟議の検索で、件名に似た語を入れて過去の稟議を探す
- 見つからなければ、ベテランの審査担当に「前に似たものはあったか」と聞く
- 候補の稟議を1件ずつ開き、本文・添付・決裁者のコメント・差戻しの履歴を読む
- 古い案件は、共有フォルダのPDFをファイル名で探して開く
- 前例との違いと、確認すべき点を審査メモに書く
- 人審査担当が新しい稟議を受け取り、前例検索の画面で稟議番号を指定する
- 自動新しい稟議の本文・種類・金額・相手先を電子稟議から取り出す
- 自動生成AIが、検索に使う語と絞り込みの条件(種類・金額の幅・期間)を組み立てる
- 自動検索基盤が、審査担当の閲覧権限で絞り込んだうえで、キーワードとベクトルを組み合わせて過去の稟議を探す
- 自動検索の上位を意味の近さで並べ替え、上位の稟議を生成AIに渡す
- 自動生成AIが、稟議ごとに似ている点・付いた条件・判断の理由・今回との違いをまとめる
- 自動返ってきた稟議番号が検索結果に実在するかを確かめ、無いものを除く
- 人審査担当が一覧を見て、使う前例の原本を開いて確かめる
- 人確かめた前例を審査メモに引用し、起案部門への確認事項を書く
各工程の詳しい説明を読む
- 新しい稟議を受け取り、種類・金額・相手先・起案部門を確かめる
- 電子稟議の検索で、件名に似た語を入れて過去の稟議を探す
- 見つからなければ、ベテランの審査担当に「前に似たものはあったか」と聞く
- 候補の稟議を1件ずつ開き、本文・添付・決裁者のコメント・差戻しの履歴を読む
- 古い案件は、共有フォルダのPDFをファイル名で探して開く
- 前例との違いと、確認すべき点を審査メモに書く
(a)件名では探せない。 「第2工場 成形機更新」と「射出成形設備の入替について」は同じ種類の稟議ですが、件名の語が重なりません。同じ委託先との契約も、起案部門ごとに件名の付け方が違います。
(b)判断の理由は件名にも本文にもない。 「回収期間の前提を保守的に見直すこと」「2年目の更新時に再審査」といった付帯条件は、決裁者のコメント欄に書かれています。否決の理由も同じです。電子稟議の検索は、このコメント欄を探しません。
(c)前例を知っている人に頼っている。 3番の「ベテランに聞く」で見つかる前例が少なくありません。その担当者が不在の週は、前例のない稟議として審査されます。 同じ指摘を起案部門に何度も返すのは、このためです。
(d)古い前例ほど読むのに時間がかかる。 スキャンしたPDFは本文の検索もできず、1件ずつ開いて読むしかありません。
- 【人】 審査担当が新しい稟議を受け取り、前例検索の画面で稟議番号を指定する
- 【自動】 新しい稟議の本文・種類・金額・相手先を電子稟議から取り出す
- 【自動】 生成AIが、検索に使う語と絞り込みの条件(種類・金額の幅・期間)を組み立てる
- 【自動】 検索基盤が、審査担当の閲覧権限で絞り込んだうえで、キーワードとベクトルを組み合わせて過去の稟議を探す
- 【自動】 検索の上位を意味の近さで並べ替え、上位の稟議を生成AIに渡す
- 【自動】 生成AIが、稟議ごとに似ている点・付いた条件・判断の理由・今回との違いをまとめる
- 【自動】 返ってきた稟議番号が検索結果に実在するかを確かめ、無いものを除く
- 【人】 審査担当が一覧を見て、使う前例の原本を開いて確かめる
- 【人】 確かめた前例を審査メモに引用し、起案部門への確認事項を書く
8番目が、この設計の分かれ目です。 一覧は前例を探す時間を短くするためのもので、一覧の文章をそのまま審査メモに貼る設計にはしません。 判断の理由は原本のコメントの言い回しで確かめます。
7番目を機械の検査にしているのも、意図してのことです。 生成AIが検索結果に無い稟議番号を書いた場合、それは実在しない前例です。 番号の照合はコードで行い、AIの自己申告に頼りません。
02今回想定するシステム構成
過去の稟議(電子稟議の書き出し+紙の稟議のスキャンPDF) │ [初回と毎晩] ▼ Azure AI Document Intelligence(レイアウトモデル)── スキャンPDFを文字と表に ▼ Azure Functions ── 稟議ごとに本文・コメント・差戻し履歴・属性をまとめ、閲覧グループを付ける ├──▶ Azure OpenAI(埋め込み)── 本文とコメントのベクトル ▼ Azure AI Search(インデックス:日本語アナライザー+ベクトル+閲覧グループ) [審査のとき] 審査担当 ── 稟議番号を指定 ▼ Azure OpenAI ── 検索語と絞り込み条件を組み立てる ▼ Azure AI Search ── 閲覧権限で絞り込み → ハイブリッド検索 → セマンティック ランカーで並べ替え ▼ Azure OpenAI(構造化出力)── 稟議ごとの似ている点・条件・理由・違い ▼ Azure Functions ── 稟議番号の実在確認 ▼ 前例の一覧(稟議番号と原本へのリンク付き)──▶【人が原本を確かめる】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Azure AI Search(ハイブリッド検索、セマンティック ランカー、セキュリティ フィルター) | Vertex AI Search(Agent Search)、Amazon OpenSearch Service |
| OCR | Azure AI Document Intelligence(レイアウトモデル prebuilt-layout) | Google Document AI |
| 埋め込み | Azure OpenAI(埋め込みモデル) | 検索基盤が対応する他の埋め込みモデル |
| 生成AI | Azure OpenAI(Microsoft Foundry)(検索語の組み立てと前例のまとめ) | Claude API、Gemini API |
| 連携 | Azure Functions(取り込み、インデックスへの登録、番号の照合) | Azure Logic Apps |
| 稟議 | 電子稟議のワークフロー(書き出し機能またはAPI) | 各社のワークフロー製品 |
電子稟議のワークフローは入れ替えません。 この構成は読み取るだけで、稟議の状態や決裁者のコメントを書き換えません。ワークフロー製品から本文・コメント・差戻し履歴をどう書き出すかは製品ごとに違うため、利用環境に応じた個別実装になります。
土台になるのは、Azure AI Search のハイブリッド検索です。 フルテキストのクエリとベクトルのクエリを1つの要求で並列に実行し、逆ランク融合(RRF)で結果をまとめて1つの結果セットを返すとされています。キーワード検索は製品コードや専門用語、日付、人の名前のような完全一致に強く、ベクトル検索はキーワードが一致しなくても概念的に似た情報を見つけます。第3章の(a)の「件名の語が重ならない」に効くのは後者、設備の型式や取引先名に効くのは前者です。
その上にセマンティック ランカーを重ねます。 初回の結果の上位50件を言語理解モデルで並べ替え、0〜4の @search.rerankerScore を付けます。キャプションはインデックスの文章から逐語的に取り出され、新しい文章は作らないとされています。使用量で課金される機能で、提供されるリージョンが限られている点は先に確かめます。
03どうやって実装するのか
処理の起点を決める
トリガーは2つあります。 1つは審査担当が前例検索の画面で稟議番号を指定したときで、検索とまとめはこのときだけ動きます。審査に回ってきた全件で自動的に動かす設計にはしません。定例の稟議まで一覧を作ると、読まれない一覧が積み上がります。
もう1つはインデックスの更新で、毎晩1回動かします。その日に決裁が終わった稟議を取り込みます。決裁前の稟議は取り込みません。 審査中の稟議が前例として返ると、まだ付いていない条件を前例として扱うことになります。
起案部門が起案前に使う入口も作れます。 ただし起案部門の閲覧権限は審査担当より狭いため、同じインデックスを、閲覧グループの絞り込みを変えて引きます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 新しい稟議 | 件名、種類、金額、相手先、起案部門、本文、添付の一覧 | 電子稟議のワークフロー |
| 過去の稟議の本文 | 件名、本文、添付の要旨、決裁区分 | 電子稟議の書き出し、スキャンPDF |
| 決裁時のコメント | 決裁者ごとのコメント、付帯条件 | 電子稟議の承認履歴 |
| 差戻しの履歴 | 差戻しの回数、理由、再起案での変更点 | 電子稟議の承認履歴 |
| 結果 | 承認、条件付承認、差戻し後承認、否決、取下げ | 電子稟議 |
| 閲覧グループ | その稟議を見てよい部署・役職のグループ | 電子稟議の閲覧設定、人事のグループ |
質を決めるのは、3行目と4行目です。 本文だけを入れると「似た稟議」は見つかりますが、なぜ条件が付いたかは返せません。 コメントと差戻しの履歴を同じ稟議のまとまりとして持つことが、第1章で書いた「判断の前例」を探す前提になります。
否決と取下げの稟議も必ず入れます。 承認された稟議だけを入れると、否決された前例が見えないまま同じ案件が通ることになります。
データの取得方法を決める
電子稟議からは、決裁が終わった稟議を1件ずつ書き出します。 本文・コメント・差戻し履歴・結果・閲覧設定を1つのJSONにまとめ、稟議番号をキーにします。
紙の時代の稟議は、Document Intelligence のレイアウトモデルで読みます。 レイアウトモデルはテキスト・表・選択マーク・文書の構造を取り出し、タイトルやセクション見出しといった段落の役割を付けます。outputContentFormat=markdown を指定すると Markdown で出力でき、表は HTML の表として表されるとされています。稟議書の「件名」「金額」「決裁欄」の表をそのまま読めます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 本文とコメント | 電子稟議の書き出し | 検索の対象、生成AIへの材料 |
| 種類・金額・相手先・日付・結果 | 電子稟議の項目 | 絞り込みの条件(フィルター) |
| スキャンPDFの文字と表 | レイアウトモデルの Markdown 出力 | 紙の稟議の本文と決裁欄 |
| 閲覧グループ | 電子稟議の閲覧設定 | セキュリティ フィルター |
インデックスの設計で大事なのは、日本語のアナライザーです。 既定の Standard Lucene は空白や記号で語を区切る考え方で、空白で区切られない日本語では、文全体が1つのトークンになる可能性があるとされています。本文とコメントのフィールドには ja.microsoft か ja.lucene を指定します。アナライザーはデータを読み込む前、インデックスの作成時に設定します。
インデックスのフィールドは、次のように持たせます。
| フィールド | 型 | 属性 | 用途 |
|---|---|---|---|
ringi_no | 文字列 | キー | 稟議番号。原本へのリンクにも使う |
title、body、comments | 文字列 | 検索可能(日本語アナライザー) | キーワード検索と並べ替えの材料 |
body_vector、comments_vector | ベクトル | 検索可能 | ベクトル検索 |
category、decision | 文字列 | フィルター可能 | 種類と結果での絞り込み |
amount_jpy、decided_on | 数値・日付 | フィルター可能 | 金額の幅と期間での絞り込み |
group_ids | 文字列の集合 | フィルター可能、取得しない | 閲覧権限の絞り込み |
本文とコメントでベクトルを分けるのは、似方が違うからです。 本文は「何を買うか」で似ていて、コメントは「何を心配したか」で似ています。同じ設備でなくても、同じ心配をされた稟議が、コメントのベクトルから見つかります。
審査のときの検索は、1つの要求にまとめます。
{
"search": "射出成形機 更新 第2工場 老朽化",
"vectorQueries": [
{ "kind": "vector", "vector": [ ], "k": 50, "fields": "body_vector" },
{ "kind": "vector", "vector": [ ], "k": 50, "fields": "comments_vector" }
],
"filter": "category eq '設備投資' and amount_jpy ge 30000000 and amount_jpy le 120000000 and group_ids/any(g: search.in(g, '{reviewer_groups}'))",
"queryType": "semantic",
"semanticConfiguration": "ringi-semantic",
"top": 10
}
k を50にしているのは、セマンティック ランカーへの入力を最大にするためです。 ハイブリッド検索の公式の説明でも、セマンティック ランカーを使う場合は k を50にすることが勧められています。filter の末尾の閲覧グループの条件は、どの検索にも必ず付けます。
AIへ渡す前に整形する
- 稟議ごとに1つのまとまりにする … 本文・コメント・差戻し履歴を稟議番号でまとめ、コメントは決裁者と日付を付けて並べます
- 長い稟議を分ける … 添付が長い稟議は、本文とコメントを1つ目の塊に、添付の要旨を2つ目以降に分けます。コメントは必ず本文と同じ塊に入れます
- 項目をそろえる … 金額は円に換算した数値、種類は社内の区分の一覧のどれかに寄せます。絞り込みに使うので、自由記述のまま入れません
- 閲覧グループを付ける … 電子稟議の閲覧設定をグループIDの一覧にします
- スキャンPDFの読み取り … ページ数は最大2,000、有料(S0)レベルで500MBまで。パスワード付きのPDFは提出前に解除が必要です
- 個人名の扱いを決める … 決裁者の名前は役職に置き換えて入れる設計にできます
2番目の「コメントは本文と同じ塊に」を外さないでください。 セマンティック ランカーは文書ごとに最大2,000トークンを受け付け、タイトル128トークン、キーワード128トークン、残りがコンテンツという配分で、上限を超えた内容は無視されるとされています。コメントを末尾に置いた長い塊は、肝心のコメントが並べ替えの材料から落ちます。
AIに処理させる
生成AIの出番は2回あります。 1回目は検索の前で、新しい稟議から検索語と絞り込みの条件を組み立てます。2回目は検索の後で、上位の稟議を読んで前例の一覧にまとめます。
| させること | 中身 |
|---|---|
| 検索語の組み立て | 設備の名前・型式、相手先、目的を語にし、言い換え(「入替」「更新」)を足す |
| 絞り込み条件の組み立て | 種類、金額の幅(今回の0.5〜2倍など)、期間 |
| 似ている点の記述 | 稟議ごとに、今回と何が同じか |
| 付いた条件の抜き出し | 決裁者のコメントから付帯条件を原文のまま引く |
| 判断の理由の抜き出し | 差戻し・否決の理由を原文のまま引く |
| 今回との違い | 金額・相手先・期間・前提の違い |
| させないこと | 理由 |
|---|---|
| 承認・否決の見込みを書く | 決裁は決裁者の判断。前例は材料にすぎない |
| 検索結果に無い稟議を挙げる | 実在しない前例になる |
| コメントの言い換え・要約 | 条件の文言は、言い換えた瞬間に意味が変わる |
| 一般論の助言 | 番号にひもづかない助言は審査に使えない |
3行目がいちばん起きやすい失敗です。 「回収期間の前提を保守的に見直すこと」を「回収期間を短くすること」と要約すると、決裁者が求めたことと逆になり得ます。 条件と理由は抜き出しに限ります。
指示内容を固定する
あなたは稟議の審査担当を補助します。
新しい稟議と、検索で見つかった過去の稟議が与えられます。
過去の稟議に書かれていることだけを使ってください。
【やること】
過去の稟議それぞれについて、次を書いてください。
- similarity ... 新しい稟議と何が同じか(設備、相手先、目的、金額の規模)
- conditions ... 決裁者のコメントに書かれた付帯条件。原文のまま引用する
- reasons ...... 差戻し・否決の理由。原文のまま引用する
- differences .. 新しい稟議との違い(金額、相手先、期間、前提)
- relevance .... high / medium / low
【厳守事項】
- ringi_no は、下の【過去の稟議】に含まれる番号だけを使ってください。
ほかの番号を書かないでください。
- conditions と reasons は、コメントの文言をそのまま写してください。
要約、言い換え、補足をしないでください。
コメントに条件や理由が書かれていなければ、空の配列にしてください。
- 新しい稟議が承認されるか、否決されるかの見込みを書かないでください。
- 一般的な注意点や助言を書かないでください。
- 似ていない稟議は relevance を low にし、無理に似ている点を書かないでください。
- 過去の稟議に書かれていない数字(回収期間、利率など)を計算しないでください。
【新しい稟議】{new_ringi}
【過去の稟議】{retrieved}
「原文のまま写す」を2か所に書いているのは、生成AIが要約したがるからです。 1か所だけだと、長いコメントを短くまとめて返します。条件の文言は、短くすると意味が変わります。
「似ていない稟議を無理に似せない」も明記します。 検索は必ず何件かを返すため、指示が無いと、関係の薄い稟議にも似ている点を作文します。
出力形式を固定する
次の形のJSONで受け取ります。
{
"new_ringi_no": "",
"search": { "query": "", "filters": { "category": "", "amount_min": 0, "amount_max": 0, "date_from": "" } },
"precedents": [
{
"ringi_no": "",
"title": "",
"decision": "approved | approved_with_conditions | approved_after_return | rejected | withdrawn",
"decided_on": "",
"similarity": "",
"conditions": [ { "quote": "", "by_role": "" } ],
"reasons": [ { "quote": "", "by_role": "" } ],
"differences": [ "" ],
"relevance": "high | medium | low"
}
]
}
構造化出力を使う理由の1つ目は、ringi_no を機械で照合できることです。 Azure OpenAI の構造化出力は、json_schema に strict: true を指定して、渡した JSON スキーマに従わせます。全フィールドを required にし、additionalProperties: false を指定する必要があります。番号が決まった場所に入るので、第5章の7番目の照合がコードで書けます。
2つ目は、conditions と reasons を引用の配列にできることです。 引用の文字列が原本のコメントに含まれるかを、文字列の一致で検査できます。一致しない引用は、生成AIが言い換えたものとして一覧から外します。
3つ目は、search を残せることです。 どの語とどの絞り込みで探したかが残るので、前例が見つからなかったときに、探し方が悪かったのか、本当に無いのかを見分けられます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 電子稟議のワークフロー | 書き出し機能またはAPI(個別実装) | 決裁済みの稟議と新しい稟議を読む |
| Azure AI Document Intelligence | レイアウトモデル | スキャンPDFの文字と表 |
| Azure AI Search | インデックスへの登録、ハイブリッド検索 | 前例の検索 |
| Azure OpenAI | 埋め込み、構造化出力 | ベクトル、検索語、前例のまとめ |
| 前例検索の画面 | 社内のWebページ | 稟議番号の指定と一覧の表示 |
電子稟議へは書き込みません。 一覧は審査担当の画面に出すだけで、稟議のコメント欄にも自動で貼りません。AIのまとめが稟議の記録に混ざると、後から前例として検索されてしまいます。
人が確認する
- 一覧で
relevance: highの稟議から見る … 似ている点と違いを読み、使えそうな前例を選びます - 使う前例の原本を開く … 一覧のリンクから電子稟議の画面を開き、引用されたコメントが原本にあるかを確かめます
- 審査メモには原本から引用する … 一覧の文章ではなく、原本の稟議番号とコメントを書きます
- 見つからなかったときは検索条件を見る …
searchの語と絞り込みを見て、広げて再検索します - 役に立った前例・外れた前例を記録する … 次の改善の材料にします
2番目を省かないでください。 引用の一致を機械で検査していても、どの決裁者のどの時点のコメントかは原本で見ないと分かりません。 差戻し前のコメントと最終の決裁のコメントは、意味が逆のことがあります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 前例が1件も見つからない | 「該当なし」と返し、search を表示。生成AIに前例を作らせない |
| 返った稟議番号が検索結果に無い | 一覧から除き、件数を記録する |
| 引用が原本のコメントと一致しない | その引用を除き、relevance を下げる |
| 閲覧できない稟議が上位に来るはずだった | セキュリティ フィルターで検索の段階で除く。 件数も表示しない |
| スキャンPDFの文字が読めない | 稟議番号と件名だけで登録し、「本文未読」の印を付ける |
| 決裁後に稟議が取り消された | 毎晩の更新で結果を書き換える |
| 検索サービスや生成AIが応答しない | 画面にエラーを出し、電子稟議の通常の検索を案内する |
4行目の「件数も表示しない」は大事です。 「閲覧できない前例が3件あります」と出すだけで、M&Aや処遇の稟議が存在することが伝わります。 セキュリティ フィルターは、グループIDを Collection(Edm.String) のフィルター可能なフィールドに持たせ、search.in で絞る方法が推奨されています。このフィールドは retrievable を false にして検索結果に返さないようにしますが、公式の説明では、これはフィールド単位の保護の仕組みではなく、すべてのクエリにフィルターをかけることで文書単位の承認を実現するものとされています。
記録を残す
- 検索した日時、審査担当、新しい稟議の番号
- 生成AIが組み立てた検索語と絞り込みの条件
- 検索結果の上位(稟議番号と
@search.rerankerScore) - 生成AIが返したJSONと、番号の照合・引用の一致検査で除いたもの
- 審査担当が原本を開いた稟議と、審査メモに使った稟議
- インデックスの更新の記録(取り込んだ件数、読めなかったPDF)
4つ目の「除いたもの」は、生成AIの癖を見るために残します。 実在しない番号や言い換えた引用が増えたら、指示の書き方かモデルの設定を見直します。
5つ目は、前例の価値を測る材料になります。 審査メモに使われた稟議の種類を見ると、どの種類の稟議で前例が効いているかが分かります。
04実装レベルの3段階
最小構成では件数が足りません。 貼り付けられるのは一部の稟議だけで、7年分・9,000件は扱えません。確かめるための段階です。 半自動化で、1件30分が20分程度になります。 検索は速くなりますが、候補の稟議を1件ずつ開いてコメントを読む作業が残ります。本格構成で10分になり、この段階が本記事の想定です。 差が大きいのは、コメントから条件と理由を拾う作業が、1件ずつの読み込みだからです。 段階を飛ばさないでください。 半自動化の段階で、閲覧グループの付け方と金額の区分の付け方を固めます。閲覧権限の誤りは、本格構成で生成AIが中身をまとめるようになってから見つかると、影響が大きくなります。
05工数削減シミュレーション
導入後 120件 × 10分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 設備投資・業務委託・購買契約・IT導入などの稟議が毎月数十件から百件以上あり、経営企画や財務が審査の前に「前にも似た案件があったはず」と過去の稟議を探している製造業・商社・建設業・物流業。電子稟議の仕組みに過去の稟議書と決裁者のコメントが数年分たまっている場合。審査の観点が特定の担当者の記憶に頼っている場合。
- 稟議が月に数件で、担当者が全件を覚えていられる場合。過去の稟議が紙のまま綴じられ、電子化の予定がない場合。決裁時のコメントや付帯条件を記録しておらず、承認・否決の結果しか残っていない場合。決裁そのものをAIに判断させたい場合(この構成が返すのは過去の事例までです)。
07最小構成で試す方法
- 先月審査した稟議から10件を選ぶ(うち数件は、ベテランが前例を挙げて指摘したものを入れる)
- その10件について、当時どの前例を参照したかを審査メモから書き出す
- 過去2年分の同じ種類の稟議を電子稟議から書き出し、本文とコメントを1つのテキストにまとめる
- 手元の生成AIの画面に、新しい稟議とまとめたテキストを貼り、「この稟議に似た過去の稟議を挙げ、付いた条件と理由をコメントから原文のまま引用してください。書かれていない番号を挙げないでください」と指示する
- 挙がった前例を、当時参照した前例と突き合わせる
10件で確かめるのは、コメントに前例の価値があるかどうかです。
| 出てきた内容 | 判断 |
|---|---|
| 当時の前例が挙がり、条件の引用も合っていた | インデックスの設計に進む |
| 前例は挙がったが、条件を言い換えた | 指示の書き方で直る。構成は有効 |
| コメント欄がほとんど空で、条件も理由も取れない | 記録の残し方が先。 AIの問題ではない |
3行目が出ることは珍しくありません。 決裁者が口頭で条件を伝え、コメント欄には「承認」としか書かない運用の会社は多くあります。その場合は、まず決裁時に条件をコメント欄に残す運用を始めてください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 実在しない稟議番号が一覧に出る | 検索結果の番号と照合し、無いものを除く |
| 付帯条件が言い換えられる | 引用を原本のコメントと文字列で照合する |
| 閲覧できない稟議の中身が出る | セキュリティ フィルターを全クエリにかける |
| 日本語の本文で検索が当たらない | ja.microsoft か ja.lucene を作成時に指定する |
| コメントが並べ替えから落ちる | コメントを本文と同じ塊の前のほうに置く |
| 否決された前例が出てこない | 否決・取下げの稟議もインデックスに入れる |
| 審査中の稟議が前例として出る | 決裁済みのものだけを取り込む |
| 金額の絞り込みが効かない | 金額を円の数値にそろえて入れる |
| 型式や取引先名で当たらない | キーワード検索を残したハイブリッド検索にする |
| 一覧の文章が審査メモに貼られる | 原本からの引用を運用で求める |
| コメント欄が空の稟議が多い | 決裁時に条件を書き残す運用を先に始める |
| 人事異動で閲覧グループが古くなる | 毎晩の更新でグループの対応も見直す |
上の3行が、この構成の失敗のほとんどです。 どれも「それらしい前例の一覧」に見えます。番号と引用を原本と機械で照合しているかどうかで、審査に使えるかが決まります。
下の2行は、AIの外の問題です。 前例はコメントにしか残らず、コメントが無ければ探しようがありません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 投資額、取引先と契約条件、否決の理由、決裁者のコメント、そして役員の処遇やM&A、訴訟などの機密性の高い稟議です。
- 閲覧権限をインデックスに持たせる … 電子稟議で見られない稟議は、前例検索でも見られないようにします。生成AIに渡る前に除くことが原則です
- 存在も漏らさない … 閲覧できない稟議の件数や件名を、画面にもログにも出しません
- 決裁の判断をAIに寄せない … 一覧は前例の材料です。承認・否決の見込みを出させない設計にしています
- 決裁者の名前の扱いを決める … コメントの主を役職に置き換えるかを決めます。特定の役員のコメントだけを集める使い方は想定していません
- AIのまとめを稟議の記録に混ぜない … 一覧を稟議のコメント欄に貼ると、次の検索で前例として返ってきます
- インデックスの複製と保管場所を管理する … 9,000件の稟議がまとまった検索インデックスは、それ自体が機密の集まりです
誤りが起きた場合のリスクは、誤った前例で審査が進むことと、見てはいけない稟議が見えることの2つです。 前者は原本の確認で、後者は検索段階の絞り込みで防ぎます。
10まず何から始めるか
1週目:稟議の種類と閲覧グループを整理する
電子稟議の種類の区分を確かめ、自由記述になっているものを一覧に寄せます。あわせて、閲覧が限られている稟議の種類と、見てよいグループを書き出します。
2週目:10件で試す
先月の稟議から10件を選び、同じ種類の過去の稟議を手元の生成AIに貼って前例を挙げさせます。当時ベテランが挙げた前例と突き合わせ、コメントを言い換えていないかを最優先で見ます。
3週目:書き出しの方法を確かめる
電子稟議のワークフローから、本文・決裁者のコメント・差戻し履歴・閲覧設定を稟議ごとに書き出せるかを確かめます。紙の時代の稟議は、どの年まで遡るかを決めます。
4週目:1つの種類でインデックスを作る
設備投資の稟議だけでインデックスを作り、ハイブリッド検索で候補を一覧にするところまで作ります。この時点では生成AIのまとめは付けず、検索の当たり方だけを見ます。
2か月目: 閲覧グループの絞り込みとセマンティック ランカーを足し、残りの種類を取り込みます。3か月目以降: 生成AIのまとめと番号・引用の検査を足し、1件30分が何分になったかを実測します。審査メモに引用された前例の種類を見て、コメントの残し方を見直した時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| ハイブリッド検索がフルテキストとベクトルのクエリを1要求で並列に実行し、RRFでまとめて1つの結果セットを返すこと。キーワード検索が製品コード・専門用語・日付・人名の完全一致に強く、ベクトル検索が概念的に似た情報を見つけること。フィルター・ファセット・セマンティック ランク付けと組み合わせられること | Microsoft Learn: ハイブリッド検索の概要 | 2026-10-06 |
セマンティック ランカーが上位50件を再ランク付けし、0〜4の @search.rerankerScore を付けること。文書ごとに最大2,000トークン(タイトル128・キーワード128・残りがコンテンツ)で上限を超えた内容は無視されること。キャプションと回答は逐語的で新しい文章を作らないこと。使用量で課金され、検索文字列が空なら課金されないこと。一部のリージョンで提供されること | Microsoft Learn: セマンティック ランキングの概要 | 2026-10-06 |
セキュリティ フィルターがグループIDを Collection(Edm.String) のフィルター可能なフィールドに持たせ、search.in で絞る方法が推奨されること。retrievable を false にしてもフィールド単位の保護ではなく、全クエリへのフィルターで文書単位の承認を実現すること | Microsoft Learn: セキュリティ フィルター パターン | 2026-10-06 |
日本語のアナライザーとして ja.microsoft と ja.lucene があること。既定のアナライザーでは空白の無い日本語が1つのトークンになり得ること。アナライザーはインデックスの作成時、データの読み込み前に設定すること | Microsoft Learn: 言語アナライザーを追加する | 2026-10-06 |
レイアウトモデル(prebuilt-layout)がテキスト・表・選択マーク・段落の役割を取り出すこと。Markdown で出力でき、表が HTML の表で表されること。PDF は最大2,000ページ、S0で500MB、パスワード付きPDFは解除が必要なこと | Microsoft Learn: ドキュメント レイアウト分析 | 2026-10-06 |
構造化出力が json_schema と strict: true で JSON スキーマに従わせ、全フィールドを required にし additionalProperties: false を指定する必要があること | Microsoft Learn: Structured outputs(Azure OpenAI) | 2026-10-06 |
電子稟議のワークフローからの書き出し方法は、使っている製品の仕様を確かめてください。 本記事は Microsoft Learn で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0547)についてのご相談はこちらから。
