セントラルキッチンのレシピ・製造指図・変更記録から、店舗や工場の質問に該当する手順と分量を、改訂の版と根拠付きで返す
セントラルキッチンに店舗やラインから届くレシピ・製造条件の質問に、いま有効な版の該当箇所を探して答えます。分量と加熱の条件は原文のまま写し、版番号・施行日・前の版からの変更点を根拠として添えます。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- 宿泊/小売/製造/飲食
- 対象部門
- 品質管理/生産
- 対象業務
- 問い合わせ対応/情報検索
- 主な課題
- 問い合わせが多い/属人化している/情報が見つからない
- AIで行う処理
- 検索(RAG)
- 主な効果
- 品質標準化/対応スピード向上/検索時間短縮
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 社内のチャットで質問を受け、品目と知りたいことを読み取る
- 共有フォルダで品目のフォルダを開き、版ごとのファイルからいまの版を探す
- 変更記録の一覧表で、いまの版の施行日と前の版からの変更点を確かめる
- 該当の手順を読み、分量や条件をチャットに書き写して返す
- アレルゲンや加熱の条件に関わる質問は、品質管理の担当に確かめてから返す
- 人店舗やラインの担当が、社内のチャットのボットに質問を書く
- 自動Claude API が、品目の候補・知りたいこと(分量/条件/保存/変更点)・対象(ライン/店舗)・倍率の指定を取り出す
- 自動Amazon OpenSearch Service が、いま有効な版と対象で絞ったうえで、手順の単位の文書を検索する
- 自動該当の品目の変更記録と、ヒットした手順の該当の語句を取り出す
- 自動倍率の指定があれば、プログラムが分量を計算する
- 自動Claude API が、手順の原文を引用した回答を、版番号・施行日・変更点付きで作る
- 自動プログラムが、回答の分量と条件が手順の原文にあるかを照らす
- 【自動/人】 アレルゲン・加熱の条件・代替の食材に関わる質問は品質管理の担当の承認待ちに、それ以外はそのまま返す
- 人担当が承認待ちの回答を確かめ、返す
各工程の詳しい説明を読む
- 社内のチャットで質問を受け、品目と知りたいことを読み取る
- 共有フォルダで品目のフォルダを開き、版ごとのファイルからいまの版を探す
- 変更記録の一覧表で、いまの版の施行日と前の版からの変更点を確かめる
- 該当の手順を読み、分量や条件をチャットに書き写して返す
- アレルゲンや加熱の条件に関わる質問は、品質管理の担当に確かめてから返す
(a)いまの版がどれか分かりにくい。 フォルダには デミグラス_v7.docx、デミグラス_v8_最終.docx、デミグラス_v8_修正.pdf が並びます。ファイル名だけでは、どれが承認された版かが分かりません。 変更記録の一覧表と見比べて初めて決まります。
(b)施行日の前後で答えが変わる。 新しい版が来週の月曜から有効、という期間があります。今日の質問には旧版で答え、来週の質問には新版で答える必要があります。 ここを取り違えると、店舗が施行前に新しい配合で作ります。
(c)同じ質問が何度も届く。 改訂のあった週は、同じ品目について複数の店舗から同じ質問が届きます。答える側は、そのたびにファイルを開き直します。
(d)答えられる人が限られる。 どのファイルが正しいかを知っているのは、改訂を担当した人です。その人が休みの日は、他の担当がフォルダを一から探すことになります。
- 【人】 店舗やラインの担当が、社内のチャットのボットに質問を書く
- 【自動】 Claude API が、品目の候補・知りたいこと(分量/条件/保存/変更点)・対象(ライン/店舗)・倍率の指定を取り出す
- 【自動】 Amazon OpenSearch Service が、いま有効な版と対象で絞ったうえで、手順の単位の文書を検索する
- 【自動】 該当の品目の変更記録と、ヒットした手順の該当の語句を取り出す
- 【自動】 倍率の指定があれば、プログラムが分量を計算する
- 【自動】 Claude API が、手順の原文を引用した回答を、版番号・施行日・変更点付きで作る
- 【自動】 プログラムが、回答の分量と条件が手順の原文にあるかを照らす
- 【自動/人】 アレルゲン・加熱の条件・代替の食材に関わる質問は品質管理の担当の承認待ちに、それ以外はそのまま返す
- 【人】 担当が承認待ちの回答を確かめ、返す
3番目が、この設計の分かれ目です。 検索の前に、施行日が今日以前で、次の版の施行日が来ていない文書だけに絞ります。 意味の近さで探すと、旧版の手順のほうが質問の言葉に近いことがよくあります。版の絞り込みは検索の条件に入れ、AIの判断に任せません。
7番目で、回答の数字を原文と照らします。 回答に書かれた「玉ねぎ 1.2kg」が、引用した手順の原文に同じ文字列で無ければ、その回答は返しません。数字の取り違えは、店舗にとって作り直しになるからです。
02今回想定するシステム構成
店舗・ラインの質問(社内のチャット) ▼【トリガー】ボットへの投稿 AWS Lambda ▼ Claude API ── 品目の候補・知りたいこと・対象・倍率を取り出す(構造化出力) ▼ Amazon Bedrock(Titan Text Embeddings V2)── 質問の埋め込み ▼ Amazon OpenSearch Service(kuromoji で日本語を解析) ├── ハイブリッド検索(いま有効な版・対象で絞る。品目でまとめる) └── 変更記録の検索と、該当の語句の取り出し ▼ Python ── 倍率の計算 ▼ Claude API ── 原文を引用した回答(版番号・施行日・変更点) ▼ Python ── 回答の数字と原文の照合 ▼ そのまま返す /【人】品質管理の承認(アレルゲン・加熱・代替)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(kuromoji、ハイブリッドクエリ、collapse) | Azure AI Search、Vertex AI Search(Agent Search) |
| 埋め込み | Amazon Titan Text Embeddings V2(Amazon Bedrock) | Cohere Embed、OpenAI の埋め込みモデル |
| 生成AI | Claude API(質問の項目の取り出しと、原文を引用した回答) | Azure OpenAI(Microsoft Foundry)、Gemini API |
| 連携 | AWS Lambda(チャットとのつなぎ、レシピの取り込み) | AWS Step Functions |
| 保管 | Amazon S3(レシピと製造指図の版ごとの原本) | 共有フォルダ |
レシピの原本と承認の流れは、いまのまま変えません。 品質管理が承認した版を共有フォルダに置き、変更記録の一覧表に1行足す、という手順はそのままで、承認された版を取り込む処理を足すだけです。
検索基盤は、Amazon OpenSearch Service の 3.x の版を前提にします。 公式に OpenSearch 3.5・3.3・3.1 が選べます。日本語の解析に使う Japanese(kuromoji)Analysis のプラグインは、すべてのドメインに入っています。 公式は Sudachi も日本語向けの選択肢として挙げていて、こちらは任意のプラグインとして足します。
品目でまとめる collapse は、ハイブリッドクエリでは 3.1 から使えます。 同じ品目の手順が上位を占めないように、品目の識別子でまとめます。
03どうやって実装するのか
処理の起点を決める
店舗やラインの担当が、社内のチャットのボットに質問を書いたときに動かします。 質問の受け付けをボットに一本化し、担当者の個人あてのチャットには送らない運用にします。
もう1つの起点は、レシピの承認です。 品質管理が新しい版を承認し、変更記録の一覧表に行を足したときに、その版を取り込みます。取り込みの時点で、新しい版に施行日を、前の版に有効の終わりの日を入れます。 施行日が先の日付なら、その日が来るまで新しい版は検索に出ません。
施行日の切り替えは、検索の条件で行います。 毎晩に文書の印を付け替える処理を作ると、その処理が止まった日に旧版が出続けます。有効の始まりと終わりの日付を文書に持たせ、検索のたびに今日の日付と比べます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 質問 | 品目の名前(略称・店舗での呼び方を含む)、知りたいこと、倍率の指定 | 社内のチャット |
| 手順の文書 | 品目の識別子、版番号、対象(ライン/店舗)、工程の名前、材料と分量、加熱の条件、保存の条件 | レシピと製造指図を手順の単位に分けたもの |
| 変更記録 | 版番号、施行日、変更の理由、変更した箇所、承認者 | 変更記録の一覧表 |
| 品目の別名の一覧 | 正式な品目名と、店舗での呼び方・略称 | 自社で作る一覧 |
| アレルゲンの情報 | 品目ごとの特定原材料等の有無 | 品質管理の台帳 |
質を決めるのは、手順の単位で分けることです。 レシピの文書を丸ごと1件にすると、「温め直しは何分か」という質問に、仕込みから盛り付けまでの全文が返ります。工程ごとに1件にし、品目と版の情報をすべての件に付けます。
品目の別名の一覧も欠かせません。 店舗では「デミ」「ハンバーグソース」と呼び、レシピの正式名は「デミグラスソース(店舗仕上げ用)」です。別名の一覧から品目の識別子を引いてから検索します。
データの取得方法を決める
| 取るもの | どこから | どう取るか |
|---|---|---|
| 該当の手順 | 手順の索引 | ハイブリッドクエリ(工程の本文の match + 埋め込みの knn)、有効の期間と対象で filter、品目の識別子で collapse |
| 該当の語句 | 手順の索引 | 上位の手順の識別子で絞った通常の match に highlight を付ける |
| 変更記録 | 変更記録の索引 | 品目の識別子で term、施行日の新しい順に3件 |
| アレルゲンの情報 | 品質管理の台帳 | 品目の識別子で引く |
検索の形は、次のようになります。
POST /recipe-steps/_search?search_pipeline=recipe-hybrid
{
"size": 10,
"_source": ["step_id", "item_id", "item_name", "version", "target",
"process", "body", "effective_from"],
"query": {
"hybrid": {
"queries": [
{ "match": { "body": "デミグラス 温め直し 時間" } },
{ "knn": { "body_vector": { "vector": [0.0], "k": 30 } } }
],
"filter": {
"bool": {
"filter": [
{ "term": { "target": "store" } },
{ "range": { "effective_from": { "lte": "now/d" } } },
{ "bool": { "should": [
{ "range": { "effective_to": { "gt": "now/d" } } },
{ "bool": { "must_not": { "exists": { "field": "effective_to" } } } }
] } }
]
}
}
}
},
"collapse": { "field": "item_id" }
}
ハイブリッドクエリの filter は1つの検索の形で書き、複数の条件は bool にまとめます。 有効の終わりの日が無い文書(いまの最新の版)も拾うように、should で2つの条件を並べています。
collapse には注意が1つあります。 ハイブリッドクエリでは、上位 size 件を取ってから品目でまとめるので、同じ品目が上位に重なると、返る品目の数が size より少なくなります。 品目の数をそろえる設定は 3.10 からで、Amazon OpenSearch Service の版では使えません。size を多めに取り、返った品目の数で足りるかを確かめます。
該当の語句は、上位の手順の識別子で絞った通常の検索で取ります。highlight は、検索に同義語を使っていても元の語を強調して返します。 回答の画面では、この語句を手がかりに手順の原文の該当箇所を示します。
AIへ渡す前に整形する
- 承認された版だけを取り込む … 変更記録の一覧表に行がある版だけを対象にし、
_最終・_修正のような作業中のファイルは取り込みません - 手順の単位への分割 … 見出し(仕込み・加熱・冷却・保存・店舗での仕上げ)で分け、材料表は工程ごとに付けます
- 分量の表記をそろえる … 「1.2kg」「1200g」「1,200g」を、元の表記を残したまま、計算用の数値と単位の項目にも入れます
- 版の情報の付与 … 品目の識別子、版番号、対象、有効の始まりと終わりの日を、すべての手順に付けます
- 日本語の解析 …
kuromoji_tokenizerのsearchの方式で、「デミグラスソース」のような複合語を分けた語と元の語の両方で索引します。社内の略語はuser_dictionary_rulesに書きます - 埋め込み … 工程の名前と本文をつないだ文を Titan Text Embeddings V2 で埋め込みます
手順の索引の設定と1件の形は、次のようにします。
PUT /recipe-steps
{
"settings": {
"index.knn": true,
"analysis": {
"tokenizer": {
"ja_search": {
"type": "kuromoji_tokenizer",
"mode": "search",
"user_dictionary_rules": ["デミ,デミ,デミ,カスタム名詞"]
}
},
"analyzer": { "ja": { "type": "custom", "tokenizer": "ja_search" } }
}
},
"mappings": {
"properties": {
"step_id": { "type": "keyword" },
"item_id": { "type": "keyword" },
"version": { "type": "keyword" },
"target": { "type": "keyword" },
"process": { "type": "keyword" },
"body": { "type": "text", "analyzer": "ja" },
"quantities": { "type": "nested" },
"effective_from": { "type": "date" },
"effective_to": { "type": "date" },
"body_vector": { "type": "knn_vector", "dimension": 1024 }
}
}
}
quantities には、材料ごとに {"material": "玉ねぎ", "raw": "1.2kg", "value": 1200, "unit": "g"} のような形で、元の表記と計算用の数値を並べて入れます。倍率の計算はこの value から行い、回答には raw と計算した値を並べて出します。 計算した値には「計算値」と明記し、原文の分量と見分けられるようにします。
3番目が、数字の照合を支えます。 元の表記と計算用の数値の両方を持っていれば、回答の数字が原文にあるかを、表記のゆれに関係なく照らせます。
Titan Text Embeddings V2 は英語に最適化されたモデルで、日本語は多言語の対応(プレビュー)に入っています。 自社のレシピの質問で、埋め込みだけでどこまで当たるかを最初に確かめます。単語の一致の検索を並べているのは、品目名や工程名の一致を取りこぼさないためです。
AIに処理させる
させるのは2つです。質問から検索に使う項目を取り出すことと、検索で見つかった手順の原文を引用して回答を書くことです。
| させること | 中身 |
|---|---|
| 質問の項目の取り出し | 品目の候補、知りたいこと(分量/加熱/保存/手順/変更点)、対象(ライン/店舗)、倍率の指定 |
| 回答の作成 | 手順の原文から該当の文を引用し、短い回答にまとめる |
| 根拠の付与 | 手順の識別子、版番号、施行日を書く |
| 変更点の要約 | 直近の変更記録から、前の版と何が変わったかを書く |
| させないこと | 理由 |
|---|---|
| 分量の計算 | 倍率の計算はプログラムが行う |
| 原文に無い分量・条件の記述 | 引用した手順に無い数字を書かない |
| 代替の食材の可否の判断 | 品質管理が決める。アレルゲンが変わりうる |
| 加熱の条件の言い換え | 「中心温度75℃1分以上」を「よく加熱」にしない |
| 旧版の記載での回答 | 変更点を聞かれたときだけ旧版を示す |
4行目は見落としやすい失敗です。 生成AIは、読みやすさのために数字を言葉に丸めることがあります。加熱の条件は食品の安全に関わるので、原文の文字列のまま引用させます。
指示内容を固定する
あなたはセントラルキッチンの生産管理の担当として、店舗とラインからの
レシピの質問に答える立場です。
答えは、渡された手順の原文と変更記録だけから作ってください。
【やること】
1. 質問に該当する手順を、渡された検索結果から選んでください。
2. 分量・加熱の条件・保存の条件は、原文の文字列をそのまま引用してください。
3. 回答の最後に、根拠の手順の識別子、版番号、施行日を書いてください。
4. 直近の変更記録があり、質問に関係する箇所が変わっている場合は、
何が変わったかを1〜2文で添えてください。
5. 倍率の計算結果が渡されている場合は、原文の分量と並べて書いてください。
【厳守事項】
- 分量を自分で計算しないでください。計算結果が無ければ原文の分量だけを書いてください。
- 検索結果に無い分量・温度・時間を書かないでください。
- 加熱の条件を言い換えたり、丸めたりしないでください。
- 代替の食材を使ってよいかを答えないでください。
聞かれた場合は「品質管理の確認が要る」とだけ書いてください。
- 検索結果に該当する手順が無い場合は、無いと答えてください。
似た品目の手順で代わりに答えないでください。
- 版番号の違う手順が混ざっている場合は、施行日が今日以前で最も新しい版だけを使ってください。
【今日の日付】{today}
【質問】{question}
【取り出した項目】{parsed}
【検索結果(手順の原文)】{steps}
【変更記録】{changes}
【倍率の計算結果】{scaled}
「似た品目の手順で代わりに答えない」を書かないと、店舗用の手順が無い品目に、ライン用の製造指図で答えます。 量も手順も違うので、店舗ではそのまま使えません。無いときは無いと返し、担当に回します。
版の条件を指示にも書いているのは、二重の守りです。 検索の側で絞っていても、施行日の当日に取り込みが遅れた文書が混ざることがあります。
出力形式を固定する
Claude API の構造化出力で、次の形のJSONを受け取ります。
{
"answer": "",
"quotes": [
{ "step_id": "DG-STORE-v8-03", "text": "" }
],
"basis": { "item_id": "DG-STORE", "version": "8", "effective_from": "2026-10-01" },
"change_note": "",
"scaled_values_used": true,
"topic": "quantity | heating | storage | procedure | change | substitution",
"needs_qa_approval": false,
"not_found": false
}
1つ目の理由は、quotes の文字列を原文と照らせることです。 引用の文字列が、その step_id の手順の本文に含まれているかを、プログラムで確かめます。含まれていなければ、その回答は返さず担当に回します。 回答の本文に出る分量と温度も、quotes の中にあるかを照らします。
2つ目は、topic で承認の要否を機械的に決められることです。 heating・substitution と、アレルゲンの情報を持つ品目の quantity は、needs_qa_approval を AIの判断に関係なく true にします。承認の要否は規則で決め、AIの申告に頼りません。
3つ目は、not_found で「無い」を正直に返せることです。 無いときに何かを返そうとする回答より、無いと返して担当に回すほうが、店舗の作り間違いを防げます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 社内のチャット | ボットの受信と返信 | 質問の受け付けと、回答の返信 |
| Claude API | Messages API の構造化出力 | 質問の項目の取り出し、回答の作成 |
| Amazon Bedrock | Titan Text Embeddings V2 の呼び出し | 質問と手順の埋め込み |
| Amazon OpenSearch Service | 検索パイプラインを指定した _search | 手順と変更記録の検索 |
| 共有フォルダ・変更記録の一覧表 | 承認の行の追加で取り込みを起動 | 新しい版の取り込みと有効の期間の設定 |
| 承認の画面 | 社内のWeb画面 | 品質管理の担当の承認待ちの一覧 |
共有フォルダと変更記録には、この構成から書き込みません。 原本の管理は今まで通り品質管理が行います。
人が確認する
- 承認待ちを確かめる … アレルゲン・加熱の条件・代替の食材に関わる回答を、品質管理の担当が引用と原文で確かめます
not_foundを引き取る … 該当の手順が無かった質問は、担当が答え、必要なら手順書を作ります- 照合で止まった回答を確かめる … 引用の文字列が原文に無かった回答を、担当が見直します
- 返した回答を週に一度見直す … そのまま返した回答から抜き出して、引用と版が正しいかを確かめます
1番目の承認は、引用が原文と合っているかを見るだけです。 回答を書き直す必要はほとんどなく、数十秒で終わる見込みです。 承認の対象を絞っているので、担当の時間は答えを探すことから確かめることに移ります。
目標は、600件をならして1件3分です。 そのまま返す回答は担当の手を通らず、承認待ちと not_found に時間を使います。
例外に対処する
| 起きること | 対応 |
|---|---|
| 品目が特定できない(別名の一覧に無い) | 候補を3つまで示して店舗に聞き返す |
| 該当の手順が無い | not_found として担当に回す |
| 引用の文字列が原文に無い | 返さずに担当に回す。ログに残す |
| 施行日の当日に新しい版が未取り込み | 変更記録の一覧表と取り込みの状態を照らし、未取り込みなら担当に回す |
| collapse で返る品目が少ない | size を増やして取り直す |
構造化出力が refusal や max_tokens で終わる | 受け付けず再実行 |
| 質問が苦情や事故の報告 | 回答を作らず、品質管理の担当に転送する |
最後の行を入れておくのは、ボットが現場の窓口になるからです。 「異物が入っていた」のような報告がボットに届いたとき、レシピの検索で答えてはいけません。 質問の項目を取り出す段階で区分し、人に回します。
記録を残す
- 質問(日時、店舗、投稿者)と、取り出した項目
- 検索の条件(
filter、今日の日付)と、上位の手順の識別子と版 - Claude API の出力と、そのとき使った指示の版
- 照合の結果(引用が原文にあったか)
- 承認の記録(承認者、承認・差し戻し)
not_foundの質問と、担当がどう答えたか
2つ目で検索の条件と版を残すのは、後から「その日にどの版で答えたか」を説明するためです。 店舗で作り間違いが起きたとき、ボットの回答が旧版だったのか、店舗が読み違えたのかを分けられます。
04実装レベルの3段階
半自動化で、1件10分が5分程度になります。 探す時間はほぼ消えますが、すべての回答を担当が確かめて返す作業が残ります。本格構成で3分になり、この段階が本記事の想定です。 差が出るのは、承認の要らない回答がそのまま返るようになるからです。 段階を飛ばさないでください。 半自動化で1か月使い、担当が直した回答の傾向を見ます。直しがほとんど無い種類の質問から、そのまま返す対象に入れていきます。
05工数削減シミュレーション
導入後 600件 × 3分 ÷ 60 = 30 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- セントラルキッチンで仕込み品・ソース・惣菜を作り、数十店舗へ配送している飲食チェーンや、店内で最終の調理をする惣菜の売場を持つ小売、複数の施設に料理を出すホテル。レシピと製造指図が版を重ねて改訂され、店舗やラインから「いまの分量は」「何が変わったか」という質問が毎日届き、生産管理や品質管理の担当が紙のファイルや共有フォルダを探して答えている場合。AWS を社内で使っている場合。
- レシピが数十品目で、改訂がほとんど無い場合。レシピと製造指図が生産管理のシステムに項目として入っていて、店舗がそこを直接引ける場合(検索の仕組みを足すより、そのシステムの画面を店舗に開くほうが早く済みます)。レシピの原本が手書きの紙だけで、電子の文書になっていない場合(先に電子化が要ります)。なお、アレルゲンの表示、加熱の条件の決定、代替の食材を使ってよいかの判断は、品質管理の責任者が行います。この構成はいまの版の記載を探して示すまでです。
07最小構成で試す方法
- 先月にチャットで届いた質問から、品目のばらけた50件を選ぶ(改訂のあった品目の質問を必ず含める)
- その50件の品目について、いまの版の手順書と変更記録を集める
- 手元のAIサービスに手順書と変更記録を渡し、「この質問に、渡した手順書の原文を引用して答えてください。分量と温度は原文のまま書き、版番号を添えてください。手順書に無ければ無いと答えてください」と指示する
- 回答を、当時担当が返した答えと比べる
| 出てきた内容 | 判断 |
|---|---|
| 当時の答えと同じ分量・条件が、版番号付きで出た | 手順の単位の索引づくりに進む |
| 分量を丸めた・言い換えた | 指示と後段の照合で直る。構成は有効 |
| 旧版の手順で答えた | 版の絞り込みを検索の条件に入れる。渡す文書を絞れば直る |
3行目は、手元のAIサービスに複数の版をまとめて渡すと必ず起きます。 それが、版の絞り込みをAIでなく検索の側に置く理由です。試すときは、わざと旧版を混ぜた回も作り、どれくらい旧版を拾うかを見てください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 旧版の手順が返る | 有効の始まりと終わりの日で、検索の条件として絞る |
| 施行日の切り替えの処理が止まる | 印の付け替えをやめ、検索のたびに今日の日付と比べる |
| 作業中のファイルが取り込まれる | 変更記録に行がある版だけを取り込む |
| 分量を丸めた回答が返る | 原文の引用を必須にし、数字を照合する |
| 店舗の呼び方で品目が引けない | 別名の一覧で品目の識別子を引く |
| 店舗用の手順が無い品目にライン用で答える | 対象で絞り、無ければ not_found |
| 同じ品目が上位を占める | 品目で collapse し、返る件数を確かめる |
| 日本語の埋め込みが当たらない | 単語の一致の検索を並べ、自社の質問で当たり方を確かめる |
| 異物などの報告にレシピで答える | 質問の区分で人に回す |
上の2行が、この構成の失敗のほとんどです。 どちらも「いまの版」をどこで決めるかの問題です。版は検索の条件で決め、AIに選ばせない。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 自社のレシピと製造指図(配合・工程・条件)、変更記録、アレルゲンの情報です。配合は競争力の源で、社外に出せない情報です。
- 見られる範囲を分ける … OpenSearch のきめ細かなアクセス制御で、店舗の担当は店舗用の手順だけ、ラインの担当はライン用の手順だけを見られるようにできます
- 外部の生成AIに渡す範囲を絞る … 渡すのは、質問と検索で見つかった手順の数件だけです。レシピ全体を渡しません
- 食品の安全に関わる回答は人が承認する … アレルゲン・加熱の条件・代替の食材の回答は、品質管理の担当が承認してから返します
- 旧版の原本は消さない … 監査や事故の調査で、その日に有効だった版を示す必要があります
- 現場の報告をボットで完結させない … 異物・体調不良・温度の逸脱の報告は、決まった報告の経路に回します
誤りが起きた場合のリスクは、旧版や別の品目の分量で店舗が作ることと、安全に関わる条件が誤って伝わることの2つです。 前者は版と対象の絞り込みで、後者は数字の照合と承認で防ぎます。
10まず何から始めるか
1週目:承認された版の一覧と別名の一覧を作る
約300品目について、いま有効な版のファイルと施行日を一覧にします。店舗での呼び方を集め、品目の別名の一覧を作ります。チャットの過去の質問から呼び方を拾うのが早道です。
2週目:50件で試す
過去の質問50件で、手元のAIサービスに手順書を渡して答えさせます。旧版を混ぜた回も作り、版の取り違えがどれくらい起きるかを見ます。
3週目:手順の単位に分ける
よく質問の来る上位50品目から、レシピを工程ごとに分け、版の情報を付けます。分量の表記をそろえる規則もここで決めます。
4週目:索引と検索をつなぐ
OpenSearch に手順の索引を作り、有効の期間と対象で絞ったハイブリッド検索まで作ります。この時点では担当がすべての回答を確かめて返します。
2か月目: チャットのボットと、数字の照合、承認の要否の規則を足します。3か月目以降: 承認された版の自動の取り込みを足し、残りの品目を索引に入れて、1件10分が何分になったかを実測します。担当が休みの日にも、店舗が同じ答えを数分で受け取れるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Amazon OpenSearch Service で選べる OpenSearch の版に 3.5・3.3・3.1 があること。索引・文書・項目の単位のアクセス制御があること | AWS: What is Amazon OpenSearch Service? | 2026-10-14 |
| Japanese(kuromoji)Analysis がすべてのドメインに含まれること。Sudachi Analysis が日本語向けに推奨される任意のプラグインであること。Neural Search と k-NN が使えること | AWS: Plugins by engine version | 2026-10-14 |
kuromoji_tokenizer が IPAdic の辞書で日本語を形態素に分けること。search の方式(既定)で複合語を分けた語と元の語の両方を出すこと。user_dictionary_rules で辞書の規則を書けること | OpenSearch: Kuromoji tokenizer | 2026-10-14 |
ハイブリッドクエリの検索が最大5つで、全体の filter は1つの検索の形で書き複数の条件は bool にまとめること | OpenSearch: Hybrid query | 2026-10-14 |
ハイブリッドクエリの collapse が 3.1 から使えること、項目が keyword か数値であること、上位 size 件をまとめるため返る数が size より少なくなりうること、品目の数をそろえる設定が 3.10 からであること | OpenSearch: Collapsing hybrid query results | 2026-10-14 |
highlight が検索に同義語を使っていても元の語を強調すること。既定の強調の方式が unified であること | OpenSearch: Highlight query matches | 2026-10-14 |
| Titan Text Embeddings V2 の入力が8,192トークン・50,000字まで、出力が1,024(既定)・512・256次元であること。英語に最適化され、日本語を含む多言語の対応がプレビューであること | AWS: Amazon Titan Text Embeddings models | 2026-10-14 |
output_config.format に JSON スキーマを渡すとスキーマに合う JSON が返ること。refusal・max_tokens で終わるとスキーマに合わないことがあること。Claude in Amazon Bedrock では使えないこと | Claude Docs: Structured outputs | 2026-10-14 |
アレルゲンの表示、加熱の条件、代替の食材の可否は、品質管理の責任者が判断してください。 本記事は公開されている製品の仕様で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1435)についてのご相談はこちらから。
