Media > AI活用ユースケース > 生産 > 自動車整備工場で、客が訴える異音・警告灯・振動の症状から過去の整備記録と修理事例を探し、原因の候補と点検の順番を根拠付きで返す

自動車整備工場で、客が訴える異音・警告灯・振動の症状から過去の整備記録と修理事例を探し、原因の候補と点検の順番を根拠付きで返す

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

客が訴える「走り出しにキュルキュル鳴る」「エンジンの警告灯が点いた」といった症状から、自社の過去の整備記録と修理事例を探します。同じ型式・近い走行距離で何が原因だったかを件数で並べ、点検の順番の案を事例番号付きで整備士に渡します。

サマリー
生成AI
Azure OpenAI Service/ChatGPT/Claude
AIサービス
Azure AI/Google Vertex AI/OpenSearch
対象業界
その他/小売/物流
対象部門
生産
対象業務
情報検索/比較検討
主な課題
判断に時間がかかる/属人化している/情報が見つからない
AIで行う処理
検索(RAG)
主な効果
判断支援/属人化解消/検索時間短縮
導入難易度
★★★★☆
実装レベル
本格構成
費用感
RAG・個別開発(大)
人間の確認
条件付き
現在工数
100h/月
AI導入後
40h/月
想定削減
60%
年間削減
720h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. フロントが客から症状を聞き、受付のメモに書く(いつ、どんなときに、どこから、どんな音か)
  2. 整備士が受付のメモを読み、故障診断機をつないで故障コードを読む
  3. 整備管理のシステムで、同じ車の過去の整備記録を開く
  4. 同じ型式の似た症状の記録を探す。システムの検索は車両と作業の名前でしか引けないため、思い当たる作業名で何度か検索する
  5. 修理事例のノートを表計算で開き、型式と言葉で絞り込む
  6. 見つからなければ、工場長かベテランに聞く
  7. 点検の順番を決め、作業指示に書いて点検に入る
導入後(After)
  1. 人フロントが受付のメモを書く。音の種類・出る条件・場所は選択肢から選び、客の言葉は自由記述に残す
  2. 人整備士が故障診断機で故障コードを読み、整備管理のシステムの作業指示に入れる
  3. 自動作業指示の「症状の検索」のボタンで、受付のメモと故障コード、車両の型式・走行距離が送られる
  4. 自動Claude API が、受付のメモから症状の区分(音の種類、出る条件、部位の手がかり)を取り出す
  5. 自動OpenSearch で、同じ型式 → 同じ車種の系統 → 同じエンジン型式の順に絞って、近い事例を探す
  6. 自動同じ絞り込みで、原因の区分ごとの件数を集計する
  7. 自動Claude API が、上位の事例の要点と、件数と点検にかかる時間から組んだ点検の順番の案を、事例番号付きで並べる
  8. 人整備士が事例と案を読み、車を見て点検の順番を決める
  9. 人原因が分かったら、作業の記録に原因の区分と短い説明を入れる(選択肢から選ぶ)
  10. 自動記録が確定したら、事例として索引に足す
各工程の詳しい説明を読む
  1. フロントが客から症状を聞き、受付のメモに書く(いつ、どんなときに、どこから、どんな音か)
  2. 整備士が受付のメモを読み、故障診断機をつないで故障コードを読む
  3. 整備管理のシステムで、同じ車の過去の整備記録を開く
  4. 同じ型式の似た症状の記録を探す。システムの検索は車両と作業の名前でしか引けないため、思い当たる作業名で何度か検索する
  5. 修理事例のノートを表計算で開き、型式と言葉で絞り込む
  6. 見つからなければ、工場長かベテランに聞く
  7. 点検の順番を決め、作業指示に書いて点検に入る

(a)客の言葉で探しても見つからない。 受付のメモは「ブレーキを踏むとゴーという音」ですが、記録は「ローター偏摩耗」「パッド残量少」と原因や作業の言葉で書かれています。4番目と5番目で、整備士は症状から思い当たる原因の言葉を自分で考えて探しています。 考えつかない原因の記録には、たどり着きません。

