公立図書館のレファレンスの質問に、所蔵の検索結果と過去のレファレンス記録から調べ方と資料の候補を返すチャットを作り、司書の確認に回す
図書館のWebサイトに置いたチャットで、利用者のレファレンスの質問を聞き取ります。所蔵の検索と過去のレファレンス記録から調べ方と資料の候補の案を作り、司書が確かめてから回答します。
- 生成AI
- Azure OpenAI Service/ChatGPT/Claude
- AIサービス
- Azure AI/OpenSearch
- 連携・自動化
- Power Automate
- 対象業界
- 教育/自治体
- 対象部門
- カスタマーサポート
- 対象業務
- 問い合わせ対応/情報検索
- 主な課題
- 問い合わせが多い/属人化している/情報が見つからない
- AIで行う処理
- 対話
- 主な効果
- 対応スピード向上/属人化解消/検索時間短縮
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- Webフォームとメールで届いた質問、分館から回ってきた質問を受付の一覧に載せる
- 担当の司書が質問を読み、意図が分からないところをメールで聞き返す
- 返事を待ち、まだ足りなければもう一度聞き返す
- 所蔵を図書館システムで検索し、過去のレファレンス記録の表を探す
- レファレンス協同データベースで、ほかの図書館の似た事例を探す
- 書架で資料を確かめ、調べ方と資料の一覧を回答文にまとめる
- 回答を送り、レファレンス記録の表に記録する
- 人利用者が図書館のWebサイトのチャットを開く(AIが応答することを最初に表示する)
- 自動チャットが質問を受け、知りたいこと・時代・地域・用途・すでに調べたことを聞き返して確かめる
- 自動項目がそろったら、質問票の形にまとめて利用者に見せ、合っているかを確かめてもらう
- 自動所蔵の検索、自館の過去の記録、レファレンス協同データベースの公開事例を検索する
- 自動生成AIが、見つかった資料と記録だけを使って、調べ方と資料の候補の案を作る
- 自動案に出てくる資料が所蔵の検索結果に本当にあるかを、資料の番号で照合する
- 自動利用者には「司書が確かめてから回答します」と回答の目安を伝えて、チャットを終える
- 人司書が質問票と案を確かめ、書架で資料を見て、直して回答する
- 自動回答と使った資料を、利用者が分からない形でレファレンス記録に残す
各工程の詳しい説明を読む
- Webフォームとメールで届いた質問、分館から回ってきた質問を受付の一覧に載せる
- 担当の司書が質問を読み、意図が分からないところをメールで聞き返す
- 返事を待ち、まだ足りなければもう一度聞き返す
- 所蔵を図書館システムで検索し、過去のレファレンス記録の表を探す
- レファレンス協同データベースで、ほかの図書館の似た事例を探す
- 書架で資料を確かめ、調べ方と資料の一覧を回答文にまとめる
- 回答を送り、レファレンス記録の表に記録する
(a)聞き返しに日数がかかる。 「昔の地図」「戦争のころの記録」のような質問は、1回の聞き返しで用途がそろうことはまれです。往復のたびに数日待つので、調べ始めるまでに1週間近くかかることがあります。
(b)過去の記録が使えない。 同じ型の質問への記録があっても、書き方がばらばらで見つからず、経験の長い司書が「前にもあった」と覚えているかどうかで決まります。
(c)回答の質が司書によって違う。 経験の浅い司書は所蔵の検索で止まり、経験のある司書は郷土資料や新聞の縮刷版まで案内します。利用者から見れば、誰に当たるかで回答の厚みが違います。
(d)調べる時間が後回しになる。 カウンターと選書と行事の準備の合間に調べるので、件数が多い月は回答が遅れ、催促の連絡で対応がさらに増えます。
- 【人】 利用者が図書館のWebサイトのチャットを開く(AIが応答することを最初に表示する)
- 【自動】 チャットが質問を受け、知りたいこと・時代・地域・用途・すでに調べたことを聞き返して確かめる
- 【自動】 項目がそろったら、質問票の形にまとめて利用者に見せ、合っているかを確かめてもらう
- 【自動】 所蔵の検索、自館の過去の記録、レファレンス協同データベースの公開事例を検索する
- 【自動】 生成AIが、見つかった資料と記録だけを使って、調べ方と資料の候補の案を作る
- 【自動】 案に出てくる資料が所蔵の検索結果に本当にあるかを、資料の番号で照合する
- 【自動】 利用者には「司書が確かめてから回答します」と回答の目安を伝えて、チャットを終える
- 【人】 司書が質問票と案を確かめ、書架で資料を見て、直して回答する
- 【自動】 回答と使った資料を、利用者が分からない形でレファレンス記録に残す
2番目と3番目が、この構成でいちばん時間を縮める部分です。 (a)の聞き返しを、利用者がチャットを開いているあいだに済ませます。司書が受け取る時点で、用途まで分かっている質問になっています。
7番目で、チャットからは案を見せません。 案は司書が確かめる前のもので、所蔵の誤りや、質問の取り違えが残っていることがあります。利用者に届くのは、司書が確かめた回答だけです。
02今回想定するシステム構成
図書館のWebサイトのチャット画面 ▼【トリガー】利用者がチャットを開いて質問を書く Azure OpenAI(聞き取りの対話) ▼ 質問票がそろう → 利用者が確認 Azure Functions ├──▶ 所蔵の検索(図書館システムの検索の窓口) ├──▶ Azure AI Search(自館の過去のレファレンス記録) └──▶ レファレンス協同データベース(API 2.0、公開事例) ▼ Azure OpenAI(構造化出力)── 調べ方と資料の候補の案 ▼ Azure Functions ── 資料の番号の照合、受付の一覧へ登録 ▼ 【司書が確認 → 書架で資料を確かめて回答】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 生成AI | Azure OpenAI(Microsoft Foundry) | OpenAI API、Claude API |
| 連携 | Azure Functions(検索の呼び出し、照合、受付の登録) | Power Automate |
| 連携 | Azure AI Search(過去のレファレンス記録の検索) | Amazon OpenSearch Service |
| 外部の事例 | レファレンス協同データベース(API 2.0) | 自館の記録だけで始める |
| 確認画面 | 館内の業務用の Web 画面(質問票・案・照合の結果を並べる) | 受付の一覧 |
図書館システムの貸出の記録にはつなぎません。 利用者が何を借りたかを、この構成から読むことはしません。所蔵の検索は、OPAC と同じく誰でも見られる書誌と所在と状態だけを引きます。 図書館システムに検索の窓口(API)があるかは製品によって違うため、無い場合は書誌のデータを定期的に書き出して検索の索引に入れます。
Azure OpenAI を選ぶ理由は2つです。 1つは、構造化出力で JSON スキーマに沿った出力を受けられることです。公式の説明では、Chat Completions API と Responses API の両方で構造化出力が使え、指定した JSON スキーマに従うとされています。質問票と案を決まった形で受けられるので、資料の照合を規則で書けます。
もう1つは、データの扱いです。 公式の説明では、プロンプトと出力は他のお客様に提供されず、OpenAI にも提供されず、許可なく基盤モデルの学習に使われないとされています。レファレンスの質問は利用事実なので、ここを先に確かめておきます。
レファレンス協同データベースは、API 2.0 で公開事例を検索します。 公式のヘルプでは、営利を目的としない場合に限り申請なしで利用でき、API を使っていることと各データの提供館名を表示する必要があるとされています。公共図書館の業務はこの条件に合いますが、回答に事例を使うときは提供館名を必ず添えます。
03どうやって実装するのか
処理の起点を決める
利用者がチャットを開いて質問を書いたときに始まります。 チャットの最初の画面で、AIが応答していること、聞き取った内容は司書が確かめてから回答すること、氏名や連絡先をチャットに書かないことを表示します。
Microsoft の AI サービスの行動規範では、出力が AI によるものであることを、利用者が人とやり取りしていると誤解しないよう開示することが求められています。図書館のチャットでは、最初の表示と、案内の文の中の両方で示します。
回答の連絡先は、チャットの外で受けます。 質問票がそろったところで、回答の受け取り方(メール・来館して受け取る)を選んでもらい、メールアドレスは受付の一覧の側に入れて、AIとのやり取りには入れません。
開館時間外もチャットは動きますが、司書の確認は開館日に行います。 回答の目安は「何開館日以内」で伝えます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 利用者の質問 | チャットで聞き取った内容(知りたいこと・時代・地域・用途・調べたこと) | チャット画面 |
| 所蔵の検索結果 | 書誌、資料の番号、請求記号、所在の館、状態 | 図書館システムの検索の窓口、または書き出した書誌 |
| 自館の過去の記録 | 質問の要旨、調べ方、使った資料、回答した年 | レファレンス記録の表を整えたもの |
| ほかの図書館の事例 | 質問、回答、参考資料、提供館名 | レファレンス協同データベース(API 2.0) |
| 調べ方の手引き | 郷土資料・新聞・地図・統計の探し方 | 館で作った案内 |
質を決めるのは、自館の過去の記録の整え方です。 (b)のように書き方がばらばらなままだと、検索しても似た記録が上に来ません。質問の要旨・調べ方・使った資料を分けた形に書き直し、利用者が分かる情報を消してから索引に入れます。
館で作った調べ方の手引きも入れます。 「古い地図の探し方」「新聞記事の探し方」のような手引きは、過去の記録よりも整理されていて、経験の浅い司書でも同じ調べ方を案内できる根拠になります。
データの取得方法を決める
チャットで質問票がそろったら、Azure Functions が3か所を検索します。生成AIの関数呼び出しで、どの検索をどの言葉で呼ぶかを決めさせ、実行は Azure Functions が行います。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 所蔵の書誌と所在 | 図書館システムの検索の窓口 | 資料の候補(資料の番号付き) |
| 自館の過去の記録 | Azure AI Search の索引 | 調べ方の型 |
| ほかの図書館の事例 | レファレンス協同データベース API 2.0 | 調べ方の型と、所蔵していない資料の手がかり |
| 調べ方の手引き | Azure AI Search の索引 | 調べ方の根拠 |
関数呼び出しには構造化出力を使います。 公式の説明では、関数の定義に strict: true を指定して構造化出力を有効にでき、構造化出力では並列の関数呼び出しがサポートされないため parallel_tool_calls を false にするとされています。3か所の検索は、1つずつ順に呼ばせます。
レファレンス協同データベースの API 2.0 は、CQL 形式のクエリで質問・回答・解決の状況などを指定できるとされ、既定では1件目から200件目までを返すとされています。 渡すのは上位の数件だけにします。継続的に使う場合は事務局に連絡先と利用内容を知らせるよう求められているので、運用を始める前に連絡します。
検索の言葉は、質問票の項目から作ります。 時代と地域を別の項目で持っているので、「明治」「大正」のような時代の言葉と、町名・旧村名のような地域の言葉を組み合わせて引けます。
生成AIに渡す関数の定義は、次のように3つに分けます(説明は要点だけ)。
[
{ "type": "function", "function": {
"name": "search_holdings", "strict": true,
"description": "所蔵の書誌を検索する。書名・件名・時代・地域の語を受け取る",
"parameters": { "type": "object", "additionalProperties": false,
"required": ["keywords", "period", "area"],
"properties": { "keywords": { "type": "string" },
"period": { "type": "string" }, "area": { "type": "string" } } } } },
{ "type": "function", "function": {
"name": "search_past_records", "strict": true,
"description": "自館の過去のレファレンス記録と手引きを検索する",
"parameters": { "type": "object", "additionalProperties": false,
"required": ["query"], "properties": { "query": { "type": "string" } } } } },
{ "type": "function", "function": {
"name": "search_crd", "strict": true,
"description": "レファレンス協同データベースの公開事例を検索する",
"parameters": { "type": "object", "additionalProperties": false,
"required": ["question_terms"], "properties": { "question_terms": { "type": "string" } } } } }
]
関数の引数を、利用者の書いた文そのものにしないのが要点です。 質問票の項目から作った語だけを渡すので、伏せ損ねた個人情報が検索の窓口や外部の API に流れる経路を狭められます。
AIへ渡す前に整形する
- 氏名・連絡先を外す … チャットに氏名・電話番号・メールアドレス・利用者の番号らしい並びが書かれたら、
[個人情報]に置き換えてからAIに渡します - 過去の記録の書き直し … 自館の記録から、利用者の氏名・学校名・勤め先など人が分かる情報を消し、質問の要旨・調べ方・使った資料に分けます
- 書誌の正規化 … 所蔵の書誌の書名・著者名の表記をそろえ、資料の番号を必ず持たせます
- 協同データベースの事例の整形 … 質問・回答・参考資料・提供館名を分け、提供館名を落とさないようにします
- 質問の長さの確認 … 極端に長い書き込みや、レファレンスでない書き込み(苦情・貸出の延長の依頼)を見分けて、別の窓口へ案内します
1番目は、利用者が書いてしまう前提で作ります。 最初の表示で書かないよう伝えても、「○○小学校の5年生です」「電話番号は」と書く人はいます。書かれたものをAIに渡さないのが、この前処理の役目です。
2番目は、索引を作る前に一度だけ大きな作業になります。 ここを省いて記録をそのまま入れると、ほかの利用者の質問の中身が、別の利用者への案に混ざる経路ができます。
AIに処理させる
させるのは2つです。 1つ目は聞き取りの対話、2つ目は検索結果からの案の作成です。
| 段 | させること | 判断できないときの扱い |
|---|---|---|
| 聞き取り | 知りたいこと・時代・地域・用途・調べたことを、1回に1つずつ聞き返す | 3往復でそろわなければ、そろった分で質問票にする |
| 聞き取り | 質問票にまとめ、利用者に合っているかを確かめてもらう | 利用者が直したら、直した内容で作り直す |
| 案の作成 | 見つかった資料と記録だけを使い、調べ方の手順を書く | 根拠が無ければ no_source |
| 案の作成 | 資料ごとに資料の番号と、その資料で何が分かりそうかを書く | 中身が分からない資料は「書誌から見て」と書く |
| 案の作成 | 所蔵していない資料の手がかりを、事例と提供館名つきで書く | 提供館名が無い事例は使わない |
| させないこと | 理由 |
|---|---|
| 資料の中身についての答え(年号・地名・数値) | 確かめようのない誤りが出る |
| 検索で見つかっていない資料の紹介 | 存在しない本を案内することになる |
| 法律・医療・税などの個別の相談への回答 | 資料の案内にとどめ、専門の窓口を示す |
| 利用者の目的の詮索 | 用途は答え方を決めるためだけに聞く。言いたくない人には聞かない |
| チャットでの案の提示 | 司書が確かめる前のものを利用者に見せない |
4行目は、図書館の考え方に関わります。 用途を聞くのは、統計の数字が欲しいのか、背景を知りたいのかで案内する資料が変わるからです。利用者が答えたくないときは、聞かずに進めるよう指示します。
指示内容を固定する
聞き取りの段の指示です。
あなたは市立図書館のレファレンス係の聞き取りを手伝うAIです。
利用者には、AIが応答していることと、回答は司書が確かめてから送ることを伝えてあります。
【聞き取る項目】
- 知りたいこと(何について)
- 時代・時期
- 地域・場所
- 用途(例:調べ学習、仕事、家の手続き、趣味)
- すでに調べたこと・見た資料
【聞き方】
- 1回に1つだけ聞いてください。
- 利用者が答えたくない様子なら、その項目は聞かずに進めてください。
- 用途を聞くのは、案内する資料を選ぶためだと伝えてください。
- 氏名、学校名、勤め先、電話番号、メールアドレスを聞かないでください。
書かれても繰り返さないでください。
- 質問の答え(年号、地名、数値、出来事の内容)を書かないでください。
知っていても書かないでください。
- 法律、医療、税の個別の相談は、資料の案内はできるが
個別の判断はできないと伝え、専門の窓口があることを伝えてください。
- 3往復でそろわなければ、そろった分で質問票をまとめてください。
- 最後に質問票を見せ、合っているかを確かめてください。
案の作成の段では、さらに次を加えます。
- 【検索結果】に資料の番号がある資料だけを候補に書いてください。
- 資料ごとに、その資料で何が分かりそうかを、書誌と記録の範囲で書いてください。
- 協同データベースの事例を使うときは、提供館名を必ず書いてください。
- 調べ方は手順の形で書き、どの資料のどこを見るかを示してください。
- 根拠になる資料が無ければ、status を no_source にしてください。
「知っていても書かない」を明記しないと、モデルは答えを書きます。 郷土の歴史のような質問ほど、それらしい年号や地名を知っているように書くからです。レファレンスの回答で誤った事実を示すと、利用者はそれを図書館の答えとして使います。
出力形式を固定する
次の形のJSONで受け取ります。
{
"inquiry_id": "",
"question_sheet": {
"topic": "", "period": "", "area": "", "purpose": "", "already_checked": ""
},
"status": "drafted | no_source | out_of_scope",
"steps": [
{ "order": 1, "how_to": "", "item_ids": [] }
],
"holdings": [
{ "item_id": "", "title": "", "call_number": "", "location": "", "what_to_look_for": "" }
],
"external_cases": [
{ "crd_id": "", "provider_library": "", "hint": "" }
],
"referral": ""
}
1つ目の理由は、資料の照合を規則で書けることです。 holdings の item_id を所蔵の検索結果と照らし、検索結果に無い番号の資料は案から外して印を付けます。 存在しない本を案内する誤りを、出力の側で止めます。
2つ目は、external_cases に提供館名を必須で持てることです。 構造化出力では、すべてのフィールドを必須にし、オブジェクトに additionalProperties: false を設定する必要があるとされています。提供館名の欄を必須にしておくと、書き漏れが起きにくくなります。 空で返ってきた事例は使いません。
| 照合 | 外れたとき |
|---|---|
item_id が所蔵の検索結果にある | その資料を外し、印を付ける |
steps の item_ids が holdings にある | その手順に印を付ける |
external_cases の provider_library が空でない | その事例を外す |
| 案の本文に年号・数値が多く含まれる | 司書に「答えを書いていないか」の印を付ける |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| チャット画面 | 図書館のWebサイトに置く画面 | 聞き取りと質問票の確認 |
| Azure OpenAI | API呼び出し | 聞き取りの対話と、案の作成 |
| 図書館システム | 検索の窓口、または書き出した書誌 | 所蔵の書誌・所在・状態 |
| Azure AI Search | API呼び出し | 自館の過去の記録と手引きの検索 |
| レファレンス協同データベース | API 2.0 | 公開事例の検索 |
| 受付の一覧と確認画面 | 館内の Web 画面 | 質問票と案を司書に渡す |
チャットの会話の履歴は、自前で持ちます。 公式の説明では、Responses API はメッセージ履歴を保存し、保存されたデータはリソースと同じ地域に置かれ、いつでも削除できるとされています。利用事実を扱うので、どこに何日残すかを館で決められる形を選びます。 自前で持つなら、質問票ができたところで会話を伏せた形に置き換えます。
人が確認する
全件を司書が確かめます。 チャットが作るのは案までで、利用者への回答は司書が書きます。
- 質問票を読む … 利用者が確かめた質問票と、AIの案の質問の取り方がずれていないかを見ます
- 資料を書架で確かめる … 案に出た資料を実際に開き、その資料で本当に分かるかを見ます
- 案に足す … 郷土資料、新聞、雑誌の記事など、検索で拾えなかった資料を足します
- 答えが書かれていないかを見る … 年号や地名を断定している文があれば、資料の案内に書き直します
- 回答する … 司書の名前で回答を送り、記録に残します
2番目を省かないでください。 書誌からは中身が分からない資料は多く、題名が合っていても、知りたいことが載っていないことがあります。
目標は、1件8分です。 聞き返しと3か所の検索が済んだ状態で受け取るので、司書の時間は書架で資料を確かめることと、足すことに使えます。
経験の浅い司書には、過去の記録の調べ方を手本として見せます。 確認画面で、案の根拠になった自館の記録と手引きを並べて表示すると、ベテランが前に使った調べ方を、そのまま追いかけられます。 (c)の回答の厚みの差を縮めるのは、AIの案よりも、この並べた表示のほうかもしれません。
例外に対処する
| 起きること | 対応 |
|---|---|
| 利用者が氏名や連絡先を書いた | 前処理で伏せる。チャットでは繰り返さない |
| レファレンスでない書き込み(延長・苦情) | 該当する窓口を案内して終える |
| 法律・医療・税の個別の相談 | 資料の案内にとどめ、専門の窓口を示す |
| 所蔵に該当が無い | 協同データベースの事例と相互貸借の案内を案に入れ、司書が判断する |
| 協同データベースが応答しない | 自館の記録と所蔵だけで案を作り、印を付ける |
| 検索結果に無い資料が案に出た | 照合で外し、司書に印を見せる |
| 有害な内容を求める書き込み | Azure OpenAI のガードレールで止まった場合は定型の案内を返す |
| 3往復で質問票がそろわない | そろった分で司書に渡し、司書が聞き返す |
| Azure OpenAI が応答しない | チャットを止め、Webフォームへの案内を表示する |
3行目は、図書館に毎日来る型の質問です。 「この病気の治療法」「この契約は無効か」という質問に、AIが答えの形で返すと、利用者はそれを図書館の判断と受け取ります。 資料の案内と専門の窓口の案内にとどめます。
記録を残す
- 受付番号、受けた日時、経路(チャット/フォーム/分館)
- 伏せた後の質問票と、聞き取りのやり取りの要旨
- 検索した言葉と、3か所の検索結果の資料の番号
- AIの案(JSONの全文)と照合の結果
- 司書が足した資料と直した箇所
- 回答した日と回答した司書
伏せる前の会話は残しません。 利用事実を必要以上に持たないためです。残す期間も、レファレンス記録の扱いとあわせて館で決めます。
司書が足した資料の記録が、いちばん役に立ちます。 検索で拾えなかった資料が分かるので、手引きと過去の記録に足す候補になります。
04実装レベルの3段階
最小構成では件数がさばけません。 1件ずつ貼るので、月360件には使えません。答えを書かずに資料を案内できるかを確かめる段階です。 半自動化で、1件20分が14分程度になります。 検索と案は自動になりますが、聞き返しは司書がメールで行います。本格構成で8分になり、この段階が本記事の想定です。 差が大きいのは、聞き返しがチャットのうちに済み、司書が書く聞き返しの文がなくなるからです。 段階を飛ばさないでください。 半自動化の案を1か月見ると、検索で拾えない資料の型(郷土資料、雑誌の記事)が見えます。そこを手引きに足してからチャットを公開するほうが、司書が足す手間が減ります。
05工数削減シミュレーション
導入後 360件 × 8分 ÷ 60 = 48 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 中央館と複数の分館を持ち、Webフォームやメールで受ける非来館のレファレンスと、カウンターで受けて持ち帰った質問が月に数百件ある公立図書館。質問の意図を確かめるやり取りに何往復もかかり、回答までに日数がかかっている場合。過去のレファレンス記録を残しているが、経験の長い司書しか使いこなせていない場合。
- レファレンスの件数が月に数十件で、司書がその場で対応できている場合。過去のレファレンス記録が残っておらず、所蔵の検索のほかに根拠にできるものが無い場合。なお、資料の選び方の最終的な判断、資料の内容の正しさの保証、法律・医療などの個別の相談への回答は、この構成では代替できません。
07最小構成で試す方法
- 過去のレファレンス記録から30件を選ぶ(郷土・地図・統計・調べ学習・医療の本を混ぜる)
- 記録から利用者が分かる情報を消した写しを作る
- 各質問について、当時の所蔵の検索結果(書誌と資料の番号)を書き出しておく
- Azure OpenAI の画面(Foundry のプレイグラウンド)に、質問と検索結果を貼る
- 「検索結果にある資料だけを使って、調べ方の手順と資料の候補を書いてください。資料の中身の答えは書かないでください」と指示する
- 当時の司書の回答と並べて比べる。聞き取りは、司書が利用者役になって試す
最初に見るのは、答えを書いていないかです。 郷土の質問で年号や地名を断定していたら、本格構成の前に指示を直します。
| 出てきた内容 | 判断 |
|---|---|
| 当時の回答と同じ資料が候補に出た | 検索の連携とチャット画面に進む |
| 資料の中身の答えを書いた | 指示の「知っていても書かない」で直る |
| 検索結果に無い本を挙げた | 照合で止められる。構成は有効 |
| 当時の回答の資料が検索結果に無い | 書誌と記録の整備が先。 AIの問題ではない |
4行目は、郷土資料でよく出ます。 郷土資料は書誌に件名が少なく、検索で拾えないことが多いからです。手引きと過去の記録に、郷土資料の探し方を足すところから始めてください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 郷土の質問に年号や地名を断定して書く | 「知っていても書かない」を指示し、司書の確認で見る |
| 所蔵していない本を候補に挙げる | 資料の番号で照合して外す |
| 過去の記録に利用者の情報が残る | 索引に入れる前に書き直す |
| チャットで氏名や学校名を書かれる | 前処理で伏せ、繰り返さない |
| 協同データベースの提供館名が落ちる | 出力の必須の欄にし、空なら使わない |
| 並列の関数呼び出しでエラーになる | 構造化出力では parallel_tool_calls を false にする |
| 医療・法律の質問に答えの形で返す | 資料と専門の窓口の案内にとどめる |
| 用途を聞くと利用者が離れる | 答えたくない人には聞かずに進める |
| チャットで案を見せてしまう | 案は司書の確認画面にだけ出す |
| 図書館システムに検索の窓口が無い | 書誌を定期的に書き出して索引に入れる |
| AIが応答していることが伝わらない | 最初の表示と案内の文の両方で示す |
上の2行が、利用者にとっていちばん重い失敗です。 どちらも、図書館の回答として誤った事実や存在しない本が届く経路です。指示と照合と司書の確認の3か所で止めます。
3行目と4行目は、図書館としての信頼に関わります。 利用者の秘密を守ることは図書館の考え方の柱で、AIを入れたことでそこが緩んだと受け取られると、チャットそのものが使われなくなります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 利用者がチャットに書いた質問(病気・家族・仕事の事情が書かれることがある)、自館の過去のレファレンス記録、所蔵の書誌、協同データベースの公開事例です。
- 利用者の秘密を守る … 図書館の自由に関する宣言は、利用者の読書事実と利用事実を図書館が業務上知り得た秘密とし、図書館活動に従事するすべての人がこの秘密を守らなければならないとしています。貸出の記録にはつながず、氏名と連絡先をAIに渡さず、過去の記録は書き直してから使います
- AIが応答していることを示す … Microsoft の AI サービスの行動規範では、出力が AI によるものであることを開示し、利用者が人とやり取りしていると誤解しないようにすることが求められています。利用者からの報告を受ける窓口を設けることも求められています
- 子どもが使うことを前提にする … 公立図書館のチャットは、調べ学習の小中学生も使います。氏名・学校名を聞かない、書かれても繰り返さない、答えではなく資料を案内する、の3つを守ります
- データの扱いを確かめる … 公式の説明では、プロンプトと出力は他のお客様にも OpenAI にも提供されず、許可なく学習に使われないとされています。不正使用の監視でプロンプトと出力が保存され、人が確認する場合があるとされ、変更の申請ができるとされています
- 処理の場所を確かめる … Global や DataZone のデプロイでは処理の場所が指定の地域の外に広がりうるとされています。市の規程に合わせてデプロイの種類を選びます
- 協同データベースの条件を守る … 営利を目的としない利用に限られ、API の利用と提供館名の表示が求められています。データの著作権は特記の無い限り提供館にあるとされているので、事例の文をそのまま回答に貼らず、手がかりとして使います
誤りが起きた場合のリスクは、誤った事実や存在しない資料を図書館の回答として届けることと、利用者の質問の中身を必要以上に持つことの2つです。前者は照合と司書の確認で、後者は渡さない・残さない設計で防ぎます。
10まず何から始めるか
1週目:過去の記録を選んで書き直す
過去のレファレンス記録から、件数の多い型(郷土・地図・統計・調べ学習)の100件を選び、利用者が分かる情報を消して、質問の要旨・調べ方・使った資料に分けて書き直します。
2週目:30件で試す
書き直した記録から30件を選び、最小構成で案を作らせて当時の回答と比べます。答えを書いていないか、所蔵に無い本を挙げていないかを最優先で見ます。
3週目:図書館システムと協同データベースを確かめる
図書館システムの提供元に、検索の窓口があるか、書誌の書き出しができるかを確かめます。協同データベースの事務局に、利用の内容を連絡します。
4週目:チャットの表示と聞き取りの指示を決める
最初に表示する文(AIが応答すること、司書が確かめること、氏名を書かないこと)と、聞き取りの項目を決めます。司書が利用者役になって、子どもの書き方、答えたくない利用者、医療の質問を試します。
2か月目: 受付の一覧から質問を取り、所蔵と過去の記録を検索して案を書き出します(半自動化)。3か月目以降: チャットの聞き取り、協同データベースの検索、資料の照合、確認画面を足して公開し、1件20分が何分になったかを実測します。司書が足した資料を手引きと記録に戻す流れが回り始めた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| API 1.0・2.0 が営利を目的としない場合に限り申請なしで利用でき、API の利用と各データの提供館名の表示が求められること。データの著作権が特記の無い限り提供館に帰属すること。継続的にアクセスする場合は事務局に連絡先と利用内容を知らせるよう求めていること。API 2.0 が一般公開のレファレンス事例などを対象に CQL 形式で検索でき、既定で1件目から200件目までを返すこと | 国立国会図書館 レファレンス協同データベース: 外部提供インタフェース(API1.0、API2.0) | 2026-10-14 |
| 「図書館は利用者の秘密を守る」として、利用者の読書事実を外部に漏らさないこと、読書記録以外の利用事実についてもプライバシーを侵さないこと、読書事実・利用事実は図書館が業務上知り得た秘密で、図書館活動に従事するすべての人がこの秘密を守らなければならないとしていること | 日本図書館協会: 図書館の自由に関する宣言 | 2026-10-14 |
Chat Completions API と Responses API の両方で構造化出力が使えること。すべてのフィールドを必須にし、オブジェクトに additionalProperties: false を設定する必要があること。関数呼び出しで strict: true を指定でき、構造化出力では並列の関数呼び出しがサポートされないため parallel_tool_calls を false にすること | Microsoft Learn: Azure OpenAI で構造化出力を使用する方法 | 2026-10-14 |
| プロンプトと出力が他のお客様や OpenAI に提供されず、許可なく基盤モデルの学習に使われないこと。Responses API がメッセージ履歴を保存し、保存データはリソースと同じ地域に置かれ、いつでも削除できること。Global・DataZone のデプロイでは処理の場所が指定の地域の外に広がりうること。不正使用の監視でプロンプトと出力が保存・確認される場合があり、変更の申請ができること | Microsoft Learn: Azure が販売する Foundry モデルのデータ、プライバシー、セキュリティ | 2026-10-14 |
| 出力が AI によるものであることを、利用者が人とやり取りしていると誤解しないよう開示すること。適切な人による監督の下で継続的にテストすること。利用者が問題を報告できる窓口を設けること | Microsoft Learn: Code of Conduct for Microsoft AI Services | 2026-10-14 |
資料の選び方と回答の内容は、司書が資料を確かめて判断してください。 本記事は、上記の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1504)についてのご相談はこちらから。
