病院の医事課・総務課の職員から出る院内規程・委員会の決定・院内通知の質問に、いま有効な文書を根拠に答えて該当箇所を示す
医事課・総務課の職員から届く「この場合は院内でどう決まっているか」という質問に、院内規程・委員会の決定・院内通知から根拠を探し、該当箇所を引用した回答案を作ります。総務の担当者は、引用が合っているかを確かめて返すだけになります。
- 生成AI
- Azure OpenAI Service/Claude
- AIサービス
- Azure AI/Google Document AI/Google Vertex AI/OpenSearch
- 対象業界
- 介護/医療
- 対象部門
- 総務
- 対象業務
- 問い合わせ対応/情報検索
- 主な課題
- 問い合わせが多い/属人化している/情報が見つからない
- AIで行う処理
- 検索(RAG)
- 主な効果
- 対応スピード向上/属人化解消/検索時間短縮
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 職員がTeamsのチャットか電話で総務課に質問する
- 総務課の担当者が、思い当たる規程を共有フォルダから開く
- 規程の目次から該当する条を探し、本文を読む
- その条に関係する委員会の決定や院内通知がないかを、議事録と通知のフォルダで探す
- 見つかった文書の日付を比べ、どれがいま有効かを判断する
- 該当箇所をコピーし、説明を添えて職員に返す
- 判断に迷うものは、規程の所管部署か課長に確認してから返す
- 人職員がTeamsの問い合わせ用のチャネルに質問を書く
- 自動質問者の所属から、見てよい文書の範囲(閲覧グループ)を決める
- 自動質問をキーワードとベクトルの両方で検索し、条項単位の候補を集める
- 自動候補を文書の台帳と照らし、廃止済みの版を外し、効力の順と施行日で並べ替える
- 自動生成AIが、候補だけを根拠に回答案と引用箇所を作る
- 自動引用した文字列が候補の本文にそのまま含まれるかをプログラムで照合する
- 人総務課の担当者が回答案と引用を確かめ、直して返す
- 人根拠が見つからなかった質問と、文書どうしが食い違っていた質問は所管部署へ回す
- 自動返した答えと根拠の文書・条項・版を記録する
各工程の詳しい説明を読む
- 職員がTeamsのチャットか電話で総務課に質問する
- 総務課の担当者が、思い当たる規程を共有フォルダから開く
- 規程の目次から該当する条を探し、本文を読む
- その条に関係する委員会の決定や院内通知がないかを、議事録と通知のフォルダで探す
- 見つかった文書の日付を比べ、どれがいま有効かを判断する
- 該当箇所をコピーし、説明を添えて職員に返す
- 判断に迷うものは、規程の所管部署か課長に確認してから返す
(a)どれがいま有効か分からない。 共有フォルダには「旧」「改定案」「最新」と名の付いたファイルが並び、ファイル名の「最新」が最新とは限りません。 規程の本文が改定されていなくても、その後の委員会の決定で運用が変わっていることがあります。4番と5番を省くと、古いルールを答えることになります。
(b)答えられる人が限られる。 委員会の決定と院内通知の関係を覚えているのは、長く総務課にいる2名です。この2名が休むと、同じ質問への答えが担当者によって変わります。 医事課からは「前に聞いたときと答えが違う」と言われることもあります。
(c)同じ質問がくり返し届く。 月の初めには窓口の運用、年度の初めには職員の手続き、委員会の後にはその決定についての質問が集まります。答えは毎回同じ文書から探し直しています。 過去に返した答えを探すより、規程を開き直すほうが早いからです。
(d)返した答えに根拠が残らない。 チャットで返した答えは、どの文書の何条を見たかが残りません。後で運用が変わったときに、誰に何を答えたかをたどれません。
- 【人】 職員がTeamsの問い合わせ用のチャネルに質問を書く
- 【自動】 質問者の所属から、見てよい文書の範囲(閲覧グループ)を決める
- 【自動】 質問をキーワードとベクトルの両方で検索し、条項単位の候補を集める
- 【自動】 候補を文書の台帳と照らし、廃止済みの版を外し、効力の順と施行日で並べ替える
- 【自動】 生成AIが、候補だけを根拠に回答案と引用箇所を作る
- 【自動】 引用した文字列が候補の本文にそのまま含まれるかをプログラムで照合する
- 【人】 総務課の担当者が回答案と引用を確かめ、直して返す
- 【人】 根拠が見つからなかった質問と、文書どうしが食い違っていた質問は所管部署へ回す
- 【自動】 返した答えと根拠の文書・条項・版を記録する
7番目で人が見るのは、回答案そのものより引用です。 引用された条項が、いま有効な版の、質問に関係する箇所かを確かめます。引用が正しければ、回答案の言い回しは短く直すだけで済みます。
4番目をAIにさせていないのは、意図してのことです。 どの版が有効かは、文書の台帳にある施行日と廃止日で決まります。AIに日付を読ませて判断させると、本文中の「令和○年○月から」の記述と取り違えます。
02今回想定するシステム構成
院内規程・要領・委員会の議事録・院内通知(PDF/Word) │ 所管部署が文書の台帳に登録(種別・番号・施行日・廃止日・閲覧グループ) ▼ Azure AI Document Intelligence(レイアウトモデル) │ 見出し・段落・表を Markdown で返す ▼ Azure Functions ── 条項単位に分割、台帳の属性を付ける ▼ Azure AI Search(日本語アナライザー+ベクトル) ▲ │【トリガー】Teams のチャネルへの質問 Azure Functions ── 閲覧グループのフィルター付きでハイブリッド検索 ▼ 台帳で廃止済みを外し、効力の順と施行日で並べ替え ▼ Azure OpenAI ── 候補だけを根拠に回答案と引用を作る(構造化出力) ▼ 引用の照合(候補の本文に含まれるか) ▼ 【総務課の担当者が確認して返す】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence(レイアウトモデル prebuilt-layout) | Google Document AI |
| 検索基盤 | Azure AI Search(ハイブリッド検索、セマンティック ランカー、セキュリティ フィルター) | Vertex AI Search(Agent Search)、Amazon OpenSearch Service |
| 埋め込み | Azure OpenAI(埋め込みモデル) | 検索基盤が対応する他の埋め込みモデル |
| 生成AI | Azure OpenAI(Microsoft Foundry)(回答案と引用の作成) | Claude API |
| 連携 | Azure Functions(取り込み、分割、検索、引用の照合) | Azure Logic Apps |
| 窓口 | Microsoft Teams(問い合わせ用のチャネル) | グループウェアの掲示板 |
新しく作るのは、文書の台帳です。 文書ごとに、種別(規程/要領/委員会の決定/院内通知)、文書番号、施行日、廃止日、置き換えた文書の番号、閲覧グループを持たせます。この台帳がないと、検索は「書いてあるもの」を返せても「いま有効なもの」を返せません。
検索の土台は Azure AI Search のハイブリッド検索です。 フルテキスト検索とベクトル検索を1つの要求で並列に実行し、逆ランク融合(RRF)で結果をまとめます。公式の説明では、製品コード、専門用語、日付、人名のような完全一致が必要なクエリではキーワード検索のほうが有利とされています。「預り金」「第12条」「令和7年度第3回」のような語が多い院内の質問には、両方を併用する理由があります。
該当箇所を示すのはセマンティック ランカーです。 上位50件の結果を言語理解モデルで並べ替え、内容をよく表す文と語句をキャプションとして抜き出します。キャプションと回答はインデックスの本文から逐語的に抜き出されるもので、生成AIが新しく作る文ではありません。 引用の出どころとして扱いやすい性質です。
03どうやって実装するのか
処理の起点を決める
起点は2つあります。 1つは職員がTeamsの問い合わせ用チャネルに質問を書いたとき、もう1つは文書の台帳に新しい文書や改定が登録されたときです。前者が回答案を作り、後者がインデックスを更新します。
質問の受け口はチャネル1本にします。 電話や個別のチャットで届いた質問も、総務課の担当者がチャネルに書き写してから回します。受け口が分かれると、記録が残る質問と残らない質問ができ、第3章の(d)が解決しません。
インデックスの更新は台帳の登録を起点にし、ファイルの保存を起点にしません。 共有フォルダには改定案や下書きも置かれます。ファイルが置かれただけで検索対象にすると、決まっていない改定案を根拠に答えることになります。 台帳に施行日が入った時点で取り込みます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 質問 | 本文、質問者、所属、送った日時 | Teams のチャネル |
| 院内の文書 | 規程・要領・委員会の議事録・院内通知の本文(PDF/Word) | 共有フォルダ |
| 文書の台帳 | 種別、文書番号、題名、施行日、廃止日、置き換えた文書、所管部署、閲覧グループ | 総務課が作る台帳 |
| 用語の対応表 | 院内の呼び名と規程上の用語(「預り金」と「保管金」など) | 総務課が作る一覧 |
| 過去の回答 | 確認済みの回答と根拠の条項 | この構成の記録 |
質を決めるのは台帳と用語の対応表です。 台帳の施行日と廃止日が空だと、改定前の版を外せません。用語の対応表がないと、職員が窓口で使う言葉と規程の言葉がずれて、キーワード検索に引っかかりません。 ベクトル検索がある程度補いますが、院内の略語は補えないことがあります。
過去の回答は、検索の候補には入れません。 回答は当時の版に基づいており、そのまま根拠にすると改定後に古い答えを再生産します。担当者が確認するときの参考として、横に並べるだけにします。
データの取得方法を決める
文書の読み取りは、Azure AI Document Intelligence のレイアウトモデル(prebuilt-layout)で行います。 PDF、画像、Word(DOCX)、Excel、PowerPoint、HTML を入力でき、テキスト・表・選択マークと、タイトル・セクション見出し・ページヘッダー・ページフッターなどの段落の役割を返します。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| Markdown 形式の本文 | outputContentFormat=markdown の出力 | 見出しの階層を保ったまま条項に分ける |
| 段落の役割 | paragraphs の role | pageHeader・pageFooter・pageNumber を本文から外す |
| セクションの階層 | sections | 章・節・条の親子関係を残す |
| 表 | tables(Markdown では HTML の表) | 手数料表や保管期間の一覧を表のまま持つ |
Markdown で受け取るのは、条の区切りを見出しとして残すためです。 規程は「第1章」「第3条」「2」のように階層を持ち、Markdown の見出しとして出てくれば、そこで分割できます。v4.0(2024-11-30)では表が HTML の表として出力され、結合セルや複数行の見出しも表せるとされています。手数料表のように結合セルを含む表が崩れにくくなります。
台帳は総務課の表計算ファイルか、リストで持ちます。 取り込みの処理は、台帳の行を1件ずつ読み、対応するファイルを読み取りに回します。台帳に無いファイルは取り込みません。
AIへ渡す前に整形する
- ページヘッダー・フッター・ページ番号を外す … 段落の役割で判定します。各ページに印刷された「○○病院 総務規程」の行が条文の途中に挟まると、検索の一致がずれます
- 条項単位に分割する … 見出しで区切り、1つの条を1件の文書にします。長い条は項で分け、条の見出しを各件の先頭に付け直します
- 台帳の属性を付ける … 文書番号、種別、施行日、廃止日、所管部署、閲覧グループを各件に持たせます
- 議事録は決定事項だけを切り出す … 議事録のうち「決定事項」「承認事項」の節だけを取り込み、議論の経過は取り込みません
- 用語の対応表を同義語として登録する … 院内の呼び名で検索しても規程の用語に当たるようにします
- 埋め込みを作る … 条項ごとの本文から埋め込みを作り、ベクトルのフィールドに入れます
- パスワード付きの文書を確かめる … レイアウトモデルでは、パスワードでロックされたPDFは提出前にロックを解除する必要があります
4番目を省かないでください。 議事録の議論の部分には「〜という意見があった」「〜は見送る」が並びます。取り込むと、見送られた案を根拠に答えることがあります。 決定事項の節だけに絞ります。
日本語のフィールドには日本語アナライザーを付けます。 Azure AI Search には ja.microsoft と ja.lucene があり、アナライザーはデータを読み込む前、インデックスの作成時に設定します。 公式の説明では、日本語は単語の区切りにスペースを使わないため、言語に依存しない既定のアナライザーでは文字列全体が1つのトークンとして扱われる可能性があるとされています。後から変えるとインデックスを作り直すことになるので、最初に両方を試して決めます。
AIに処理させる
させるのは、検索で集めた候補だけを根拠に、質問への回答案を作り、根拠にした箇所をそのまま写すことです。
| 見るもの | させること | 判断できないときの扱い |
|---|---|---|
| 質問の内容 | 何を聞いているかを1文にまとめ直す | 複数の質問が混ざっていれば分けて扱う |
| 候補の条項 | 質問に答えている条項を選ぶ | 答えている条項が無ければ not_found |
| 効力の順 | 規程→要領→委員会の決定→院内通知の順で読み、後の文書が前の文書を変えていればそれを優先する | 同じ順位で内容が食い違えば conflict |
| 引用 | 根拠にした箇所を本文からそのまま写す | 写せる箇所が無ければ回答を出さない |
| 回答案 | 引用の範囲で、職員向けに2〜4文で書く | 引用の範囲を超える説明は書かない |
効力の順と日付は、AIに渡す前にプログラムで並べ替えておきます。 AIには「上から順に新しく、効力が強い」と伝えるだけにします。候補の並びそのものが判断の材料になるので、AIが日付を比べる場面をなくします。
| させないこと | 理由 |
|---|---|
| 規程の解釈を決める | 解釈は所管部署が決める。AIは書かれている範囲を示すだけ |
| 候補に無い知識で補う | 一般的な病院の運用や法令の知識で埋めると、院内の決まりと違う答えになる |
| 新旧の判断 | 台帳の施行日と廃止日で決める。本文中の日付から推測させない |
| 食い違いの解消 | 文書どうしが食い違えば、どちらが正しいかは所管部署が決める |
| 職員への直接の返信 | 回答は担当者が確認してから返す |
2行目がいちばん起きやすい失敗です。 「時間外の預り金」と聞かれて院内に記載が無いと、生成AIは一般的な病院の運用をもっともらしく書きます。院内の文書に無いことは「見つからない」と返させ、所管部署へ回す材料にします。
指示内容を固定する
あなたは病院の総務課で、職員からの院内のルールの質問に答える担当の補助です。
下の【候補】だけを根拠に回答案を作ってください。候補に無いことは書かないでください。
【候補の並び】
候補は、効力の強い順(規程 → 要領 → 委員会の決定 → 院内通知)、
同じ種別の中では施行日の新しい順に並んでいます。廃止された版は含まれていません。
後の文書が前の文書の内容を変えている場合は、後の文書を優先してください。
【status の選び方】
- answered .... 候補の中に質問への答えがある
- partial ..... 答えの一部だけがある。足りない部分を missing_points に書く
- not_found ... 候補の中に答えが無い
- conflict .... 同じ種別・同じ時期の候補どうしで内容が食い違っている
迷ったときに answered を選ばないでください。
【厳守事項】
- quotes には、根拠にした箇所を候補の本文からそのまま写してください。
言い換え、要約、句読点の変更をしないでください。
- quotes に写した箇所の範囲を超える説明を、answer に書かないでください。
- 一般的な病院の運用、法令、他の病院の例で補わないでください。
- 候補の本文にある「○年○月から」の記述で新旧を判断しないでください。
新旧は候補の並び順で決まっています。
- 規程の解釈が分かれうる場合は、解釈を決めずに interpretation_needed を true にしてください。
- 候補に無い場合は status を not_found にし、answer は空にしてください。
- 質問に個人の患者や職員の情報が含まれていても、answer に繰り返さないでください。
【質問】{question}
【質問者の所属】{department}
【用語の対応表】{glossary}
【候補】{candidates}
「候補の本文の日付で新旧を判断しない」を明記しないと、本文の記述を根拠に順番を入れ替えます。 規程の附則に「この規程は令和5年4月1日から施行する」とあり、通知の本文に「令和4年度の運用を改め」とあると、年度の数字だけを比べて規程のほうを新しいと判断することがあります。 並びは台帳の日付で決めてあるので、それに従わせます。
「迷ったときに answered を選ばない」は、部分的な答えを完全な答えとして返させないためです。 規程に原則があり、例外が委員会で決まっていない質問は partial です。answered で返すと、職員は例外が無いと受け取ります。
出力形式を固定する
次の形のJSONで受け取ります。 Azure OpenAI の構造化出力(response_format に json_schema と strict: true)で、この形を守らせます。
{
"question_id": "",
"restated_question": "",
"status": "answered | partial | not_found | conflict",
"answer": "",
"quotes": [
{ "doc_no": "", "doc_type": "rule | guideline | committee | notice",
"clause": "", "effective_date": "", "text": "" }
],
"missing_points": [],
"interpretation_needed": false,
"route_to": ["所管部署の名前"]
}
1つ目の理由は、引用を照合できることです。 quotes の text が、検索で集めた候補の本文にそのまま含まれるかをプログラムで確かめます。含まれない引用が1つでもあれば、回答案を担当者に出す前に needs_review の印を付けます。
2つ目は、status で回し先を機械的に決められることです。
status | 担当者の画面での扱い |
|---|---|
answered | 回答案と引用を並べて表示。確認して返す |
partial | missing_points を強調表示。足りない部分を所管部署へ確認するか決める |
not_found | 所管部署の候補を表示。回答案は出さない |
conflict | 食い違う2つの引用を並べて表示。所管部署へ回す |
3つ目は、スキーマの制約に合わせやすいことです。 公式の説明では、構造化出力ではすべてのフィールドを必須にし、オブジェクトには additionalProperties: false を設定します。省略しうる項目は null との組み合わせで表します。minItems や maxLength などのキーワードは使えないため、引用の件数や文字数の上限はプログラムの側で確かめます。
なお、構造化出力は「Bring your own data(On your data)」のシナリオでは使えないとされています。 そのため、この構成では検索を自前の処理で行い、候補を本文としてプロンプトに入れてから構造化出力で受け取ります。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Teams のチャネル | ボットまたは送信の仕組み | 質問を受け取り、確認後の回答を返す |
| 文書の台帳 | 読み取り | 施行日・廃止日・閲覧グループを引く |
| Azure AI Document Intelligence | API呼び出し | 文書を Markdown で読み取る |
| Azure AI Search | API呼び出し | 条項単位の登録とハイブリッド検索 |
| Azure OpenAI | API呼び出し | 埋め込みの作成と、回答案の作成 |
| 回答の記録 | 書き込み | 質問、回答、引用、確認者を残す |
閲覧の範囲は、検索のフィルターで絞ります。 公式のセキュリティ フィルターのパターンでは、グループの識別子を入れる Collection(Edm.String) のフィールドを filterable にし、search.in 関数で質問者の所属するグループに一致する文書だけを返します。人事や医療安全の委員会の決定は、関係者だけが見られるようにします。
ただし、このフィールドは認証や認可の仕組みではありません。 公式の説明でも、プリンシパルは単なる文字列で、retrievable を false にしても難読化やフィールド単位の保護にはならないとされています。すべての検索要求にフィルターを必ず付ける処理を、連携の側で1か所にまとめます。
台帳への書き込みはしません。 食い違いや廃止漏れを見つけても、台帳を直すのは所管部署です。
人が確認する
総務課の担当者は、すべての回答案を確認してから返します。 院内のルールは患者の対応や会計に直結するため、確認なしで返す設計にはしません。
- 引用の版を確かめる … 引用の文書番号と施行日が、いま有効な版かを台帳で確かめます
- 引用が質問に答えているかを読む … 条項は合っていても、質問の場面と違う条を引いていることがあります
- 回答案を短く直す … 引用の範囲を超える説明が入っていれば削ります
partial・not_found・conflictを所管部署へ回す … 回すときは、引用と足りない点を添えます- 返した回答を確定として記録する … 直した箇所も残します
1番目を省かないでください。 台帳の廃止日の入れ忘れは、運用を始めたばかりの時期にいちばん多く起きます。引用の施行日を見て「この改定は聞いたことがない」と感じたら、台帳を疑います。
目標は、240件をならして1件5分です。 answered の確認は数分、conflict は所管部署への連絡文を書くので長くかかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 候補が見つからない | not_found。所管部署の候補を示し、回答案は出さない |
| 引用が候補の本文と一致しない | needs_review の印を付け、担当者が原文と照らす |
| 同じ種別の文書どうしが食い違う | conflict。両方の引用を並べて所管部署へ |
| 台帳の廃止日が空で、新旧の版が両方残る | 両方が候補に出る。担当者が気づいたら台帳の所管部署へ連絡 |
| 文書がパスワード付きで読めない | 取り込みを止め、所管部署に解除した版の登録を依頼 |
| 質問に患者の氏名や病名が含まれる | 回答案では繰り返さない。記録では該当部分を伏せる |
| 質問が診療報酬や法令の解釈 | 院内の文書の範囲外として not_found。医事課の担当者へ |
| 生成AIが応答しない | 検索結果の上位とキャプションだけを担当者に示す |
上から3行目は、異常ではなく発見です。 規程と通知が食い違っているのは、改定のときに関係する文書を直しきれていなかったということです。この構成を回すと、まずこの種の食い違いが見つかります。 件数を数えて、規程の見直しの材料にします。
記録を残す
- 質問の本文、質問者の所属、受け取った日時
- 検索の条件(フィルターに使った閲覧グループ)と、上位の候補の文書番号・条項・施行日
- 生成AIの出力全文(
status、answer、quotes)と、引用の照合の結果 - 担当者が直した箇所と、確定した回答
- 所管部署へ回した質問と、その返事
conflictとnot_foundの件数と、関係した文書
2つ目で「そのときの候補」を残すのは、版が後から変わるためです。 改定の後に「前はこう言われた」と言われたとき、当時どの版を根拠にしたかが分かれば、答えが変わった理由を説明できます。
最後の行は、規程の見直しの材料です。 not_found が続く分野は、院内にルールが無いか、あっても見つからない言葉で書かれています。
04実装レベルの3段階
最小構成では、文書を集める手間が残ります。 30件の試行には使えますが、毎月240件には使えません。 半自動化で、1件15分が8分程度になります。 規程の該当条は検索で出ますが、委員会の決定と通知が関係するかは、まだ人が確かめます。本格構成で5分になり、この段階が本記事の想定です。 差が大きいのは、台帳による新旧の整理が、第4章の②をほとんど引き受けるからです。 段階を飛ばさないでください。 半自動化の段階で検索を1か月使うと、引っかからない院内の言葉と、台帳の廃止日が抜けている文書が見えてきます。そこを直してから本格構成に進みます。
05工数削減シミュレーション
導入後 240件 × 5分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 病床数が百床を超え、院内規程・要領・委員会の決定・院内通知が合わせて数百本あり、共有フォルダに版の違うファイルが並んでいる病院。規程の担当が数名で、「どれがいま有効か」を答えられる人が限られている場合。委員会の議事録と院内通知を、日付と番号を付けてPDFまたはWordで残している場合。
- 院内規程が数十本で、担当者が全体を覚えている小規模な病院・診療所。規程・通知を文書管理の仕組みで版ごとに管理しており、すでに条文単位で検索できる場合。質問の多くが診療報酬の算定や法令の解釈で、院内の文書では答えが決まらない場合。なお、規程の解釈を決めるのは規程の所管部署で、この構成はその判断を代替しません。
07最小構成で試す方法
- 先月総務課に届いた質問から30件を選ぶ(うち数件は、委員会の決定や通知で運用が変わったものを入れる)
- その30件に関係する規程・議事録・院内通知を集め、いま有効なものだけを残す
- 集めた文書を手元のAIサービスにまとめて渡す
- 「この文書だけを根拠に、次の質問に答えてください。根拠にした箇所はそのまま写してください。文書に無いことは『見つからない』と答えてください」と指示する
- 出てきた答えを、当時の担当者の答えと突き合わせる
2番目で「いま有効なものだけを残す」作業に、どれだけ時間がかかるかを測ってください。 この時間が、本格構成で台帳を作るときの手間の見積もりになります。
| 出てきた内容 | 判断 |
|---|---|
| 当時の担当者と同じ答えが、引用付きで出た | 検索とインデックスの構築に進む |
| 文書に無いことを一般論で補った | 指示の書き方で直る。構成は有効 |
| 古い版を根拠にした | 台帳の整備が先。 AIの問題ではない |
3行目は、手で集めたつもりでも出ます。 古い版が混ざっていたということは、手作業でも同じ取り違えが起きていたということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 改定前の版を根拠に答える | 台帳の廃止日で外す。 本文の日付で新旧を判断させない |
| 改定案や下書きを根拠に答える | 台帳に施行日が入るまで取り込まない |
| 議事録の見送られた案を根拠に答える | 決定事項の節だけを取り込む |
| 院内の呼び名で検索が当たらない | 用語の対応表を同義語として登録する |
| 日本語が1つの長いトークンになる | インデックス作成時に日本語アナライザーを設定する |
| 文書に無いことを一般論で補う | 候補だけを根拠にさせ、not_found を返させる |
| 引用が原文と微妙に違う | 引用を候補の本文と照合し、一致しなければ人へ |
| 閲覧できないはずの文書が候補に出る | フィルターを付ける処理を1か所にまとめる |
| ページヘッダーが条文の途中に入る | 段落の役割で外す |
| 手数料表が崩れる | 表を HTML の表として受け、表のまま持つ |
| 構造化出力でスキーマが通らない | すべての項目を必須にし、additionalProperties: false を付ける |
| 食い違いを総務課だけで解消する | どちらが正しいかは所管部署が決める |
上の3行が、この構成の失敗のほとんどです。 どれも「書いてあるが、いまは有効でない」文書を根拠にしてしまう失敗です。検索の精度を上げるより、検索の対象を有効な文書に絞るほうが効きます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 院内規程・要領・委員会の決定・院内通知の本文と、職員からの質問です。質問には、患者の氏名や事情が書かれることがあります。
- 患者の情報を質問に書かない運用を決める … 「○○さんの預り金は」ではなく「入院患者の預り金は」と書くよう、チャネルの説明に入れます。書かれていた場合も、記録では該当部分を伏せます
- 閲覧範囲を検索の段階で絞る … 人事・医療安全・経営に関する委員会の決定は、関係者だけが見るものです。生成AIに渡す前に、フィルターで候補から外します
- フィルターを認証の代わりにしない … セキュリティ フィルターは文字列での絞り込みで、質問者の所属の取得を誤れば、見えてはいけない文書が候補に出ます。 所属は Teams の利用者の情報から取り、質問の本文から取らないでください
- 回答を確認なしで返さない … 院内のルールの答えは、窓口での患者対応や会計にそのまま使われます。誤った答えは、患者への説明の誤りになります
- 規程の解釈を決めない … この構成が出すのは、どの文書の何条に何が書いてあるかまでです。解釈が分かれるものは、所管部署が決めます
- 文書を外部へ出す範囲を決める … 規程の本文と議事録の決定事項は、Azure のサービスで処理されます。院内の情報システムの担当と、どの文書を取り込むかを決めてから始めてください
誤りが起きた場合のリスクは、古いルールを答えることと、見てはいけない文書を見せることの2つです。 前者は台帳の廃止日で、後者は閲覧範囲のフィルターで防ぎます。どちらも生成AIの側ではなく、検索の前の段階で守ります。
10まず何から始めるか
1週目:質問の記録を取り始める
総務課に届いた質問を、Teams の問い合わせ用チャネルに集めます。電話や個別のチャットで届いたものも書き写します。どの分野の質問が多いか、どの文書を見て答えたかを、1か月分ためます。
2週目:30件で試す
先月の質問から30件を選び、関係する文書を手で集めて、手元のAIサービスに答えさせます。古い版を根拠にしていないか、文書に無いことを補っていないかを最優先で見ます。
3週目:文書の台帳を作る
質問の多い分野の規程から、種別・文書番号・施行日・廃止日・閲覧グループを台帳に入れます。 全部を一度にそろえる必要はありません。規程の約120本のうち、質問の多い上位30本と、それに関係する委員会の決定と通知から始めます。
4週目:取り込みと検索をつなぐ
台帳に載った文書をレイアウトモデルで読み取り、条項単位に分けて Azure AI Search に入れます。この時点では回答案を作らせず、担当者が検索して候補を見るだけにします。
2か月目: 閲覧範囲のフィルターと、回答案と引用の照合を足し、Teams から自動で回答案を出します。not_found と conflict の件数を毎週数えます。3か月目以降: 台帳の対象を広げ、1件15分が何分になったかを実測します。conflict の文書を所管部署が整理し、同じ食い違いが出なくなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
ハイブリッド検索が search と vectorQueries を含む1つの要求で、フルテキスト検索とベクトル検索を並列に実行し、逆ランク融合(RRF)で結果をまとめること。製品コード・専門用語・日付・人名のクエリではキーワード検索が有利とされること。セマンティック ランカーを使う場合は k を50に設定すること | Microsoft Learn: ハイブリッド検索の概要 | 2026-10-13 |
| セマンティック ランカーが上位50件を再ランク付けし、キャプションと回答をインデックスの本文から逐語的に抜き出すこと。生成AIモデルを含まないこと。使用量で課金されるプレミアム機能で、毎月の無料の要求枠があること。一部のリージョンで利用できること | Microsoft Learn: セマンティック ランキングの概要 | 2026-10-13 |
セキュリティ フィルターが Collection(Edm.String) の filterable なフィールドと search.in 関数で文書を絞ること。プリンシパルは単なる文字列で認証や認可は伴わないこと。retrievable を false にしてもフィールド単位の保護にはならないこと | Microsoft Learn: セキュリティ フィルター パターン | 2026-10-13 |
日本語のアナライザーとして ja.microsoft と ja.lucene があること。アナライザーはデータを読み込む前、インデックスの作成時に設定すること。日本語はスペースで単語が区切られず、既定のアナライザーでは文字列全体が1つのトークンになりうること | Microsoft Learn: 言語アナライザーを追加する | 2026-10-13 |
レイアウトモデル(prebuilt-layout)が PDF・画像・DOCX・XLSX・PPTX・HTML を入力にでき、段落の役割(title、sectionHeading、pageHeader、pageFooter、pageNumber など)とセクションの階層を返すこと。outputContentFormat=markdown で Markdown を出力し、v4.0 では表が HTML の表になること。パスワード付きPDFは提出前に解除が必要なこと | Microsoft Learn: ドキュメント レイアウト分析 | 2026-10-13 |
Azure OpenAI の構造化出力が response_format の json_schema と strict: true で指定できること。すべてのフィールドを必須にし、additionalProperties: false を設定すること。minItems・maxLength などが使えないこと。Bring your own data のシナリオでは構造化出力が使えないこと | Microsoft Learn: How to use structured outputs with Azure OpenAI | 2026-10-13 |
どの文書がいま有効か、規程をどう解釈するかは、各規程の所管部署が決めてください。 本記事は公式ドキュメントで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1340)についてのご相談はこちらから。