(b)探せる人が限られる。 ノートの絞り込みは、何を探せばよいかが分かっている人にしか使えません。若手の整備士は6番目に飛び、工場長が手を止めて答えます。 工場長が休みの日は、若手が教科書どおりの順番で点検を始めます。

(c)点検の順番が人によって違う。 同じ型式の同じ症状でも、ある整備士はベルトから、別の整備士はプーリーから見ます。当たりの多いところから見る人と、見慣れたところから見る人では、原因に着くまでの時間が違い、客への連絡の時刻も変わります。

(d)見つけた原因が次に残らない。 ノートに書くのはベテランだけで、若手が見つけた原因はどこにも残りません。

  1. 【人】 フロントが受付のメモを書く。音の種類・出る条件・場所は選択肢から選び、客の言葉は自由記述に残す
  2. 【人】 整備士が故障診断機で故障コードを読み、整備管理のシステムの作業指示に入れる
  3. 【自動】 作業指示の「症状の検索」のボタンで、受付のメモと故障コード、車両の型式・走行距離が送られる
  4. 【自動】 Claude API が、受付のメモから症状の区分(音の種類、出る条件、部位の手がかり)を取り出す
  5. 【自動】 OpenSearch で、同じ型式 → 同じ車種の系統 → 同じエンジン型式の順に絞って、近い事例を探す
  6. 【自動】 同じ絞り込みで、原因の区分ごとの件数を集計する
  7. 【自動】 Claude API が、上位の事例の要点と、件数と点検にかかる時間から組んだ点検の順番の案を、事例番号付きで並べる
  8. 【人】 整備士が事例と案を読み、車を見て点検の順番を決める
  9. 【人】 原因が分かったら、作業の記録に原因の区分と短い説明を入れる(選択肢から選ぶ)
  10. 【自動】 記録が確定したら、事例として索引に足す

8番目が、この設計の分かれ目です。 オイルのにじみ、前回の修理の跡、後付けの部品は、車を見た整備士にしか分かりません。

9番目を選択肢にするのも、意図してのことです。 原因を自由に書いてもらうと、次の検索で集計できません。原因の区分を選び、説明は1行だけ書く形にすると、若手が見つけた原因も次の件数に入ります。

02今回想定するシステム構成

構成図
受付のメモ・故障コード・車両の型式と走行距離(整備管理のシステム)
   ▼【トリガー】作業指示の「症状の検索」のボタン
AWS Lambda
   ▼
Claude API ── 受付のメモから症状の区分を取り出す(構造化出力)
   ▼
Amazon Bedrock(Titan Text Embeddings V2)── 症状の文の埋め込み
   ▼
Amazon OpenSearch Service(kuromoji で日本語を解析)
   ├── ハイブリッド検索(型式 → 車種の系統 → エンジン型式の3段で絞る)
   └── terms 集計で、原因の区分ごとの件数
   ▼
上位の事例(症状・原因・直し方・点検にかかった時間)
   ▼
Claude API ── 事例の要点と点検の順番の案(事例番号付き)
   ▼
作業指示の画面 ──【人】整備士が順番を決める ── 原因の記録 ── 索引へ
役割想定する製品代替候補
検索基盤Amazon OpenSearch Service(ハイブリッドクエリ、normalization-processor、terms 集計)Azure AI Search、Vertex AI Search(Agent Search)
埋め込みAmazon Titan Text Embeddings V2(Amazon Bedrock)Cohere Embed、OpenAI の埋め込みモデル
生成AIClaude API(症状の区分の取り出しと、事例の要点・点検の順番の案)Azure OpenAI(Microsoft Foundry)、OpenAI API
連携AWS Lambda(整備管理のシステムからの呼び出し、記録の取り込み)AWS Step Functions
保管Amazon S3(索引に入れる前の記録の書き出し)社内のファイルサーバー

整備管理のシステムには、この構成から書き込みません。 作業指示の画面から呼ばれて結果を返すだけで、原因の記録は整備士がいつもの画面で入れます。

