新しい試作の依頼が来たときに、過去の配合表・試作記録・官能評価から狙いと原料の近い配合を探し、当時の配合と評価と失敗の理由を根拠付きで返す
新しい試作の依頼が来たら、過去の配合表・試作記録・官能評価から、狙いと原料の近い配合を探し、当時の配合と評価、うまくいかなかった理由を配合番号と試作記録付きで返します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- 商社/小売/製造
- 対象部門
- 研究開発
- 対象業務
- 情報検索/比較検討
- 主な課題
- 属人化している/引き継ぎができていない/情報が見つからない
- AIで行う処理
- 検索(RAG)
- 主な効果
- 判断支援/属人化解消/教育コスト削減/検索時間短縮
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 営業から試作の依頼書が届き、処方開発の担当が割り当てられる
- 担当が、配合表の管理ファイルをファイル名(品目名・顧客名・年月)で探す
- 当たりを付けた配合表を開き、使いたい原料が入っているか、割合はどれくらいかを見る
- 似た配合の試作記録と、官能評価・安定性試験の記録を探して読む
- 見つからなければ、先輩の担当に「前に似た処方を組んだことがあるか」を聞く
- 参考にする配合と、避けるべき組み合わせを試作の計画書に書き写す
- 自動新しく確定した配合表を、原料の行ごとのまとまりを持った1件の文書にして検索基盤に登録する
- 自動原料のコードに、原料の一覧から機能の区分を付ける
- 自動試作記録、官能評価、安定性試験の記録を配合番号で結び、評価の結果と所見、不採用の理由を同じ文書に付け足す
- 自動顧客の区分(自社品、顧客ごとの受託品)を付け、見られる範囲を決める
- 人処方開発の担当が、使いたい原料と割合の範囲、避けたい原料、狙いの言葉を入れる
- 自動原料と割合の組の条件で配合を絞り、狙いと評価の言葉が近い順に並べ、当たった原料の行を添える
- 自動Claude が、配合ごとに当時の狙い、条件に当たった原料の行、評価の結果、失敗の理由を、配合番号と試作番号付きで並べる
- 人担当が並んだ配合を読み、参考にする配合を選び、必要なら配合表と試作記録の原本を開く
- 人担当が試作の計画を立て、上長が確かめる
各工程の詳しい説明を読む
- 営業から試作の依頼書が届き、処方開発の担当が割り当てられる
- 担当が、配合表の管理ファイルをファイル名(品目名・顧客名・年月)で探す
- 当たりを付けた配合表を開き、使いたい原料が入っているか、割合はどれくらいかを見る
- 似た配合の試作記録と、官能評価・安定性試験の記録を探して読む
- 見つからなければ、先輩の担当に「前に似た処方を組んだことがあるか」を聞く
- 参考にする配合と、避けるべき組み合わせを試作の計画書に書き写す
(a)ファイル名でしか探せない。 2番目で探せるのは、ファイル名に入っている品目名や顧客名だけです。「保湿剤Aを5%使った配合」は、ファイルを開くまで分かりません。 配合表の中身で探す手段がありません。
(b)原料と割合を組で見られない。 管理ファイルを横断して原料のコードで検索できても、その原料がどの割合で入っているかは1件ずつ開いて確かめるしかありません。微量の配合と主成分としての配合が同じ一覧に並びます。
(c)失敗の理由が引き継がれない。 4番目の試作記録と評価の記録は、配合表とは別の場所にあります。製品にならなかった配合ほど、記録をたどる人がいません。 同じ組み合わせで同じ分離を起こした、ということが担当の交代のたびに起きます。
(d)見てはいけない処方が見える。 OEMでは、顧客ごとの処方は秘密として扱う約束があります。共有フォルダで探していると、別の顧客の処方を参考に開いてしまうことがあります。参考にしてよい範囲が、担当の判断に任されています。
取り込み(毎晩)
- 【自動】 新しく確定した配合表を、原料の行ごとのまとまりを持った1件の文書にして検索基盤に登録する
- 【自動】 原料のコードに、原料の一覧から機能の区分を付ける
- 【自動】 試作記録、官能評価、安定性試験の記録を配合番号で結び、評価の結果と所見、不採用の理由を同じ文書に付け足す
- 【自動】 顧客の区分(自社品、顧客ごとの受託品)を付け、見られる範囲を決める
試作の依頼が来たとき
- 【人】 処方開発の担当が、使いたい原料と割合の範囲、避けたい原料、狙いの言葉を入れる
- 【自動】 原料と割合の組の条件で配合を絞り、狙いと評価の言葉が近い順に並べ、当たった原料の行を添える
- 【自動】 Claude が、配合ごとに当時の狙い、条件に当たった原料の行、評価の結果、失敗の理由を、配合番号と試作番号付きで並べる
- 【人】 担当が並んだ配合を読み、参考にする配合を選び、必要なら配合表と試作記録の原本を開く
- 【人】 担当が試作の計画を立て、上長が確かめる
6番目で「当たった原料の行」を添えるのが、この設計の分かれ目です。 配合表の全体を返すと、なぜこの配合が出てきたのかを担当が40行の中から探すことになります。条件に当たった行だけを先に見せれば、近さの理由がすぐ分かります。
8番目と9番目を人に残しているのは、配合の決定が安全性と品質に関わるためです。 並んだ配合は過去の記録で、次にどう組むかは担当が決めます。
02今回想定するシステム構成
【取り込み】配合表/原料の一覧/試作記録・官能評価・安定性試験 ▼【トリガー】毎晩 AWS Lambda ── 配合表を原料の行のまとまりにし、評価と所見を配合番号で結ぶ ▼ Amazon OpenSearch Service(配合の索引。nested の原料の行+Sudachi の狙いと所見) 【試作の依頼】担当が原料・割合の範囲・避けたい原料・狙いの言葉を入れる ▼ Amazon OpenSearch Service ├─ nested:原料のコードと割合の範囲を、同じ行の中で照合 ├─ nested の否定:避けたい原料を含む配合を外す ├─ match:狙いと評価・所見の言葉(Sudachi) ├─ inner_hits:条件に当たった原料の行を返す └─ 文書レベルのセキュリティ:担当の役割で見られる顧客の区分だけ ▼ Claude(Amazon Bedrock)── 検索結果のブロックで渡し、引用付きで配合を並べる ▼ 試作の計画書(参考の配合・評価・失敗の理由・配合番号)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(nested、inner_hits、Sudachi、文書レベルのセキュリティ) | Azure AI Search、Vertex AI Search(Agent Search) |
| 生成AI | Claude(Amazon Bedrock。配合ごとの評価と失敗の理由を引用付きで並べる) | Gemini API、OpenAI API |
| 連携 | AWS Lambda(毎晩の取り込み、評価の結びつけ、検索の呼び出し) | AWS Step Functions |
| 保管 | Amazon S3(配合表と試作記録の写し、検索の記録) | ― |
| 配合表の管理 | 既存の配合表の管理ファイルと試作記録 | ― |
配合表の管理ファイルと試作記録には、書き込みません。 配合の作成と確定、試作の記録は、これまでどおり研究開発の手順で行います。この構成は、確定したものを取り込み、原料と割合で引けるようにするだけです。
原料の行は、nested 型で持たせます。 公式のドキュメントでは、普通の object 型の配列は平らにされ、項目ごとに全部の値がまとめて保存されるため、「75歳より上で、かつ喫煙者」のような同じまとまりの中での条件の組み合わせが正しく判定できない例が示されています。nested 型にすると、まとまりを1つずつ別の文書のように検索できます。
条件に当たった行は、inner_hits で取り出します。 公式のドキュメントでは、nested の検索で当たった内側の要素は既定では隠れており、inner_hits を付けると返ります。返す数は size、並べ方は sort で決められます。
見られる範囲は、文書レベルのセキュリティで分けます。 公式のドキュメントでは、役割ごとにクエリで読める文書を決め、${user.name} や利用者の属性を表す変数で、利用者に応じた絞り込みもできます。
03どうやって実装するのか
処理の起点を決める
取り込みと検索で、起点が2つあります。
取り込みは、毎晩の定時で行います。 配合表は試作のたびに版が増えますが、検索の対象にするのは「確定」の印が付いた版だけです。作成途中の配合を取り込むと、まだ試作していない配合が「過去の配合」として返ります。
評価の記録は、配合より後から増えます。 官能評価は試作の数日後、安定性試験は数週間から数か月後に結果が出ます。毎晩の取り込みで、配合番号で結べる新しい評価を付け足します。 配合の文書は作り直さず、評価の項目だけを更新します。
検索は、処方開発の担当が試作の依頼を受けて画面で始めたときに動きます。 依頼書から原料と割合の範囲を読み取るのは担当です。依頼書の文から自動で条件を作ることはしません。 「〇〇エキスを訴求」が何%の配合を意味するかは、担当が顧客と話して決めます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 配合表 | 配合番号、版、品目の区分(化粧水、乳液、クリームなど)、狙いの文、原料の行(原料コード、配合の割合%、相) | 配合表の管理ファイル(確定版) |
| 原料の一覧 | 原料コード、表示名称、機能の区分、供給元、使用の制限の印 | 原料の一覧 |
| 試作記録 | 試作番号、配合番号、試作日、製造の条件、所見 | 試作記録 |
| 官能評価 | 試作番号、評価の項目(しっとり、べたつき、のび、香りなど)、点数、パネルの所見 | 官能評価の記録 |
| 安定性試験 | 試作番号、条件(温度・期間)、結果(変化なし/分離/変色/粘度変化など) | 安定性試験の記録 |
| 結論 | 採用/不採用/中止、不採用の理由 | 試作記録 |
| 探す条件(検索時) | 原料コードと割合の範囲、避けたい原料、狙いの言葉、品目の区分 | 担当の入力 |
質を決めるのは、試作記録の「結論」と「不採用の理由」が書かれているかです。 結論が空の配合は、うまくいったのか止まったのかが分からず、失敗の理由を返すというこの構成の価値が出ません。 取り込みで結論の空を数え、研究開発の会議で埋めてもらいます。
原料のコードは、社内の原料コードにそろえます。 同じ原料でも供給元が違えば別のコードになっていることがあり、どちらで探しても当たるように、原料の一覧に「同等品」の対応を持たせます。
データの取得方法を決める
配合表は表計算のファイルで、1ファイルが1つの配合の1版です。Lambda で確定版のファイルを読み、原料の行を配列にして登録します。 試作記録と評価の記録は、それぞれの一覧から毎晩書き出してもらい、配合番号と試作番号で結びます。
索引の項目は、次のように持たせます。
| 項目 | 型 | 使いどころ |
|---|---|---|
formula_id/version | keyword | 配合番号と版。答えに添える根拠 |
category | keyword | 品目の区分での絞り込み |
ingredients | nested(code:keyword、function:keyword、pct:float、phase:keyword) | 原料と割合の組の照合 |
aim_text | text(Sudachi) | 狙いの言葉の検索 |
findings_text | text(Sudachi) | 試作の所見、官能評価の所見、不採用の理由の検索 |
sensory | object(項目ごとの点数) | 評価の表示 |
stability | object(条件と結果) | 安定性の表示 |
outcome | keyword(adopted、rejected、stopped、unknown) | 結論の表示と絞り込み |
owner_class | keyword(own、顧客ごとの区分) | 文書レベルのセキュリティ |
割合は、%の数値(float)で持たせます。 配合表によっては ppm や「適量」で書かれた行があります。ppm は%に直し、「適量」は割合を空にして印を付けます。 割合の範囲で検索するとき、空の行は当たりません。
AIへ渡す前に整形する
- 確定版だけを選ぶ … 配合表のファイルのうち、確定の印が付いた版だけを取り込みます
- 割合の単位をそろえる … ppm を%に直し、「適量」「微量」は割合を空にして印を付けます
- 合計を確かめる … 原料の行の割合の合計が100%から外れる配合は、取り込みで印を付けて担当に戻します
- 原料のコードをそろえる … 同等品の対応で、旧コードや別の供給元のコードを社内の原料コードにそろえます
- 機能の区分を付ける … 原料の一覧から、保湿剤・増粘剤・乳化剤などの区分を行ごとに付けます
- 評価を結ぶ … 試作番号から配合番号をたどり、官能評価・安定性試験・結論を付けます
- 顧客の区分を付ける … 自社品か、どの顧客の受託品かを付けます
3番目を軽く見ないでください。 合計が100%にならない配合表は、行の書き漏れか、割合の打ち間違いです。そのまま取り込むと、割合の範囲の検索で、本当は当たるべき配合が外れたり、当たるべきでない配合が出たりします。
7番目は、検索の画面で絞るのではなく、索引の側で持たせます。 画面で絞る作りにすると、画面を通さない検索では別の顧客の処方が見えます。 見られる範囲は、検索基盤の役割で決めます。
AIに処理させる
AIの仕事は、検索で出た配合を、決まった項目で引用付きで並べることだけです。 配合を絞るのも、当たった原料の行を取り出すのも検索基盤で行います。
| させること | 中身 |
|---|---|
| 配合ごとの要約 | 当時の狙い、品目の区分、結論(採用・不採用・中止) |
| 当たった原料の行の提示 | 条件に当たった原料のコード・機能・割合を、inner_hits の値のまま並べる |
| 評価の提示 | 官能評価の点数と所見、安定性試験の条件と結果を記録のまま並べる |
| 失敗の理由の提示 | 不採用・中止の理由と、試作の所見を引用する |
| 確かめるべき点の書き出し | 結論が空の配合、割合が「適量」の行、古い原料コードを挙げる |
| させないこと | 理由 |
|---|---|
| 新しい配合の提案 | 次の配合は担当が決める。数値の予測は別の構成 |
| 失敗の原因の推測 | 記録に無い原因を「〇〇が原因と考えられます」と書かない |
| 安全性・法規への適合の判断 | 品質保証と薬事の担当が確かめる |
| 評価の点数の言い換え | 「3.2点」を「やや良好」と書かない |
| 別の顧客の処方との比較 | 見られる範囲の外の配合に触れない |
2行目が、いちばん外せない線です。 「40℃で2週間後に分離」という記録に対して、AIは「増粘剤の割合が低かったことが原因と考えられます」と書きがちです。その推測が試作の計画書に入ると、記録に無い原因が次の担当に引き継がれます。 失敗の理由は、記録に書かれたものだけを引用させます。
3行目も同じくらい大事です。 過去に製品になった配合でも、原料の使用の制限や表示の決まりは、その後に変わっていることがあります。 適合の確認は、検索の結果とは別に、品質保証と薬事の担当の手順で行います。
指示内容を固定する
あなたは化粧品メーカーの研究開発部で、新しい試作の参考になる過去の配合を整理する係です。
渡された検索結果だけを根拠にしてください。処方の一般的な知識で補わないでください。
【今回の試作の条件】
品目の区分:{category}
使いたい原料と割合の範囲:{ingredient_ranges}
避けたい原料:{excluded_codes}
狙い:{aim_words}
【検索結果】
配合ごとに、狙いの文、条件に当たった原料の行(inner_hits)、
官能評価、安定性試験、結論、不採用の理由、試作の所見が渡されます。
【配合ごとに書くこと】
1. 配合番号・版、品目の区分、結論(採用/不採用/中止/記録なし)
2. 当時の狙い(引用)
3. 条件に当たった原料の行(原料コード、機能、割合%を値のまま)
4. 官能評価(項目と点数を値のまま)と、安定性試験(条件と結果)
5. 不採用・中止の理由と、試作の所見(引用。無ければ「記録なし」)
6. 確かめるべき点(結論が空、割合が「適量」、古い原料コードなど)
【厳守事項】
- 新しい配合や割合を提案しないでください。
- 失敗の原因を推測しないでください。記録に書かれた理由だけを引用してください。
- 安全性や法規への適合について書かないでください。
- 評価の点数を言葉に言い換えないでください。値のまま書いてください。
- 割合は検索結果の値のまま書き、丸めたり単位を変えたりしないでください。
- 結論や不採用の理由が無い配合は、「記録なし」と書いてください。空欄にしないでください。
「原因を推測しない」と「理由だけを引用する」を両方書いているのは、片方だけでは抜け道ができるためです。 推測を禁じるだけだと、AIは「記録からは〇〇がうかがえます」と言い方を変えて書きます。引用だけを許すことで、記録に無い文が出る余地を閉じます。
検索結果は、Claude の検索結果ブロックで渡します。 配合1件を1つの search_result にし、source に配合番号と版、title に品目の区分と結論、content に狙い・当たった原料の行・評価・所見を別々のテキストブロックで入れます。 公式の説明では、引用付きの答えが返り、Amazon Bedrock でも使えます。 引用が試作記録のどの文から来たかを、計画書の画面で辿れます。
出力形式を固定する
検索の要求は、次のように組みます。
GET /formulas/_search
{
"query": {
"bool": {
"filter": [
{ "term": { "category": "cream" } },
{ "nested": { "path": "ingredients",
"query": { "bool": { "filter": [
{ "term": { "ingredients.code": "RM-0412" } },
{ "range": { "ingredients.pct": { "gte": 3, "lte": 5 } } }
] } },
"inner_hits": { "name": "hit_moist", "size": 3 } } }
],
"must_not": [
{ "nested": { "path": "ingredients",
"query": { "term": { "ingredients.code": "RM-0950" } } } }
],
"should": [
{ "match": { "aim_text": "べたつかない しっとり" } },
{ "match": { "findings_text": "べたつき 分離" } }
]
}
}
}
原料のコードと割合の範囲を、同じ nested の中に書くのが要点です。 2つを別の nested に分けると、「原料Aを含む」と「どれかの行が3〜5%」を別々に満たす配合が当たります。原料が複数あるときは、原料ごとに nested を1つずつ並べ、inner_hits の name を分けます。
計画書の画面に返す形は、次のJSONです。
{
"request": { "category": "cream", "ranges": [ { "code": "RM-0412", "pct": "3-5" } ],
"excluded": ["RM-0950"] },
"formulas": [
{ "formula_id": "F-2022-1187", "version": "4", "outcome": "rejected",
"aim": "", "matched_rows": [ { "code": "RM-0412", "function": "保湿剤", "pct": 4.0 } ],
"sensory": { "べたつき": 2.1, "しっとり": 4.0 },
"stability": [ { "condition": "40℃・4週", "result": "分離" } ],
"reason": "", "trial_ids": ["T-2022-0533"],
"to_check": ["RM-0412 は旧コードからの読み替え"] }
],
"hidden_by_scope": true
}
1つ目の理由は、matched_rows で近さの理由を固定できることです。 inner_hits の値をそのまま入れるので、AIの文章を読まなくても、どの原料がどの割合で当たったかが分かります。
2つ目は、outcome と reason を分けられることです。 不採用の配合を画面で色分けし、失敗の理由を先に読む使い方ができます。
3つ目は、hidden_by_scope で、見られる範囲の外に当たる配合があったかだけを示せることです。 中身は出さず、「範囲の外にもある」ことだけを出します。必要なら、担当は上長を通じて、その顧客の担当チームに相談します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 配合表の管理ファイル(確定版の場所) | 毎晩の読み取り | 確定した配合を取り込む |
| 原料の一覧 | 毎晩の書き出し | 機能の区分と同等品の対応 |
| 試作記録・官能評価・安定性試験 | 毎晩の書き出し | 評価と結論を配合に付け足す |
| Amazon OpenSearch Service | 索引への登録と検索 | nested と inner_hits で配合を返す |
| Claude(Amazon Bedrock) | Lambda からの呼び出し | 配合ごとの評価と失敗の理由を引用付きで並べる |
| 試作の計画書 | 画面からの貼り付け | 参考の配合と配合番号を計画書に残す |
hidden_by_scope は、範囲の外の配合を数える検索を別の役割で動かして作ります。 担当の役割では範囲の外は見えないので、件数の有無だけを返す専用の処理を Lambda に置きます。
人が確認する
この構成の確認は、必須です。 並んだ配合は過去の記録で、次の配合は担当が決めます。
- 当たった原料の行を確かめる … 割合の範囲と相が、今回の試作に合うかを見ます
- 失敗の理由を原本で読む … 不採用・中止の配合は、試作記録の原本を開き、引用の前後を読みます
- 確かめるべき点を見る … 結論が空の配合は、当時の担当がいれば聞きます。古い原料コードは、いまの原料と同じかを確かめます
- 上長が試作の計画を確かめる … 参考にした配合番号を計画書に残し、上長が見ます
2番目で原本を開くのは、所見が短く書かれていることが多いためです。 「分離」の一言でも、どの条件で、何日目に、どの相が分かれたかは原本の表にしかありません。
1件あたり30分を目安にします。 配合が5〜8件並べば、当たった行と結論を流し読みし、不採用の2〜3件の原本を開く時間です。
例外に対処する
| 起きること | 対応 |
|---|---|
| 条件に当たる配合が0件 | 割合の範囲を広げた場合の件数を添えて「該当なし」と出す。自動で範囲を広げない |
| 合計が100%から外れる配合 | 取り込みで印を付け、担当に戻す。直るまで検索に出さない |
| 割合が「適量」の行 | 割合の条件では当たらない。原料のコードだけの条件で当たったときに「割合の記載なし」と出す |
| 結論が空の配合 | 「記録なし」と出し、結論を埋める依頼の一覧に入れる |
| 原料のコードが原料の一覧に無い | 取り込みで印を付け、原料の一覧への登録を依頼する |
| 見られる範囲の外にだけ当たる | 中身を出さず、範囲の外に当たったことだけを示す |
| Bedrock の呼び出しに失敗した | 検索結果の配合と当たった行、評価をそのまま表示する |
1行目で範囲を自動で広げないのは、広げた結果を担当が「近い配合」と読むためです。 3〜5%を1〜7%にすれば配合は出ますが、使用感の違う配合が混ざります。 広げるかは担当が決めます。
記録を残す
- 毎晩の取り込みの件数と、合計の外れ・コードの不明で止めた配合
- 検索の条件(原料と割合の範囲、避けたい原料、狙いの言葉)と、返した配合番号
- Claude に渡した検索結果と、返ってきた答えと引用
- 担当が参考にした配合と、参考にしなかった配合
- 範囲の外に当たったことを示した検索
- 結論が空の配合の一覧と、埋まった日
最後の行は、記録の運用を直す材料です。 結論が空の配合が減っていけば、失敗の理由を返すというこの構成の価値が、月を追って大きくなります。
04実装レベルの3段階
半自動化で、①の探す時間は大きく減ります。 ただし評価の記録を探して読む作業は人が行います。本格構成で1件30分になり、この段階が本記事の想定です。
05工数削減シミュレーション
導入後 30件 × 30分 ÷ 60 = 15 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 化粧品・食品・塗料・接着剤などの配合品を開発し、顧客や自社の企画から試作の依頼が月に数十件届く会社で、過去の配合表と試作記録、官能評価や安定性の記録が数年分あるのに、似た配合を探すのが担当者の記憶とファイル名頼みになっている場合。配合表が原料のコードと配合の割合で書かれている場合。OEMで顧客ごとの処方を扱い、見られる範囲を分ける必要がある場合。AWS を使っており、検索基盤と生成AIを同じ環境で動かせる場合。
- 品目が少なく、配合の数が数十件で担当者が覚えていられる場合。配合表が手書きや画像だけで、原料と割合を文字として取り出せない場合(先に電子化が要る)。次の配合の数値をAIに予測させたい場合(UC-0041 の構成が近い)。なお、採用する配合の決定と、安全性・法規への適合の判断は研究開発の担当と品質保証が行い、この構成はそれを代わりに行いません。
07最小構成で試す方法
- 過去1年の試作の依頼から5件を選び、そのとき参考にした配合を当時の担当に聞く
- 同じ品目の区分の配合表50件と、その試作記録・評価の記録を集める(顧客名は区分の記号に置き換える)
- 手元のAIサービスに50件を貼り、依頼ごとに「原料〇〇を△〜□%含み、原料××を含まない配合を挙げ、当時の評価と不採用の理由を記録のまま添えてください。原因の推測や新しい配合の提案はしないでください」と指示する
- 挙がった配合と、当時の担当が参考にした配合を見比べる
- 不採用の理由が記録のまま引用されているか、推測が混ざっていないかを見る
| 出てきた内容 | 判断 |
|---|---|
| 当時参考にした配合に加え、知らなかった不採用の配合が理由付きで出る | 索引と nested の検索の構築に進む |
| 原因を推測する、新しい配合を提案する | 指示の書き方で直る。構成は有効 |
| 試作記録の結論が空で、失敗の理由が返らない | 試作記録の書き方が先。 検索の問題ではない |
1行目の「知らなかった不採用の配合」が、この構成の価値です。 当時の担当に見せ、試作の前に知っていれば避けられた組み合わせかを聞きます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 原料Aと別の原料の割合で当たる | 原料の行を nested 型にする。 object 型の配列は平らにされる |
| コードと割合を別の nested に書いて当たりすぎる | 同じ nested の中に両方を書く |
| なぜ当たったかが分からない | inner_hits で当たった行を返す |
| 割合の範囲で当たらない | ppm を%に直す。「適量」は割合を空にして印を付ける |
| 合計が100%にならない配合が混ざる | 取り込みで止めて担当に戻す |
| 旧コードの原料で当たらない | 同等品の対応で社内の原料コードにそろえる |
| AIが失敗の原因を推測する | 記録の引用だけを許す |
| 別の顧客の処方が見える | 文書レベルのセキュリティで役割ごとに絞る |
| 作成途中の配合が出る | 確定版だけを取り込む |
上の3行が、この構成の失敗のほとんどです。 どれも、原料と割合の組を、検索のどこかで崩したことから起きます。組を nested で保ち、同じ nested の中で照合し、当たった行を返せば、担当は近さの理由をすぐに確かめられます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 配合表(原料と割合)、試作と評価の記録、顧客の区分です。配合は会社の技術の中心で、OEMでは顧客の秘密でもあります。
- 見られる範囲を役割で分ける … 文書レベルのセキュリティで、自社品は研究開発の全員、受託品はその顧客の担当チームだけ、のように分けます
- 細かなアクセス制御は最初に有効にする … Amazon OpenSearch Service では、有効にしたあと無効にはできません。 ドメインを作るときに決めます
- 範囲の外の配合の中身を出さない … 範囲の外に当たったことだけを示し、中身は出しません
- AIに配合を決めさせない … 新しい配合の提案と原因の推測を禁じ、決めるのは担当と上長です
- 適合の確認を別の手順に置く … 原料の使用の制限や表示の決まりへの適合は、品質保証と薬事の担当が確かめます
- 配合を外に出さない … 検索結果を顧客への提案資料にそのまま貼らない、と運用の決まりに書きます
誤りが起きた場合のリスクは、別の顧客の処方が見えることと、記録に無い失敗の原因が引き継がれることの2つです。 前者は文書レベルのセキュリティで、後者は引用だけを許す指示と原本の確認で防ぎます。
10まず何から始めるか
1週目:記録の空を数える
過去3年の試作記録について、結論と不採用の理由が空の件数を数えます。配合表の書式が何種類あるかも数えます。
2週目:5件の依頼で試す
過去の依頼5件と、顧客名を記号に置き換えた配合50件で、手元のAIサービスに配合を挙げさせます。原因を推測していないか、割合を丸めていないかを最優先で見ます。
3週目:原料のコードをそろえる
原料の一覧に、同等品と旧コードの対応を足します。使用の多い上位100原料から始めます。
4週目:配合の索引と nested の検索を作る
1つの品目の区分の配合を取り込み、原料と割合の条件で絞る検索と inner_hits を作ります。当時の担当が参考にした配合が当たるかを確かめます。
2か月目: 評価と結論の付け足し、狙いの言葉の検索、文書レベルのセキュリティを足し、品目の区分を広げます。3か月目以降: 引用付きの整理を足し、1件の調べ出しが何分になったかを実測します。新しい試作の計画書に、参考にした過去の配合と、避けた組み合わせの不採用の理由が配合番号付きで書かれるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 対応プラグインの一覧で、Sudachi Analysis が日本語向けに推奨されていること | Amazon OpenSearch Service: Plugins by engine version | 2026-10-07 |
| object 型の配列が平らにされ、項目ごとに全部の値がまとめて保存されるため、同じまとまりの中での条件の組み合わせが正しく判定できない例があること。nested 型がまとまりを保つこと | OpenSearch Documentation: Nested field type | 2026-10-07 |
nested クエリがまとまりを別の文書のように検索し、当たれば親の文書を返すこと。path・query・score_mode・inner_hits の指定 | OpenSearch Documentation: Nested query | 2026-10-07 |
当たった内側の要素が既定では隠れ、inner_hits で返ること。from・size・sort・name を指定できること | OpenSearch Documentation: Retrieve inner hits | 2026-10-07 |
文書レベルのセキュリティが役割ごとにクエリで読める文書を決め、${user.name} や利用者の属性を表す変数を使えること | OpenSearch Documentation: Document-level security | 2026-10-07 |
| Amazon OpenSearch Service の細かなアクセス制御で文書レベルのセキュリティを設定でき、有効にしたあと無効にできないこと | Amazon OpenSearch Service: Fine-grained access control | 2026-10-07 |
検索結果ブロック(source・title・content)で引用付きの答えが返り、Amazon Bedrock でも使えること | Claude Docs: Search results | 2026-10-07 |
配合の決定と、原料の使用の制限・表示への適合の確認は、自社の品質保証と薬事の手順に従ってください。 本記事は公開仕様で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0729)についてのご相談はこちらから。
