議会の質問通告を受けて、過去の答弁と施策資料を根拠に答弁書の下書きを作る
議員から届いた質問通告を論点ごとに分け、過去の答弁と施策資料を根拠に答弁書の下書きを作ります。担当課の職員は、白紙から起案するのではなく、根拠の付いた下書きを直すところから始められます。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- 連携・自動化
- Python
- 対象業界
- 自治体
- 対象部門
- 経営企画/総務
- 対象業務
- 情報検索/書類作成
- 主な課題
- 属人化している/情報が見つからない/書類作成に時間がかかる
- AIで行う処理
- 生成
- 主な効果
- 品質標準化/工数削減/検索時間短縮
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 総務課が質問通告を受け取り、質問項目ごとに担当課を決めてメールで割り振る
- 担当課の起案者が、会議録検索システムで同じ議員・同じ施策の過去の質疑を探す
- 共有フォルダを開き、過去の答弁書の原稿と、そのとき使った資料を探す
- 施策の現状(事業の実績、予算額、計画の進み具合)を、事業担当や予算書で確かめる
- 答弁書の様式に、答弁の文を起案する
- 前回の答弁と矛盾がないか、数字が最新かを読み直す
- 課長・部長の確認を経て総務課へ提出し、答弁調整で直された文を反映する
- 人総務課が質問通告を受け取り、質問項目ごとに担当課を決めて答弁管理リストに登録する
- 自動登録をきっかけに中継プログラムが動き、質問項目を論点に分ける
- 自動論点ごとに、過去の会議録と答弁書の原稿を検索し、候補を上位から取り出す
- 自動担当課が登録した施策資料(事業の実績、予算、計画)から、関係する箇所を取り出す
- 自動Azure OpenAI が、渡した資料だけを根拠に、論点整理・答弁の骨子・下書きを返す
- 自動中継プログラムが、下書きの各文に付いた根拠の番号が実在するか、数字が資料の中にあるかを照らし合わせる
- 自動前回の答弁との差分表と、「要確認」の一覧を付けて、担当課の起案者へ届ける
- 人起案者が根拠を開いて確かめ、下書きを直す。要確認の箇所は事業担当に問い合わせる
- 人課長・部長が確認し、総務課へ提出する
- 人首長・副首長との答弁調整を経て、最終の答弁書を確定する
- 自動確定した答弁書と、下書きからの修正箇所を保存する
各工程の詳しい説明を読む
- 総務課が質問通告を受け取り、質問項目ごとに担当課を決めてメールで割り振る
- 担当課の起案者が、会議録検索システムで同じ議員・同じ施策の過去の質疑を探す
- 共有フォルダを開き、過去の答弁書の原稿と、そのとき使った資料を探す
- 施策の現状(事業の実績、予算額、計画の進み具合)を、事業担当や予算書で確かめる
- 答弁書の様式に、答弁の文を起案する
- 前回の答弁と矛盾がないか、数字が最新かを読み直す
- 課長・部長の確認を経て総務課へ提出し、答弁調整で直された文を反映する
(a)「前回どう答えたか」を探すところで時間が消える。 会議録検索システムは語で引けますが、議員が前回とは違う言葉で同じことを聞くと引っかかりません。 「子育て世帯の負担軽減」と「保育料の見直し」は、議場では同じ論点として扱われます。
(b)答弁書の原稿は、担当者のフォルダに眠っている。 人事異動で前任者がいなくなると、どの原稿が最終版か、どの資料の数字を使ったかが分からなくなります。 会議録には読まれた文しか残らず、数字の出どころは残りません。
(c)数字の確かめ直しが毎回発生する。 答弁には「令和○年度の実績は○件」のような数字が入ります。同じ数字を別の課が別の時点の資料から引くと、議場で食い違います。 起案のたびに事業担当へ問い合わせ、返事を待つ時間が起案の半分近くを占める件もあります。
(d)起案の質が担当者で大きく違う。 答弁の書き方には「前向きに検討」「研究してまいります」の使い分けのような、庁内で共有されていない約束事があります。経験の浅い起案者の原稿は課長段階で大きく直され、直された理由が起案者に返らないまま次の定例会を迎えます。
- 【人】 総務課が質問通告を受け取り、質問項目ごとに担当課を決めて答弁管理リストに登録する
- 【自動】 登録をきっかけに中継プログラムが動き、質問項目を論点に分ける
- 【自動】 論点ごとに、過去の会議録と答弁書の原稿を検索し、候補を上位から取り出す
- 【自動】 担当課が登録した施策資料(事業の実績、予算、計画)から、関係する箇所を取り出す
- 【自動】 Azure OpenAI が、渡した資料だけを根拠に、論点整理・答弁の骨子・下書きを返す
- 【自動】 中継プログラムが、下書きの各文に付いた根拠の番号が実在するか、数字が資料の中にあるかを照らし合わせる
- 【自動】 前回の答弁との差分表と、「要確認」の一覧を付けて、担当課の起案者へ届ける
- 【人】 起案者が根拠を開いて確かめ、下書きを直す。要確認の箇所は事業担当に問い合わせる
- 【人】 課長・部長が確認し、総務課へ提出する
- 【人】 首長・副首長との答弁調整を経て、最終の答弁書を確定する
- 【自動】 確定した答弁書と、下書きからの修正箇所を保存する
8番目が、この設計の分かれ目です。 下書きは完成品ではなく、根拠の付いた材料の束です。起案者は、根拠を開いて「本当にこの資料にこう書いてあるか」を確かめます。確かめずに上へ上げると、AIの誤りが課長・部長の確認をすり抜けます。 上の階層は文の良し悪しを見るのであって、数字の出どころまでは見ないからです。
6番目を機械の照合にしているのも、意図してのことです。 根拠の番号が付いていても、その番号の資料に数字が書かれていなければ意味がありません。文字列として資料に含まれるかを、プログラムで確かめます。
02今回想定するシステム構成
質問通告(議会事務局 → 総務課) │ 総務課が質問項目ごとに担当課を割り振る ▼【トリガー】答弁管理リスト(SharePoint)への登録 中継プログラム(Python。Azure Functions で動かす) ├──▶ 過去の会議録・答弁書の原稿を検索(Azure AI Search のハイブリッド検索) ├──▶ 担当課が登録した施策資料から該当箇所を取り出す ▼ Azure OpenAI(Microsoft Foundry) │ ① 論点の整理 ② 前回答弁との差分 ③ 答弁の骨子 │ ④ 下書き(各文に根拠の番号) ⑤ 要確認の一覧 ▼ 中継プログラム ── 根拠の番号の実在確認/数字が資料に含まれるかの照合 ▼ 答弁管理リスト ──▶ 担当課の起案者へ Teams で通知 ▼ 【人:起案者 → 課長 → 部長 → 総務課 → 答弁調整】 ▼ 確定した答弁書と修正履歴(SharePoint)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 生成AI | Azure OpenAI(Microsoft Foundry) | Claude、Gemini |
| 連携 | 中継プログラム(Python。答弁管理リスト・検索・生成AIをつなぎ、根拠を照合する) | Node.js で同じものを書く |
| 過去答弁の検索 | Azure AI Search(会議録と答弁書の原稿の索引) | SharePoint の検索 |
| 保管 | SharePoint(答弁管理リスト、施策資料、確定した答弁書) | 庁内のファイルサーバー |
| 通知 | Teams | Outlook |
会議録検索システムと共有フォルダは、置き換えません。 会議録のテキストと答弁書の原稿を検索の索引に写すだけで、元のシステムはそのまま使います。最初の準備作業は、過去5年分ほどの答弁書の原稿を、最終版だけ選んで1か所に集めることです。
土台になるのは、Microsoft Foundry で提供される Azure OpenAI のモデルです。 Microsoft のドキュメントでは、Azure が販売するモデルは Microsoft の Azure 環境でホストされ、OpenAI などモデルの提供元が運営するサービスとはやり取りしないとされています。入力と出力は他の顧客にもモデルの提供元にも提供されず、許可や指示なしに基盤モデルの学習に使われないとされています。
処理の場所は、デプロイの種類で変わります。 標準のデプロイでは入力と応答は顧客が指定した geography の中で処理されますが、Global や DataZone のデプロイでは、その範囲の外や、指定したデータゾーンの中のどこかで処理されることがあるとされています。答弁の下書きには公表前の政策判断が入るので、どのデプロイの種類を使うかを、庁内の情報セキュリティの担当と先に決めます。
過去答弁の検索には、Azure AI Search のハイブリッド検索を使います。 フルテキスト検索とベクトル検索を1つの要求で並列に実行し、結果を逆ランク融合(RRF)でまとめるとされています。第3章の(a)、違う言葉で同じことを聞かれる問題には、ベクトル検索が効きます。 一方で、事業名や条例名、年度のような完全一致が要る語にはキーワード検索のほうが強いとされており、両方を1回で引けることが、この題材に合っています。
03どうやって実装するのか
処理の起点を決める
総務課が答弁管理リストに質問項目を登録したことを起点にします。 質問通告を受け取ったときではありません。通告はそのままでは複数の質問が1つの文書にまとまっており、担当課も決まっていないからです。担当課の割り振りは人が行い、割り振りが済んだ項目から1件ずつ動かします。
登録する項目は、議員名、会議の種類(本会議/委員会)、質問の要旨、担当課、答弁者(首長・部長など)、提出期限です。答弁者を持たせるのは、首長が答える項目と部長が答える項目で、文の踏み込み方が違うためです。
同じ項目を二度動かさないよう、リストの状態の列で管理します。 「登録」から「下書き作成中」「下書き済み」へ移し、失敗したときは「登録」に戻します。リストの「登録」のまま残っている数が、そのまま未処理の数です。 定例会の月は通告の締切の翌日に数十件がまとめて登録されるので、1件ずつ順に処理し、同時に何十件も生成AIを呼ばないようにします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 質問項目 | 議員名、会議の種類、質問の要旨、担当課、答弁者、提出期限 | 答弁管理リスト |
| 過去の会議録 | 質疑の本文、会議名、日付、発言者 | 会議録検索システムから写した索引 |
| 過去の答弁書の原稿 | 確定版の答弁書、答弁日、担当課、そのとき使った資料の一覧 | 過去答弁の索引 |
| 施策資料 | 事業の実績、予算額、計画の進み具合、資料の時点 | 担当課が SharePoint に登録した資料 |
| 答弁の書き方の約束事 | 答弁者ごとの言い回し、「検討」「研究」の使い分け、避ける表現 | 総務課がまとめた一覧 |
質を決めるのは、下の3つです。 過去の答弁書に「使った資料の一覧」が無いと、前回の数字がどこから来たのかが分かりません。施策資料に時点が無いと、古い年度の実績を最新として書きます。 答弁の書き方の約束事が無いと、文は整っていても、庁内の誰もが違和感を持つ下書きになります。
約束事の一覧は、課長段階で直された箇所から作ります。 過去の原稿と確定版を比べると、「前向きに」を削った、「させていただく」を直した、といった修正が何度も出てきます。同じ直しが繰り返されている箇所が、そのまま約束事です。
データの取得方法を決める
会議録と答弁書の原稿は、索引に写してから使います。 会議録検索システムのテキストを定期的に書き出し、答弁書のWord文書とあわせて、質疑・答弁の単位に切って索引に入れます。索引の1件には、議員名、会議名、日付、担当課、答弁者を項目として持たせます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 同じ議員・同じ施策の過去の質疑 | 過去答弁の索引(キーワード+ベクトル) | 前回の答弁と、そのときの言い回し |
| 同じ施策に関する他の議員の質疑 | 過去答弁の索引(ベクトル) | 別の議員に答えた内容との整合 |
| 施策の現状と数字 | 担当課が登録した施策資料 | 下書きに入れる数字と、その時点 |
| 答弁の約束事 | 総務課の一覧 | 言い回しの指示 |
検索は、論点ごとに分けて行います。 質問の要旨全体で引くと、長い質問ほど焦点がぼけ、関係の薄い答弁が上位に来ます。論点に分けてから、論点ごとに上位の数件を取ります。 絞り込みの条件として担当課と期間を付け、10年前の答弁が上位に来るのを防ぎます。
施策資料は、担当課が登録したものだけを使います。 庁内の共有フォルダ全体を検索にかけると、検討段階の資料や、公表前の数字が混ざります。 どの資料を答弁の根拠にしてよいかは、担当課が決めることです。
AIへ渡す前に整形する
- 論点への分割 … 質問の要旨を、答えるべき問いの単位に分けます。「現状は」「課題は」「今後の方針は」と3つ聞かれていれば、3つの論点にします
- 答弁書の原稿の最終版の選別 … 同じ答弁の原稿が何版もある場合、確定版だけを索引に入れます
- 会議録と原稿の対応付け … 同じ答弁の会議録と原稿を同じ番号で結び、議場で読まれた文を優先します
- 資料の時点の付与 … 施策資料のそれぞれに「いつ時点の数字か」を付けます。付いていないものは使いません
- 根拠の番号付け … 生成AIに渡す過去答弁と資料の断片に、
A1、A2、M1のような番号を付けます - 個人の情報の除去 … 過去の質疑に出てくる住民の氏名や個別の事案は、渡す前に伏せます
- 渡す量の調整 … 論点ごとに過去答弁は上位5件、資料は関係する箇所だけに絞ります
5番目が、この構成の要です。 番号を付けて渡すと、生成AIは下書きの各文に番号を付けて返せます。番号があれば、後段で「その番号の資料に本当に書いてあるか」を機械で照合できます。 番号の無い資料を渡すと、どの文がどこから来たのかを、人が読み比べて探すことになります。
3番目を省くと、同じ答弁が2回出てきます。 会議録と原稿の両方が上位に来て、しかも細部が違うため、どちらが正しいのかを起案者が調べることになります。
AIに処理させる
させるのは、渡した資料を組み立てて、答弁の材料と文案を作ることです。 項目は次の5つです。
| させること | 中身 | 根拠が無いときの扱い |
|---|---|---|
| 論点の整理 | 質問が何を問うているかを、論点ごとに一文で | 質問の要旨が曖昧なら、その旨を書く |
| 前回答弁との差分 | 前回の答弁の要点と、今回の資料で変わった点・変わっていない点 | 前回の答弁が無ければ「初めての質問」 |
| 答弁の骨子 | 論点ごとに、何をどの順で答えるか | 方針が資料に無ければ「方針未定」 |
| 下書き | 答弁者の口調で、各文に根拠の番号を付けた文 | 根拠の無い文は needs_check |
| 要確認の一覧 | 資料に無い数字、方針の決まっていない点、他課にまたがる点 | ─ |
右端の列が、この構成で最も大事な区別です。 答弁書は、根拠の無い文を書いてはいけない文書です。「根拠が無いので書けない」を、空欄ではなく要確認の項目として明示的に返させます。 空欄のままだと、起案者は埋め忘れと区別できません。
| させないこと | 理由 |
|---|---|
| 答弁の方針を決める | 実施する・しない、前向きか否かは首長と部長が決める |
| 資料に無い数字を書く | 翌年の「前回の答弁」になる。出どころの無い数字は残さない |
| 一般的な知識で補う | 国の制度や他団体の事例を、渡されていないのに書かない |
| 前回の答弁を否定する | 変わった理由は人が説明する。AIは差分を示すだけ |
| 議員の意図を推し量る | 質問の背景や政治的な意図は書かない |
2行目と3行目が最も起きやすい失敗です。 生成AIは、国の制度の一般的な説明や、全国の傾向を知っています。知っていることを書くと、文は充実して見えますが、その一文が本市の資料のどこにも無い、という答弁書になります。 渡した資料以外を使わせないことを、指示の中で何度も明記します。
指示内容を固定する
あなたは市役所の担当課で、議会答弁書の下書きを作る職員を補助します。
下書きは起案者が確認・修正してから、課長・部長・答弁調整に回ります。
【使ってよい情報】
渡した【過去の答弁】(番号 A1〜)と【施策資料】(番号 M1〜)だけです。
それ以外の知識(国の制度の一般的な説明、他の自治体の事例、
全国の統計など)は、正しいと思っても書かないでください。
【作るもの】
1. 論点の整理:質問が問うていることを、論点ごとに一文で。
2. 前回答弁との差分:同じ論点の過去の答弁があれば、その要点と、
今回の施策資料で変わった点・変わっていない点を並べる。
3. 答弁の骨子:論点ごとに、答える順番と要素を箇条で。
4. 下書き:答弁者({answerer})の口調で。1文ごとに根拠の番号を付ける。
5. 要確認の一覧:資料に無い数字、方針の書かれていない点、
他の課の所管に関わる点。
【厳守事項】
- 下書きの各文には、根拠にした番号(A1、M2 など)を必ず付けてください。
根拠にできる番号が無い文は、status を needs_check にしてください。
- 数字は、施策資料に書かれているとおりに写してください。
計算し直したり、四捨五入したり、年度を読み替えたりしないでください。
資料に無い数字は書かず、要確認の一覧に入れてください。
- 施策資料の時点(as_of)を、数字と一緒に書いてください。
- 今後の方針が資料に書かれていない場合は、方針を作らないでください。
「方針未定」とし、要確認の一覧に入れてください。
- 前回の答弁で「検討する」「研究する」とした件は、その後の経過が
資料にあるかを確かめ、無ければ要確認の一覧に入れてください。
- 前回の答弁と今回の資料が食い違う場合は、どちらかに合わせず、
差分として両方を示してください。
- 言い回しは【答弁の約束事】に従ってください。
- 質問の背景や議員の意図は推測しないでください。
- 過去の質疑に出てくる個人の氏名や個別の事案は書かないでください。
【答弁者】{answerer}
【質問項目】{question}
【論点】{issues}
【過去の答弁】{past_answers}
【施策資料】{materials}
【答弁の約束事】{style_rules}
「正しいと思っても書かない」をあえて書いています。 「渡した資料だけを使う」とだけ指示すると、生成AIは国の制度の説明のような一般に正しいことは例外として書いてよいと扱いがちです。正しいかどうかではなく、本市の資料に無いことが問題だと明記します。
「年度を読み替えない」も同じ理由です。 資料に「令和6年度実績」とあれば、今が令和7年度でも「昨年度」とは書かせません。読み替えは人が行います。 年度の境目の定例会で、読み替えの誤りが最も起きやすいからです。
出力形式を固定する
次の形のJSONで受け取ります。
{
"question_id": "",
"issues": [
{ "issue_id": "I1", "summary": "" }
],
"diff_from_previous": [
{ "issue_id": "I1", "previous_ref": "A2",
"previous_point": "", "changed": "", "unchanged": "" }
],
"outline": [
{ "issue_id": "I1", "points": [""] }
],
"draft": [
{ "issue_id": "I1", "sentence": "", "refs": ["M1"],
"numbers": [{ "value": "", "ref": "M1", "as_of": "" }],
"status": "grounded | needs_check" }
],
"to_check": [
{ "issue_id": "I1", "type": "missing_number | no_policy | other_dept | pending_followup",
"detail": "" }
]
}
構造化出力を使うのは、機械で照合するためです。 Azure OpenAI の構造化出力は、指定した JSON Schema にモデルを従わせる機能で、Chat Completions API では response_format、Responses API では text.format にスキーマを渡すとされています。すべての項目を必須にし、additionalProperties を false にする必要があります。スキーマ全体で100個までのプロパティ、5階層までの入れ子という制限もあります。上の形はこの範囲に収まります。
1つ目の理由は、draft を文の単位で持てることです。 1文ごとに refs と status が付くので、中継プログラムは「refs に書かれた番号が、渡した資料の番号の中にあるか」を1文ずつ確かめられます。無い番号が付いていれば、その文は needs_check に書き換えます。
2つ目は、numbers を分けて持てることです。 下書きの文に数字が入っていれば、その数字と根拠の番号を別に返させます。中継プログラムは、その数字の文字列が、その番号の資料の本文に含まれるかを照合します。 含まれなければ、文が正しく見えても要確認に回します。
3つ目は、to_check の種類で担当を分けられることです。 missing_number は事業担当へ、no_policy は課長へ、other_dept は総務課へ、pending_followup は前回「検討する」とした件の経過の確認です。起案者は、誰に何を聞けばよいかが分かった状態で下書きを受け取ります。
構造化出力は、Azure OpenAI の「独自のデータを使う(Bring your own data)」の機能とは一緒に使えないとされています。 そのため、この構成では検索を中継プログラムの側で行い、結果を番号付きでプロンプトに入れて渡します。 検索の結果を人が後から確かめられる点でも、この形のほうが向いています。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 答弁管理リスト(SharePoint) | Microsoft Graph の読み書き | 登録の検知、状態の更新、下書きの格納 |
| Azure AI Search | 検索の要求 | 論点ごとに過去の会議録と答弁書の原稿を引く |
| 施策資料(SharePoint) | 読み取りのみ | 担当課が登録した資料の該当箇所 |
| Azure OpenAI | API呼び出し | 論点整理、差分、骨子、下書き、要確認の一覧 |
| Teams | 通知 | 下書きができたことを起案者へ知らせる |
下書きは、答弁書の様式そのものには書き込みません。 答弁管理リストの項目に、下書きと根拠の一覧、差分表、要確認の一覧を並べて置きます。起案者は、それを見ながら自分で様式に起こします。 様式に直接書き込むと、確かめないまま上へ上げる経路ができます。
施策資料は読み取りだけです。 数字が古いと分かっても、資料を書き換えるのは事業担当です。中継プログラムは、資料の時点が古いことを要確認として伝えるだけにします。
人が確認する
この業務では、すべての下書きを人が確かめます。 答弁書は議場で読まれ、公開され、次の答弁の根拠になります。低信頼のものだけを人に回す、という設計はとりません。
- 起案者が根拠を開く …
refsの番号を開き、その資料に本当にそう書いてあるかを確かめます。数字は必ず資料の該当箇所と見比べます - 要確認を埋める …
to_checkの種類ごとに、事業担当・課長・総務課へ確かめます。埋まらない項目は、埋まらないまま課長へ上げます - 前回答弁との差分を課長が見る … 変わった点をどう説明するかは課長が決めます
- 答弁調整で直された箇所を記録する … 下書きから最終版までに、どこがどう直されたかを残します
1番目を省かないでください。 構成上、根拠の番号と数字の文字列は機械で照合していますが、照合できるのは「その資料にその文字列があるか」までです。 文脈として正しく使われているか、たとえば「計画値」を「実績」として書いていないかは、人が読まないと分かりません。
目標は、1件あたり75分です。 下書きの確認と修正に50分、根拠と要確認の確かめに25分という想定です。材料集めの時間はほぼ無くなり、残るのは中身の判断です。 75分を大きく超える件が続くなら、施策資料の登録が足りていないか、約束事の一覧が古くなっています。
例外に対処する
| 起きること | 対応 |
|---|---|
| 質問の要旨が抽象的で論点に分けられない | 分けずに1論点として扱い、to_check に「通告の趣旨の確認」を入れる。総務課が議会事務局を通じて確かめる |
| 過去の答弁が1件も見つからない | 「初めての質問」として骨子だけを返す。下書きは施策資料だけから作る |
| 施策資料が登録されていない | 下書きを作らず、担当課に資料の登録を依頼する通知を出す |
| 根拠の番号が実在しない | その文を needs_check に書き換え、下書きの一覧で目立たせる |
| 数字が資料の本文に見つからない | 要確認に回す。計算で出た数字か、別の資料の数字かを起案者が確かめる |
| 複数の課にまたがる質問 | other_dept として総務課へ。合議の要否は総務課が決める |
| 審議中の予算や未公表の計画に触れる | 下書きに入れず、課長の判断を仰ぐ項目として返す |
| 生成AIが応答しない・形式が崩れる | 状態を「登録」に戻し、時間をおいて1回だけ再実行する。続けて失敗したら起案者へ手作業での起案を知らせる |
上の3行が大半を占めます。 どれもAIの問題ではなく、質問通告の書き方と、資料の登録の問題です。 施策資料の登録が遅れている課ほど、下書きの質が落ちます。
記録を残す
- 質問項目の登録内容と、総務課が割り振った担当課
- 検索に使った論点と、取り出した過去答弁・資料の番号と本文
- 生成AIが返したJSONの全文と、使ったモデルのデプロイ名
- 中継プログラムの照合結果(根拠の番号の実在、数字の照合の成否)
- 起案者が直した箇所と、課長・部長・答弁調整で直された箇所
- 確定した答弁書と、そのとき使った資料の一覧
5つ目が、この構成を育てる材料になります。 課長段階で同じ種類の直しが続くなら、それは約束事の一覧に足すべき項目です。起案者に返らなかった「直された理由」が、次の下書きの指示として残ります。
6つ目は、翌年の自分のための記録です。 確定した答弁書と使った資料を結んでおけば、次に同じ質問が来たとき、前回の数字の出どころがすぐに分かります。 第3章の(b)は、この1行で解消します。
04実装レベルの3段階
最小構成では、材料集めが減りません。 過去答弁を人が探して貼るので、①の60分がそのまま残ります。下書きの質を確かめるための段階です。 半自動化で、1件180分が110分程度になります。 過去答弁の検索と下書きは自動になりますが、数字の照合と前回答弁との突き合わせは起案者が行います。本格構成で75分になり、この段階が本記事の想定です。 差が出るのは、数字の照合と「検討する」とした件の経過の確認が、1件ずつの手作業だからです。 段階を飛ばさないでください。 半自動化で1回の定例会を回すと、どの課の施策資料が足りないか、どの約束事が一覧から漏れているかが分かります。そこを整えてから照合を足すほうが、要確認の空振りが減ります。
05工数削減シミュレーション
導入後 40件 × 75分 ÷ 60 = 50 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 本会議の一般質問・代表質問に加え、常任委員会・特別委員会の質疑や議員からの事前の照会があり、答弁書の起案が月にならして数十件ある市区町村・都道府県。過去の会議録と答弁書がテキストで残っており、担当課が「前回どう答えたか」を探すのに時間を使っている場合。答弁の調整が課長・部長・総務課・首長の順に決まった経路で行われている場合。Microsoft 365 と Azure をすでに庁内で使っている場合。
- 議会の質問が年に数件で、担当者が過去の答弁をすべて覚えている規模の団体。会議録や答弁書が紙でしか残っておらず、テキストにする予算と時間が取れない場合。答弁の中身が首長の政治判断に大きく寄っていて、過去の答弁や施策資料から組み立てられる部分が少ない場合。なお、何を答弁するかという政策判断と、答弁の最終的な決定は、この構成では代替できません。
07最小構成で試す方法
- 直近の定例会から、答弁書が確定済みの質問項目を10件選ぶ(うち数件は、前回も同じ議員が聞いていたものを入れる)
- その10件について、当時の起案者が参照した過去の答弁と資料を集める
- 質問の要旨、過去の答弁、資料を、庁内で利用が認められている生成AIの画面に貼る
- 「渡した資料だけを根拠に、答弁の骨子と下書きを作ってください。各文に根拠の資料の番号を付け、資料に無い数字は書かず、要確認として挙げてください」と指示する
- 出てきた下書きを、確定した答弁書と見比べる
10件は必ず確定済みのものでやってください。 これから答える質問で試すと、比べる正解がありません。 答弁書は公表されているので、公表済みの資料だけを使えば、試す段階の情報の扱いも単純になります。
| 出てきた内容 | 判断 |
|---|---|
| 確定版に近い骨子で、根拠の番号も正しい | 検索と中継プログラムの構築に進む |
| 資料に無い一般的な説明が混ざる | 指示の書き方で直る。構成は有効 |
| 前回の答弁を見落とした | 渡した過去答弁が足りない。検索の設計が先 |
3行目が出たら、それは収穫です。 人が集めた過去答弁でも見落としがあるということで、第3章の(a)が実際に起きている証拠です。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 一般的な知識で文を補う | 「正しいと思っても書かない」を指示に明記し、根拠の番号の無い文を機械で拾う |
| 資料に無い数字が入る | 数字の文字列が資料の本文にあるかを照合する。無ければ要確認に回す |
| 年度を読み替えて書く | 読み替えを禁じ、as_of を数字と一緒に返させる |
| 前回「検討する」とした件の経過が抜ける | pending_followup を要確認の種類として持たせる |
| 会議録と原稿が両方ヒットする | 対応付けて、議場で読まれた文を優先する |
| 10年前の答弁が上位に来る | 担当課と期間で絞り込む |
| 検討段階の資料が混ざる | 担当課が登録した資料だけを使う |
| 下書きがそのまま上へ上がる | 様式に書き込まない。起案者が根拠を開いた記録を残す |
| 審議中の予算に触れた文が出る | 未公表の事項は下書きに入れず、課長の判断に回す |
| 約束事の一覧が古くなる | 答弁調整の修正履歴から、定例会ごとに見直す |
| 構造化出力とデータ接続の機能を併用しようとする | 一緒に使えない。 検索は中継プログラムで行う |
上の2行が、この構成の失敗のほとんどです。 どちらも「文として正しく見える」ところから始まります。正しく見える文ほど、確認の目をすり抜けます。 根拠の番号と数字の照合を機械に任せるのは、人の目が最も弱いところだからです。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 議員の質問の内容、過去の会議録、答弁書の原稿、施策の実績と予算、そして公表前の政策判断です。
- 公表前の情報を扱う前提で設計する … 答弁書は、議場で読まれるまで公表されない文書です。デプロイの種類によって処理の場所が変わるため、標準のデプロイか DataZone かを、庁内の情報セキュリティの担当と決めてください
- 入力と出力の扱いを確かめる … Microsoft のドキュメントでは、入力と出力は他の顧客やモデルの提供元に提供されず、許可なく基盤モデルの学習に使われないとされています。不正利用の監視のために、一部の入力と出力が人の確認の対象になることがあるとも書かれています。この扱いを変える申請の要否も含めて、規程と照らしてください
- 施策資料の範囲を担当課が決める … 共有フォルダ全体を検索にかけないでください。検討段階の資料が下書きに混ざると、決まっていない方針が答弁書の形で庁内に回ります
- 住民の個人の情報を渡さない … 過去の質疑には、個別の相談事案や住民の氏名が出ることがあります。前処理で伏せてから渡します
- 答弁の決定をAIに寄せない … この構成が出すのは材料と文案です。何を答えるかを決めるのは、首長と部長です
- 下書きの段階と確定の段階を分けて保存する … 下書きは確定版と別の場所に置き、確定版だけを次の検索の索引に入れます。下書きが索引に入ると、AIの文が翌年の根拠になります
誤りが起きた場合のリスクは、議場で事実と違う答弁をすることと、決まっていない方針を答弁してしまうことの2つです。 前者は資料に無い数字や一般的な知識から、後者は検討段階の資料から起きます。どちらも「渡したものだけを根拠にする」という1つの規則で防ぐので、そこは設計で守ります。
10まず何から始めるか
1週目:過去の答弁書の確定版を集める
各課の共有フォルダから、過去5年分ほどの答弁書のうち確定版だけを集めます。どれが確定版か分からないものは、会議録と見比べて決めます。すべての課を一度にそろえる必要はありません。質問の多い上位5課から始めます。
2週目:10件で試す
直近の定例会から確定済みの10件を選び、当時の資料を集めて生成AIの画面で下書きを作らせます。確定版と比べ、資料に無い一般的な説明が混ざっていないかを最優先で見ます。
3週目:約束事の一覧を作る
過去の原稿と確定版を比べ、課長段階で繰り返し直されている言い回しを集めます。総務課が一覧にまとめ、答弁者ごとの口調の違いも書き添えます。 あわせて、施策資料の登録のしかたを担当課と決めます。
4週目:索引と下書きまでをつなぐ
過去答弁の索引を作り、論点ごとの検索から下書きまでを一括で動かします。この時点では照合を入れず、下書きと根拠の一覧だけを起案者に見てもらいます。
2か月目: 根拠の番号と数字の照合、前回答弁との差分表を足し、答弁管理リストを起点に動かします。次の定例会の質問から、上位5課で使います。 3か月目以降: 要確認の種類ごとの件数と、答弁調整での修正箇所を数えます。約束事の一覧が答弁調整の修正を反映して更新され、1件180分が何分になったかを実測できた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Azure が販売するモデル(Azure OpenAI を含む)の入力・出力が他の顧客やモデルの提供元に提供されず、許可や指示なしに基盤モデルの学習に使われないこと。Microsoft の Azure 環境でホストされ、OpenAI などが運営するサービスとやり取りしないこと。標準のデプロイでは指定の geography で処理され、Global/DataZone では処理の場所が広がること。不正利用の監視で一部の入力と出力が人の確認の対象になりうること | Microsoft Learn: Data, privacy, and security for Foundry Models sold by Azure | 2026-09-29 |
構造化出力が JSON Schema にモデルを従わせる機能で、Chat Completions では response_format、Responses では text.format に指定すること。すべての項目が必須で、additionalProperties を false にすること。プロパティ100個まで・入れ子5階層までであること。Bring your own data の機能とは併用できないこと | Microsoft Learn: How to use structured outputs with Azure OpenAI | 2026-09-29 |
| ハイブリッド検索がフルテキスト検索とベクトル検索を1つの要求で並列に実行し、逆ランク融合(RRF)で結果をまとめること。フィルターと併用できること。固有名や日付のような完全一致にはキーワード検索が強いとされていること | Microsoft Learn: ハイブリッド検索の概要(Azure AI Search) | 2026-09-29 |
答弁書の起案と調整の手順は、団体ごとに異なります。 本記事は一般的な市の流れを想定したもので、議会の運営や答弁の決め方は各団体の規程と慣行に従ってください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0318)についてのご相談はこちらから。