日本語の解析は、すべてのドメインに入っている Japanese(kuromoji)Analysis を使います。 AWS の一覧では任意で足す Sudachi も日本語に「推奨」とされており、部品名の辞書を足したくなったら切り替えを検討します。 Sudachi の辞書の差し替えはすぐには反映されないとされています。

点数の合わせ方は、normalization-processor の min_max と、重みを付けた算術平均にします。 単語の一致の点数と、意味の近さの点数は尺度が違うので、それぞれを0から1にそろえてから合わせます。この題材では、部品名と症状の区分の言葉の一致が効くので、単語の一致の側を重くします。 重みは合計が1になるように指定します。

埋め込みの Titan Text Embeddings V2 は英語に最適化され、日本語はプレビューの対応です。 どこまで効くかは自社の記録で最初に確かめます。

03どうやって実装するのか

Step1

処理の起点を決める

整備士が作業指示の画面で「症状の検索」のボタンを押したときに動かします。 受付の時点で自動で動かさないのは、故障コードが診断機をつないでから分かるからです。

ボタンは何度でも押せるようにします。 点検の途中で「左前から音がする」と分かったら、追記してもう一度押します。

もう1つの起点は、作業の完了です。 整備士が原因の区分を選んで作業の記録を確定したら、その記録を事例として索引に足します。足すのは原因の区分が選ばれた記録だけです。

Step2

入力データを集める

データ中身取得元
受付のメモ客の言葉、音の種類・出る条件・場所の選択肢、いつから、頻度整備管理のシステム
故障コード診断機で読んだコードと、現在か過去かの区分作業指示(整備士が入力)
車両車名、型式、エンジン型式、駆動方式、年式、走行距離整備管理のシステム
過去の事例事例番号、型式、車種の系統、エンジン型式、走行距離、症状、故障コード、原因の区分、直し方、点検にかかった時間、日付事例の索引
車種の系統の表型式ごとに、同じ車台・同じ部品を使う系統整備課で作る表
言葉の対応表客の言い方と整備の言い方、原因の区分の一覧整備課とフロントで作る表

質を決めるのは、いちばん下の2つです。 系統の表が無ければ、同じ型式の事例が少ないときに探しに行く先がありません。

同じ車の過去の整備記録も別に引きます。 「前回、ベルトの交換をすすめたが見送り」と書かれていれば、点検の順番の最初に置く材料になります。

Step3

データの取得方法を決める

取るものどこからどう取るか
近い事例事例の索引ハイブリッドクエリ(症状の match + 埋め込みの knn)、型式・系統・エンジン型式で filter、上位10件
原因の区分ごとの件数事例の索引同じ filter と症状の区分で絞った通常の検索で size 0、terms 集計
同じ車の過去の記録整備管理のシステム車両の番号で直近5回の入庫

検索パイプラインと検索の形は、次のようになります。

PUT /_search/pipeline/symptom-hybrid
{
  "phase_results_processors": [
    { "normalization-processor": {
        "normalization": { "technique": "min_max" },
        "combination": { "technique": "arithmetic_mean",
                         "parameters": { "weights": [0.6, 0.4] } } } }
  ]
}

POST /repair-cases/_search?search_pipeline=symptom-hybrid
{
  "size": 10,
  "_source": ["case_id", "model_code", "platform", "engine_code", "mileage_km",
              "symptom", "dtc", "cause_category", "fix", "inspect_minutes",
              "repaired_on"],
  "query": {
    "hybrid": {
      "queries": [
        { "match": { "symptom": "冷間始動 走り出し 前方 キュルキュル 数秒で止む" } },
        { "knn": { "symptom_vector": { "vector": [0.0], "k": 30 } } }
      ],
      "filter": {
        "bool": {
          "filter": [
            { "term": { "platform": "P-07" } },
            { "term": { "symptom_category": "noise_squeal" } },
            { "range": { "mileage_km": { "gte": 30000, "lte": 90000 } } }
          ]
        }
      }
    }
  }
}

filter は1つの検索の形で書き、複数の条件は bool にまとめます。 ハイブリッドクエリは検索の最上位に置くもので、function_score などの中に入れるとエラーか正規化が飛ばされることがあるとされています。新しい事例を上にしたくても、点数の関数で包まず、表示の段で並べ替えます。

