広告会社に届く媒体資料のPDFを掲載枠ごとに索引し、予算・時期・入稿締切の条件で横断して検索し、提案に使える媒体と枠の候補を一覧にする
媒体社から届く媒体資料のPDFを、掲載枠ごとの料金・仕様・入稿締切に分けて索引にします。プランナーが予算・時期・ターゲットを入れると、条件に合う媒体と枠の候補を根拠のページ付きで一覧にします。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- EC/不動産/小売/広告
- 対象部門
- マーケティング/営業
- 対象業務
- 情報検索/比較検討
- 主な課題
- 判断に時間がかかる/属人化している/情報が見つからない
- AIで行う処理
- 検索(RAG)
- 主な効果
- 対応スピード向上/属人化解消/検索時間短縮
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 営業から、予算・掲載時期・ターゲット・目的を書いた依頼がチャットで届く
- プランナーが、思い当たる媒体の資料を共有フォルダから開く
- 料金表のページを探し、予算に収まる枠を書き出す
- 掲載仕様のページで、サイズ・原稿の形式・掲載期間を確かめる
- 入稿締切の表を見て、依頼の時期に間に合うかを確かめる
- 思い当たらない分野は、媒体に詳しい担当者にチャットで「この条件で何かある?」と聞く
- 候補を提案書のひな形の表に転記し、営業に返す
- 人営業が届いた媒体資料のPDFを、取り込み用のフォルダに入れる
- 自動保存をきっかけに、PDFから媒体名・版・掲載枠ごとの料金・仕様・締切を取り出す
- 人媒体担当が、取り出した表を元のページと見比べて承認する
- 自動承認された版を索引に入れ、同じ媒体の古い版を「旧版」に切り替える
- 人プランナーが、依頼の条件(予算・時期・ターゲット・目的・入稿可能日)を検索画面に入れる
- 自動数値と日付の条件で枠を絞り込み、ターゲットの言葉で近い媒体を探す
- 自動当たった枠を、料金・仕様・締切・根拠のページで一覧にし、注意点を添える
- 人プランナーが候補を読み、根拠のページを開いて確かめ、提案に使う枠を選ぶ
各工程の詳しい説明を読む
- 営業から、予算・掲載時期・ターゲット・目的を書いた依頼がチャットで届く
- プランナーが、思い当たる媒体の資料を共有フォルダから開く
- 料金表のページを探し、予算に収まる枠を書き出す
- 掲載仕様のページで、サイズ・原稿の形式・掲載期間を確かめる
- 入稿締切の表を見て、依頼の時期に間に合うかを確かめる
- 思い当たらない分野は、媒体に詳しい担当者にチャットで「この条件で何かある?」と聞く
- 候補を提案書のひな形の表に転記し、営業に返す
(a)資料を開くまで条件に合うか分からない。 ファイル名は「媒体資料_2026上期.pdf」のようなものが多く、中を見ないと料金も締切も分かりません。 条件に合わない資料を開いて閉じる時間が、媒体探しの大半を占めます。
(b)最新の版か分からない。 同じ媒体の資料が2つ3つ並んでいることがあり、古い版の料金で初案を作ってしまうことがあります。営業が媒体社に確認したところで料金が違うと分かり、初案を作り直します。
(c)読み替えが毎回要る。 グロスとネット、営業日と暦日、発行部数と想定imp。同じ表に並べるための換算を、プランナーが頭の中でやっています。 換算の仕方が人によって違うので、同じ依頼でも出てくる候補が変わります。
(d)候補を知っているのが一部の担当者だけ。 6番目の「聞く」は早くて確実ですが、聞かれる人は毎日何件も聞かれ、その人が休むと初案が止まります。
- 【人】 営業が届いた媒体資料のPDFを、取り込み用のフォルダに入れる
- 【自動】 保存をきっかけに、PDFから媒体名・版・掲載枠ごとの料金・仕様・締切を取り出す
- 【人】 媒体担当が、取り出した表を元のページと見比べて承認する
- 【自動】 承認された版を索引に入れ、同じ媒体の古い版を「旧版」に切り替える
- 【人】 プランナーが、依頼の条件(予算・時期・ターゲット・目的・入稿可能日)を検索画面に入れる
- 【自動】 数値と日付の条件で枠を絞り込み、ターゲットの言葉で近い媒体を探す
- 【自動】 当たった枠を、料金・仕様・締切・根拠のページで一覧にし、注意点を添える
- 【人】 プランナーが候補を読み、根拠のページを開いて確かめ、提案に使う枠を選ぶ
3番目が、この設計の分かれ目です。 料金と締切は、読み違えると初案がそのまま誤りになります。取り出しはAIに任せますが、索引に入れる前に人が1度だけ見ます。 見るのは1冊につき1回で、検索のたびではありません。
4番目で古い版を消さずに「旧版」にしておくのも、意図してのことです。 進行中の案件は、発注した時点の版の料金で動いています。検索の対象からは外しますが、後から当時の料金を確かめられるように残します。
02今回想定するシステム構成
媒体資料のPDF(媒体社からメールで届く) ▼【トリガー】取り込み用フォルダ(Amazon S3)への保存 AWS Lambda ── Claude API に PDF を渡す ▼ Claude API ── 掲載枠ごとの料金・仕様・締切を JSON で取り出す ▼ 【人】媒体担当が元のページと見比べて承認 ▼ Amazon OpenSearch Service(掲載枠の索引) ├─ 数値・日付:range(料金・掲載期間・資料の有効期間) ├─ 掲載枠:nested(枠ごとの条件をまとめて判定) └─ ターゲットの言葉:match(Sudachi で分けた説明文) ▼ AWS Lambda ── 当たった枠を一覧にする(inner_hits) ▼ Claude API ── 一覧に注意点を添える(締切の読み替え、グロス・ネット) ▼ 検索画面(候補の一覧・根拠のページ・資料へのリンク)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(Sudachi、range、nested) | Azure AI Search、Vertex AI Search(Agent Search) |
| 生成AI | Claude API(PDFの読み取りと構造化出力、一覧への注意書き) | Gemini API、OpenAI API |
| 連携 | AWS Lambda(取り込み、検索、一覧づくり) | AWS Step Functions |
| 保管 | Amazon S3(媒体資料のPDFの原本、取り出したJSON、検索の記録) | ― |
検索画面は社内向けの簡単なものです。 条件の入力欄と、結果の一覧と、資料へのリンクがあれば足ります。提案書のひな形には書き込みません。 一覧から使う枠をプランナーが選んで写します。
枠ごとの条件は、nested の項目で持ちます。 OpenSearch の公式ドキュメントでは、nested 型の項目の中のオブジェクトは別々の文書として索引に入っているかのように検索され、条件に合えば親の文書が返るとされています。1冊の媒体資料を親の文書にし、掲載枠を nested の項目に並べれば、「同じ枠の中で、料金が80万円以下かつ掲載期間が来月後半」という条件を、枠ごとに判定できます。
どの枠が当たったかは、inner_hits で返させます。 nested の検索に inner_hits を付けると、一致した中のオブジェクトが別に返り、元の配列の何番目かを示す _nested の情報も付きます。これで「この資料のこの枠」まで特定できます。
日本語の説明文は、Sudachi で語に分けます。 Amazon OpenSearch Service の対応プラグインの一覧では、Sudachi Analysis が日本語向けに推奨とされています。
03どうやって実装するのか
処理の起点を決める
取り込みと検索は、別々のきっかけで動かします。
取り込みは、取り込み用フォルダにPDFが保存されたことを起点にします。媒体資料は月に30冊前後届くので、届いた日に1冊ずつ処理します。月末にまとめると、その月のあいだは古い版の料金で検索されます。
承認は、取り出した表を媒体担当が承認したことを起点に索引へ入れます。承認されていない版は検索の対象に入れません。取り出しから承認までのあいだは、前の版が使われ続けます。
検索は、プランナーが検索画面で条件を送ったことを起点にします。営業からの依頼のチャットを直接読んで動かすことはしません。依頼の文面には条件が書かれていないことが多く、プランナーが聞き直して埋めてから検索するほうが、結果が使えます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 媒体資料のPDF | 媒体の概要、読者・利用者の属性、料金表、掲載仕様、入稿締切、掲載基準 | 媒体社からのメール |
| 取り出した枠の表 | 枠の名前、料金、料金の種別(グロス・ネット)、サイズ・形式、掲載期間、締切の書き方、根拠のページ | Claude API の出力を承認したもの |
| 資料の情報 | 媒体名、版(改訂日)、資料の有効期間、届いた日、取り込んだ担当者 | 取り込みのときに付ける |
| 検索の条件 | 予算の上限、掲載したい期間、入稿できる日、ターゲットの言葉、媒体の種類 | プランナーの入力 |
| 祝日の一覧 | 営業日で書かれた締切を日付に直すための一覧 | 自社で用意する一覧 |
質を決めるのは、資料の有効期間です。 媒体資料には「2026年4月〜9月掲載分」のように、料金表が使える期間が書かれていることが多くあります。これを持たないと、来月の掲載の依頼に、期限の切れた料金表の枠が出ます。 書かれていない資料は、届いた日から半年を仮に入れ、一覧に「有効期間の記載なし」と出します。
料金の種別も、必ず持たせます。 グロスとネットを混ぜたまま範囲で絞ると、同じ80万円でも実際の支払いが違う枠が並びます。 資料に書かれていなければ「不明」とし、範囲の絞り込みではグロスとして扱います。
データの取得方法を決める
PDFの読み取りは、Claude API にPDFをそのまま渡して行います。 公式のドキュメントでは、PDFの中の文字、図、表について質問でき、要件はリクエスト全体で最大32MB、1回あたり最大600ページ(コンテキストが100万トークン未満のときは100ページ)です。媒体資料は20〜40ページのものが多く、1冊を1回で渡せます。
取り出した結果は、構造化出力で受け取ります。 output_config.format に type: "json_schema" を指定すると、スキーマに合ったJSONが返ります。 枠の配列、料金の数値、種別の列挙をスキーマで決めておけば、索引に入れる前の検査を型で行えます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 料金表 | PDFの料金のページ(表) | 枠ごとの料金と種別 |
| 掲載仕様 | PDFの仕様のページ | サイズ、原稿の形式、掲載期間の単位 |
| 入稿締切 | PDFの締切の表、または本文 | 枠ごとの締切の書き方 |
| 読者・利用者の属性 | PDFの冒頭の概要 | ターゲットの言葉で探す説明文 |
| 根拠のページ | 取り出しのときに記録させる | 一覧から元のページを開く |
締切は、資料の書き方のまま取り出し、日付への換算はプログラムで行います。 「掲載の10営業日前」「発売日の21日前」「毎月20日締め」は、書き方そのものを deadline_rule に写させ、換算は祝日の一覧を使って別の処理で行います。 生成AIに日付を計算させると、営業日の数え方がぶれます。
日付の範囲は range で絞ります。 公式のドキュメントでは、range は gte(以上)・gt(より大きい)・lte(以下)・lt(未満)を受け付け、日付の項目にも使えます。 日付は既定でUTCとして扱われ、time_zone を指定すると与えた日付がUTCに換算されます。日本時間で入れるなら time_zone に +09:00 を必ず付けます。 付け忘れると、月の境目で1日ずれます。
AIへ渡す前に整形する
- パスワードの確認 … Claude API が受け付けるのは標準のPDFで、パスワードや暗号化の掛かったものは扱えません。 掛かっているものは媒体社に解除した版を頼みます
- ページ数とサイズの確認 … リクエスト全体で32MB、1回600ページ(100万トークン未満のときは100ページ)を超えるものは章で分けます
- 版の判定 … ファイル名と表紙の改訂日から、同じ媒体の既存の版と比べて新旧を決めます
- 重複の検知 … 同じ媒体・同じ改訂日のPDFが二度届いたら、2つ目は取り込みません
- 金額の正規化 … 「80万円」「800,000円」「¥800,000(税別)」を、税別の円の整数にそろえます。税込みとしか書かれていない資料は、その旨を印にします
- 締切の換算 …
deadline_ruleと祝日の一覧から、掲載開始日ごとの締切の日付を出します - 説明文の整え … 読者の属性、媒体の特徴、枠の説明を1つの説明文にまとめ、Sudachi で語に分ける項目に入れます
5番目を軽く見ないでください。 税別と税込みが混ざったまま範囲で絞ると、予算80万円の依頼に、税込み88万円の枠が「80万円」として出ます。 正規化の結果は承認のときに媒体担当が確かめます。
6番目をプログラムでやるのは、締切が案件の成否を決めるからです。 1日の読み違いで入稿が間に合わず、枠を押さえたのに原稿が入らないことになります。
AIに処理させる
生成AIの出番は、取り込みのときと、一覧に注意書きを添えるときの2か所だけです。検索そのものは OpenSearch が行います。
| 段階 | させること | させないこと |
|---|---|---|
| 取り込み | 枠ごとの料金・種別・サイズ・形式・掲載期間・締切の書き方・根拠のページを取り出す | 書かれていない料金を補う、金額を換算する |
| 一覧 | 当たった枠ごとに、締切の書き方・料金の種別・掲載基準の注意を短く添える | 枠の順位付け、どの媒体を提案すべきかの判断 |
検索は、三つの条件を1つの問い合わせにまとめます。
| 条件 | 探し方 | 入れる値 |
|---|---|---|
| 予算 | nested の中で料金を range(lte) | 予算の上限(税別の円) |
| 時期 | nested の中で掲載期間を range、親の資料の有効期間も range | 掲載したい期間 |
| 入稿 | nested の中で換算した締切を range(gte) | プランナーが入稿できる日 |
| ターゲット | 親の説明文を match | 「30代女性」「子育て世代」などの言葉 |
| 媒体の種類 | 親の種類を term で絞り込み | 雑誌、Web、交通など |
予算・時期・入稿は、同じ nested の中に入れます。 別々の nested に分けると、料金は枠Aで合い、締切は枠Bで合う資料が当たります。1つの nested に3つの条件を並べれば、3つとも同じ枠で満たすものだけが返ります。
ターゲットの言葉は、絞り込みではなく順位に使います。 「30代女性」と書かれていない媒体でも、「働く女性」「子育て中の母親」と書かれていれば候補になりえます。言葉が合わないものを外すと、プランナーが知らない媒体が出てきません。
指示内容を固定する
取り込みのときの指示です。
あなたは広告会社のメディア部門で、媒体資料から掲載枠の情報を
取り出す立場です。渡したPDFに書かれていることだけを使ってください。
【取り出すもの】
1. 媒体名、資料の改訂日、料金表の有効期間
2. 掲載枠ごとに:枠の名前、料金、料金の種別、税の扱い、
サイズ・形式、掲載期間の単位、入稿締切の書き方、根拠のページ番号
3. 読者・利用者の属性の説明(資料の書き方のまま)
【厳守事項】
- 書かれていない値は null にしてください。推測で埋めないでください。
- 料金は資料に書かれた数字をそのまま price_text に写し、
円の整数にできるものだけ price_yen に入れてください。
税込み・税別の換算、グロス・ネットの換算はしないでください。
- 料金の種別が書かれていなければ price_basis を unknown にしてください。
- 入稿締切は、書き方のまま deadline_rule に写してください。
日付に換算しないでください。
- 1つの枠に複数の料金(期間別・回数別)がある場合は、
料金ごとに別の行にしてください。まとめないでください。
- 「要問い合わせ」「別途見積」と書かれた枠は、price_yen を null、
note にその旨を書いてください。
- 根拠のページ番号は、その値が書かれたページを入れてください。
- 掲載基準(掲載できない業種など)が書かれていれば、
restrictions に書き方のまま写してください。
一覧に注意書きを添えるときの指示です。
あなたは広告会社のプランナーに、媒体の候補一覧を渡す立場です。
渡した枠の情報だけを根拠にしてください。
【やること】
枠ごとに、プランナーが提案の前に確かめるべき点を1〜2文で書いてください。
確かめる点の例:締切が営業日か暦日か、料金がグロスかネットか、
税の扱い、掲載基準に依頼の業種が当たらないか、有効期間の記載がないこと。
【厳守事項】
- 渡した情報に無いことを書かないでください。
- 枠に順位を付けないでください。どれを提案すべきかも書かないでください。
- 料金や締切の数字を書き換えないでください。
- 掲載基準に当たりそうな場合は「掲載基準の確認が必要」とだけ書き、
掲載できるかどうかを判断しないでください。
「料金ごとに別の行にする」を明記しないと、期間別の料金が1行にまとまります。 「1週間30万円/4週間100万円」を1行にされると、範囲で絞ったときにどちらの値で判定したのかが分からなくなります。
「換算しない」を料金と締切の両方に書いているのは、どちらも換算すると誤りが見えなくなるからです。 資料の書き方のまま残しておけば、承認のときに元のページと見比べるだけで済みます。
出力形式を固定する
取り込みのときは、次の形のJSONで受け取ります。
{
"media_name": "",
"revised_on": "2026-09-01",
"valid_from": "2026-10-01",
"valid_to": "2027-03-31",
"audience_text": "",
"slots": [
{
"slot_name": "",
"price_text": "",
"price_yen": null,
"price_basis": "gross | net | unknown",
"tax": "excluded | included | unknown",
"size_format": "",
"period_unit": "",
"deadline_rule": "",
"restrictions": "",
"page": 0,
"note": ""
}
]
}
1つ目の理由は、索引の形と同じにできることです。 slots がそのまま nested の項目になり、price_yen と換算後の締切が range の対象になります。取り出した結果と索引の形がずれないので、変換の処理で誤りが入りません。
2つ目は、price_text と price_yen を分けていることです。 承認する人は price_text を元のページと見比べ、検索は price_yen を使います。「要問い合わせ」の枠は price_yen が null になり、予算の絞り込みには出ませんが、一覧の下に「料金要問い合わせ」としてまとめて出します。
検索の結果は、次の表で返します。
| 媒体 | 枠 | 料金(税別) | 種別 | 掲載期間 | 入稿締切 | 注意 | 根拠 |
|---|---|---|---|---|---|---|---|
| (媒体名) | (枠名) | 750,000円 | グロス | 2週間 | 10月24日 | 締切は営業日で数えた値 | p.12 |
根拠の列から、資料の該当ページを直接開けるようにします。 プランナーは表を信じるのではなく、提案に使う枠だけ元のページで確かめます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 取り込み用フォルダ | Amazon S3 のイベント | PDFの保存を検知して Lambda を動かす |
| Claude API | API呼び出し | PDFから枠の表を取り出す、一覧に注意を添える |
| 承認の画面 | 社内の画面 | 取り出した表と元のページを並べて承認する |
| Amazon OpenSearch Service | 索引への登録と検索 | 承認された版を入れ、条件で検索する |
| 検索画面 | 社内の画面 | 条件の入力と一覧の表示 |
媒体社へは何も送りません。 枠の空き状況や最新の料金は、この構成では分かりません。候補が決まったら、営業が媒体社に空きと料金を確かめます。 一覧の上に「空き状況は未確認」と常に出します。
提案書のひな形にも書き込みません。 一覧から使う枠を選ぶのはプランナーで、選んだ理由を提案書に書くのも人の仕事です。
人が確認する
- 取り込みの承認(媒体担当) … 取り出した表と元のページを並べ、料金・税・種別・締切の書き方を見比べます。1冊あたり5分ほどで、検索のたびには見ません
- 候補の確認(プランナー) … 一覧の根拠の列から、提案に使う枠のページだけを開いて確かめます
- 空きと最新の料金の確認(営業) … 媒体社に問い合わせます
- 誤りを見つけたら記録する … 料金や締切の取り出しの誤りは、承認の画面から版ごとに直します
1番目を省かないでください。 取り込みの誤りは、直すまで全員の検索に出続けます。 1冊を5分で見ておけば、その後の何十回の検索が正しくなります。
承認の画面では、見る順番を決めておきます。 料金の桁、税の扱い、料金の種別、締切の書き方の4つを先に見て、サイズや形式は後に回します。前の4つは検索の絞り込みに使う値で、誤ると候補が消えるか、誤った候補が出ます。 後の2つは誤っても一覧で気づけます。
プランナーの確認の目安は、1件あたり8分です。 一覧に出た候補のうち、提案に使う3〜4枠の根拠のページを開いて、料金と締切を目で確かめます。一覧の全部を開く必要はありません。 開いた枠と開かなかった枠は記録に残し、誤りが見つかったときにどの範囲を見直すかの手がかりにします。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワード付きのPDF | Claude API では扱えない。媒体社に解除した版を頼む |
| サイズ・ページ数が上限を超える | 32MB、600ページ(100万トークン未満は100ページ)を超えるものは章で分けて取り込む |
| 料金が「要問い合わせ」 | price_yen を null にし、一覧の下にまとめて出す |
| 有効期間が書かれていない | 届いた日から半年を仮に入れ、一覧に「有効期間の記載なし」 |
| 締切の書き方が読めない | deadline_rule をそのまま出し、換算した日付を空にする。入稿の条件では外さず、注意に出す |
| 同じ媒体の新しい版が届いた | 承認後に古い版を「旧版」にする。消さない |
| 条件に合う枠が1件も無い | 条件を1つずつ緩めた結果(予算を1割上げた場合など)を別に示す |
| 画像だけのPDF(文字が埋め込まれていない) | 取り出せた枠が少なければ、承認の画面で手入力に切り替える |
4行目と5行目は、外さずに出すことが大事です。 分からない枠を絞り込みで消すと、プランナーはその媒体があることすら知らないまま初案を作ります。
記録を残す
- 媒体資料のPDFの原本と、届いた日・取り込んだ担当者
- 取り出したJSONの全文と、承認した人・日時・直した箇所
- 版の履歴(どの版がいつからいつまで検索の対象だったか)
- 検索の条件、返した枠の一覧、プランナーが開いた根拠のページ
- 提案に使われた枠(プランナーが一覧から選んだもの)
版の履歴を残すのは、後から料金を確かめるためです。 発注のときに「初案の料金と違う」と言われたら、その日にどの版の料金が出ていたかを引けます。
最後の行は、索引の改善に使います。 何度検索されても選ばれない媒体は、説明文が依頼の言葉と合っていないかもしれません。
04実装レベルの3段階
最小構成では、資料の数がさばけません。 20冊を手で渡すのが限度で、600冊には使えません。確かめるための段階です。 半自動化で、1件40分が20分程度になります。 枠の表がそろうので資料を開いて探す時間は減りますが、ターゲットの言葉で探すことと、締切の換算が手作業で残ります。本格構成で12分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化で承認を1か月回すと、有効期間や種別が書かれていない媒体社が分かります。 そこを媒体社に確かめてから本格構成に進むほうが、検索の結果が信頼されます。
05工数削減シミュレーション
導入後 180件 × 12分 ÷ 60 = 36 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 雑誌・Webメディア・交通広告・フリーペーパー・業界紙など、扱う媒体が数百にのぼる広告会社やメディアレップ。媒体社から届く媒体資料のPDFが共有フォルダやメールにたまり、「この予算でこの時期に出せる枠はどこか」を探すのに、資料を1冊ずつ開いて料金表と締切を見比べている場合。媒体に詳しい担当者の頭の中に候補が入っていて、その人に聞かないと提案の初案が作れない場合。AWS を使っており、検索基盤を自社で持てる場合。
- 扱う媒体が数十に限られ、担当者が料金と締切を覚えている場合。媒体の買い付けを運用型広告の管理画面だけで行い、媒体資料のPDFをほとんど使わない場合。媒体資料が届いても版の管理をしておらず、どれが最新かを誰も言えない場合(先に版の置き場を決めるのが先です)。なお、どの媒体を提案するか、料金の交渉をどうするかは担当者が決めることで、この構成はそれを代わりに行いません。
07最小構成で試す方法
- 先月の依頼から10件を選び、そのとき提案に使った媒体と枠を書き出す
- よく使う媒体資料を20冊選ぶ
- 手元のAIサービスの画面に媒体資料のPDFを1冊ずつ渡し、「掲載枠ごとに料金・料金の種別・税の扱い・サイズ・掲載期間・入稿締切の書き方・ページ番号を表にしてください。書かれていない値は空欄にし、換算しないでください」と指示する
- 20冊分の表を1つの表計算のシートにまとめ、10件の依頼の条件で手で絞り込む
- 当時の提案と比べる
AIの画面で試すのは、取り込みの精度だけです。 検索の仕組みはまだ作りません。枠の表がそろえば手で絞り込めるのかを、先に確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 料金と締切が元のページと合い、当時の候補が絞り込みで出た | 索引と検索の仕組みに進む |
| 期間別の料金が1行にまとまった | 指示の書き方で直る。構成は有効 |
| 有効期間や種別が書かれていない資料が多い | 媒体社への確認の運用が先。 AIの問題ではない |
3行目が出ることは珍しくありません。 資料に書かれていないことは、AIでも人でも読めません。どの媒体社に何を確かめればよいかが分かったこと自体が、成果です。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 資料を1件として索引に入れ、どの枠が当たったか分からない | 枠を nested にし、inner_hits で返させる |
| 料金は枠A、締切は枠Bで当たる | 予算・時期・入稿の条件を同じ nested の中に並べる |
| 日本時間の日付が1日ずれる | range は既定でUTC。time_zone に +09:00 を付ける |
| 税込みと税別が混ざる | 正規化で税別にそろえ、税込みとしか書かれていないものに印を付ける |
| グロスとネットが混ざる | price_basis を持たせ、不明はグロスとして扱い一覧に出す |
| 期間別の料金が1行にまとまる | 料金ごとに別の行にするよう指示する |
| 生成AIが締切を日付に換算する | 書き方のまま写させ、換算はプログラムで行う |
| 古い版の枠が出る | 承認後に旧版へ切り替え、資料の有効期間でも絞る |
| 「要問い合わせ」の枠が消える | 予算の絞り込みから外れるので、一覧の下にまとめて出す |
| パスワード付きのPDFが止まる | 媒体社に解除した版を頼む |
| ターゲットの言葉で絞り込み、知らない媒体が出ない | 言葉は順位に使い、絞り込みには使わない |
| 空き状況まで分かると誤解される | 一覧に「空き状況は未確認」と常に出す |
上の2行が、この構成の失敗のほとんどです。 どちらも「資料の中に枠がたくさんある」という同じ形から来ています。枠を単位にして、条件を同じ枠で判定できるかどうかで、一覧が使えるかが決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 媒体社から受け取った媒体資料(料金表・掲載仕様・入稿締切)と、プランナーが入れる案件の条件(予算・時期・ターゲット)です。個人の情報はほとんど含みませんが、案件の条件は広告主の未公開の計画です。
- 媒体資料の扱いの条件を確かめる … 媒体資料には、社外への転送や二次利用についての条件が書かれていることがあります。社内の索引に入れることが条件に反しないかを、媒体社ごとに確かめてください
- 案件の条件を検索の記録に残すときは、広告主の名前を入れない … 予算と時期とターゲットだけで検索できます。広告主の名前は検索画面に入れない運用にします
- 生成AIに渡すのは媒体資料と枠の情報だけにする … 一覧に注意を添えるときも、広告主の情報は渡しません
- 料金は確定値ではない … 一覧の料金は資料に書かれた定価です。値引きや特別な条件は営業が媒体社と決めます
- 掲載できるかの判断をさせない … 掲載基準に当たりそうな場合は「確認が必要」までにします。掲載の可否を決めるのは媒体社です
- 索引への書き込みは承認を通ったものだけにする … 取り出しの誤りが、そのまま全員の検索に出ないようにします
誤りが起きた場合のリスクは、誤った料金や締切で初案を作ることと、条件に合う媒体を見落とすことの2つです。 前者は承認を省くと起き、後者は分からない枠を絞り込みで消すと起きます。どちらも、分からないことを分からないまま出す設計で防ぎます。
10まず何から始めるか
1週目:媒体資料の置き場を1つに決める
共有フォルダに散らばっている媒体資料を、媒体ごとのフォルダに集めます。同じ媒体の版が複数あれば、最新の版を決めて古いものを旧版のフォルダへ移します。 この作業だけでも、古い料金で初案を作る手戻りが減ります。
2週目:20冊で試す
よく使う媒体資料を20冊選び、手元のAIサービスで枠の表を作ります。元のページと見比べ、期間別の料金がまとまっていないか、締切が換算されていないかを最優先で見ます。
3週目:締切の書き方を集める
20冊の deadline_rule を並べ、書き方の種類を数えます。営業日、暦日、発売日起点、月の締め日。 種類ごとの換算の規則と、祝日の一覧を用意します。
4週目:取り込みと承認をつなぐ
取り込み用フォルダから Claude API で枠の表を取り出し、承認の画面に並べるところまで作ります。この時点ではまだ検索をせず、承認の手間と取り出しの精度を見ます。
2か月目: 承認された版を索引に入れ、予算・時期・入稿の条件で検索できるようにします。3か月目以降: ターゲットの言葉の検索と注意書きを足し、1件40分が何分になったかを実測します。プランナーが詳しい担当者に聞かずに初案を作れるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Amazon OpenSearch Service の対応プラグインの一覧で、Sudachi Analysis が日本語向けに推奨されていること | Amazon OpenSearch Service: Plugins by engine version | 2026-10-08 |
nested のクエリが nested 型の項目を検索するための包みで、中のオブジェクトが別々の文書として索引に入っているかのように検索され、一致すれば親の文書が返ること。inner_hits で一致した中のオブジェクトと _nested の位置が返ること | OpenSearch Documentation: Nested query | 2026-10-08 |
range が gte・gt・lte・lt を受け付け、日付の項目に使えること。日付が既定でUTCとして扱われ、time_zone を指定するとUTCに換算されること | OpenSearch Documentation: Range query | 2026-10-08 |
| PDFの文字・図・表を扱えること。リクエスト全体で最大32MB、1回あたり最大600ページ(コンテキストが100万トークン未満のときは100ページ)であること。パスワードや暗号化の掛かったPDFは扱えないこと。各ページが画像としても処理されること | Claude Docs: PDF support | 2026-10-08 |
output_config.format に type: "json_schema" を指定するとスキーマに合ったJSONが返ること。オブジェクトの additionalProperties を false にする必要があること | Claude Docs: Structured outputs | 2026-10-08 |
どの媒体を提案するか、料金や空きの確認は、自社の営業と媒体社とのやり取りで決めてください。 本記事は公開仕様で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1073)についてのご相談はこちらから。
