原材料とエネルギーの市況を毎週巡回して、調達と価格改定の材料にする
自社が買っている原材料・包材・エネルギーについて、品目群ごとに決めた巡回先を毎週見に行かせます。公的統計の値と対象期間、出典URLを取り出し、自社の購買単価と並べた1枚にまとめるところまでを自動にします。統計を探し直す時間がなくなります。
- 利用ツール
- ChatGPT/Claude/Gemini/Make/n8n/Power Automate/Zapier
- 対象業界
- 商社/小売/建設/製造/飲食
- 対象部門
- 経営企画/購買
- 対象業務
- 情報検索/集計・分析
- 主な課題
- データ分析に時間がかかる/判断に時間がかかる/情報が見つからない
- AIで行う処理
- エージェント
- 主な効果
- 判断支援/工数削減/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 担当者が、その週に見る品目群を決める(前回どこまで見たかをExcelの更新日から思い出す)
- 検索サイトで品目名と「価格」「指数」などの語を組み合わせて調べ、公的統計のページを開く
- 統計のページで該当する月の資料を探し、PDFを開いて数値を読み取る
- あわせて、業界紙や仕入先の公表情報を見て、値上げや供給に関する発表が出ていないかを確認する
- 生産管理システムで、その品目群の直近の購買単価を検索する
- Excelの表に、相場の数値と自社の購買単価を並べて書き込む
- 前月・前年の行と見比べ、気づいたことを備考欄に書く
- 自動毎週決まった曜日と時刻に起動し、品目群ごとの巡回先リストを読み込む
- 自動品目群を1本ずつ処理し、許可したドメインだけを対象に web search ツールで検索させる
- 自動指標の値、対象期間(何年何月の数字か)、公表日、出典URLを取り出す
- 自動前回のまとめと比べ、新しい数字が出ていなければ「変化なし」として1行で返す
- 自動社内のプログラムが生産管理システムから購買単価を取り出し、相場と並べる
- 自動品目群ごとのまとめ案をJSONで作り、配布用の1枚に流し込む
- 人担当者が、更新のあった指標の出典を開いて値と対象期間を確かめる
- 人担当者が、相場と自社単価の開きについての記述を直す
- 人担当者が、次の協議で持ち出す材料にするかを決める
- 人確定した1枚を購買部・経営企画部へ配布し、次回の前回値として保管する
各工程の詳しい説明を読む
- 担当者が、その週に見る品目群を決める(前回どこまで見たかをExcelの更新日から思い出す)
- 検索サイトで品目名と「価格」「指数」などの語を組み合わせて調べ、公的統計のページを開く
- 統計のページで該当する月の資料を探し、PDFを開いて数値を読み取る
- あわせて、業界紙や仕入先の公表情報を見て、値上げや供給に関する発表が出ていないかを確認する
- 生産管理システムで、その品目群の直近の購買単価を検索する
- Excelの表に、相場の数値と自社の購買単価を並べて書き込む
- 前月・前年の行と見比べ、気づいたことを備考欄に書く
(a)調べ直しが毎回ゼロから始まる。 前回どのページのどの表を見たのかが残っていないため、検索からやり直します。統計のページ構成を思い出すところに時間が溶け、1件18分のうちの大半がここです。判断は何もしていません。
(b)数字の出どころが残らない。 Excelに転記した時点で、出典URLも公表日も消えます。3か月後に「この数字はどこの何月のものか」と聞かれても答えられません。 出どころを言えない数字は、仕入先との協議には持ち出せません。結局その場で調べ直すことになります。
(c)見に行く先がばらつく。 購買部の担当者と経営企画部の担当者で参照している統計が違い、同じ品目群について違う数字が出てきます。前回と違う先を見れば、前回との比較にもなりません。巡回先を固定することが、この構成の半分の値打ちです。 残りの半分が、出どころを必ず残すことです。
(d)値上げ依頼が来てから動き出す。 定点観測が途切れると、連絡が来たときに慌てて調べ直します。協議の日程が先に決まっているので、調べる時間は交渉の準備時間から削られます。 手元に数字が無い状態で座ると、相手の示した資料の上で話をすることになります。
- 【自動】 毎週決まった曜日と時刻に起動し、品目群ごとの巡回先リストを読み込む
- 【自動】 品目群を1本ずつ処理し、許可したドメインだけを対象に web search ツールで検索させる
- 【自動】 指標の値、対象期間(何年何月の数字か)、公表日、出典URLを取り出す
- 【自動】 前回のまとめと比べ、新しい数字が出ていなければ「変化なし」として1行で返す
- 【自動】 社内のプログラムが生産管理システムから購買単価を取り出し、相場と並べる
- 【自動】 品目群ごとのまとめ案をJSONで作り、配布用の1枚に流し込む
- 【人】 担当者が、更新のあった指標の出典を開いて値と対象期間を確かめる
- 【人】 担当者が、相場と自社単価の開きについての記述を直す
- 【人】 担当者が、次の協議で持ち出す材料にするかを決める
- 【人】 確定した1枚を購買部・経営企画部へ配布し、次回の前回値として保管する
4番目が、この設計の分かれ目です。 公的統計の多くは月次で公表されます。毎週巡回しても、新しい数字は月に1回しか出ません。「前回から変わっていない」を正しく返せないと、古い数字が毎週新しい顔をして出てきます。 更新の有無を機械が返し、変わっていない品目群は1行で済ませます。担当者が見るのは、変わった品目群だけになります。
7番目から9番目を自動化しないことが、もう一つの分かれ目です。 価格改定をするかどうか、仕入先にどう説明するかは、取引の経緯と在庫と生産計画を見て人が決めることです。この構成が用意するのは材料までで、決めるところには入りません。
02今回想定するシステム構成
【トリガー】毎週 決まった曜日と時刻 ▼ n8n ── 品目群ごとの巡回先リストを読む(12品目群を1本ずつ) ▼ ChatGPT(OpenAI API の web search ツール) │ filters.allowed_domains ── 許可したドメインだけを対象に検索 │ ① 指標の値と対象期間(何年何月の数字か)を取り出す │ ② 公表日と出典URLを annotations から受け取る │ ③ 前回のまとめと比べ、更新の有無(updated)を返す ▼ 社内のプログラム ── 自社の購買単価(生産管理システム)と突き合わせる ▼ 品目群ごとのまとめ案(JSON) ▼ 【購買・経営企画の担当者が確認して直す】 ▼ 品目群ごとの1枚 ──▶ 購買部・経営企画部へ配布/次回の前回値として保管
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理 | ChatGPT(OpenAI API の web search ツール) | Claude API、Gemini API |
| 連携 | n8n | Make、Power Automate、Zapier |
土台は OpenAI API の web search ツールです。 tools 配列に { "type": "web_search" } を含めて指定します。レガシーの web_search_preview もありますが、新規の統合には非推奨とされています。対応しているのは Responses API(推奨)、Chat Completions API(専用モデルのみ)、Assistants です。
この構成の中心は filters パラメータです。 最大100個の allowed_domains または blocked_domains を指定でき、ドメインは openai.com のように書き、HTTPSのプレフィックスは不要です。巡回先を公的統計と公表情報だけに絞れば、掲示板やまとめサイトの数字が混ざる余地が構造的に無くなります。 併せて user_location で国(2文字のISOコード)・市・地域・タイムゾーン(IANA形式)を指定できます。
応答には web_search_call 出力アイテムと message 出力アイテムが含まれ、URLの引用情報は message.content[0].annotations に格納されます。 ここから出典URLを機械的に取り出せることが、「出どころが残らない」という課題への答えになります。ツールの要件として、本文中の引用ははっきり見える形で、クリックできるようにしなければならないとされており、これは「根拠の無い数字を載せない」という本構成の設計と一致します。
検索結果の範囲は search_context_size(low/medium/high)で制御し、コンテキスト量は return_token_budget(default または unlimited)で指定します。ただし検索のコンテキストウィンドウは128kに限られます。 モデルのコンテキストがそれより大きくても同じです。12品目群を1回の呼び出しにまとめず、1本ずつ処理する理由がここにあります。 なお web_search_preview は filters と return_token_budget に対応しません。
n8n は、毎週決まった時刻に動かす部分と、巡回先リストの読み込み、生産管理システムからの購買単価の取り出し、配布と保管をつなぐ役です。生産管理システムとExcelは既存のまま使い、置き換えません。 購買実績は読み取り専用で取り出し、書き戻しは一切しません。
03どうやって実装するのか
処理の起点を決める
毎週決まった曜日と時刻に起動します。 ここを「値上げ依頼のメールを受け取ったら」というイベント起動にすると、本記事の目的が崩れます。依頼が来る前に持っておくための構成なので、出来事に紐づけてはいけません。
曜日は、参照する統計の公表日の翌営業日あたりに寄せます。品目群ごとに公表の周期が違うため、巡回はすべての品目群について毎週まわします。 12品目群を1本ずつ、順番に処理します。同時に走らせないのは、検索のコンテキストウィンドウが128kに限られることと、品目群をまたいで出典が混ざるのを防ぐためです。
月次の統計を毎週見に行くことになりますが、無駄ではありません。業界紙や仕入先の公表情報は随時出ますし、統計の公表日が月によってずれることもあります。 新しい数字が無い週は、次の「入力データ」で渡す前回値をそのまま返させます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 巡回先リスト | 品目群名、参照する指標名、許可するドメイン、公表の周期、公表予定日 | 社内で維持する一覧表 |
| 品目群の定義 | 自社の購買品目と、参照する統計の品目との対応 | 購買部が維持する対応表 |
| 前回のまとめ | 前回の指標値、対象期間、公表日、出典URL | 前回のJSONの保管先 |
| 自社の購買単価 | 品目群ごとの直近の購買単価、対象期間、伝票の識別子 | 生産管理システム(読み取り専用) |
この構成の質を決めるのは、いちばん上の巡回先リストです。 技術的な作り込みよりも、「この品目群は、どの統計の、どの指標を見るのか」を決めて維持する作業のほうが重く、そこが決まっていなければAIを足しても結果は安定しません。
自社の購買単価は、AIへは渡しません。 生産管理システムから取り出したあと、社内のプログラムが相場の側の結果と突き合わせます。理由は第13章に書きます。
データの取得方法を決める
公的統計を軸に、品目群ごとに参照先を先に決めて表にしておきます。 例として、日本銀行の企業物価指数があります。2020年基準で、月次で公表されます(2026年9月11日に2026年8月分のデータが掲載されていることを確認しました)。基本分類指数として、国内企業物価指数・輸出物価指数・輸入物価指数が提供されます。時系列のデータは時系列統計データ検索サイトから入手でき、公表データは月別のPDFで、ウエイト等の参考資料はXLSX形式で提供されます。
| 品目群 | 参照する指標 | 取り方 | 公表の周期 |
|---|---|---|---|
| 穀粉・糖類・食用油脂など | 企業物価指数の基本分類指数のうち、対応するもの | web search ツール(許可ドメインを日本銀行に限定)+時系列統計データ検索サイトからの取り出し | 月次 |
| 包材(段ボール・プラスチック・ガラス) | 同上と、業界団体の公表資料 | web search ツール | 月次または随時 |
| 電力・都市ガス | 事業者が公表する単価や調整額の公表ページ | web search ツール | 月次または随時 |
| 仕入先が公表した価格改定の案内 | 仕入先の公式サイトのニュース | web search ツール | 随時 |
巡回先のリストは、そのまま filters.allowed_domains に渡します。 最大100個まで指定でき、ドメインは openai.com の形式で、HTTPSのプレフィックスは不要です。リストに無いドメインは見に行きません。この一手で、根拠の弱い情報が混ざるのを構造的に防げます。 プロンプトで「信頼できる情報源を使ってください」と書くより確実です。
呼び出しは Responses API で行い、user_location に国として JP を指定します。検索の範囲は search_context_size で調整し、値を読み取るだけの品目群では広げすぎないようにします。 検索のコンテキストウィンドウは128kに限られるため、1回の呼び出しで扱うのは1品目群までにします。
出典URLは、モデルの本文からではなく message.content[0].annotations から取り出します。 本文に書かれたURLは書き換わることがありますが、annotations は検索の結果として返る引用情報です。配布する1枚には、この引用をクリックできる形で載せます。 ツールの要件として、本文中の引用ははっきり見える形で、クリックできるようにしなければならないとされています。
巡回の頻度と公表の頻度がずれることを、設計に織り込みます。 月次の統計を毎週見に行っても、新しい数字は月に1回しか出ません。前回のまとめを渡し、値と対象期間が同じであれば updated を false で返させます。変わっていない品目群は「変化なし」の1行で済み、担当者が読むのは変わった品目群だけになります。
AIへ渡す前に整形する
- 巡回先リストの読み込み … 品目群ごとに、指標名と許可ドメインの一覧を組み立てます
- ドメイン数の確認 …
allowed_domainsは最大100個です。超える場合は品目群の分け方を見直します - 前回のまとめの取り出し … 前回の値、対象期間、公表日、出典URLをプロンプトに渡します
- 公表予定日の突き合わせ … その週に新しい数字が出る予定が無い品目群には、その旨を渡します
- 品目群ごとの分割 … 12品目群を1本ずつの呼び出しに分けます
- 自社の購買単価の取り出し … 生産管理システムから読み取り専用で取り出し、AIへは渡さず社内に保持します
4番目を入れておくと、まだ公表されていない月の数字を探しに行って、別の月の数字を拾ってくる事故が減ります。
AIに処理させる
させるのは、許可した先の中から値と出どころを取り出すことと、前回との差があるかを返すことの2つだけです。 指標ごとに、値・対象期間・公表日・出典URLをそろえ、前回のまとめと比べて更新の有無を返し、公表情報から読み取れる背景を出典URL付きで書きます。
| させないこと | 理由 |
|---|---|
| 自社の購買単価との突き合わせ | 自社単価は外部へ出さない。社内のプログラムが後から書き足す |
| 今後の見通し・上がる下がるの予想 | 公表された数字ではない。出力スキーマに見通しの欄を作らない |
| 価格改定の要否、交渉方針の提案 | 取引の経緯と生産計画を見て人が決めること |
| 数値の丸め・単位の換算・前月比の計算 | 公表されている表記のまま載せる。計算は社内のプログラムで行う |
| 対象期間が特定できない数値の記載 | 何年何月の数字か分からない相場情報は、協議の材料にならない |
| 出典URLの無い背景説明 | 一般論や以前の知識が根拠として紛れ込む |
下から2つ目がいちばん大事です。 「このところ上昇傾向」とだけ書かれた記述は、読めばもっともらしく見えますが、どの月と比べたのかが分からないので使えません。 対象期間を必須の項目にし、埋まらない指標はそもそも返させません。
指示内容を固定する
あなたは食品製造業の購買部門で、原材料とエネルギーの市況を定点観測する担当です。
与えられた web search ツールを使い、許可された参照先の中だけで調べてください。
【調べること】
1. 品目群「{group}」について、指定された指標を1つずつ調べてください。
指標名・値・対象期間(何年何月の数字か)・公表日・出典URLの5つをそろえてください。
2. 前回のまとめ {previous} と比べてください。
値と対象期間が前回と同じであれば updated を false とし、
value と period には前回と同じ内容をそのまま入れてください。
新しい数字が公表されていれば updated を true としてください。
3. 公表情報から読み取れる背景があれば notes に書いてください。
無ければ notes は空のままにしてください。
【厳守事項】
- 対象期間が特定できない数値を返さないでください。
「直近」「足元」「このところ」としか書かれていない数値は使わないでください。
指標ごとに period(対象年月)を必ず入れてください。
特定できない場合はその指標を返さず、needs_human を true にして理由を書いてください。
- 出典URLが確認できない記述を notes に書かないでください。
一般に言われていること、以前から知っていること、推測は書かないでください。
- 値は公表されている表記のまま書いてください。
四捨五入、単位の変換、前月比や前年比の計算をしないでください。
- 今後の見通し、上がる・下がるの予想、値上げ交渉への助言を書かないでください。
- 自社の購買単価、価格改定の要否、仕入先との交渉方針を書かないでください。
own_price と gap は空のままにしてください。社内で埋めます。
- 許可された参照先以外を見ないでください。
許可された参照先で見つからない場合は、見つからなかったと書いてください。
他の情報源で補わないでください。
- 記載が確認できない項目は「不明」としてください。
空欄を推測で埋めないでください。前回の値以外から補わないでください。
【品目群と指標】{indicators}
【前回のまとめ】{previous}
【今週の公表予定】{calendar}
「対象期間が特定できない数値を返さない」を、例を挙げて書いているのは、言い方を変えて出てくるためです。 「直近」を禁じると「最新の」と書き、それも禁じると日付の無いまま数字だけを置きます。禁止するのは言葉ではなく、period が埋まらない状態そのものです。
「他の情報源で補わない」も必ず入れます。 何も言わないと、許可した先で見つからなかったときに、一般に知られている数字を書いてきます。見つからなかったことは、出力を見ただけでは分かりません。
出力形式を固定する
品目群ごとに、次のJSONで返させます。
{
"group": "",
"run_date": "",
"indicators": [
{ "name": "", "value": "", "unit": "", "period": "",
"source_url": "", "published_at": "", "updated": true }
],
"own_price": { "unit_price": null, "period": "", "source": "" },
"gap": { "description": "", "basis": "" },
"notes": [ { "text": "", "source_url": "" } ],
"needs_human": { "flag": false, "reason": "" }
}
1つ目の理由は、source_url と period を必ず持たせるためです。 どの月の数字かが分からない相場情報は、交渉の材料になりません。項目として持たせておけば、埋まっていない指標を後段のプログラムで機械的にはじけます。 本文だけで返させると、この2つは真っ先に落ちます。
2つ目は、updated で週ごとの差分を機械的に扱えることです。 false の指標は「変化なし」として1行にまとめ、true の指標だけを担当者の確認対象にします。毎週12品目群すべてを読み直させない設計が、確認を12分に収める前提になります。
3つ目は、own_price と gap を空のまま返させることです。 この2つはAIが埋めず、社内のプログラムが生産管理システムの購買単価を書き足します。スキーマに欄はあるが、外部には渡さない。 出力の形を先に決めておくことで、突き合わせの処理を社内側に寄せられます。
notes を文字列の配列ではなく text と source_url の組にしているのも同じ理由です。出典URLを持てない背景説明は、書く場所がありません。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 巡回先リスト | n8n から読み取り | 品目群ごとの指標名と許可ドメインを渡す |
| OpenAI API | Responses API + web search ツール | 許可ドメインの中だけを検索し、値と引用情報を返す |
| 生産管理システム | 読み取り専用のAPIまたはビュー | 品目群ごとの直近の購買単価と対象期間を返す |
| 前回のまとめの保管先 | n8n から読み書き | 前回値の取り出しと、確定版の保存 |
| 配布 | メールまたはチャット | 品目群ごとの1枚を購買部・経営企画部へ送る |
生産管理システムへの照会は読み取り専用にしてください。 この構成は購買実績を1行も書き換えません。書き込みの経路を作らなければ、基幹データを壊す事故は起きません。
配布する1枚には、引用をクリックできる形で載せます。PDFやPowerPointに貼り直すときにURLが切れると、この構成の値打ちの半分が消えます。
人が確認する
全件、人が確認します。確認せずに配布する設計にはしません。 目標は1件12分(まとめ案の確認8分、出典の突き合わせ4分)です。
- 更新のあった指標を確かめる …
updatedが true の指標だけ、出典URLを開いて値と対象期間の2つを必ず見ます - 相場と自社単価の開きを読む …
gapは社内のプログラムが機械的に作った記述です。意味があるかを判断するのは人です notesが出典に書いてあるかを見る … 出典URLを開き、書かれていない内容が混じっていないかを確かめます
2番目が、この構成の中心の作業です。 相場が上がっていても自社の単価が据え置きなら、次の協議で説明を求められるのは仕入先の側です。逆に相場が落ち着いているのに自社だけ上がっていれば、こちらから確かめに行く材料になります。この読み取りに担当者の時間を使えるようにするのが、ねらいです。
12分を超えるようなら、updated の判定が効いていません。 毎週すべての指標が true になっているなら、前回値の渡し方を見直します。プロンプトで「短くまとめて」と指示するのではありません。
例外に対処する
| 起きること | 対応 |
|---|---|
| その月の統計がまだ公表されていない | 前回値をそのまま返し updated を false にする。別の月の数字で埋めさせない |
| 許可ドメインの中で指標が見つからない | 「見つからなかった」と返し、needs_human を true にする。他の情報源で補わせない |
| 対象期間が特定できない数値しか無い | その指標を返さず、理由を needs_human に書く |
| 公表ページの構成が変わり値が読み取れない | 指標を空で返し、巡回先リストの見直し対象として担当者に上げる |
| 前回のまとめが無い(初回) | updated の判定をせず、全件を確認対象にする |
| 購買実績が無い品目群 | own_price を空のままにし、相場の側だけで1枚を作る |
| 許可ドメインが100個を超える | 品目群の分け方を見直す。リストを削って通さない |
| API呼び出しが失敗する | その品目群だけ再実行し、それでも失敗したら前回値を「未更新」として配布する |
2行目を軽く見ないでください。 見つからなかったことを素直に返させないと、どこかから持ってきた数字が、いちばんもっともらしい形で1枚に載ります。 空欄のまま配布されるほうが、はるかに安全です。
記録を残す
- その回に使った巡回先リストの版(品目群名、指標名、許可ドメインの一覧)
- 呼び出しごとの生のJSONと、
annotationsから取り出した引用URLの一覧 - 担当者が直した箇所と、直した理由
- 配布した1枚の確定版、配布先、配布日時
- 公表予定日と、実際に新しい数字を拾えた日のずれ
3つ目と5つ目を突き合わせると、巡回先リストのどこが古いかが分かります。 同じ品目群で毎週同じ直しが入るなら、参照する指標の選び方が合っていません。
04実装レベルの3段階
最小構成でも35分が25分程度になりますが、②の突き合わせと③の記入の17分は残ります。 巡回先が人の頭の中にある状態も変わらないため、(c)の「見に行く先がばらつく」は解けません。半自動化で35分が12分程度になり、巡回先がリストとして外に出ます。この段階の効果がいちばん大きく、本記事が想定するのもここです。 本格構成では工数はほとんど変わりませんが、値上げ依頼が来たときにUC-0057の検討表へそのまま渡せるようになります。 段階を飛ばさないでください。 巡回先を決める作業は最小構成でしか進みません。リストが2品目群分しか無い状態で定時実行を作ると、空振りの結果が毎週届くだけになります。
05工数削減シミュレーション
導入後 48件 × 12分 ÷ 60 = 9.6 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 原材料や包材、エネルギーの値動きが原価に直接効く製造業・飲食・小売。仕入先からの値上げ依頼が年に何度も来ており、そのたびに担当者が公的統計を一から調べ直している場合。自社の品目が10〜20程度の品目群に整理できており、品目群ごとに参照する統計を決められる場合。購買実績を読み取り専用で取り出せる場合。
- 仕入がすべて長期の固定価格契約で、相場が動いても当期の原価に影響しない場合。扱う品目が数点しかなく、担当者が日々の相場を把握できている場合。相場が公表されていない特殊な部材が中心で、参照できる公的統計や公表情報が無い場合(この構成は公表されている数字を集めるものであり、公表されていない数字は作れません)。
07最小構成で試す方法
- 品目群を2つだけ選ぶ(1つは公的統計で追えるもの、1つは仕入先の公表情報に頼るもの)
- その2つについて、参照する指標と参照先のURLを紙に書き出す
- 直近3か月分の値と対象期間、公表日、出典URLを手で調べ、表にする
- AIの画面にその表を貼り付け、「この形式で、今月の数字を探して、値・対象期間・公表日・出典URLをそろえてください。見つからなければ見つからないと書いてください」と指示する
- 出てきた内容を、手で調べた表と突き合わせる
- 同じ品目群について、生産管理システムの購買単価を並べてみる
2番目を飛ばさないでください。 ツールを作る前に確かめるのは、「参照先を決めれば、毎回同じ数字が取れるのか」です。
| 出てきた内容 | 判断 |
|---|---|
| 手で調べた表と値・対象期間が一致する | 巡回先リストを12品目群に広げる作業に進む |
| 対象期間が曖昧、出典が別のサイトになる | allowed_domains と period の制約で解ける。構成は有効 |
| そもそも参照先が決められない品目群がある | その品目群は対象から外す。 AIの問題ではない |
最後の行が出ることは珍しくありません。 公表されていない相場は、この構成では追えません。追えない品目群を先に切り分けておくほうが、あとで空欄を埋めさせようとするより安全です。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 巡回先が決まらないまま作り始める | 先に紙で2品目群分の参照先を書き出す。 リストが無ければ構成は成立しない |
| 許可ドメインを増やしすぎる | 最大100個。増やすほど根拠の弱い情報が入る。 公的統計と公表情報に絞る |
| 月次の数字が毎週「新しい数字」として出る | 前回のまとめを必ず渡し、updated を返させる。変化なしを1行で済ませる |
| 対象期間の無い数値が混じる | period を必須にし、埋まらない指標は返させない |
| 出典URLが本文の中だけにある | annotations から取り出す。 本文に書かれたURLを当てにしない |
| 統計の品目と自社の品目が対応していない | 品目群の定義表を先に作る。対応が曖昧な品目群は対象から外す |
| 指数と実際の取引価格を混同する | 何を表す数字かを name と unit に書かせ、1枚の上でも区別して見せる |
| 1回の呼び出しに品目群を詰め込む | 検索のコンテキストウィンドウは128k。1品目群ずつに分ける |
| レガシーのツール指定のままにする | web_search_preview は filters と return_token_budget に非対応。新規は web_search |
| 確認が形だけになる | updated が true の指標だけを確認対象にし、件数を絞る |
上の表のうち、最初の2行と最後の1行は技術の話ではありません。 巡回先が決まっていない、許可ドメインが増えすぎる、確認が形だけになる、の3つは運用の側の問題で、設計では防げません。 誰がリストを維持するのかを決めておかないと、半年後には許可ドメインだけが増えた状態になります。
指数と実際の取引価格の混同にも注意してください。 企業物価指数は2020年を基準とする指数であり、自社が支払う円の単価そのものではありません。1枚の上では、指数の動きと自社単価の動きを別の列に置き、片方をもう片方の根拠として説明しないでください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 品目群の名称、参照する公的統計の値、仕入先の公表情報、そして自社の購買単価。このうち自社の購買単価は、取引先との関係で秘密にすべき情報です。
- 自社の購買単価を外部AIへ渡さない … 外部へ出す範囲を「相場の読み取り」までに限り、自社単価との突き合わせは社内で行います。 出力スキーマの
own_priceとgapは空のまま返させ、社内のプログラムが書き足します。外部に出るのは、公表されている数字を探す依頼だけになります - 品目群の名称からも読み取れるものがある … どの原材料をどの頻度で見ているかは、調達の重点を示します。品目群名を一般的な名称にとどめ、社内の管理コードや仕入先名を渡さないでください
- 数字を社外に持ち出す前に、人が出典を確認する … 仕入先との協議に持ち出す数字は、出典URLを開いて対象期間と値を確かめたものだけにします。 引用がクリックできる形で残っていることが前提です
- 検索結果の要約をそのまま根拠にしない … 出典URLと対象期間が揃っていない数値は使いません。 揃っていない指標は返させない設計にしてありますが、
notesの自由文には紛れ込むことがあります。出典URLを持たないnotesを後段ではじいてください - 価格改定の意思決定をAIにさせない … この構成は材料を揃えるところまでです。値上げを受けるかどうか、いくらで折り合うかは、取引の経緯と生産計画を見て人が決めます
- 入力を学習に使わないサービスを選ぶ … 渡すのは公表情報の検索依頼が中心ですが、品目群の構成そのものが自社の調達の姿を表します
誤りが起きた場合のリスクは、古い数字を新しい数字として配ることと、出どころの無い数字が混じることの2つです。 前者は updated の判定で、後者は allowed_domains と period の制約で対処します。どちらも、配布前に人が出典を開く工程と重ねて初めて防げます。
10まず何から始めるか
1週目:品目群ごとの参照先を紙に書き出す
12品目群のうち2つを選び、どの統計のどの指標を見るのかを、URLまで含めて書き出します。 書き出せない品目群があれば、そこが最初に決めるところです。公表されていない相場は、この構成では追えません。
2週目:2品目群で試す
その2品目群について、直近3か月分の値・対象期間・公表日・出典URLを手で調べ、AIの画面で同じことをさせて突き合わせます。値が合うかより先に、対象期間と出典がそろうかを見ます。
3週目:許可ドメインの一覧を作る
2品目群で決めた参照先を、allowed_domains の形(example.jp のようにHTTPSのプレフィックス無し)に直します。このとき、業界のまとめサイトを入れたくなりますが、入れないでください。 数は最大100個ですが、少ないほど結果は安定します。
4週目:定時実行と前回値の保管だけを作る
毎週決まった時刻に2品目群を巡回し、結果を保管して、次回に前回値として渡すところまでを作ります。updated が正しく false になるかを、公表の無い週で確かめます。
2か月目: 品目群を12まで広げ、生産管理システムからの購買単価の取り出しをつなぎます。どの品目群にどの購買実績を対応させるかは、購買部の判断です。3か月目以降: 配布を始め、1件が何分になるかを実測します。担当者が直した箇所を必ず記録し、 同じ直しが毎週入る品目群の参照先を見直せるようになった時点で、この構成は回り始めます。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
web search ツールを tools 配列に { "type": "web_search" } として指定すること。レガシーの web_search_preview が新規の統合には非推奨であること。応答に web_search_call と message の出力アイテムが含まれ、URLの引用情報が message.content[0].annotations に格納されること。本文中の引用は、はっきり見える形で、クリックできるようにしなければならないこと。search_context_size で検索結果の範囲を low/medium/high で制御でき、return_token_budget で default または unlimited を指定すること。filters で最大100個の allowed_domains または blocked_domains を指定でき、ドメインの形式にHTTPSのプレフィックスが不要であること。user_location で国(2文字のISOコード)・市・地域・タイムゾーン(IANA形式)を指定できること。対応APIが Responses API(推奨)、Chat Completions API(専用モデルのみ)、Assistants であること。検索のコンテキストウィンドウが128kに限られること。web_search_preview が filters と return_token_budget に非対応であること | OpenAI: Web search | 2026-09-23 |
| 企業物価指数が2020年基準であること。月次で公表されること(2026年9月11日に2026年8月分のデータが掲載されていることを確認)。基本分類指数として国内企業物価指数・輸出物価指数・輸入物価指数が提供されること。時系列のデータが時系列統計データ検索サイトで入手できること。公表データが月別のPDFで提供され、ウエイト等の参考資料がXLSX形式で入手できること | 日本銀行: 企業物価指数(2020年基準) | 2026-09-23 |
参照する統計の公表形式や提供方法は変わることがあるため、巡回先リストを作る時点で、各参照先の最新の掲載状況を確認してください。 また、生産管理システムから購買実績を読み取り専用で取り出せるかは製品によって異なるため、導入前にベンダーへ確認が必要です。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0179)についてのご相談はこちらから。