3段の絞り込みは、まず model_code(上の例は2段目の platform)で検索し、上位が3件に満たなければ広げて検索し直します。 どの段の結果かを match_level として画面に渡します。min_max では、結果が1件しか無い検索ではその1件が1.0になるので、match_level と件数を一緒に表示します。

原因の区分ごとの件数は、ハイブリッドクエリとは別の通常の検索で数えます。

POST /repair-cases/_search
{
  "size": 0,
  "query": { "bool": { "filter": [
    { "term": { "platform": "P-07" } },
    { "term": { "symptom_category": "noise_squeal" } },
    { "term": { "condition": "cold_start" } }
  ] } },
  "aggs": {
    "by_cause": {
      "terms": { "field": "cause_category", "size": 10, "missing": "unrecorded" },
      "aggs": { "avg_minutes": { "avg": { "field": "inspect_minutes" } } }
    }
  }
}

集計を別の検索にするのは、母数を「絞り込みに当たる全件」にするためです。 terms 集計の対象は keyword などの項目で、size の既定は10です。missing を指定すると、原因の区分が入っていない記録を1つの区分にまとめて数えられます。

Step4

AIへ渡す前に整形する

  1. 修理事例のノートの取り込み … 約1,800件の行を事例の項目にそろえます。原因が欠けた行は unrecorded にします
  2. 整備記録からの事例の起こし … 直近3年の症状の入庫のうち、原因が書かれたものだけを整備士が区分を付けて起こします
  3. 言葉のそろえ … 「ベルト鳴き」「Vベルト異音」を belt_squeal のように原因の区分に、「キュルキュル」「キーキー」を noise_squeal のように症状の区分にします。そろえられないものは other にして原文を残します
  4. 車種の系統の付与 … 車種の系統の表から、すべての事例に platform を付けます
  5. 故障コードの正規化 … 大文字にそろえ、現在のコードか過去のコードかを分けて持ちます
  6. 症状の文と埋め込み … 症状の区分・出る条件・場所・客の言葉をつないだ150字程度の文を作り、Titan Text Embeddings V2 で埋め込みます

事例の1件は、次のような形にします。集計と絞り込みに使う項目は keyword にし、症状と直し方の文だけを kuromoji で解析する text にします。

{
  "case_id": "RC-2025-0612",
  "model_code": "XYZ-A10",
  "platform": "P-07",
  "engine_code": "E-1.5A",
  "mileage_km": 62000,
  "symptom_category": "noise_squeal",
  "condition": "cold_start",
  "location_hint": "engine_front",
  "symptom": "朝いちばんの始動から走り出しまでキュルキュル鳴り、数秒で止む。雨の日に強い",
  "dtc": [],
  "cause_category": "belt_tensioner",
  "fix": "オートテンショナー交換、ベルト同時交換",
  "inspect_minutes": 20,
  "repaired_on": "2025-11-08",
  "source": "notebook"
}

3番目が、件数の質を決めます。 そろえないまま数えると、同じ原因が「ベルト鳴き」「Vベルト」「補機ベルト」に割れ、どれも件数が少なく見えます。 当てはまらない言い方だけを生成AIで区分の候補に当て、整備士が確かめます。

Step5

AIに処理させる

させるのは2つです。受付のメモから検索に使う症状の区分を取り出すことと、検索の結果から事例の要点と点検の順番の案を並べることです。

させること中身
症状の区分の取り出し音・警告灯・振動などの種類、出る条件(冷間・加速・旋回・制動・速度帯)、場所の手がかり、いつから、頻度
事例の要点上位の事例ごとに、症状・原因・直し方を1〜2文で
点検の順番の案集計の件数と平均の点検時間から、見る順番を事例番号付きで並べる
確かめる質問受付のメモで欠けている条件(どの速度で、曲がるときか)を、客に聞く質問として挙げる
させないこと理由
原因の決定車を見た整備士が決める
件数の集計検索基盤の集計で数える
事例に無い原因の推測一般的な知識で原因を足すと、記録と推測の区別が消える
安全に走れるかの判断客への説明は整備士が行う

