動物園の飼育員が動物の様子の変化から、過去の飼育日誌・治療・繁殖の記録を検索し、似た事例と当時の対応を根拠付きで引く
飼育員が担当の動物の様子の変化に気づいたとき、同じ種と同じ個体の過去の飼育日誌・治療の記録・繁殖の記録を検索します。似た経過をたどった事例と、そのとき取った対応、その後の経過を引用付きで返します。
- 生成AI
- Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 連携・自動化
- Python
- 対象業界
- その他/自治体
- 対象部門
- 生産
- 対象業務
- 情報検索/記録・議事録作成
- 主な課題
- 属人化している/引き継ぎができていない/情報が見つからない
- AIで行う処理
- 検索(RAG)
- 主な効果
- 判断支援/属人化解消/検索時間短縮
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 飼育員が変化に気づき、その日の飼育日誌に様子を書く
- 過去の日誌の表計算を開き、個体の名前で検索して、似た様子の記述を探す
- 古い時期の記録は、手書きの日誌のスキャンの PDF を年と月で開き、ページをめくって探す
- 動物病院に、その個体の過去の治療の記録を問い合わせる。繁殖の担当に、発情や出産の時期を聞く
- 見つけた記述をまとめて、係長と獣医に相談する
- 獣医が診て、対応を決める。必要なら検査や治療に進む
- 対応と経過を、日誌と治療の記録に書く
- 人飼育員がタブレットの「様子の変化」の画面で、個体を選び、変化の種類(採食・排便・歩様・行動・体重など)と様子を短く入れる
- 自動入力から、検索の問い合わせ文と、種・個体・記録の種類・時期の絞り込みの条件を組み立てる
- 自動Vertex AI Search(Agent Search)の answer メソッドで、日誌・治療・繁殖の記録を検索し、引用付きの答えを作らせる
- 自動引用の付いていない文と、根拠の支持の度合いが低い答えを外す
- 自動答え、引用した記録の原文、同じ個体の過去の似た事例の一覧を、確認の画面に並べる
- 人飼育員が引用の原文を読み、いまの様子と当時の様子を自分で見比べて、相談のメモを作る
- 人係長と獣医がメモと根拠の記録を見て、対応を決める
- 自動決まった対応と、参照した過去の記録の箇所を、その日の日誌の下書きに残す
各工程の詳しい説明を読む
- 飼育員が変化に気づき、その日の飼育日誌に様子を書く
- 過去の日誌の表計算を開き、個体の名前で検索して、似た様子の記述を探す
- 古い時期の記録は、手書きの日誌のスキャンの PDF を年と月で開き、ページをめくって探す
- 動物病院に、その個体の過去の治療の記録を問い合わせる。繁殖の担当に、発情や出産の時期を聞く
- 見つけた記述をまとめて、係長と獣医に相談する
- 獣医が診て、対応を決める。必要なら検査や治療に進む
- 対応と経過を、日誌と治療の記録に書く
(a)日誌のどこに書いてあるかが分からない。 2番で、同じ個体でも「タロウ」「タロウ(♂)」「アジアゾウ1号」と書き方が違い、検索で引っかからないことがあります。1日1枚の日誌に何頭もの記述が並んでいるので、個体の名前で見つけても、どの行がその個体の話かを読み分けることになります。
(b)古い記録は文字で探せない。 3番の手書きの日誌は、スキャンの画像です。年と月の見当をつけて、ページを1枚ずつ見ていきます。 見当が外れると、30分探して何も見つからないことがあります。
(c)個体の癖を知っているのが前の担当者だけ。 「この個体は毎年この時期に食べなくなる」「この姿勢は痛みではなく暑さ」。こうした知識は、長く担当した飼育員の頭の中にあり、日誌には断片しか残っていません。 担当替えのあと、新しい担当者は同じ変化を初めて見ることになります。
(d)3つの記録がつながらない。 4番で、治療の記録と繁殖の記録は、別の人に聞かないと分かりません。相手が手の離せない時間だと、相談が翌日に延びます。 変化に気づいてから獣医に上げるまでの時間が、記録を探す時間で延びています。
- 【人】 飼育員がタブレットの「様子の変化」の画面で、個体を選び、変化の種類(採食・排便・歩様・行動・体重など)と様子を短く入れる
- 【自動】 入力から、検索の問い合わせ文と、種・個体・記録の種類・時期の絞り込みの条件を組み立てる
- 【自動】 Vertex AI Search(Agent Search)の answer メソッドで、日誌・治療・繁殖の記録を検索し、引用付きの答えを作らせる
- 【自動】 引用の付いていない文と、根拠の支持の度合いが低い答えを外す
- 【自動】 答え、引用した記録の原文、同じ個体の過去の似た事例の一覧を、確認の画面に並べる
- 【人】 飼育員が引用の原文を読み、いまの様子と当時の様子を自分で見比べて、相談のメモを作る
- 【人】 係長と獣医がメモと根拠の記録を見て、対応を決める
- 【自動】 決まった対応と、参照した過去の記録の箇所を、その日の日誌の下書きに残す
6番目で、いまと当時の見比べを人に残すのが、この設計の要です。 「採食が落ちた」という同じ言葉でも、当時は2日で戻り、今回は3日目に入っている、ということがあります。AIは似た記録の場所を示し、似ているかどうかの見極めは、動物を見ている飼育員が行います。
8番目で、参照した記録を日誌に残すのも、意図してのことです。 「前回の何を見て、今回こう判断したか」が、次の担当者に引き継がれる記録になります。
02今回想定するシステム構成
様子の変化の入力(タブレット:個体・変化の種類・様子・日時) ▼【トリガー】入力の送信 中継プログラム(Python。Cloud Run) │ 問い合わせ文と絞り込みの条件を組み立てる │ (種、個体、記録の種類、時期) ▼ Vertex AI Search(Agent Search)の answer メソッド │ データストア:飼育日誌(個体ごとに分けた1件の記録)、 │ 治療の記録、繁殖の記録、種ごとの飼育の手引き │ 回答の生成(Gemini)、引用、根拠の支持の度合い ▼ 中継プログラム ── 引用の無い文と支持の低い答えを外す。原文の箇所を切り出す ▼ 確認の画面(答え/引用した原文/同じ個体の似た事例の一覧) ▼ 【飼育員が原文を読み、いまと当時を見比べて相談のメモ】→【係長と獣医が判断】 ▼ 飼育日誌の下書き(参照した過去の記録の箇所つき)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Vertex AI Search(Agent Search)の answer メソッド | Azure AI Search、Amazon OpenSearch Service |
| 生成AI | Gemini(answer メソッドの回答の生成に使うモデル) | ― |
| 連携 | 中継プログラム(Python。Cloud Run で動かし、入力の画面・検索・確認の画面・日誌をつなぐ) | Node.js で同じものを書く |
| 保管 | Cloud Storage(記録の写しとメタデータ、問い合わせと答えの記録) | ― |
飼育日誌、治療の記録、繁殖の記録は、既存のものです。 新しく作るのは、日誌を個体ごとの記録に分けてメタデータを付けること、様子の変化の入力の画面、確認の画面です。元の日誌そのものは書き換えません。
土台は、Vertex AI Search の answer メソッドです。 公式ページでは、answer メソッドは検索の結果から回答を作り、回答の文ごとに出典を示す引用を付けられるとされています。根拠の支持の度合い(support score)も0から1の値で返り、回答がデータストアの内容にどれだけ支えられているかを表します。公式ページには、Vertex AI Search が Agent Search へ改称中である旨の記載があります。
日本語にも対応しています。 言語の一覧では、日本語(ja-JP)は検索の機能と、回答とフォローアップの両方に対応しています。
03どうやって実装するのか
処理の起点を決める
飼育員がタブレットの「様子の変化」の画面で「送信」を押したことを起点にします。 獣舎の前で、気づいたその場で送れば、事務所に戻るころには確認の画面ができています。
検索は、入力1件につき1回、答えを作ります。 答えを見て「去年の同じ時期はどうだったか」と問い直したいときは、確認の画面で問いを足して、同じ会話として続けます。公式ページでは、answer メソッドは前のセッションを引き継いで続けて問うことができるとされています。
毎日の日誌そのものは、トリガーにしません。 日誌には毎日すべての動物の様子が書かれます。全部を検索に流すと、変化の無い日の記述まで答えが作られます。 調べるのは、飼育員が「いつもと違う」と判断して入力したものだけにします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 様子の変化の入力 | 個体、変化の種類、様子の文、気づいた日時と人 | 入力の画面 |
| 飼育日誌 | 個体ごとに分けた1日の記述(採食、排便、行動、体重、気温など) | データストア |
| 治療の記録 | 個体、日付、症状、検査、処置、投薬、その後の経過 | データストア |
| 繁殖の記録 | 個体、発情・同居・交尾・出産・育子の日付と様子 | データストア |
| 種ごとの飼育の手引き | 園で作った種ごとの飼育の要点、季節の注意 | データストア |
| 個体の台帳と変化の種類の一覧 | 個体の識別の番号・名前・別名・種・性別・生年。変化の種類の名前と別名 | 飼育課が作る一覧 |
質を決めるのは、いちばん下の一覧です。 「タロウ」「タロウ(♂)」「アジアゾウ1号」を、個体の識別の番号(例:EM-003)1つにそろえます。 変化の種類も、「食い落ち」「採食低下」「残餌多い」を「採食の低下」という1つの名前にそろえます。報告の画面は一覧から選ぶ形にし、日誌の古い言葉は一覧の別名に入れます。
個体の台帳には、種のほかに、性別と生年を持たせます。 同じ変化でも、若い個体と高齢の個体では意味が違うことがあります。確認の画面に当時の年齢を並べると、見比べがしやすくなります。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 飼育日誌(直近8年) | 担当区域ごとの表計算から書き出し、個体ごとの1日の記述に分けて、1件1文書の JSONL のメタデータと本文にする | データストアの中身 |
| 飼育日誌(それより前) | 手書きの日誌のスキャンの PDF を Cloud Storage へ写す | レイアウトの解析を有効にしてデータストアへ |
| 治療の記録・繁殖の記録 | 表計算と文書から、1件1文書にして書き出す | データストアの中身 |
| 答えと引用 | answer メソッドの応答の回答・引用・参照・支持の度合い | 確認の画面 |
日誌は、個体ごとの1日の記述を1つの文書にして入れます。 公式ページでは、非構造のデータのメタデータは JSON Lines(NDJSON)のファイルで、各行に id、structData、Cloud Storage の文書を指す content の uri を持たせるとされています。structData に種・個体・記録の種類・日付・月・変化の種類を入れ、絞り込みに使う項目はスキーマで「インデックス可能」にします。
日誌の1件は、たとえば次の1行の JSON にします。
{"id": "diary-2023-0614-EM-003",
"structData": {"doc_kind": "diary", "species": "アジアゾウ", "animal_id": "EM-003",
"sex": "雄", "date": "2023-06-14", "month": 6,
"change_type": ["採食の低下"], "area": "ゾウ舎", "keeper": "K-12"},
"content": {"mimeType": "text/plain", "uri": "gs://<bucket>/diary/2023/diary-2023-0614-EM-003.txt"}}
本文のファイルには、その日のその個体の記述をそのまま入れます。 絞り込みは structData、意味での検索は本文で行います。治療と繁殖の記録にも同じ species・animal_id・date を持たせ、3つの記録を同じ条件で絞れるようにします。
手書きの日誌のスキャンの PDF は、レイアウトの解析を有効にして入れます。 公式ページでは、スキャンなど文字として検索できない PDF には、データストアを作るときにレイアウトの解析を有効にすることが勧められています。RAG に使うので、文書の分割(チャンク)も有効にします。手書きの文字がどこまで検索に掛かるかは、自園の日誌で試してから範囲を決めます。 読めない年代の日誌は、検索の対象から外し、確認の画面に「この年代は原本を見る」と出します。
AIへ渡す前に整形する
- 日誌の分割 … 担当区域の1日の日誌を、個体ごとの記述に分けます。個体の名前と別名の一覧で、どの行がどの個体かを決めます
- 個体の識別の番号へのそろえ … 名前・別名・旧い呼び名を、台帳の識別の番号に置き換えます
- 変化の種類のそろえ … 一覧の名前に置き換え、日誌の古い言葉は別名で吸収します
- 絞り込みの条件の組み立て … 種は完全一致、記録の種類は日誌・治療・繁殖の3つ、個体は「同じ個体」と「同じ種の全個体」の2回に分けて問い合わせます
- 問い合わせ文の組み立て … 「変化の種類」「様子の文」「いまの季節と月」「個体の年齢」を短い文にします
- 写真と動画の扱い … 写真と動画は検索に使わず、確認の画面に並べるだけにします
4番目で2回に分けて問い合わせるのは、同じ個体の記録を先に見せるためです。 同じ個体の過去の記録がいちばん効く材料です。同じ個体の記録が見つからないときに、同じ種の別の個体の記録が次の材料になります。 2つの答えを混ぜず、確認の画面でも別の枠に並べます。
絞り込みの条件は、たとえば次のようになります(公式ページの書き方による)。
species: ANY("アジアゾウ") AND animal_id: ANY("EM-003")
AND doc_kind: ANY("diary", "treatment", "breeding")
AND date >= "2006-01-01"
季節の癖を見たいときは、月で絞ります。 公式ページでは、数値の項目は IN で範囲を指定でき、既定では下限を含み、上限を含まないとされています。6月前後を見るなら month: IN(5, 8) で5月から7月になります。
AIに処理させる
answer メソッドにさせるのは、絞り込んだ記録の中から、いまの変化に似た過去の記述を探し、当時の対応とその後の経過を引用付きで短くまとめることです。 原因を言い当てることはさせません。
| 返させるもの | 中身 | 返せないときの扱い |
|---|---|---|
| 似た過去の記述 | 日付、当時の年齢、様子の文 | 見つからなければ「該当なし」 |
| 当時の対応 | 給餌の変更、獣医の診察、検査、処置、隔離など | 記録に無ければ「対応の記録なし」 |
| その後の経過 | 何日で戻ったか、別の変化につながったか | 記録に無ければ「経過の記録なし」 |
| 同じ時期の別の記録 | 同じ時期の繁殖の記録や治療の記録 | 無ければ返さない |
「経過の記録なし」を書かせるのが、この表でいちばん大事な行です。 日誌には対応だけが書かれ、その後どうなったかが書かれていないことがよくあります。経過が無いまま「同じ対応で戻った」と補われると、根拠の無い安心が生まれます。
| させないこと | 理由 |
|---|---|
| 原因や病名を推し量る | 診断は獣医が動物を診て行う |
| 対応や投薬を勧める | 治療の方針は獣医が決める |
| 麻酔・移動・隔離の可否を言う | 動物の安全と施設の運営に直結し、獣医と係長の判断に置く |
| 別の種の記録で補う | 種が違えば同じ様子でも意味が違う |
| 引用の無い一般論で答える | 自園の記録に無いことを、もっともらしく書く |
指示内容を固定する
answer メソッドでは、回答の口調や詳しさをプロンプトの前置き(preamble)で指定できます。前置きを次のようにします。
あなたは動物園の飼育課の記録係です。飼育員から届いた「様子の変化」について、
検索で見つかった自園の飼育日誌・治療の記録・繁殖の記録だけを根拠に、
次の順で短く答えてください。
1. 似た過去の記述(日付、当時の年齢、様子の文を原文の言葉のまま)
2. そのときの対応(記録に書かれていることだけ)
3. その後の経過(何日で戻ったか、別の変化につながったか)
4. 同じ時期の治療の記録・繁殖の記録があれば、その日付と要点
守ること:
- 原因や病名を推し量らないでください。
- 対応、投薬、麻酔、移動、隔離を勧めないでください。
- 経過が記録に無いときは「経過の記録なし」と書き、補わないでください。
- 検索結果に無いことを書かないでください。見つからなければ「該当なし」としてください。
- 一般的な動物の知識や、別の種の話で補わないでください。
- 体重・量・回数などの数値と単位は、原文の表記のまま写してください。
「経過の記録なし」と書かせる指示を明記しないと、経過が補われます。 対応が書かれていると、生成の側は「その後回復した」と続けがちです。書かれていないことを書かれていないと返させることが、この前置きの要です。
あわせて、answer メソッドの設定を次のようにします。
| 設定 | 値 | 理由 |
|---|---|---|
引用(includeCitations) | 有効 | 文ごとに出典を示させる |
関連性の低い内容の無視(ignoreLowRelevantContent) | 有効 | 似ていない記録から無理に答えさせない |
根拠の支持による絞り込み(filteringLevel) | 設定する | 支えの弱い答えを外す。未設定だと絞り込みが掛からない |
回答の言語(answerLanguageCode) | ja | 日本語で答えさせる |
絞り込み(filter) | 前処理で組み立てた条件 | 種・個体・記録の種類・時期 |
返す件数(maxReturnResults) | 25 | 既定は10、上限は25。長く飼育している個体の記録を広く拾う |
公式ページでは、filteringLevel を入れなければ支持の度合いによる絞り込みは掛からないとされています。入れ忘れると、支えの弱い答えもそのまま出ます。 支えが足りずに答えが作られなかったときは、応答の answerSkippedReasons にその理由が入ります。
出力形式を固定する
中継プログラムが、answer メソッドの応答を次の形にそろえて確認の画面に渡します。
{
"report_id": "",
"animal_id": "",
"query": "",
"filter": "",
"scope": "same_animal | same_species",
"answer_text": "",
"support_score": 0.0,
"citations": [
{ "sentence": "", "doc_kind": "", "date": "", "animal_id": "", "quote": "" }
],
"similar_cases": [
{ "date": "", "age_then": "", "change_type": "", "action": "", "outcome": "", "doc_id": "" }
],
"skipped": false,
"skipped_reason": ""
}
1つ目の理由は、citations の quote に原文を切り出して持てることです。 公式ページでは、引用の位置(startIndex・endIndex)は文字数ではなく UTF-8 のバイト単位とされています。日本語は1文字が複数のバイトなので、文字数で切り出すと位置がずれます。 中継プログラムで、回答の文をバイト列にしてから切り出します。
2つ目は、scope で同じ個体の答えと同じ種の答えを分けて持てることです。 確認の画面では、同じ個体の答えを上に、同じ種の別の個体の答えを下に、別の枠で並べます。混ぜると、別の個体の経過を、いまの個体の経過のように読んでしまいます。
3つ目は、similar_cases の outcome を空のまま持てることです。 経過の記録が無いものは空で並べ、「経過の記録なし」と画面に出します。 空であることが、そのまま次の記録の書き方を見直す材料になります。
確認の画面は、たとえば次のように並べます。
【様子の変化】アジアゾウ EM-003(雄・32歳)採食の低下/朝の乾草を半分残す
【同じ個体の似た事例】
2023-06-14(29歳)乾草を残す。青草に切り替え → 4日で戻る … 原文を開く
2020-06-20(26歳)採食の低下。獣医が口腔内を確認 → 経過の記録なし … 原文を開く
【同じ時期の別の記録】2023-06-16 治療の記録 … 原文を開く
【同じ種の別の個体】(別の枠)2019-07-02 EM-001 … 原文を開く
【支持の度合い】0.xx
同じ個体の事例を年齢つきで並べるのは、見比べの手がかりにするためです。 同じ6月に3回採食が落ちているなら、季節の癖かもしれないと考えるきっかけになります。 そう判断するかどうかは、係長と獣医が決めます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 様子の変化の入力の画面 | 中継プログラムの API | 入力の受け取り |
| Vertex AI Search | answer メソッドの API | 答え、引用、支持の度合い |
| Cloud Storage | 記録の写し | 引用した箇所の原文の表示 |
| 飼育日誌 | 下書きの書き出し | 参照した過去の記録の箇所を含めて残す |
| 動物病院への相談 | 確認の画面から飼育員が送る | 相談のメモと根拠の記録 |
日誌と治療の記録への書き込みは、飼育員と獣医が確かめてから行います。 中継プログラムは下書きを作るまでにします。個体の記録は、動物の一生を通じて読み返される記録です。 確かめられていない文が混ざると、次の担当者がそれを根拠に判断します。
データストアへの記録の出し入れは、飼育課の記録の担当だけが行います。 日誌は週に1回、確定した分をまとめて分割し、メタデータを付けて入れます。個体が死亡したり、他園へ移ったりしても、記録は消しません。同じ種の別の個体の材料として残します。
人が確認する
- 引用の原文を開いて読む … 答えの文だけで判断しません。当時の記述の前後の日も見ます
- いまの様子と当時の様子を見比べる … 年齢、季節、群れの状況が当時と同じかを確かめます
- 同じ個体の事例と同じ種の事例を分けて読む … 別の個体の経過を、いまの個体に当てはめません
- 相談のメモを作って係長と獣医に上げる … 根拠の記録の箇所をメモに付けます
- 獣医が診て判断する … 検査や治療に進むかは、ここで決めます
1番目を省かないでください。 答えの文は短くまとめられていて、前後の日の記述が落ちていることがあります。 「4日で戻る」の前日に何があったかは、原文を開けば数十秒で分かります。
目標は、240件をならして1件8分です。 引用の原文を読み、いまと当時を見比べて、相談のメモを作る時間です。探す時間がほぼ無くなり、読む時間と見比べる時間が残ります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 答えが作られなかった | 「該当なし」と表示し、絞り込みを外した原文の検索に誘導する |
| 引用の無い文が含まれる | その文を確認の画面に出さない |
| 支持の度合いが低い | 答えを出さず、引用の候補の記録だけを並べる |
| 同じ個体の記録が無い(来園して間もない) | 同じ種の答えだけを出す。前の園の記録を取り寄せられるかを係長に知らせる |
| 引用した記録が別の個体のもの | 分割と識別の番号のそろえを確かめる。その答えを使わず、記録の担当へ知らせる |
| 手書きの日誌が読めず検索に掛からない | 「この年代は原本を見る」と出し、年と月を示す |
| 変化の種類が一覧に無い | 「その他」として送り、飼育課が一覧に足すかを決める |
| 急いで獣医を呼ぶべき様子 | 検索を待たずに、いまどおり獣医へ連絡する |
| 検索が応答しない | 入力を保存し、再送する。急ぐものはいまどおり記録をめくる |
「検索を待たずに獣医へ」は、画面の上にも常に出しておきます。 倒れている、出血している、呼吸が荒い。こうしたときに記録を調べる必要はありません。この構成は、急がない変化の調べものを短くするものです。
記録を残す
- 様子の変化の入力(個体、変化の種類、様子の文、日時、人)
- 問い合わせ文、絞り込みの条件、answer メソッドの応答の全文(引用、参照、支持の度合い)
- 確認の画面に出した答えと、外した文
- 飼育員の相談のメモ、係長と獣医の判断、参照した過去の記録の箇所
- データストアに記録を入れた日と、その範囲
4つ目が、いまは残っていない記録です。 どの過去の記録を見てどう判断したかが、日誌とひもづいて残ります。次の担当者が同じ変化を見たとき、前回の判断の筋道まで追えます。
5つ目は、答えの検証のために残します。 答えが最近の記録を拾わなかったのは、似ていなかったのか、入れるのが遅れていたのかを、入れた日と並べて確かめられます。 記録の担当は月に1回、外した文と「該当なし」の件数を見て、分割の規則や変化の種類の一覧を直します。
04実装レベルの3段階
半自動化で、1件25分が13分ほどになります。 探す時間は減りますが、事務所に戻ってから問い合わせ文を打ち直す手間と、日誌への書き写しが残ります。本格構成で8分になり、この段階が本記事の想定です。 段階を進める前に、個体の識別の番号と変化の種類の一覧をそろえてください。 そろっていないと、半自動化の絞り込みが効かず、別の個体の記録が混ざります。
05工数削減シミュレーション
導入後 240件 × 8分 ÷ 60 = 32 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 100種前後・数百点の動物を飼育し、飼育日誌・治療の記録・繁殖の記録が10年以上たまっている動物園・水族館。日誌が担当区域ごとの表計算や紙のスキャンに分かれていて、同じ個体の過去の経過を探すのに時間がかかっている場合。担当替えや退職で、個体ごとの癖や過去の経緯を知る人が減っている場合。Google Cloud を使っている、または使い始められる場合。
- 飼育している動物が数十点で、担当者の記憶と1冊の台帳で過去の経過が追える場合。日誌が紙だけで、個体の名前や日付が判別できない形で残っている場合。すでに飼育管理のシステムで個体ごとの経過を検索できている場合。なお、診断、治療の方針、麻酔や移動の可否、繁殖の計画の判断は、この構成では代替できません。
07最小構成で試す方法
- 過去2年の日誌から、変化に気づいて過去の記録を調べた事例を30件選ぶ(長く担当した飼育員と、担当して間もない飼育員の両方が扱ったものを混ぜる)
- その30件について、当時見つけた過去の記録と、取った対応を書き出す
- 1つの担当区域の直近8年の日誌を、個体ごとの記述に分けて Cloud Storage に入れ、Vertex AI Search のデータストアを作る(治療と繁殖の記録はまだ入れない)
- 30件の変化を問い合わせ文にして、answer メソッドを短いスクリプトで呼び、答えと引用を見る
- 引用された記録が、当時見つけた過去の記録と合うかを突き合わせる
30件のうち、当時と同じ記録を引用した件数を最初に数えます。 当時は見つけられなかった記録を引用したものも数えます。それが、手で探していたときに落ちていた記録です。
| 出てきた内容 | 判断 |
|---|---|
| 大半が当時と同じ記録を引用した | 治療と繁殖の記録を入れ、絞り込みと確認の画面に進む |
| 別の個体の記録が混ざる | 日誌の分割と識別の番号のそろえを見直す |
| 経過を補った答えが出る | 前置きの書き方を直す。構成は有効 |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 別の個体の記録が混ざる | 日誌を個体ごとに分け、識別の番号で完全一致で絞る |
| 呼び名がばらばらで絞れない | 台帳の識別の番号にそろえ、別名を一覧に入れる |
| 経過が補われた答えが出る | 前置きで「経過の記録なし」と書かせる |
| 答えが原因や病名を言う | 前置きで禁じ、獣医が診て判断する |
| 引用の位置で原文を切り出すとずれる | UTF-8 のバイト単位で切り出す |
| 支えの弱い答えがそのまま出る | filteringLevel を設定する |
| 手書きの日誌が検索に引っかからない | レイアウトの解析を有効にしてデータストアを作る。読めない年代は原本を見る |
| 季節の範囲の境目が外れる | IN の上限は既定で含まれない。範囲を広めに取る |
| 同じ種の別の個体の経過を当てはめる | 同じ個体と同じ種の答えを別の枠に分ける |
| 検索を待って獣医への連絡が遅れる | 急ぐ様子は検索を待たずに連絡する手順を画面に出す |
上の2行が、この構成の失敗のほとんどです。 どちらも個体の取り違えで、別の個体の経過を根拠に相談すると、判断を誤ります。 個体は、名前ではなく識別の番号で完全一致で絞ります。
3行目と4行目は、生き物を扱うならではの注意です。 経過の補いと原因の推し量りは、どちらも獣医の判断を先回りします。
9行目は、運用を始めてから効いてきます。 同じ個体の記録が少ないと、同じ種の別の個体の答えばかりが並びます。それを同じ個体の話のように読むと、個体差を見落とします。 枠を分けることを、画面の設計の最初に決めておきます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 飼育日誌、治療の記録、繁殖の記録、個体の台帳、飼育員の名前、動物の写真です。希少な種の繁殖の記録や、個体の移動の予定は、外部に出すと園の運営や他園との調整に影響しうる情報です。
- 診断と治療の判断を獣医に残す … 環境省の「展示動物の飼養及び保管に関する基準」は、疾病にかかり、負傷し、又は死亡した動物に対して、原因究明を含めて獣医師による適切な措置が講じられるようにすることを求めています。答えはその材料にとどめ、対応は獣医が決めます
- 記録を確かめてから残す … 同じ基準は、個体識別の措置とともに、特徴、飼育履歴、病歴等に関する記録台帳を整備し、記録管理を適正に行うよう努めることを求めています。機械が直接書き込まず、確かめた下書きだけを日誌にします
- データの置き場所を確かめる … 公式ページでは、データストアの場所は
globalのほかus、euのマルチリージョンで、日本のリージョンは載っていません。 市の情報の取扱いの規程と照らし、置いてよい記録の範囲を決めます - 見られる人を限る … 確認の画面と原文は、飼育課と動物病院の職員に限ります
- 来園者向けに出さない … この構成は職員の調べものの道具です。来園者の質問に答える案内の仕組みとは分けます
- 写真の扱いを決める … 獣舎の写真には、来園者や職員が写ることがあります。保存と表示の範囲を決めます
答えを、飼育員の評価に使わないことも決めておきます。 確認の画面の記録には、誰がいつ何に気づいたかが残ります。気づいて入力した数で人を比べ始めると、入力が減り、記録が痩せます。
誤りが起きた場合のリスクは、別の個体の経過を根拠に相談することと、補われた経過を信じて獣医への連絡が遅れることの2つです。 前者は識別の番号での絞り込みで、後者は「経過の記録なし」を書かせることと、急ぐ様子は検索を待たない手順で防ぎます。
10まず何から始めるか
1週目:個体の識別の番号と変化の種類の一覧を決める
個体の台帳の識別の番号を正とし、名前・別名・旧い呼び名の一覧を作ります。あわせて、変化の種類の一覧と別名を、5つの担当区域と動物病院で決めます。
2週目:1つの担当区域で30件を試す
第8章の手順で、1つの区域の日誌だけのデータストアを作り、30件の変化で引用の記録を確かめます。別の個体の記録が混ざらないかを最優先で見ます。
3週目:全区域の日誌を個体ごとに分ける
直近8年の日誌を、個体ごとの1日の記述に分け、1件1文書の JSONL にします。種・個体・記録の種類・日付・月をインデックス可能な項目にします。
4週目:治療と繁殖の記録を足す
動物病院の治療の記録と繁殖の記録を、同じメタデータで入れます。この時点では、いまの調べ方と並べて、引用の記録が合うかを見比べます。
2か月目: 手書きの日誌のスキャンの PDF を入れ、読める年代の範囲を確かめます。3か月目以降: タブレットの入力の画面と日誌の下書きを足し、1件25分が何分になったかを実測します。担当して間もない飼育員が、前の担当者の記録を数分で引けるようになり、参照した記録が日誌に残るようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
answer メソッドが検索結果から回答を作り、文ごとの引用を付けられること。前のセッションを引き継いで続けて問えること。関連性の低い内容を無視する設定、プロンプトの前置き、回答の言語、maxReturnResults(既定10・上限25)の設定があること。support score が0から1の値であること、filteringLevel を入れなければ支持による絞り込みが掛からないこと、答えを作らなかったときに answerSkippedReasons が返ること。引用の位置が UTF-8 のバイト単位であること。Vertex AI Search が Agent Search へ改称中であること | Google Cloud: Get answers and follow-ups | 2026-10-26 |
メタデータで絞り込むには項目をインデックス可能にすること。ANY が完全一致であること、AND/OR/NOT、数値の比較と IN が使え、IN は既定で下限を含み上限を含まないこと。日付を ISO 8601 の文字列で比較できること | Google Cloud: Filter search for structured or unstructured data | 2026-10-26 |
非構造のデータのメタデータが JSON Lines(NDJSON)で、各行に id・structData・content の uri を持つこと。ファイルの上限が200MB、一度に100,000ファイルまで取り込めること。スキャンの PDF にはレイアウトの解析を、RAG には文書の分割を有効にするよう勧められていること | Google Cloud: Prepare data for ingesting | 2026-10-26 |
データストアの場所が global と、us・eu のマルチリージョンで、日本のリージョンの記載が無いこと | Google Cloud: Agent Search locations | 2026-10-26 |
日本語(ja-JP)が検索の機能と、回答とフォローアップに対応していること | Google Cloud: Supported languages | 2026-10-26 |
| 動物園等で飼養・保管する動物が「動物園動物」として対象になること。疾病・負傷・死亡した動物に原因究明を含めて獣医師による適切な措置が講じられるようにすること。個体識別の措置と、特徴・飼育履歴・病歴等に関する記録台帳の整備に努めること | 環境省: 展示動物の飼養及び保管に関する基準 | 2026-10-26 |
動物の診断・治療と記録の運用は、自園の獣医と飼育の規程で確かめてください。 本記事は、上記の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1846)についてのご相談はこちらから。
