小売チェーンの採用担当が過去の求人の原稿と応募の実績を Vertex AI Search で検索し、新しい募集に近い職種・地域・時間帯の原稿を、応募の集まり方と掲載の時期を付けて引き、いまの時給と店舗の条件に合わせて直す箇所を示す
店舗から新しい募集の依頼が届いたとき、職種・時間帯・地域で絞って、過去の求人の原稿を応募の集まり方の順に検索します。原稿の中の店舗や時期に依存する記述を抜き出し、直す箇所を示します。
- 生成AI
- Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 連携・自動化
- Python
- 対象業界
- 小売/物流/飲食
- 対象部門
- 人事/採用
- 対象業務
- 情報検索/書類作成
- 主な課題
- 属人化している/情報が見つからない/書類作成に時間がかかる
- AIで行う処理
- 検索(RAG)
- 主な効果
- 品質標準化/工数削減/検索時間短縮
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 募集の依頼のフォームを読み、店舗・職種・時間帯・人数・開始の時期を確かめる
- 過去の原稿のファイルから、同じ職種・近い時間帯の原稿を探す
- 応募の数の書き出しを開き、探した原稿がどれくらい応募を集めたかを見る
- 良さそうな原稿を写し、店舗名、所在地、最寄りの駅、設備、手当の記述を、店舗の台帳を見て直す
- 時給の表で、その店舗・職種・時間帯のいまの時給を見て直す。地域別最低賃金の表と見比べる
- 店長に原稿を確かめてもらい、媒体に出す
- 自動募集の依頼のフォームが送られると、中継プログラムが店舗・職種・雇用の形・時間帯・開始の時期を受け取る
- 自動店舗の台帳を引き、店舗の県・最寄りの駅・設備・制度を付ける。時給の表と地域別最低賃金の表から、開始の時期に効いている額を引く
- 自動Vertex AI Search(Agent Search)の search メソッドで、同じ職種・近い時間帯・同じ県の過去の原稿を、掲載期間あたりの応募の数に重みを付けて並べる
- 自動上位の原稿について、掲載した時期・当時の時給・掲載期間あたりの応募の数を並べる
- 自動answer メソッドで、上位の原稿の中の店舗や時期に依存する記述(所在地、交通、設備、時給、手当、時期の限られた言葉)を、原文のまま引用付きで抜き出させる
- 自動抜き出した記述ごとに、店舗の台帳の値と、いまの時給の表の額を並べる
- 人採用の担当が、使う原稿を選び、抜き出された箇所をいまの店舗と条件に直す
- 人店長に確かめてもらい、媒体に出す
- 自動掲載が終わったら、応募の数の書き出しを取り込み、原稿に付ける
各工程の詳しい説明を読む
- 募集の依頼のフォームを読み、店舗・職種・時間帯・人数・開始の時期を確かめる
- 過去の原稿のファイルから、同じ職種・近い時間帯の原稿を探す
- 応募の数の書き出しを開き、探した原稿がどれくらい応募を集めたかを見る
- 良さそうな原稿を写し、店舗名、所在地、最寄りの駅、設備、手当の記述を、店舗の台帳を見て直す
- 時給の表で、その店舗・職種・時間帯のいまの時給を見て直す。地域別最低賃金の表と見比べる
- 店長に原稿を確かめてもらい、媒体に出す
(a)近い原稿が見つからない。 2番で、原稿は媒体ごと・年ごとのファイルに分かれ、ファイルの名前に職種が入っていないものも多くあります。 「夜間の品出し」の原稿を探すのに、何年分ものファイルを開きます。
(b)応募の集まり方を比べられない。 3番で、応募の数は掲載期間も時期も違う原稿を並べただけの書き出しで、どの原稿が本当に応募を集めたかが分かりません。 結局、勤めの長い1名に聞きます。
(c)店舗や時期に依存する記述を直し忘れる。 4番で、写した原稿に「駅から徒歩3分」「無料の駐車場あり」「年末年始の特別の手当」が残ったまま出ることがあります。新しい店舗に駐車場が無ければ、応募した人との最初の行き違いになります。
(d)時給を写してしまう。 5番を急いで省くと、古い原稿の時給がそのまま残ります。 地域別最低賃金の改正のあとに古い時給のまま出すと、法令を下回る募集になりかねません。
- 【自動】 募集の依頼のフォームが送られると、中継プログラムが店舗・職種・雇用の形・時間帯・開始の時期を受け取る
- 【自動】 店舗の台帳を引き、店舗の県・最寄りの駅・設備・制度を付ける。時給の表と地域別最低賃金の表から、開始の時期に効いている額を引く
- 【自動】 Vertex AI Search(Agent Search)の search メソッドで、同じ職種・近い時間帯・同じ県の過去の原稿を、掲載期間あたりの応募の数に重みを付けて並べる
- 【自動】 上位の原稿について、掲載した時期・当時の時給・掲載期間あたりの応募の数を並べる
- 【自動】 answer メソッドで、上位の原稿の中の店舗や時期に依存する記述(所在地、交通、設備、時給、手当、時期の限られた言葉)を、原文のまま引用付きで抜き出させる
- 【自動】 抜き出した記述ごとに、店舗の台帳の値と、いまの時給の表の額を並べる
- 【人】 採用の担当が、使う原稿を選び、抜き出された箇所をいまの店舗と条件に直す
- 【人】 店長に確かめてもらい、媒体に出す
- 【自動】 掲載が終わったら、応募の数の書き出しを取り込み、原稿に付ける
2番目で時給を先に引いておくのが、この設計の要です。 原稿の時給は、検索の結果ではなく、開始の時期に効いている時給の表の額と地域別最低賃金を、画面のいちばん上に出します。
5番目で答えにさせるのは、直す箇所の抜き出しだけです。 新しい原稿の文章は書かせません。店舗に合わせた書き直しは、店舗の台帳を見た担当が行います。
02今回想定するシステム構成
募集の依頼のフォーム(店舗・職種・雇用の形・時間帯・人数・開始の時期) ▼【トリガー】フォームの送信 中継プログラム(Python。Cloud Run) │ 店舗の台帳で、県・駅・設備・制度を引く │ 時給の表と地域別最低賃金の表から、開始の時期に効く額を引く ▼ Vertex AI Search(Agent Search) ├── search メソッド ── 近い原稿(掲載期間あたりの応募の数で重み付け) └── answer メソッド ── 上位の原稿の店舗・時期に依存する記述(引用つき) │ データストア:過去の求人の原稿(1件1文書。応募の実績をメタデータに) ▼ 中継プログラム ── 当時の時給といまの額の比較、店舗の台帳との突き合わせ ▼ 採用の画面(いまの時給と最低賃金/近い原稿と応募の集まり方/直す箇所) ▼ 【担当が原稿を選んで直し、店長の確認を経て媒体へ】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Vertex AI Search(Agent Search)の search メソッドと answer メソッド | Azure AI Search、Amazon OpenSearch Service |
| 生成AI | Gemini(answer メソッドの回答の生成に使うモデル) | ― |
| 連携 | 中継プログラム(Python。Cloud Run で動かし、依頼のフォーム・店舗の台帳・時給の表・検索・採用の画面をつなぐ) | Node.js で同じものを書く |
| 保管 | Cloud Storage(過去の原稿の写し、メタデータ、依頼と応答の記録) | ― |
媒体の入稿の画面と、応募者の情報の管理の仕組みには、つなぎません。 媒体に出すのは、いまどおり担当が店長の確認を経て行います。応募者の個人の情報は、この構成のどこにも入れません。 使うのは原稿ごとの応募の数だけです。
土台は、Vertex AI Search の search メソッドの絞り込みと重み付けです。 公式ページでは、メタデータの数の項目に応じて結果の順に重みを付ける boostControlSpec があり、NUMERICAL の型で、項目の値ごとに重みの大きさを決められるとされています。answer メソッドは検索の結果から回答を作り、引用のメタデータを付けられるとされています。公式ページには、Vertex AI Search が Agent Search へ改称中である旨の記載があります。
03どうやって実装するのか
処理の起点を決める
店長が募集の依頼のフォームを送ったことを起点にします。 フォームでは、職種と雇用の形を一覧から選ばせ、時間帯は早朝・朝・昼・夕方・夜・深夜の区分から選ばせ、曜日と開始の時期を入れさせます。「朝の品出し」「モーニング」のような自由な書き方をさせないことで、絞り込みの条件が決まります。
掲載が終わった原稿の応募の数は、毎週月曜日に取り込みます。 媒体ごとの応募の数の書き出しを読み、掲載の始まりと終わりの日から掲載期間を出し、掲載期間あたりの応募の数をその原稿のメタデータに書き足します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 依頼 | 店舗、職種、雇用の形、時間帯、曜日、人数、開始の時期、店長の補足 | 募集の依頼のフォーム |
| 店舗の情報 | 県、所在地、最寄りの駅、駐車場、休憩室、従業員の割引などの設備と制度 | 店舗の台帳 |
| いまの時給 | 店舗・職種・時間帯ごとの時給と、その表の効力の始まりの日 | 時給の表 |
| 地域別最低賃金 | 県ごとの額と発効の日 | 地域別最低賃金の表 |
| 過去の原稿 | 原稿の本文、媒体、店舗、職種、雇用の形、時間帯、当時の時給、掲載の始まりと終わり | データストア |
| 応募の実績 | 原稿ごとの応募の数、掲載期間あたりの応募の数 | データストア(メタデータ) |
質を決めるのは、過去の原稿の「当時の時給」と「掲載期間あたりの応募の数」です。 当時の時給は、原稿の本文から人事部の担当が取り出して付けます。原稿の本文から機械で読み取らせると、「時給1,100円〜」の下限と上限を取り違えます。 下限の額を入れます。
店長の補足の欄は、検索の問い合わせ文に使いますが、画面にもそのまま出します。 「近くに大学があり学生が多い」のような補足は、原稿の書き方の手がかりになります。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 過去の原稿 | 媒体ごとの原稿のファイルを、1件1文書の文字にして Cloud Storage へ写す | データストアの中身 |
| 応募の実績 | 媒体ごとの応募の数の書き出し | 原稿のメタデータ |
| 店舗の情報 | 店舗の台帳の読み取り | 絞り込みの条件と直す箇所の突き合わせ |
| いまの時給と最低賃金 | 時給の表と地域別最低賃金の表の読み取り | 画面のいちばん上の額 |
| 原稿の一覧と抜き出し | search メソッドと answer メソッドの応答 | 採用の画面 |
原稿は、1件を1つの文書にし、メタデータに職種・時間帯・県・時期・当時の時給・応募の実績を持たせます。 公式ページでは、非構造のデータのメタデータは JSON Lines(NDJSON)のファイルで、各行に id、structData(または jsonData)、Cloud Storage の文書を指す content の mimeType と uri を持たせるとされています。1件の原稿は、たとえば次の1行にします。
{"id": "jp-2025-0412-st037-prod-am",
"structData": {"doc_kind": "job_posting", "posting_key": "jp-2025-0412-st037-prod-am",
"store_id": "ST037", "pref": "PREF_B",
"role": "grocery_stocking", "employment": "part_time",
"time_band": "early_morning", "posted_from": "2025-04-12",
"posted_to": "2025-05-09", "wage_then": 1080,
"apps_total": 14, "apps_per_week": 3.5, "season": "spring"},
"content": {"mimeType": "text/plain", "uri": "gs://<bucket>/jp/2025/0412-st037-prod-am.txt"}}
原稿の本文からは、応募の連絡先の担当の名前と電話番号を外して入れます。 検索に要るのは仕事の内容と書き方で、誰が窓口だったかは要りません。 公式ページでは、取り込めるファイルの上限は200MBで、一度に100,000ファイルまで取り込めるとされています。
AIへ渡す前に整形する
- 店舗の引き当て … フォームの店舗を台帳で引き、県・所在地・駅・設備・制度を決めます
- 開始の時期に効く額の引き当て … 時給の表と地域別最低賃金の表から、開始の時期に効力のある額を引きます。発効の日が開始の時期より前か後かで、どちらの額が効くかが変わります
- 問い合わせ文の組み立て … 「早朝の青果の品出しのパートの募集の原稿」のように、職種・時間帯・雇用の形から文を作ります
- 絞り込みと重み付けの組み立て … 同じ職種・同じ雇用の形・同じ県・近い時間帯・直近3年の掲載で絞り、掲載期間あたりの応募の数に重みを付けます
- 応募の数の少ない原稿の扱い … 掲載期間が1週間に満たない原稿は、応募の数が偏るので重み付けから外します
2番目を検索の前に置くのは、地域別最低賃金の発効の日をまたぐ募集があるからです。 最低賃金法は、地域別最低賃金の決定や改正の決定は、公示の日から起算して30日を経過した日(決定で別に定める日があればその日)から効力を生じるとしています。依頼の日と、働き始める日とで、効く額が違うことがあります。
絞り込みの条件と重み付けは、たとえば次のようになります(公式ページの書き方による)。
filter:
doc_kind: ANY("job_posting") AND role: ANY("grocery_stocking")
AND employment: ANY("part_time") AND pref: ANY("PREF_B")
AND time_band: ANY("early_morning", "morning")
AND posted_from >= "2023-11-01"
boostSpec:
conditionBoostSpecs: [{ condition: "doc_kind: ANY(\"job_posting\")",
boostControlSpec: { fieldName: "apps_per_week", attributeType: "NUMERICAL",
interpolationType: "LINEAR",
controlPoints: [{ attributeValue: "0", boostAmount: 0.0 },
{ attributeValue: "5", boostAmount: 0.1 }] } }]
公式ページでは、ANY は指定した値のどれかに完全に一致するときに真になり、日付の項目は比較の演算子と ISO 8601 の文字列で比べられ、AND・OR と括弧で組み合わせられるとされています。絞り込みに使う項目は、スキーマの画面でインデックス可能にしておく必要があります。重み付けの値は -1 から 1 の範囲で、0.1 以下のような小さい値から始めることが勧められています。 重みを大きくしすぎると、職種や時間帯の近さより応募の数が勝ち、別の仕事の原稿が上に来ます。
AIに処理させる
answer メソッドにさせるのは、上位の原稿の中から、店舗や時期に依存する記述を、原稿の言葉のまま引用付きで抜き出すことです。 新しい原稿の文章は書かせません。
| 返させるもの | 中身 | 返せないときの扱い |
|---|---|---|
| 所在地と交通 | 店舗名、所在地、最寄りの駅、駅からの時間、駐車場 | 見つからなければ「記載なし」 |
| 時給と手当 | 時給、時間帯の手当、交通費、時期の限られた手当 | 見つからなければ「記載なし」 |
| 設備と制度 | 休憩室、制服、従業員の割引、食堂 | 見つからなければ「記載なし」 |
| 時期の限られた言葉 | 「年末年始」「オープニング」「春休み」など | 見つからなければ「記載なし」 |
search メソッドの側では、原稿の一覧を返させます。 一覧の各行に、掲載した時期・当時の時給・掲載期間あたりの応募の数を、メタデータの値のまま並べます。
| させないこと | 理由 |
|---|---|
| 新しい原稿の時給や条件を書く | 時給は時給の表から、条件は人事部の決まりから入れる |
| 新しい原稿の文章を書く | 店舗の台帳を見て担当が直す |
| 応募がなぜ集まったかを書く | 原稿の文章だけでは分からない |
| 応募者の層を推す | 応募者の情報は入れていない |
| 店舗の設備や制度を、原稿から新しい店舗のものとして書く | 店舗ごとに違う |
1行目がいちばん大事です。 抜き出しの答えを「新しい募集用に整えて」と頼むと、モデルは古い原稿の時給を新しい原稿の時給として書きます。 時給は抜き出すだけにし、いまの額は中継プログラムが時給の表から出します。
指示内容を固定する
answer メソッドでは、回答の口調や詳しさをプロンプトの前置き(preamble)で指定できます。前置きを次のようにします。
あなたは小売チェーンの本部の採用の担当のための、過去の求人の原稿の資料係です。
検索で見つかった求人の原稿の本文だけを根拠に、原稿ごとに、
店舗や時期によって変わる記述を抜き出してください。
【抜き出す記述】
1. 所在地と交通(店舗名、所在地、最寄りの駅、駅からの時間、駐車場)
2. 時給と手当(時給、時間帯の手当、交通費、時期の限られた手当)
3. 設備と制度(休憩室、制服、従業員の割引、食堂)
4. 時期の限られた言葉(年末年始、オープニング、春休みなど)
守ること:
- 原稿の言葉のまま抜き出してください。言い換えないでください。
- 金額、時間、日数は原文の表記のまま写してください。
- 新しい募集の時給や条件、原稿の文章を書かないでください。
- 応募がなぜ集まったか、どんな人が応募したかを書かないでください。
- 見つからない項目は「記載なし」と書いてください。
- 検索結果に無いことを書かないでください。
「なぜ集まったかを書かない」を入れるのは、モデルが「駅近の記述が応募の多さにつながったと考えられます」のように、根拠の無い理由を付けがちだからです。 その一文は、次の原稿の書き方の方針のように読まれます。
あわせて、answer メソッドの設定を次のようにします。
| 設定 | 値 | 理由 |
|---|---|---|
引用(includeCitations) | 有効 | 抜き出した記述ごとに出典を示させる。既定は無効 |
関連性の低い内容の無視(ignoreLowRelevantContent) | 有効 | 関係の薄い原稿から無理に抜き出させない |
検索の結果の数(maxReturnResults) | 5 | 上位の原稿だけを対象にする。既定は10、上限は25 |
回答の言語(answerLanguageCode) | ja | 日本語で答えさせる |
絞り込み(filter) | 一覧の上位5件の posting_key: ANY(...) | 一覧と同じ原稿だけを対象にする |
最後の行で、answer メソッドの対象を、search メソッドの上位の原稿に固定します。 posting_key は、文書の id と同じ値を入れてインデックス可能にしたメタデータの項目です。 一覧と抜き出しで別の原稿が対象になると、画面の上で並べた原稿と、直す箇所の原稿が食い違います。 引用の位置は UTF-8 のバイト単位と公式ページにあるので、印を差し込むときは文字の位置に直します。
出力形式を固定する
中継プログラムが、応答と台帳・表の値を次の形にそろえて採用の画面に渡します。
{
"request_id": "",
"store_id": "",
"role": "",
"time_band": "",
"start_on": "",
"wage_now": { "amount": 0, "table_effective_from": "" },
"min_wage": { "pref": "", "amount": 0, "effective_from": "" },
"wage_below_min": false,
"candidates": [
{ "posting_id": "", "posted_from": "", "posted_to": "", "season": "",
"wage_then": 0, "apps_per_week": 0,
"store_dependent": [
{ "kind": "access | wage | facility | seasonal", "quote": "",
"store_master_value": "" } ] }
],
"skipped_reason": ""
}
1つ目の理由は、wage_now と min_wage を、原稿の一覧と別に持てることです。 画面のいちばん上に、開始の時期に効く時給の表の額と地域別最低賃金を出します。 wage_below_min は、時給の表の額が最低賃金を下回るときに中継プログラムが真にし、真なら原稿の作業を止めて人事部に知らせます。 表の更新が遅れていることを、原稿を出す前に見つけます。
2つ目は、store_dependent に台帳の値を並べられることです。 抜き出した「無料の駐車場あり」の横に、新しい店舗の台帳の駐車場の欄の値を出し、違えば赤くします。 突き合わせは文字列の比較と台帳の欄の対応表で行い、AIには判断させません。
3つ目は、season と posted_from を一覧に持てることです。 年末の短期の募集の原稿が上に来たとき、時期が違うことを担当がその場で見分けられます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 募集の依頼のフォーム | フォームの送信の通知 | 依頼の受け取り |
| 店舗の台帳 | 店舗の番号での引き当て(読み取りのみ) | 県・所在地・駅・設備・制度 |
| 時給の表・地域別最低賃金の表 | 読み取りのみ | 開始の時期に効く額 |
| Vertex AI Search | search メソッドと answer メソッドの API | 近い原稿の一覧、直す箇所の抜き出し |
| 応募の数の書き出し | 毎週の取り込み | 原稿のメタデータの書き足し |
時給の表と地域別最低賃金の表は、人事部の担当が更新します。 この構成からは書き込みません。表の更新が改正の発効に間に合っているかは、人事部が自分で確かめる仕事のままです。 この構成は、原稿を出す前に表の額と最低賃金を並べて見せるだけです。
人が確認する
- いまの時給と最低賃金を見る … 画面のいちばん上の額が、開始の時期に合っているかを確かめます
- 原稿を選ぶ … 一覧の時期・当時の時給・応募の集まり方を見て、使う原稿を選びます
- 直す箇所を直す … 赤くなった記述を、店舗の台帳の値に直します。時給は必ず画面の上の額に置き換えます
- 抜き出されなかった記述を読む … 原稿を通して読み、抜き出しから漏れた店舗や時期の記述が無いかを見ます
- 店長に確かめてもらう … 仕事の内容と時間帯が、実際の募集と合っているかを店長に見てもらいます
3番目と4番目を省かないでください。 職業安定法は、労働者の募集を行う者に、広告などで募集の情報を出すときに虚偽の表示又は誤解を生じさせる表示をしないことと、正確かつ最新の内容に保つことを求めています。古い原稿の記述が1つ残るだけで、実際と違う募集になります。
目標は、120件をならして1件11分です。 原稿を選び、直し、通して読み、店長に送る時間です。勤めの長い1名は、毎月、選ばれた原稿と掲載後の応募の数を見比べます。 上位に出た原稿が選ばれない職種が続けば、時間帯の区分か、重みの大きさを見直す時期です。
例外に対処する
| 起きること | 対応 |
|---|---|
| 時給の表の額が最低賃金を下回る | 原稿の作業を止め、人事部に知らせる |
| 開始の時期が最低賃金の発効の日をまたぐ | 両方の額を出し、開始の時期に効く方を太字にする |
| 近い原稿が無い(新しい職種) | 職種を広げず、「近い原稿なし」と出し、担当が一から書く |
| 一覧の上位がすべて時期の違う原稿 | 時期の違いを出し、通年の原稿だけでもう一度並べる |
| 掲載期間が短く応募の数が偏る原稿 | 重み付けから外し、一覧の下に出す |
| 答えが作られなかった | 抜き出しを出さず、原稿の一覧だけを出す |
| 店舗が台帳に無い(新しい店舗) | 突き合わせを行わず、店舗の記述をすべて赤くする |
| 検索が応答しない | いまどおり原稿のファイルから探す |
3行目の「職種を広げない」は、意図した決まりです。 「ベーカリー」の原稿が無いときに「惣菜」の原稿を出すと、仕事の内容の記述まで写されるおそれがあります。
記録を残す
- 依頼の内容と、そのとき引いた店舗の台帳の値
- そのとき引いた時給の表の額と効力の日、地域別最低賃金の額と発効の日
- 絞り込みと重み付けの条件、search メソッドと answer メソッドの応答の全文
- 担当が選んだ原稿と、直した記述
- 出した原稿と、掲載後の応募の数
2つ目の「そのとき引いた額と日付」は、後から問われたときにいちばん要る記録です。 どの日の時給の表と最低賃金を見て原稿を出したかを示せます。
04実装レベルの3段階
半自動化で、1件30分が20分ほどになります。 原稿を探す時間は減りますが、時給の表と店舗の台帳を開き直して直す箇所を探すことが残ります。本格構成で11分になり、この段階が本記事の想定です。 段階を進める前に、過去の原稿に当時の時給を付けてください。 当時の時給が無いと、いまの額と比べて「時給が古い原稿」を見分けられません。
05工数削減シミュレーション
導入後 120件 × 11分 ÷ 60 = 22 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- スーパー・ドラッグストア・専門店などを数十から百店以上持ち、店舗のパート・アルバイトの募集を本部の採用担当がまとめて出している小売チェーン。過去の求人の原稿と、媒体ごとの応募の数の書き出しが数年分残っている場合。店舗から募集の依頼が毎月百件前後届き、似た原稿を探して直すのに時間がかかっている場合。採用担当によって原稿の出来と応募の集まり方に差がある場合。Google Cloud を使っている、または使い始められる場合。
- 店舗が数店で、募集が年に数回しか無い場合。過去の原稿が残っておらず、応募の数も媒体の画面でしか見られない場合。募集の多くを求人の代行の会社に任せ、原稿を自社で持っていない場合。なお、時給や労働条件を決めること、応募者を選ぶことは、この構成では代替できません。
07最小構成で試す方法
- 過去1年の依頼から、30件を選ぶ(よく出る職種と、年に数回しか出ない職種、時期の限られた募集を混ぜる)
- その30件と同じ職種の、直近3年の原稿を1件1文書にし、職種・時間帯・県・時期・当時の時給・掲載期間あたりの応募の数を付けて、Vertex AI Search のデータストアを作る
- 30件の依頼から絞り込みと重み付けの条件と問い合わせ文を作り、search メソッドと answer メソッドを短いスクリプトで呼んで、一覧と抜き出しを見る
- 一覧の上位が、当時の担当が選んだ原稿や、勤めの長い1名が勧める原稿と合うかを突き合わせる
- 抜き出しが、原稿の中の店舗や時期の記述を漏れなく拾っているかを、3名で見る
30件のうち、抜き出しの答えに新しい時給や条件が書かれた件数と、店舗の記述の抜き出しが漏れた件数を最初に数えます。 どちらか1件でもあれば、前置きを直してから先へ進みます。
| 出てきた内容 | 判断 |
|---|---|
| 近い原稿が上に来て、店舗の記述が漏れなく抜き出された | 依頼のフォームと台帳・時給の表の連携に進む |
| 答えに新しい時給や条件が書かれた | 前置きを直す |
| 別の職種の原稿が上に来た | 重みを小さくし、時間帯の区分を見直す |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 古い原稿の時給がそのまま残る | 時給は時給の表から出し、原稿の時給は抜き出して赤くする |
| 別の店舗の設備や交通の記述が残る | 店舗の台帳の値と並べ、違えば赤くする |
| 応募の数を掲載期間で割らずに並べる | 掲載期間あたりの数をメタデータに持たせる |
| 重みが大きすぎて別の職種が上に来る | 0.1 以下から始め、職種と時間帯の絞り込みを先にする |
| 年末の短期の原稿が上に来る | 時期をメタデータに持たせ、一覧に並べる |
| 抜き出しの答えが新しい条件を書く | 前置きで新しい時給や条件を禁じる |
| 一覧と抜き出しの対象の原稿が食い違う | answer メソッドの対象を一覧の上位の posting_key で絞る |
| 最低賃金の発効の日をまたぐ | 開始の時期で効く額を決め、両方を出す |
上の2行が、この構成の失敗のほとんどです。 どちらも、過去の原稿の条件が、いまの募集の条件として外に出る問題です。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 過去の求人の原稿、原稿ごとの応募の数、店舗の台帳、時給の表です。応募者の個人の情報は扱いません。
- 募集の表示を正確かつ最新に保つ … 職業安定法第5条の4は、労働者の募集を行う者が広告などで募集の情報を出すときに、虚偽の表示又は誤解を生じさせる表示をしてはならないとし、正確かつ最新の内容に保たなければならないとしています。第5条の3は、募集にあたって従事すべき業務の内容及び賃金、労働時間その他の労働条件を明示することを求めています。店舗や時期に依存する記述を抜き出して赤くし、担当が直してから出します
- 時給を人事部の表から出す … 最低賃金法第4条は、使用者に最低賃金額以上の賃金を支払うことを求めています。時給は過去の原稿から写さず、時給の表と地域別最低賃金の表から出し、下回るときは作業を止めます
- 応募者の情報を入れない … 使うのは原稿ごとの応募の数だけです。応募者の名前、年齢、学校などは、データストアにも画面にも入れません。 原稿の窓口の担当の名前と電話番号も外します
- 使う人を絞る … 採用の画面と検索は本部の採用の担当と人事部だけで使い、店舗の端末や応募者向けの画面から使えるようにはしません
- データの置き場所を確かめる … 公式ページでは、データストアの場所は
globalのほかus、euのマルチリージョンで、日本のリージョンは載っていません。 社内の決まりに照らして決めます
誤りが起きた場合のリスクは、古い時給で募集を出すことと、別の店舗の記述が残った募集を出すことの2つです。 前者は時給を表から出すことで、後者は店舗の台帳との突き合わせと、担当が通して読むことで防ぎます。
10まず何から始めるか
1週目:職種と時間帯の区分を決める
採用の担当3名で、職種の一覧と、時間帯の区分(早朝・朝・昼・夕方・夜・深夜)を決め、募集の依頼のフォームを直します。
2週目:30件と同じ職種の原稿にメタデータを付ける
第8章の30件と同じ職種の、直近3年の原稿に、職種・時間帯・県・時期・当時の時給を付けます。応募の数の書き出しから、掲載期間あたりの応募の数を出して付けます。
3週目:30件で試す
第8章の手順でデータストアを作り、30件の依頼で一覧と抜き出しを確かめます。抜き出しの答えに新しい時給や条件が書かれていないかと、店舗の記述の漏れが無いかを最優先で見ます。
4週目:人事部と時給の表の更新を決める
時給の表と地域別最低賃金の表を、改正の発効の前に誰がいつ更新するかを人事部と決めます。この構成は、表が正しいことを前提にしています。
2か月目: 5年分のすべての原稿を取り込み、担当が職種と時間帯を選んで使い始めます。3か月目以降: 依頼のフォームからの自動の問い合わせ、時給の表の引き当て、店舗の台帳との突き合わせ、応募の数の毎週の取り込みを足し、1件30分が何分になったかを実測します。勤めの長い1名に聞かなくても、応募を集めた近い原稿を選び、いまの時給と店舗の条件に直して出せるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
answer メソッドが検索結果から回答を作り、引用のメタデータを付けられること(includeCitations の既定は無効)。前置き(preamble)で回答の口調・詳しさを指定できること。maxReturnResults の既定が10・上限が25であること。引用の位置が UTF-8 のバイト単位であること。Vertex AI Search が Agent Search へ改称中であること | Google Cloud: Get answers and follow-ups | 2026-10-29 |
絞り込みに使う項目をインデックス可能にすること。ANY が完全一致であること。日付の項目を比較の演算子と ISO 8601 の文字列で比べられること。AND・OR と括弧で組み合わせられること | Google Cloud: Filter search for structured or unstructured data | 2026-10-29 |
boostSpec の conditionBoostSpecs・boostControlSpec(NUMERICAL・LINEAR・controlPoints)の書き方。重みの値が -1 から 1 で、0.1 以下から始めるのが勧められていること | Google Cloud: Boost search results | 2026-10-29 |
非構造のデータのメタデータが JSON Lines(NDJSON)で、各行に id・structData または jsonData・content の mimeType と uri を持つこと。ファイルの上限が200MB、一度に100,000ファイルまで取り込めること | Google Cloud: Prepare data for ingesting | 2026-10-29 |
データストアの場所が global と、us・eu のマルチリージョンで、日本のリージョンの記載が無いこと | Google Cloud: Agent Search locations | 2026-10-29 |
| 第5条の3(労働条件等の明示)が、募集にあたり従事すべき業務の内容及び賃金、労働時間その他の労働条件の明示を求めること。第5条の4(求人等に関する情報の的確な表示)が、虚偽の表示又は誤解を生じさせる表示の禁止と、正確かつ最新の内容に保つことを求めること(2026-04-01 施行の版) | e-Gov 法令API: 職業安定法 | 2026-10-29 |
| 第4条が最低賃金額以上の賃金の支払を求めること。第14条が、地域別最低賃金の決定・改正の決定は公示の日から起算して30日を経過した日(決定で別に定める日があればその日)から効力を生じるとすること | e-Gov 法令API: 最低賃金法 | 2026-10-29 |
時給と労働条件は、人事部の決まりと最新の地域別最低賃金に基づいて決めてください。 本記事は、上記の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2249)についてのご相談はこちらから。