3行目がいちばん起きやすい失敗です。 生成AIは「ウォーターポンプの可能性もあります」と書けますが、それは自社の記録ではなく一般論です。

点検の順番の案は、件数だけで並べません。 件数が多くても点検に1時間かかる原因より、5分で確かめられる原因を先に見るほうが早く着くことがあります。件数と平均の点検時間を両方渡し、並べる決まりをプロンプトに書きます。

Step6

指示内容を固定する

あなたは自動車整備工場の整備課で、症状の訴えで入庫した車について、
自社の過去の修理事例を整理し、点検の順番の案を作る立場です。
原因を決めないでください。決めるのは車を見た整備士です。

【やること】
1. 検索で見つかった事例を読み、事例ごとに症状・原因・直し方を1〜2文でまとめてください。
2. 集計の結果(原因の区分ごとの件数と平均の点検時間)を使い、
   点検の順番の案を作ってください。並べ方の決まり:
   - 件数が多く、平均の点検時間が短いものを先にする
   - 件数が同じくらいなら、点検時間が短いものを先にする
   - 同じ車の過去の記録で「見送り」になった項目があれば、最初に置く
   各項目に、並べた理由を1行と、根拠の事例番号(case_id)を付けてください。
3. 受付のメモで欠けている条件を、客に確かめる質問として最大3つ挙げてください。

【厳守事項】
- 件数を自分で数えないでください。集計の結果の数字だけを使ってください。
- 検索結果に無い事例番号を書かないでください。
- 事例に無い原因を、一般的な知識から足さないでください。
- match_level が platform や engine の事例は、同じ型式の事例ではないことを必ず書いてください。
- cause_category が unrecorded の件数は、原因の記録が無い件数として書いてください。
- 「安全です」「走行に問題ありません」など、車の状態を判断する表現を書かないでください。
- 故障コードがある場合、コードが一致する事例とそうでない事例を分けて書いてください。

【受付のメモと故障コード】{intake}
【車両】{vehicle}
【同じ車の過去の記録】{history}
【検索結果(上位の事例と match_level)】{cases}
【集計(原因の区分ごとの件数と平均の点検時間)】{aggregations}

「事例に無い原因を足さない」を明記しないと、一般論が混ざります。 整備士は画面の候補を自社で見つかったものと読むので、記録の上ではいちばん少ない原因から点検を始めることになります。 match_level の一文も同じで、同じエンジンでもベルトの取り回しが違う車があります。

Step7

出力形式を固定する

Claude API の構造化出力で、次の形のJSONを受け取ります。 output_config.format に JSON スキーマを渡します。

{
  "symptom": {
    "category": "noise_squeal | noise_knock | noise_grind | warning_light | vibration | other",
    "condition": [],
    "location_hint": "",
    "since": "",
    "frequency": ""
  },
  "cases": [
    { "case_id": "RC-2025-0612", "match_level": "model | platform | engine",
      "dtc_match": true, "summary": "" }
  ],
  "inspection_order": [
    { "step": 1, "cause_category": "", "count": 0, "avg_minutes": 0,
      "reason": "", "evidence_cases": [] }
  ],
  "questions_for_customer": [],
  "unrecorded_count": 0
}

1つ目の理由は、evidence_cases と cases の事例番号を照らせることです。 検索結果に無い番号が evidence_cases に入っていたら、その行は表示しません。

2つ目は、count と avg_minutes を集計の結果と照らせることです。 AIが書いた件数が集計の数字と違えば、その行は集計の数字で表示し直します。 構造化出力は数値の最小・最大の制約に対応していないため、件数の範囲の確かめはプログラムの側で行います。 応答が refusal や max_tokens で終わったときは、スキーマに合わないことがあるので受け付けずにやり直します。

Step8

システムへ連携する

