求める物性の値から、研究所に散らばる試験報告書を探して近い材料と配合を並べ、試験条件の違いを添えて返す
開発依頼に書かれた物性の目標値から、過去の試験報告書を探し、値の近い材料と配合を並べます。それぞれの値がどの試験条件で測られたかを添え、依頼の条件と違う点に印を付けて返します。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- 商社/製造
- 対象部門
- 研究開発
- 対象業務
- 情報検索/比較検討
- 主な課題
- 判断に時間がかかる/属人化している/情報が見つからない
- AIで行う処理
- 検索(RAG)
- 主な効果
- 判断支援/属人化解消/検索時間短縮
- 導入難易度
- ★★★★★
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 依頼を読み、物性の目標値と、その値をどの条件で測ることになっているかを確かめる
- 近い材料を作ったことがありそうな人に聞くか、グレードの一覧の代表値から候補を挙げる
- 共有フォルダで候補の試験報告書を探し、物性の値を書き写す
- 報告書の試験条件(規格・荷重・状態調節・試験片の厚さ)を読み、依頼の条件と同じかを確かめる
- 候補を表にまとめ、試作の要否を課長と相談する
- 営業か技術サービスへ、近い材料の有無と見込みを返す
- 人研究員が依頼の本文を検索画面に貼る
- 自動Claude API が物性の目標値・許容の幅・測る条件・必須の区分(難燃の区分など)を取り出す
- 人研究員が取り出された目標値と条件を画面で確かめ、直す
- 自動Amazon OpenSearch Service が、必須の条件で絞ったうえで、目標値への近さで試験結果を並べる
- 自動同じ配合の系列が上位を埋めないよう、系列ごとに1件にまとめ、系列の中の他の試験は内側に添える
- 自動上位の試験結果について、試験条件を依頼の条件と規則で照らし、違いに印を付ける
- 自動Claude API が、候補ごとに値と条件の違いを読める文にし、根拠の報告書の番号を付ける
- 人研究員が上位の報告書を開いて読み、試作の要否と答え方を決める
各工程の詳しい説明を読む
- 依頼を読み、物性の目標値と、その値をどの条件で測ることになっているかを確かめる
- 近い材料を作ったことがありそうな人に聞くか、グレードの一覧の代表値から候補を挙げる
- 共有フォルダで候補の試験報告書を探し、物性の値を書き写す
- 報告書の試験条件(規格・荷重・状態調節・試験片の厚さ)を読み、依頼の条件と同じかを確かめる
- 候補を表にまとめ、試作の要否を課長と相談する
- 営業か技術サービスへ、近い材料の有無と見込みを返す
(a)探す入口が人の記憶しかない。 共有フォルダの検索で引けるのはファイル名と本文の言葉です。「曲げ弾性率が3GPa前後の報告書」は、言葉では探せません。 結局、聞いた相手が覚えているグレードの報告書だけを開くことになります。
(b)代表値と実測値が混ざる。 グレードの一覧にあるのは、カタログに載せた代表値です。依頼に近い値が、開発の途中の試作で出ていたことは一覧から分かりません。 不採用になった配合の報告書にこそ、今回の依頼に近い値が眠っていることがあります。
(c)条件の違いを見落とす。 荷重たわみ温度が「125℃」と書かれていても、荷重が依頼と違えば比べられません。難燃性の区分は、試験片の厚さとセットで意味を持ちます。値を書き写すときに条件まで写さないと、候補の表が誤った比較になります。
(d)単位と書き方がそろっていない。 古い報告書の kgf/cm²、「2.9×10³ MPa」のような書き方、表の注に書かれた状態調節。同じ物性を読み取るのに、報告書ごとに読み方を変えています。
(e)答えるまでが遅い。 探すのに半日かかる依頼があり、営業は顧客に「確認中」と返したまま待つことになります。 同じような依頼が別の営業から届いても、前の調べ物は担当者の手元の表に残るだけです。
- 【人】 研究員が依頼の本文を検索画面に貼る
- 【自動】 Claude API が物性の目標値・許容の幅・測る条件・必須の区分(難燃の区分など)を取り出す
- 【人】 研究員が取り出された目標値と条件を画面で確かめ、直す
- 【自動】 Amazon OpenSearch Service が、必須の条件で絞ったうえで、目標値への近さで試験結果を並べる
- 【自動】 同じ配合の系列が上位を埋めないよう、系列ごとに1件にまとめ、系列の中の他の試験は内側に添える
- 【自動】 上位の試験結果について、試験条件を依頼の条件と規則で照らし、違いに印を付ける
- 【自動】 Claude API が、候補ごとに値と条件の違いを読める文にし、根拠の報告書の番号を付ける
- 【人】 研究員が上位の報告書を開いて読み、試作の要否と答え方を決める
3番目が、この設計の分かれ目です。 目標値の読み違いは、そのまま検索の結果を外します。「3GPa前後」の「前後」がどれくらいの幅か、荷重の条件が書かれているか。検索の前に人が1回見ます。
6番目を規則で行うのは、比べてよいかの判断を記録に残すためです。 荷重の条件・状態調節・試験片の厚さが依頼と同じか違うかは、項目の値どうしの比較で決まります。AIに「比べてよいか」を聞くと、もっともらしい理由を付けて比べます。 規則で印を付け、AIはその印を文にします。
02今回想定するシステム構成
試験報告書(Word・Excel・PDF) 配合の管理システム グレードの一覧 │ 取り込み時に試験1件ずつに分ける ▼ AWS Lambda ── Claude API(値・単位・条件の取り出し、構造化出力) │ 単位の換算と範囲の確認はプログラム ▼ Amazon OpenSearch Service ── 試験結果の索引(数値の項目+kuromoji の本文) ▲ │ 検索 検索画面 ──【トリガー】依頼の本文を貼る ▼ Claude API ── 目標値・幅・条件の取り出し ▼【人】目標値の確認 OpenSearch ── function_score(gauss 減衰)+ filter + collapse ▼ 条件の照合(規則)── 荷重・状態調節・試験片の厚さ・規格 ▼ Claude API ── 候補ごとの説明と根拠の報告書番号 ▼ 検索画面 ──【人】研究員が報告書を読んで決める
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(function_score の減衰関数、collapse、kuromoji) | Azure AI Search、Vertex AI Search(Agent Search) |
| 生成AI | Claude API(報告書からの値の取り出し、依頼の目標値の取り出し、候補の説明) | Azure OpenAI(Microsoft Foundry)、Gemini API |
| 連携 | AWS Lambda(報告書の取り込み、検索画面とのつなぎ、条件の照合) | AWS Step Functions |
| 保管 | Amazon S3(試験報告書の写し) | 研究所のファイルサーバー |
配合の管理システムとグレードの一覧には、この構成から書き込みません。 配合の番号と原料の系列を読み取って、試験結果の文書に付けるだけです。
土台になるのは、試験1件ずつを1つの文書にした索引です。 報告書1件には、配合を振った複数の試料と、引張・曲げ・荷重たわみ温度・難燃性などの複数の試験が入っています。1つの報告書を1文書にすると、どの値がどの試料のものか分からなくなります。 試料ごとに、物性の値と試験条件を数値と区分の項目で持たせます。
並べ方の中心は function_score の減衰関数です。 数値・日付・位置の項目に使え、origin(目標値)からの距離で点数を下げます。offset の内側は満点の1、offset と scale を足した距離で decay(既定0.5)の点数になります。曲線はガウス・指数・線形の3つで、複数の関数の点数は score_mode で掛け合わせ(既定)・合計・平均などから選べ、weight で物性ごとの重みを付けられます。
ハイブリッドクエリは使いません。 ハイブリッドクエリは最上位のクエリとして設計されていて、function_score の中に入れることができません。 入れると実行時のエラーになるか、正規化の処理が黙って飛ばされるとされています。公式は代わりに bool の should に書き換える方法を示しています。本記事は値の近さが主役なので、bool で絞り込みと本文の一致を書き、その外側を function_score で包みます。
本文の検索には、日本語の形態素解析(kuromoji)を使います。 Amazon OpenSearch Service の対応プラグインの一覧に、Japanese (kuromoji) Analysis が載っています。所見や用途の欄の「耐加水分解」「ウェルド強度」のような言葉で、点数を少し足すために使います。
03どうやって実装するのか
処理の起点を決める
研究員が依頼の本文を検索画面に貼り、「近い材料を探す」を押したときに動かします。 依頼には、物性の目標値が書かれていないもの(「この部品に合う材料を」)も混ざります。目標値が1つも取り出せない依頼は、検索に進まずに「目標値なし」と返します。
もう1つの起点は、試験報告書の保存です。 報告書を共有フォルダの決まった場所に保存し、承認の印が付いたときに取り込みます。下書きの段階の報告書は入れません。 値が後から直されることがあるからです。
取り込みは報告書の版ごとに行います。 承認の後に誤記を直した版が出たら、同じ報告書番号の古い試験結果を消してから入れ直します。古い版の値が残ると、同じ試料の値が2つ並びます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 依頼の本文 | 物性の目標値と許容の幅、測る条件、必須の区分、用途 | 検索画面 |
| 試験結果の文書 | 報告書番号・試料番号・配合番号・配合の系列、物性の値(数値と単位)、試験の規格・荷重・試験速度・状態調節・試験片の厚さ・試験温度 | 試験結果の索引(OpenSearch) |
| 試料の状態 | 採用・不採用・開発中の区分、不採用の理由 | 報告書の結論の欄から取り出す |
| 所見 | 外観・成形性・ばらつきなど、値以外の記述 | 報告書の本文から取り出す |
| 配合の系列 | ベース樹脂・強化材・難燃剤の系統 | 配合の管理システム |
質を決めるのは、2行目の試験条件の項目です。 値だけの索引なら、グレードの一覧と大差がありません。条件が項目になっているから、比べてよいかを規則で見られます。
3行目の不採用の理由も、必ず持たせます。 不採用になった配合の中に、今回の依頼に近い値を出したものがあることがあります。不採用の理由が「コストが合わない」なのか「成形で割れた」なのかで、使えるかどうかが変わります。
データの取得方法を決める
| 取るもの | どこから | どう取るか |
|---|---|---|
| 値の近い試験結果 | 試験結果の索引 | bool の絞り込みと本文の一致を function_score で包み、物性ごとの gauss で並べる |
| 系列ごとの代表 | 同じ問い合わせ | collapse を配合の系列の項目にかけ、inner_hits で系列内の他の試料を3件まで添える |
| 報告書の写し | S3 | 上位の試験結果の報告書番号から写しへのリンク |
| 配合の詳細 | 配合の管理システム | 権限のある研究員が画面から開く |
検索の形は、次のようになります。
POST /test-results/_search
{
"size": 10,
"query": {
"function_score": {
"query": {
"bool": {
"filter": [
{ "exists": { "field": "hdt_c" } },
{ "exists": { "field": "flex_modulus_gpa" } },
{ "term": { "hdt_load_mpa": 1.80 } },
{ "term": { "flame_class": "V-0" } },
{ "range": { "flame_thickness_mm": { "lte": 1.5 } } }
],
"should": [
{ "match": { "notes": "耐熱 剛性 薄肉" } }
]
}
},
"functions": [
{ "gauss": { "hdt_c": { "origin": 125, "offset": 5, "scale": 15 } }, "weight": 2 },
{ "gauss": { "flex_modulus_gpa": { "origin": 3.0, "offset": 0.2, "scale": 0.6 } }, "weight": 2 },
{ "gauss": { "specific_gravity": { "origin": 1.35, "offset": 0.05, "scale": 0.1 } }, "weight": 1 }
],
"score_mode": "avg",
"boost_mode": "sum"
}
},
"collapse": {
"field": "series_id",
"inner_hits": { "name": "same_series", "size": 3 }
}
}
exists の絞り込みを省かないでください。 減衰関数は、項目が無い文書に満点の1を返します。 荷重たわみ温度を測っていない試料が、測った試料より上に並ぶことになります。目標値のある物性は、値を持つ文書だけに絞ります。
offset には依頼の許容の幅を入れます。 「3GPa前後」を±0.2GPaと読んだなら、その範囲は満点です。scale はその外側でどれだけ早く点数を下げるかで、物性ごとに研究所で決めます。 「120℃以上」のような片側の目標は、range の絞り込みで下限を切り、近さは目標値の少し上を origin にして見ます。
試験結果の索引の1件は、次のような形にします。
{
"report_id": "TR-2019-0412",
"report_version": 2,
"sample_id": "S-07",
"formulation_id": "F-PBT-GF30-118",
"series_id": "PBT-GF-FR-BR",
"status": "rejected",
"reject_reason": "成形時のガス発生が多い",
"hdt_c": 205,
"hdt_load_mpa": 1.80,
"flex_modulus_gpa": 9.1,
"flex_std": "ISO 178",
"conditioning": "dry",
"flame_class": "V-0",
"flame_thickness_mm": 0.8,
"specific_gravity": 1.62,
"raw_values": { "flex_modulus": "9.1×10³ MPa" },
"notes": "",
"tested_on": "2019-06-18",
"access_group": "rd_materials"
} AIへ渡す前に整形する
- 試験1件ずつへの分割 … 報告書の試料と試験の表を、試料ごとの文書に分けます
- 値と条件の取り出し … Claude API に報告書の本文と表を渡し、物性の値・単位・条件を構造化出力で取り出します。値は原文の文字列も
raw_valuesに残します - 単位の換算 … kgf/cm² を MPa に、「×10³ MPa」を GPa にそろえる換算はプログラムで行います
- 範囲の確認 … 物性ごとにありうる範囲を決め、外れた値は取り込まずに確認の待ち行列へ回します
- 条件の区分へのそろえ … 「絶乾」「乾燥状態」「DAM」を
dry、「23℃50%RH 調湿」をconditionedのように区分にそろえます - 配合の系列の付与 … 配合の管理システムから、配合番号で系列を引いて付けます
3番目と4番目をAIに任せないのは、構造化出力の制約のためでもあります。 Claude API の構造化出力は、JSON スキーマの minimum・maximum のような数値の制約に対応していません。スキーマで範囲を縛れないので、範囲の確認は取り込みの処理で行います。 換算もAIにさせると、桁を1つ取り違えた値が索引に入ります。
AIに処理させる
させるのは3つです。報告書から値と条件を取り出すこと、依頼から目標値を取り出すこと、検索の結果を候補ごとの説明にすることです。
| させること | 中身 |
|---|---|
| 報告書からの取り出し | 試料ごとの物性の値と単位、試験の規格・荷重・状態調節・試験片の厚さ、結論の区分と理由 |
| 依頼からの取り出し | 物性ごとの目標値・許容の幅・片側か両側か・測る条件、必須の区分、用途の言葉 |
| 候補の説明 | 値と目標値の差、条件の照合で付いた印の意味、所見と不採用の理由の要点 |
| 根拠の付与 | 説明ごとに報告書番号と試料番号 |
| させないこと | 理由 |
|---|---|
| 候補の採否・試作の要否の判断 | 研究員と課長が報告書を読んで決める |
| 単位の換算・値の補正 | プログラムが行う。AIの換算は桁の誤りが残る |
| 条件が違う値の読み替え | 「荷重が違うので○℃くらい」のような推定を書かせない |
| 条件の照合 | 項目の比較で規則が決める |
| 検索結果に無い材料の提案 | 結果に無い報告書番号を示さない |
3行目がいちばん起きやすい失敗です。 荷重の条件が違う荷重たわみ温度を渡すと、AIは親切に「依頼の条件に直すと」と読み替えます。読み替えた値は、どこにも測った記録がありません。 条件が違うという事実だけを書かせます。
条件の照合は、次の規則でプログラムが行います。
| 照らす項目 | 依頼と違うときの印 |
|---|---|
| 荷重たわみ温度の荷重 | load_mismatch。比較の対象から外さず、別の段に表示する |
| 状態調節(乾燥・調湿) | conditioning_mismatch。吸水する樹脂の剛性・衝撃の値に付ける |
| 難燃性の試験片の厚さ | 依頼より厚い試験片の区分なら thickness_mismatch |
| 試験の規格 | 規格が違えば std_mismatch |
| 測った年 | 10年より前なら old_data。原料の変更を確かめる |
指示内容を固定する
あなたは樹脂材料の研究所で、研究員が近い材料を探すのを手伝う立場です。
検索で見つかった試験結果を、候補ごとに読みやすく説明してください。
どの材料を使うか、仕様を満たすかを決めないでください。決めるのは研究員です。
【やること】
1. 依頼の目標値と、各候補の試験結果の値を並べ、差を書いてください。
差の計算は渡された diff の値を使ってください。
2. 条件の照合で付いた印(load_mismatch など)を、意味の分かる文にしてください。
3. 所見と不採用の理由があれば、要点を1〜2文で書いてください。
4. 説明ごとに、根拠の報告書番号と試料番号を付けてください。
【厳守事項】
- 条件が違う値を、依頼の条件の値に読み替えないでください。
「条件が違うため、そのまま比べられない」とだけ書いてください。
- 値を自分で計算・換算しないでください。渡された値と単位をそのまま使ってください。
- 印が付いていない条件について、違いがあると推測しないでください。
- 検索結果に無い報告書番号・材料名を書かないでください。
- 不採用の理由が書かれていなければ「記載なし」としてください。
- 「この材料なら満たせる」「試作を勧める」のような判断を書かないでください。
【依頼の目標値と条件】{targets}
【候補(系列ごとの代表と系列内の試料)】{candidates}
【条件の照合の結果】{condition_flags}
「読み替えない」を2か所に書いているのは、1か所だと残るからです。 印の意味を説明させると、その流れで「なお、依頼の荷重で測れば」と続けます。読み替えを禁じる文と、書いてよい文の両方を示します。
差の計算を渡しているのも同じ理由です。 目標値と実測値の差は、検索のあとにプログラムが出して diff に入れます。AIが差を計算すると、単位の違う値どうしを引くことがあります。
出力形式を固定する
Claude API の構造化出力で、次の形のJSONを受け取ります。
{
"candidates": [
{
"series_id": "",
"report_id": "",
"sample_id": "",
"status": "adopted | rejected | in_development",
"properties": [
{ "name": "", "value": "", "unit": "", "target": "", "diff": "",
"flags": [], "comparable": "yes | no" }
],
"explanation": "",
"reject_reason": "",
"other_samples_in_series": []
}
],
"no_match_properties": [],
"check_with": []
}
1つ目の理由は、report_id と sample_id を照らせることです。 出てきた番号が検索結果に含まれているかを、プログラムで確かめます。 含まれていない候補は表示しません。
2つ目は、comparable を物性ごとに持てることです。 条件の照合で印が付いた物性は no にし、画面では値を灰色にして、比べられない値であることが一目で分かるようにします。 comparable の値はプログラムが入れ、AIの出力で上書きしません。
3つ目は、no_match_properties で届かない物性が分かることです。 どの候補でも目標値から大きく外れる物性があれば、ここに並べます。配合を変える検討が要る物性を、研究員が最初に見られます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 検索画面 | 社内のWeb画面 | 依頼の貼り付け、目標値の確認、候補と根拠の表示 |
| Claude API | Messages API の構造化出力 | 報告書・依頼からの取り出し、候補の説明 |
| Amazon OpenSearch Service | _search(function_score、collapse) | 値の近い試験結果 |
| 共有フォルダ | 承認の印で Lambda を起動 | 報告書の取り込み |
| 配合の管理システム | 毎晩の書き出し | 配合番号と系列 |
| S3 | 報告書の写しの保管 | 上位の報告書へのリンク |
人が確認する
- 目標値を確かめる … 検索の前に、取り出された目標値・幅・条件を見ます。荷重や厚さが依頼に書かれていなければ、営業に確かめてから検索します
- 上位の報告書を開く … 少なくとも上位3件は報告書を開き、試料の作り方と所見を読みます
comparableがnoの値を扱いに注意する … 条件の違う値で答えるときは、条件を添えて返します- 不採用の理由を確かめる … 不採用の試料を候補にするなら、理由が今回の用途で問題になるかを確かめます
- 答えを記録する … 営業へ返した内容と、使った報告書番号を残します
2番目を省かないでください。 説明は要約です。同じ値でも、試料が射出成形の試験片か押出の板から切り出したものかは、報告書を読まないと分かりません。
目標は、120件をならして1件15分です。 目標値の確認に3分、上位の報告書を読むのに8分、答えをまとめるのに4分という見込みです。
例外に対処する
| 起きること | 対応 |
|---|---|
| 依頼に目標値が無い | 検索に進まず「目標値なし」と返す。用途の言葉だけで本文を検索した結果を参考に出す |
| どの候補も目標値から遠い | no_match_properties に並べ、「近い材料なし」と明示する |
| 必須の区分で絞ると0件 | 絞り込みを1つずつ外した結果を、外した条件を明記して別に出す |
| 報告書番号が検索結果に無い | その候補を表示しない。ログに残す |
| 取り込み時に値が範囲外 | 索引に入れず、確認の待ち行列へ。原文の文字列を添える |
| 単位が読めない | 値を入れず、raw_values だけを残して確認へ回す |
| 同じ報告書の新しい版が来た | 古い版の試験結果を消してから入れ直す |
構造化出力が refusal や max_tokens で終わる | 受け付けずに再実行する |
記録を残す
- 依頼の本文と、取り出した目標値、研究員が直した目標値
- 検索の条件(絞り込み、
origin・offset・scale・重み)と、上位の試験結果と点数 - 条件の照合の結果と、そのとき使った規則の版
- Claude API の出力と、使った指示の版
- 表示しなかった候補と理由
- 営業へ返した答えと、根拠にした報告書番号
1行目の「直した目標値」が、指示を直す材料になります。 「前後」をどれくらいの幅と読むべきだったか、荷重の書き方をどう読み違えたかが分かります。直された箇所が多い言い回しから、指示に例を足します。
04実装レベルの3段階
半自動化で、1件40分が25分程度になります。 探す時間はほぼ消えますが、条件の違いを報告書で確かめる作業が手作業で残ります。本格構成で15分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化で1か月使うと、条件の欄が空の報告書の多い年代と、範囲外で止まる物性が分かります。そこを直してから条件の照合を足します。
05工数削減シミュレーション
導入後 120件 × 15分 ÷ 60 = 30 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 樹脂コンパウンド・ゴム・塗料・接着剤・機能性フィルムなどの材料メーカーの研究所で、過去十年以上の試験報告書が数千件を超え、Word・Excel・PDF で共有フォルダに分かれて残っている場合。開発依頼や顧客の要求仕様に「荷重たわみ温度○℃以上、曲げ弾性率○GPa前後」のような物性の目標値が書かれて届き、近い材料を探すのが毎月百件前後ある場合。試験の条件(規格・荷重・状態調節・試験片の厚さ)を報告書に書く習慣がある場合。AWS を社内で使っている場合。
- 扱う材料が数種類で、物性の一覧表が1枚にまとまっている場合。試験報告書に試験の条件が書かれておらず、値だけが残っている場合(先に報告書の書式をそろえる必要があります)。材料の物性を予測して新しい配合を設計したい場合(本記事は過去に測った値を探す構成です)。なお、どの材料を試作に使うか、顧客の仕様を満たすと言えるかの判断は、この構成では代替できません。
07最小構成で試す方法
- 過去5年の試験報告書から、よく依頼が来る物性(荷重たわみ温度・曲げ弾性率・難燃性など)が載ったものを100件選ぶ(不採用の試料が載ったものを必ず含める)
- 試料ごとに、物性の値と試験条件を1行にまとめた表を作る
- 先月の依頼から10件を選ぶ
- 手元のAIサービスに表と依頼を渡し、「依頼の目標値に近い試料を表から選び、値の差と、試験条件が依頼と違う点を報告書番号付きで並べてください。条件が違う値を読み替えないでください」と指示する
- 出てきた候補を、そのとき研究員が実際に挙げた候補と比べる
| 出てきた内容 | 判断 |
|---|---|
| 研究員が挙げた候補と、挙げなかった近い候補が出た | 索引と減衰関数の仕組みづくりに進む |
| 条件の違う値を読み替えて並べた | 指示と条件の照合の規則で直る。構成は有効 |
| 表の条件の欄が空で比べられない | 報告書の書式と取り出しの見直しが先 |
3行目が出ることは珍しくありません。 それは失敗ではなく、報告書に条件を書く習慣がそろっていなかったということが分かったということです。
試すときは、ベテランと若手の両方に候補を見てもらってください。 ベテランが「この系列が抜けている」と言えば、その系列の報告書の取り出しが足りていません。若手が「この候補は知らなかった」と言える件数が、この構成の価値です。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 値を測っていない試料が上位に出る | 減衰関数は項目が無いと1を返す。 exists で絞る |
| 条件の違う値どうしを比べる | 条件を項目にして規則で照らし、comparable を付ける |
| AIが条件の違う値を読み替える | 指示で禁じ、差の計算もプログラムで渡す |
| ハイブリッドクエリを function_score で包んでエラーになる | 包めない。bool の should に書き換える |
| 同じ系列の試料が上位を埋める | collapse で系列ごとに1件にし、inner_hits で添える |
| 換算の誤りで桁の違う値が入る | 換算はプログラム、範囲外は取り込まずに確認へ |
| 古い版の値が残る | 報告書番号で古い版を消してから入れ直す |
| 不採用の試料が理由なしに候補に出る | 結論の欄から理由を取り出し、無ければ「記載なし」 |
| 「前後」の幅の読み違いで外れる | 検索の前に人が目標値を確かめる |
| 配合の割合が技術サービスにも見える | 項目の単位の権限で隠す |
上の3行が、この構成の失敗のほとんどです。 どれも「比べてよい値か」の問題です。値を測っていない、条件が違う、読み替えた。どれも点数の上では近く見えます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 配合の番号と系列、物性の値、不採用の理由、顧客の要求仕様です。配合と試験の記録は、材料メーカーの競争力そのものです。
- 見られる範囲を役割で分ける … OpenSearch のきめ細かなアクセス制御で、索引・文書・項目の単位の権限が使えます。技術サービスの役割には配合番号の項目を見せない、開発中の系列の文書は研究所だけ、のように分けます
- 項目のマスキングは集計に注意する … 公式は、標準のマスキングは無作為なハッシュになり集計の結果が不正確になりうるとしています。集計に使う項目を隠すなら、パターンによるマスキングにします
- 外部の生成AIに渡す範囲を絞る … 説明に渡すのは試験結果と条件だけで、配合の割合は渡しません。 報告書からの取り出しでは本文を渡すので、契約上の取り扱いを先に確かめます
- 顧客の要求仕様を索引に入れない … 依頼の本文は検索のたびに使うだけにし、別の顧客の検索から見えないようにします
- 答えは人が決めて記録する … 条件の違う値で答えたときは、その旨を答えに書いた記録を残します
誤りが起きた場合のリスクは、比べてはいけない値で材料を勧めることと、配合の情報が研究所の外に広がることの2つです。 前者は条件の照合と人の確認で、後者は項目の単位の権限で防ぎます。
10まず何から始めるか
1週目:条件の区分を決める
試験の担当と一緒に、荷重・状態調節・試験片の厚さ・規格の区分の一覧を作ります。報告書に出てくる言い方を集め、どの区分に当たるかの表にします。
2週目:100件で試す
依頼の多い物性が載った報告書を選び、試料ごとの表を作ります。先月の依頼10件で候補を挙げさせ、研究員が当時挙げた候補と比べます。
3週目:取り出しと換算を作る
報告書から値と条件を取り出し、単位の換算と範囲の確認をプログラムで行うところまで作ります。範囲外で止まった値を研究員が確かめ、規則を直します。
4週目:索引と減衰関数をつなぐ
OpenSearch に試験結果の索引を作り、exists の絞り込みと物性ごとの gauss で並べるところまで作ります。この時点では説明を出さず、値と条件の一覧だけを見ます。
2か月目: 条件の照合の規則と collapse、候補の説明を足します。3か月目以降: 報告書の自動の取り込みと権限の設計を足し、1件40分が何分になったかを実測します。若手の研究員が、ベテランに聞く前に近い材料と条件の違いを答えられるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
減衰関数(gauss・exp・linear)が数値・日付・位置の項目に使え、origin・offset・scale・decay(既定0.5)で点数を決めること。項目が無い文書に1を返すこと。weight、score_mode(既定は multiply、avg など)、boost_mode(既定は multiply、sum など) | OpenSearch: Function score | 2026-10-14 |
ハイブリッドクエリが最上位のクエリとして設計され、function_score などの中に入れられないこと。入れると実行時のエラーか正規化の処理が飛ばされること。代わりに bool の should に書き換える方法 | OpenSearch: Hybrid query | 2026-10-14 |
collapse が項目の値ごとに上位の文書だけを返し、項目が keyword か数値であること、集計の結果を変えないこと、inner_hits で各グループの文書を展開できること | OpenSearch: Collapse search results | 2026-10-14 |
| Amazon OpenSearch Service の対応プラグインに Japanese (kuromoji) Analysis があること | AWS: Plugins by engine version in Amazon OpenSearch Service | 2026-10-14 |
| きめ細かなアクセス制御で、索引・文書・項目の単位の権限と項目のマスキングが使えること。標準のマスキングは無作為なハッシュで集計が不正確になりうること | AWS: Fine-grained access control | 2026-10-14 |
構造化出力を output_config.format で指定すること、数値の制約(minimum・maximum など)に対応しないこと、refusal・max_tokens で終わるとスキーマに合わないことがあること | Claude: Structured outputs | 2026-10-14 |
どの材料を試作に使うか、顧客の仕様を満たすと言えるかは、研究員と品質の担当が試験の記録に基づいて判断してください。 本記事は上の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1438)についてのご相談はこちらから。