つなぎ先方式内容
整備管理のシステム作業指示の画面のボタンから Lambda を呼ぶ受付のメモ、故障コード、車両、同じ車の過去の記録
Claude APIMessages API の構造化出力症状の区分の取り出し、事例の要点と点検の順番の案
Amazon BedrockTitan Text Embeddings V2 の呼び出し症状の文の埋め込み
Amazon OpenSearch Service検索パイプラインを指定した _search、集計近い事例と原因の区分ごとの件数
作業指示の画面結果の表示事例、点検の順番の案、客への質問
事例の索引作業の確定の通知で Lambda が取り込む原因の区分が選ばれた記録

外部の呼び出しに対応していない整備管理のシステムでは、別の検索画面から始めます。

Step9

人が確認する

  1. match_level と dtc_match を見る … 同じ型式・同じ故障コードの事例が上にあるかを確かめます
  2. 根拠の事例を1〜2件開く … 症状の書き方が目の前の車と同じかを読みます
  3. 車を見て順番を決める … にじみ、前回の修理の跡、後付けの部品など、記録に無いものを見ます
  4. 原因を記録する … 原因の区分を選び、説明を1行書きます。案と違う原因だったときこそ必ず記録します

4番目を省かないでください。 案と違う原因の記録が、次の同じ症状の件数を変えます。案どおりの原因ばかりが記録されると、件数は今の傾向を強めるだけになります。

目標は、240件をならして1件10分です。

Step10

例外に対処する

起きること対応
型式・系統・エンジン型式のどの段でも事例が無い「近い事例なし」と出し、症状の区分だけで全車種の件数を参考に出す
受付のメモが短すぎて区分が取れない区分を other にし、questions_for_customer だけを表示する
車種の系統の表に型式が無い型式の次はエンジン型式の段に進み、系統の未整備を一覧に出す
故障コードが事例のどれとも一致しないコードの一致を外して検索し、「コードの一致なし」と表示する
構造化出力が refusal や max_tokens で終わる受け付けず再実行。2回続けば検索結果と集計だけを表示
OpenSearch か Bedrock が応答しない「検索できません」と表示し、従来どおりノートを開く

1行目と3行目が、始めて数か月はいちばん多く出ます。 AIの問題ではなく、事例と表が足りないことの表れです。

Step11

記録を残す

  • 受付のメモ、故障コード、型式と走行距離、取り出した症状の区分
  • 検索の条件(filter、match_level、重み)と、上位の事例番号と点数
  • 集計の結果と、unrecorded の件数
  • Claude API の出力と、指示の版
  • 整備士が決めた点検の順番と、実際に見つかった原因の区分

最後の行が、この仕組みを育てます。 案の1番目で原因が見つかった割合を毎月数えると、系統の表か言葉の対応表を見直すべき型式が分かります。

04実装レベルの3段階

最小構成:ノートの行を手元のAIに貼り、受付のメモから近い事例と順番の案を出させる / 1件ごとの事例の絞り込み
半自動化:上記+ノートと整備記録を OpenSearch に入れ、検索画面から型式と症状で探す / 事例の検索と件数の集計
本格構成:上記+作業指示の画面から呼び、症状の区分の取り出し、3段の絞り込み、点検の順番の案、原因の記録の取り込みまで自動で行う / 検索から順番の案と、事例の蓄積までの全体

最小構成では、件数が数えられません。 貼り付けた範囲の行を生成AIが読むだけなので、母数が分からず、系統を広げることもできません。 確かめるための段階です。 半自動化で、1件25分が15分程度になります。 検索と件数は画面で出ますが、受付のメモを区分に直す作業と、件数から順番を考える作業が整備士に残ります。本格構成で10分になり、この段階が本記事の想定です。 差が大きいのは、客の言葉を整備の言葉に置き換える作業を、毎回整備士が頭の中でしていたからです。 段階を飛ばさないでください。 半自動化の画面を2か月使うと、事例が少ない型式と unrecorded が多い原因が先に分かります。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
8 名
月間件数
240 件
1件あたり現在時間
25 分
1件あたり導入後時間
10 分
現在  240件 × 25分 ÷ 60 = 100 時間/月
導入後 240件 × 10分 ÷ 60 = 40 時間/月
月間削減時間
60h
削減率
60%
年間削減時間
720h
年間金額換算(時間単価3,000円)
216万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 車検・点検に加えて故障の修理を受けている整備工場やディーラーの工場、運送会社の自社の整備部門で、症状の訴えでの入庫が月に百件を超える場合。過去の整備記録が整備管理のシステムに残っているが、「前に同じ音の車があった」を探せるのがベテランの整備士だけになっている場合。AWS を使える担当か委託先がいる場合。
向いていない
  1. 入庫の大半が車検と定期点検で、症状の訴えで入る車が月に数台の工場。整備記録が紙の伝票だけで、作業の内容と原因が書かれていない場合(先に記録の書き方をそろえるところから始めます)。特定の車種だけを扱い、メーカーの診断の仕組みで原因が絞れる専業の工場。なお、故障の原因の特定、修理の方法と見積の決定、保安基準に適合するかの判断は、この構成では代替できません。過去の記録を探して示すまでです。

07最小構成で試す方法

  1. 修理事例のノートから、入庫の多い車種の系統を3つ選ぶ
  2. 各系統について、直近の症状の入庫を10件ずつ選ぶ(原因が意外だったものを必ず含める)
  3. ノートの該当する系統の行(数十〜百行程度)を表計算から書き出し、手元のAIサービスに貼り付ける
  4. 1件ずつ受付のメモを貼り、「このノートの中から近い事例を探し、原因ごとの件数と点検の順番の案を事例番号付きで出してください。ノートに無い原因は書かないでください」と指示する
  5. 出てきた順番を、その車を担当した整備士が実際に見た順番と、見つかった原因と比べる

30件は必ずやってください。 検索基盤を作る前に、「ノートの記録で、症状から原因の候補が絞れるのか」を確かめます。 ノートの行を貼るときは、氏名・登録番号の列を外してください。

出てきた内容判断
実際の原因が順番の上位3つに入る検索基盤に進む。 記録に手がかりがある
ノートに無い原因を書いた指示の書き方で直る。構成は有効
客の言葉とノートの言葉が合わず事例が出ない言葉の対応表が先。 区分をそろえてから取り込む

3行目が出ることは珍しくありません。 失敗ではなく、ベテランが頭の中で言葉を置き換えていたことが分かったということです。

08実装時につまずきやすいポイント

問題対策
客の言葉で探して事例が出ない受付のメモを区分に直してから探す。言葉の対応表を育てる
同じ原因が別の言い方で割れて件数が少なく見える原因の区分を決め、取り込みの段でそろえる
一般論の原因が案に混ざる「事例に無い原因を書かない」を指示に明記し、事例番号で照らす
系統まで広げた事例を同じ型式と読むmatch_level を必ず表示し、指示にも書く
1件しかない段の点数が高く見えるmin_max の性質。件数と段を一緒に表示する
集計の件数を上位10件から作らせる通常の検索の terms 集計で数え、その数字だけを渡す
原因が書かれていない記録が多いmissing で unrecorded にまとめて数え、画面に出す
日本語の埋め込みが思ったほど効かないTitan V2 の日本語はプレビュー。単語の一致の側を重くし、自社の記録で確かめる
原因の記録が続かない選択肢から選ぶ形にし、案と違ったときだけ説明を書く
件数を客への説明に使う件数は工場の記録の数。説明は車を見て分かったことで行う

上の3行が、この構成の失敗のほとんどです。 どれも「言葉がそろっていない」か「記録と推測が混ざる」かで起きます。

下の2行は、運用が始まってから効いてきます。 件数を客に見せると、「この部品が7割」が「7割の確率で壊れている」に聞こえます。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 受付のメモ(客の言葉)、車両の型式・走行距離・故障コード、過去の整備記録と修理事例です。整備管理のシステムには、客の氏名・連絡先・車両の登録番号も入っています。

  1. 索引に個人の情報を入れない … 氏名・電話番号・住所・車両の登録番号は、事例の索引にも埋め込みにも入れません。事例番号から整備管理のシステムに戻れれば足ります
  2. 受付のメモの自由記述を確かめてから渡す … 客の言葉の欄に、氏名や勤め先が書かれることがあります。取り込みの段で電話番号や登録番号の形の文字列を伏せ、生成AIに渡すのは症状の部分だけにします
  3. 原因を決めさせない … この構成が出すのは過去の記録と点検の順番の案までです。原因の特定、修理の方法、見積は整備士が決めます。 検査の合否や、保安基準に適合するかの判断にも使いません
  4. 件数を確率として説明しない … 工場の記録の偏り(よく来る車種、記録を書く整備士)がそのまま件数に出ます。客への説明に件数や順番の案を使わないことを、フロントとも決めておきます
  5. 索引の閲覧を工場の中に限る … 修理事例は工場の技術の蓄積です。検索画面は社員の認証の中に置き、メーカーの技術情報を入れるときはその利用条件を確かめます

誤りが起きた場合のリスクは、案の順番に引っぱられて本当の原因を見落とすことと、一般論を自社の事例と読んでしまうことの2つです。 前者は整備士が車を見る工程で、後者は事例番号の照らし合わせで防ぎます。

10まず何から始めるか

1週目:言葉の対応表と原因の区分を作る

工場長とベテラン2名に、よく来る症状の客の言い方と、整備記録での書き方を挙げてもらいます。原因の区分は30前後から始めます。 細かくしすぎると、1つあたりの件数が少なくなります。

2週目:30件で試す

入庫の多い3つの系統で各10件を選び、ノートの行を手元のAIサービスに貼って、近い事例と順番の案を出させます。実際に見た順番と、見つかった原因と並べて見ます。

3週目:車種の系統の表を作る

入庫の多い型式から、同じ車台・エンジン・足回りの部品を使う系統を、ベテランに聞いて表にします。全型式をそろえる必要はありません。

4週目:索引を作る

修理事例のノートを区分にそろえて OpenSearch に入れ、検索画面から型式と症状の区分で探せるところまで作ります。この時点では点検の順番の案を出さず、事例と件数だけを見ます。

2か月目: 受付のメモからの区分の取り出しと、3段の絞り込みを足し、作業指示の画面から呼べるようにします。原因の記録の選択肢を作業の確定に組み込みます。3か月目以降: 点検の順番の案を足し、案の1番目で原因が見つかった割合を毎月数えます。外れの多い型式の系統の表と言葉の対応表を直し、若手の整備士が工場長に聞かずに点検に入れる件数が増えた時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-14/最終更新:2026-10-15
確認した内容情報源確認日
Japanese(kuromoji)Analysis がすべてのドメインに含まれること。Sudachi が日本語に推奨される任意のプラグインで、辞書の差し替えがすぐには反映されないことAWS: Plugins by engine version2026-10-14
ハイブリッドクエリの検索が最大5つで、filter は1つの検索の形で書き複数の条件は bool にまとめること。検索の最上位に置くもので、function_score などの中に入れるとエラーか正規化が飛ばされることがあることOpenSearch: Hybrid query2026-10-14
正規化の既定が min_max、合わせ方の既定が arithmetic_mean で、weights の合計が1.0であること。結果が1件の検索ではその文書が1.0になることOpenSearch: Normalization processor2026-10-14
terms 集計の対象が keyword などの項目で、size の既定が10、missing で項目が無い文書を1つの区分に入れられることOpenSearch: Terms aggregation2026-10-14
Titan Text Embeddings V2 の入力が8,192トークン・50,000字まで、出力が1,024(既定)・512・256次元であること。英語に最適化され、日本語を含む100を超える言語の対応がプレビューであることAWS: Amazon Titan Text Embeddings models2026-10-14
output_config.format に JSON スキーマを渡すとスキーマに合う JSON が返ること。数値の minimum・maximum などの制約に対応しないこと。refusal・max_tokens で終わるとスキーマに合わないことがあることClaude Docs: Structured outputs2026-10-14

故障の原因の特定、修理の方法と見積、検査の判断は、整備士と工場の責任者が行ってください。 本記事は公開されている製品の仕様で確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-1534)についてのご相談はこちらから。

AI活用について相談する
目次