Media > AI活用ユースケース > 営業 > 中古建機の販売会社が、問い合わせの機種・年式・稼働時間・アタッチメントに合う在庫を、在庫の記述と整備記録から探して提案の候補を並べる

中古建機の販売会社が、問い合わせの機種・年式・稼働時間・アタッチメントに合う在庫を、在庫の記述と整備記録から探して提案の候補を並べる

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

中古建機の問い合わせを機種・年式・稼働時間・アタッチメントの条件に読み替え、全ヤードの在庫から合う機械を探します。候補ごとに整備記録の気になる記載を根拠付きで添え、提案の候補の一覧にします。

サマリー
生成AI
Azure OpenAI Service/Claude/Gemini
AIサービス
Azure AI/Google Vertex AI/OpenSearch
対象業界
商社/建設/製造
対象部門
営業
対象業務
情報検索/比較検討
主な課題
営業フォローが追いつかない/属人化している/情報が見つからない
AIで行う処理
検索(RAG)
主な効果
対応スピード向上/検索時間短縮/機会損失防止
導入難易度
★★★☆☆
実装レベル
本格構成
費用感
RAG・個別開発(大)
人間の確認
条件付き
現在工数
160h/月
AI導入後
56h/月
想定削減
65%
年間削減
1,248h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 営業が電話・メール・Webで問い合わせを受け、機種・クラス・年式・稼働時間・アタッチメント・予算・納期を聞き取ってメモする
  2. 販売管理の仕組みから在庫の一覧を出し、型式と年式で絞る
  3. 備考の欄を1台ずつ読み、アタッチメントと配管の有無を確かめる
  4. 候補の機械について整備工場の作業報告を探して開き、主な修理と気になる指摘を読む
  5. 分からない点を整備工場の担当やヤードの担当に電話で聞く
  6. 候補を2〜5台に絞り、写真を添えてお客様へ返信する
導入後(After)
  1. 人営業が問い合わせの内容を画面に貼るか打ち込み、検索のボタンを押す
  2. 自動生成AIが問い合わせを、必ず守る条件と、できれば満たしたい条件に読み替える
  3. 人営業が読み替えを確かめ、違うところを直す
  4. 自動OpenSearch が在庫の索引を、必ず守る条件で絞り、できれば満たしたい条件で並べる
  5. 自動上位の候補について、整備記録の索引から気になる記載と問い合わせに関わる記載を探す
  6. 自動生成AIが候補ごとに、合う理由・気になる記載・確かめることを、整備記録の行の番号付きで書く
  7. 自動販売管理の仕組みで、候補の販売の状態(販売中・商談中・整備中)を確かめる
  8. 人営業が候補の一覧と根拠の記載を見て、提案する機械を選び、返信を仕上げる
各工程の詳しい説明を読む
  1. 営業が電話・メール・Webで問い合わせを受け、機種・クラス・年式・稼働時間・アタッチメント・予算・納期を聞き取ってメモする
  2. 販売管理の仕組みから在庫の一覧を出し、型式と年式で絞る
  3. 備考の欄を1台ずつ読み、アタッチメントと配管の有無を確かめる
  4. 候補の機械について整備工場の作業報告を探して開き、主な修理と気になる指摘を読む
  5. 分からない点を整備工場の担当やヤードの担当に電話で聞く
  6. 候補を2〜5台に絞り、写真を添えてお客様へ返信する

(a)条件が台帳の項目と合わない。 「0.45クラス」はバケット容量の言い方ですが、台帳には「0.45」「0.5」「0.45㎥(JIS)」と入っており、同じクラスの機械が数字の書き方で漏れます。 「ブレーカーが使える」も、配管の有無なのか、ブレーカー本体が付くのかで意味が違います。

(b)整備の中身を確かめるのに時間がかかる。 作業報告は機械ごとの文書で、1台に数枚あります。稼働時間が少なくても、仕入れのときにエンジンの不調を直した記録が残っていることがあります。 お客様に伝えるべきことかどうかを判断するには、読まないと分かりません。

(c)探せる営業が限られる。 備考の書き方の癖と、どのヤードのどの機械が整備のどの段階にあるかを知っているのは、経験の長い営業です。新しい営業は、自分のヤードの在庫しか提案できません。

(d)稼働時間のメーターを鵜呑みにできない。 稼働時間のメーター(アワーメーター)を交換した機械は、メーターの値が機械の使われた時間と一致しません。交換の記録は整備記録の文章にしか残っていないことが多く、台帳だけで絞ると、実際には長く使われた機械が「稼働時間の少ない機械」として候補に上がります。

  1. 【人】 営業が問い合わせの内容を画面に貼るか打ち込み、検索のボタンを押す
  2. 【自動】 生成AIが問い合わせを、必ず守る条件と、できれば満たしたい条件に読み替える
  3. 【人】 営業が読み替えを確かめ、違うところを直す
  4. 【自動】 OpenSearch が在庫の索引を、必ず守る条件で絞り、できれば満たしたい条件で並べる
  5. 【自動】 上位の候補について、整備記録の索引から気になる記載と問い合わせに関わる記載を探す
  6. 【自動】 生成AIが候補ごとに、合う理由・気になる記載・確かめることを、整備記録の行の番号付きで書く
  7. 【自動】 販売管理の仕組みで、候補の販売の状態(販売中・商談中・整備中)を確かめる
  8. 【人】 営業が候補の一覧と根拠の記載を見て、提案する機械を選び、返信を仕上げる

6番目で、AIに書かせるのは「書かれていること」だけです。 「油圧の調子が良い」とは書かせず、「2026年5月、旋回モーターのシール交換(作業報告 R-2231 の3行目)」と書かせます。状態の良し悪しを言うのは、整備の担当と営業です。

3番目を省かないでください。 「0.45クラス」を0.45㎥ちょうどにするのか、0.4〜0.5㎥の幅にするのかで、候補が大きく変わります。読み替えの幅は、営業が最初に確かめます。

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

構成図
販売管理の仕組み(在庫の台帳)・整備工場の作業報告
   ▼【トリガー】毎日の夜間の取り込み
AWS Lambda ── 数値・配管の書き方をそろえ、作業報告を行に分ける
   ▼
Amazon OpenSearch Service
   │   在庫の索引:型式・年式・稼働時間・バケット容量(数値)
   │                 アタッチメント(nested)、ヤード、状態
   │   整備記録の索引:機械番号・日付・部位・本文(kuromoji)
   ▼【人】営業が問い合わせを貼る
AWS Lambda
   ├──▶ Claude(Amazon Bedrock)── 問い合わせを条件に読み替える
   ├──▶【人】読み替えを確かめる
   ├──▶ OpenSearch ── 在庫を絞る → 候補の整備記録を探す
   ├──▶ Claude(Amazon Bedrock)── 合う理由・気になる記載を根拠付きで書く
   ├──▶ 販売管理の仕組み ── 販売の状態
   ▼
候補の一覧 ──【人】選んで返信
役割想定する製品代替候補
検索基盤Amazon OpenSearch Service(bool、range、nested、kuromoji)Azure AI Search、Vertex AI Search(Agent Search)
生成AIClaude(Amazon Bedrock の Converse API、構造化出力)Azure OpenAI(Microsoft Foundry)、Gemini API
連携AWS Lambda(取り込み、読み替えと検索の呼び出し、販売の状態の照会)AWS Step Functions
保管Amazon S3(取り込んだ台帳と作業報告の写し、問い合わせと候補の記録)社内のファイルサーバー

販売管理の仕組みには、この構成から書き込みません。 在庫の情報と販売の状態を読むだけで、商談中の登録は営業がいつもの画面で行います。

日本語の文章を引くには、形態素解析(文章を単語に区切る処理)が要ります。 AWS の公式ページでは、OpenSearch Service のドメインには日本語の kuromoji と ICU の解析のプラグインが全ドメインに含まれるとされ、日本語向けとして Sudachi も選べます。整備記録の本文は kuromoji で区切り、部位の言い換え(「足回り」「下回り」「アンダーキャリッジ」)は検索の側の同義語で吸収します。

バージョンは 3.x 系を選びます。 AWS の公式ページでは、OpenSearch Service が対応するバージョンとして 3.5、3.3、3.1、2.19 などが挙げられています。新しく作るドメインで古い版を選ぶ理由はありません。

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

Step1

処理の起点を決める

起点は2つあります。毎日の夜間の取り込みと、営業の検索のボタンです。

夜間の取り込みは、全在庫の台帳と、新しく増えた作業報告を読みます。整備中の機械も入れ、状態の項目で分けます。 整備の完了が納期に間に合えば提案できるからです。

検索のボタンは、営業が問い合わせを貼った後に押します。昼の売約は夜まで索引に反映されないため、販売の状態だけは候補を出すたびに照会します。

Step2

入力データを集める

データ中身取得元
問い合わせお客様の言葉のままのメモ、またはメール・Webの本文営業が貼る・打ち込む
在庫の台帳機械番号、ヤード、メーカー、型式、機種、年式、稼働時間、バケット容量、運転質量、備考(アタッチメント・配管)、仕入れの区分、状態販売管理の仕組み
整備記録作業報告の番号、機械番号、作業日、部位、作業の内容、指摘事項整備工場の作業報告
型式の対応表型式とクラス(バケット容量の目安)、機種、メーカーの対応営業で作る表
部位の同義語の表部位の言い方の組(「足回り、下回り、アンダーキャリッジ」「旋回モーター、旋回モータ」)整備の担当と作る表
販売の状態販売中・商談中・売約済み・整備中販売管理の仕組み(候補を出すたびに照会)

質を決めるのは、型式の対応表です。 台帳のバケット容量は書き方がばらばらで空欄もありますが、型式からクラスを引けば漏れません。 表に無い型式は「未分類」にして、営業に追加を頼みます。

整備記録の「指摘事項」(直していないが気になること)は、作業の内容と別の欄に分け、候補の一覧で必ず出す項目にします。

Step3

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

取るものどこからどう取るか
必ず守る条件に合う機械在庫の索引bool の filter に range(年式の下限、稼働時間の上限、クラス)と term(機種)
できれば満たしたい条件在庫の索引bool の should に nested(アタッチメントと配管)と term(ヤード)
候補の気になる記載整備記録の索引候補の機械番号で絞り、指摘事項の欄と、問い合わせに関わる部位で match
稼働時間の注意整備記録の索引「アワーメーター」「メーター交換」で match_phrase
販売の状態販売管理の仕組み候補の機械番号ごとに照会

アタッチメントは nested で持ちます。 公式のドキュメントでは、配列の中の1つのオブジェクトの中で条件をそろえて探したいときに nested を使うとされ、通常のオブジェクトの配列は項目ごとに平らにされる、とあります。平らにすると「ブレーカーの配管」と「状態:要修理」が別のアタッチメントのものでも合ってしまいます。 nested は負荷が高いとされているので、使うのはアタッチメントだけにします。

在庫の索引の設定は次のようになります(一部の項目だけを示します)。

PUT /machines
{
  "mappings": { "properties": {
    "machine_no":   { "type": "keyword" },
    "yard":         { "type": "keyword" },
    "maker":        { "type": "keyword" },
    "model_code":   { "type": "keyword" },
    "machine_type": { "type": "keyword" },
    "class_m3":     { "type": "float" },
    "year":         { "type": "integer" },
    "hour_meter":   { "type": "integer" },
    "meter_replaced": { "type": "boolean" },
    "attachments":  { "type": "nested", "properties": {
        "kind":      { "type": "keyword" },
        "spec":      { "type": "keyword" },
        "condition": { "type": "keyword" } } },
    "stage":        { "type": "keyword" }
  } }
}

整備記録は別の索引にし、根拠を行の番号で示せるよう、作業報告を1行ずつの文書にします。

PUT /maint
{
  "settings": { "analysis": {
    "filter": { "part_syn": { "type": "synonym_graph", "synonyms": [
        "足回り, 下回り, アンダーキャリッジ",
        "旋回モーター, 旋回モータ",
        "アワーメーター, アワメータ, 稼働時間計" ] } },
    "analyzer": {
      "ja_index":  { "type": "custom", "tokenizer": "kuromoji_tokenizer",
                     "filter": ["cjk_width", "lowercase"] },
      "ja_search": { "type": "custom", "tokenizer": "kuromoji_tokenizer",
                     "filter": ["cjk_width", "lowercase", "part_syn"] } } } },
  "mappings": { "properties": {
    "report_no":  { "type": "keyword" },
    "line_no":    { "type": "integer" },
    "machine_no": { "type": "keyword" },
    "work_date":  { "type": "date" },
    "kind":       { "type": "keyword" },
    "text":       { "type": "text", "analyzer": "ja_index",
                    "search_analyzer": "ja_search" } } }
}

同義語は検索のときだけ効かせます。 公式のドキュメントでは、synonym_graph は検索の分析器だけで使うものとされ、索引のときに使うと複数の語からなる同義語の後ろの語の位置がずれる、とあります。

Step4

AIへ渡す前に整形する

  1. 型式からクラスを引く … 型式の対応表で class_m3 を入れます。台帳のバケット容量と違えば、両方を残して印を付けます
  2. 数値の書き方をそろえる … 「0.45㎥(JIS)」「0.45」を数値にし、「4,850h」「4850時間」を整数にします
  3. 備考からアタッチメントを取り出す … 「B配管」「ブレーカー配管」「1次2次配管」を kind: breaker_piping にそろえます。取り出せない書き方は、元の文を残して「未分類」にします
  4. 作業報告を行に分ける … 作業の内容と指摘事項を分け、kind に work/finding を入れます
  5. メーター交換の印を付ける … 整備記録に「アワーメーター交換」があれば、meter_replaced を真にします
  6. 問い合わせの文から個人の情報を外す … お客様の担当者の名前、電話番号、メールアドレスは、Claude に渡す前に伏せます

3番目の「未分類」は、捨てずに一覧にし、毎週の営業会議で対応表に足していきます。 5番目は値を直さず、候補の一覧に「メーター交換あり」と必ず出すまでにします。 交換前の値が残っていないと、本当の稼働時間は分かりません。

Step5

AIに処理させる

AIの仕事は、問い合わせの読み替えと、整備記録から伝えるべき記載を拾うことの2つです。

させることさせないこと
機種・クラス・年式・稼働時間を必ず守る条件として取り出す書かれていない条件を足すこと
アタッチメント・配管・ヤードの希望を、できれば満たしたい条件にする希望を必ず守る条件に格上げすること
「解体で使う」などの用途から条件を作り、読み替えた理由を書く読み替えを事実として書くこと
候補の整備記録から、指摘事項と問い合わせに関わる記載を拾い、行の番号を付ける記載から状態の良し悪しを判断すること
確かめることを挙げる(クラスの幅、メーター交換の扱い、納期)特定の機械を勧めること、価格に触れること

「状態の良し悪しを判断しない」が、いちばん大事な線です。 「足回りの摩耗 60%」が買ってよい状態かは、お客様の使い方で変わります。

用途からの読み替えには印を付けます。 「解体で使う」からブレーカーの配管を条件にするのは推測で、圧砕機のつもりかもしれません。inferred: true を付け、画面で色を変えて出します。

Step6

指示内容を固定する

1回目(問い合わせの読み替え)の指示です。

あなたは中古建機の販売会社で、営業の在庫探しを手伝う立場です。
お客様の問い合わせを、在庫を探すための条件に読み替えてください。
問い合わせに書かれていることだけを使い、書かれていない希望を足さないでください。

【読み替えの決まり】
- must: 外れたら提案にならない条件。機種、クラス、年式の下限、
  稼働時間の上限。お客様が「必ず」「以上」「以内」と言ったもの
- want: 外れても他が合えば提案になる条件。アタッチメント、配管、
  ヤード、メーカー
- クラスは【クラスの表】の値に当てる。「0.45クラス」は 0.45 とし、
  幅をどうするかは ask に入れる
- 用途の言葉(解体、法面、浚渫など)から条件を作るときは、
  inferred を true にし、reason に元の言葉と読み替えた理由を書く
- ask: お客様に確かめること

【厳守事項】
- 予算と納期は検索の条件にせず、budget_note と due_note に写してください。
- メーカーや型式を勧めないでください。お客様が挙げたものだけを使ってください。
- 稼働時間の上限を「くらい」「ほど」で言われた場合は must に入れず、
  ask に「稼働時間の上限」を入れてください。
- お客様の会社の規模や資金の状況を推し量って書かないでください。

【クラスの表】{class_table}
【問い合わせ】{inquiry_text}

2回目(候補の整備記録の読み取り)の指示です。

あなたは中古建機の販売会社で、営業が提案の前に整備記録を確かめるのを
手伝う立場です。下の【候補】ごとに、【整備記録の行】を読んでください。

【拾うもの】
- finding: 指摘事項の行は、内容にかかわらずすべて拾う
- related: 問い合わせに関わる部位(【問い合わせの条件】の用途と
  アタッチメントに関わる部位)の作業の行
- meter: アワーメーターの交換・不調の記載

【厳守事項】
- 行の文をそのまま quote に写し、report_no と line_no を付けてください。
  要約で言い換えないでください。
- 状態が良い・悪い、買ってよい・よくない、と書かないでください。
- 記載が無いことを「問題なし」と書かないでください。
  拾うものが無ければ、配列を空にしてください。
- 価格、値引き、保証について書かないでください。
- 【整備記録の行】に無い作業や部品を書かないでください。

【問い合わせの条件】{conditions}
【候補】{candidates}
【整備記録の行】{maint_lines}

「記載が無いことを『問題なし』と書かない」を明記しないと、AIは「特に問題は見られません」と書きます。 そのまま伝えると、記録が無いだけの機械に状態の保証を与えたことになります。

「要約で言い換えない」も同じ理由です。 「旋回時に異音、様子見」を要約すると、「様子見」の意味が消えます。

Step7

出力形式を固定する

Bedrock の Converse API の outputConfig.textFormat に JSON スキーマを渡し、1回目は次の形で受け取ります。

{
  "must": [ { "field": "machine_type | class_m3 | year | hour_meter",
              "op": "eq | gte | lte", "value": "",
              "inferred": false, "reason": "" } ],
  "want": [ { "field": "attachment | yard | maker",
              "value": "", "inferred": false, "reason": "" } ],
  "budget_note": "",
  "due_note": "",
  "ask": [""]
}

2回目は、候補ごとに次の形で受け取ります。

{
  "machine_no": "",
  "findings": [ { "report_no": "", "line_no": 0, "quote": "" } ],
  "related":  [ { "report_no": "", "line_no": 0, "quote": "" } ],
  "meter":    [ { "report_no": "", "line_no": 0, "quote": "" } ]
}

AWS の公式ページでは、すべての object に additionalProperties: false を書く必要があり、数値の minimum・maximum などの制約には対応していません。値の範囲は受け取った後に Lambda で確かめます。新しいスキーマは最初の呼び出しで最大90秒ほどかかるとされているので、待ち時間を長めにしておきます。

1つ目の理由は、must と want がそのまま filter と should になることです。

2つ目は、根拠を機械的に確かめられることです。 quote が該当の行と一字一句同じかを Lambda で照合し、合わなければ一覧に出さず「根拠の照合に失敗」と出します。 写し間違いや別の機械の行の混入に気づけます。

画面に出す候補の一覧は、検索と2回目の結果から Lambda が作ります。

列中身
機械ヤード、メーカー、型式、年式、稼働時間、クラス
合った条件/外れた条件want のうち合ったもの・外れたもの、外して探した must
必ず出す項目指摘事項の行、メーター交換の有無、前回の特定自主検査の実施日(台帳の値)
問い合わせに関わる整備related の行(作業報告の番号と行の番号)
販売の状態販売中・商談中・整備中
Step8

システムへ連携する

つなぎ先方式内容
販売管理の仕組み在庫の台帳の書き出し(毎晩)、販売の状態の照会(読み取りのみ)在庫の索引の元、売約の確かめ
整備工場の作業報告共有フォルダの読み取り(毎晩)整備記録の索引の元
Amazon OpenSearch ServiceLambda からの索引への登録と検索在庫の索引、整備記録の索引
Amazon BedrockConverse API(Claude)読み替えと、整備記録の読み取り
営業の画面社内の画面問い合わせの入力、読み替えの確かめ、候補の一覧

顧客の台帳とはつなぎません。 商談の記録は営業がいつもの台帳に書きます。

Step9

人が確認する

  1. 読み替えを見る … inferred の条件とクラスの幅を確かめ、違えば直して探し直します
  2. 指摘事項を読む … 指摘事項の行を作業報告の原本で確かめ、伝え方に迷うものは整備の担当に聞きます
  3. メーター交換の機械を確かめる … 交換前の稼働時間が残っているかを整備の担当に聞きます
  4. 返信を仕上げる … 外れた条件と指摘事項をそのまま書いて返信します

2番目を省かないでください。 指摘事項は、お客様が買った後の修理に直結します。

Step10

例外に対処する

起きること対応
候補が3台未満want を後ろから外し、次に inferred の must を外して探し直す。お客様が言った must は外さない
型式が対応表に無い「未分類」として残し、クラスの条件から外れることを一覧の上に出す
整備記録が無い機械一覧に「整備記録なし」と出す。「問題なし」とは出さない
quote が元の行と合わないその項目を出さず「根拠の照合に失敗」と出し、営業が原本を開く
候補が商談中・売約済み売約済みは外し、商談中は印を付けて残す
構造化出力が返らない営業が条件を画面の項目で選び、検索だけを使う
年式・稼働時間の値が範囲の外Lambda で弾き、営業に書き直しを頼む

3行目がいちばん大事です。 整備記録が無いのは報告が届いていないからで、状態が良いからではありません。

Step11

記録を残す

  • 検索ごとの、問い合わせの文(個人の情報を伏せたもの)、1回目の読み替えの JSON、営業が直した箇所
  • 検索の条件と、外した条件の順
  • 候補ごとの2回目の JSON と、根拠の照合の結果
  • 営業が提案した機械と、返信に書いた指摘事項
  • 取り込んだ台帳と作業報告の写しの時刻

営業が直した箇所は、読み替えの指示と型式の対応表を直す材料にします。

04実装レベルの3段階

最小構成:手元のAIサービスで問い合わせを条件に分け、表計算で絞る / 問い合わせの読み替え
半自動化:上記+OpenSearch に在庫と整備記録を入れ、営業が条件を選んで探す画面を作る / 全ヤードの在庫の検索と、整備記録の検索
本格構成:上記+問い合わせの文から条件を読み替え、候補の整備記録の記載を根拠付きで拾い、販売の状態を照会する / 問い合わせから候補の一覧まで

半自動化で、1件40分が25分程度になります。 全ヤードの在庫が一度に引け、整備記録も機械番号で探せるようになりますが、条件を組み立てる作業と、整備記録を1台ずつ読む作業が残ります。本格構成で14分になり、この段階が本記事の想定です。 差が大きいのは、整備記録を読んで「伝えることがあるか」を確かめる作業が、候補の数だけ繰り返されるからです。 段階を飛ばさないでください。 半自動化を1か月使うと、営業がどのクラスの幅で探し、どの部位の記載を気にしているかが検索の記録から分かります。それを指示と同義語の表に写してから本格構成に進むほうが、経験の長い営業の見方に近い一覧になります。

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

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

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

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

AI活用について相談する

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

向いている
  1. 複数のヤードに数百台の中古建機の在庫を持ち、建設会社・レンタル会社・解体業者などから「こういう機械はないか」という問い合わせを月に百件以上受けている販売会社。在庫の台帳に機種・年式・稼働時間・アタッチメントがデータで入っており、仕入れのときの点検と整備の記録も文章で残っているが、条件に合う機械を探して整備の中身まで確かめられるのが経験の長い営業と整備の担当に限られている場合。AWS を使える担当か委託先がいる場合。
向いていない
  1. 在庫が数十台で、営業が全台の状態を覚えている場合。在庫の情報が紙の台帳とヤードの写真だけで、データとして書き出せない場合(先に台帳のデータ化から始めます)。業者向けのオークションへの出品が中心で、個別の問い合わせに在庫を探して提案する業務が少ない場合。なお、機械の状態の保証、価格の交渉、どの機械を勧めるかの判断は、この構成では代替できません。台帳と整備記録に書かれた内容から、問い合わせに近い機械を探して並べるまでです。

07最小構成で試す方法

  1. 先月の問い合わせのメモから30件を選ぶ(電話・メール・Webを混ぜる)
  2. 営業に、それぞれ最終的にどの機械を提案したかを書き出してもらう
  3. 在庫の台帳を表計算に書き出し、型式の横にクラスの列、備考の横に配管の列を手で足す
  4. 30件の問い合わせを手元のAIサービスに貼り、「必ず守る条件と、できれば満たしたい条件に分け、推測で足した条件には印を付けてください」と指示する
  5. 出てきた条件で表計算を絞り込み、営業が提案した機械が残るかを見る
  6. 提案した機械の作業報告を1台ずつ貼り、「指摘事項の行をそのまま写してください。状態の良し悪しは書かないでください」と指示する

2番目の書き出しは必ず先に済ませてください。 営業が実際に提案した機械が答えで、それと比べないと「当たった」の意味が決まりません。

6番目では、写した行が作業報告の文と同じか、書かれていない作業を足していないかを最優先で見ます。

出てきた内容判断
提案した機械が絞り込みに残ったOpenSearch の索引に進む
配管やクラスを必ず守る条件にした指示の書き方で直る。構成は有効
備考からアタッチメントが読み取れない機械が多い台帳の書き方の決まりが先。 仕入れの入力を見直す

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

問題対策
候補が0件になるアタッチメントとヤードは should に置く。 must はお客様が言い切ったものだけ
「ブレーカーの配管」と「要修理」が別のアタッチメントなのに合うアタッチメントを nested にする
クラスの書き方で漏れる型式の対応表からクラスを引いて class_m3 に入れる
部位の言い方で整備記録が引けない部位の同義語を検索の側(synonym_graph)に置く
整備記録が無い機械に「問題なし」と出る指示で禁じ、一覧に「整備記録なし」と出す
AIが行を写し間違えるquote を元の行と照合し、合わなければ出さない
メーター交換の機械が上位に来る整備記録から印を付け、一覧に必ず出す
売れた機械を提案した販売の状態は候補を出すたびに照会する

上の2行が、検索の側の失敗のほとんどです。 5行目と6行目は生成AIの側の失敗で、書かれていないことを書かれているように見せる失敗です。指示で禁じるだけでなく、照合と表示の決まりで防ぎます。

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

この構成で扱うデータ: お客様の問い合わせ(会社名、工事の内容、予算、納期)、在庫の台帳、整備記録、販売の状態です。整備記録には、仕入れ先の会社名や使われていた現場が書かれていることがあります。

  1. 問い合わせの文から個人の情報を外す … お客様の担当者の名前、電話番号、メールアドレスは、Claude に渡す前に伏せます
  2. 仕入れ先の名前を候補の一覧に出さない … 整備記録の行に仕入れ先の会社名があれば、取り込みのときに伏せます。前の持ち主をお客様に伝えるかは、営業が仕入れの条件を見て決めます
  3. 状態の判断をAIに言わせない … 一覧に出すのは記載の写しだけです。状態の説明と保証は、整備の担当と営業の責任で行います
  4. 指摘事項を必ず伝える … 指摘事項の行を一覧から外す設定にしないでください
  5. 安全に関わる記録の扱いを決める … 労働安全衛生法の第45条は、政令で定める機械等について、事業者に定期の自主検査と結果の記録を求め、そのうちの特定自主検査は資格を持つ者か検査業者が行うとしています。一覧に出す前回の特定自主検査の実施日は台帳の値の写しで、買った後の検査はお客様が事業者として行うものです。 対象の機械かどうかは、機種ごとに政令と省令で確かめます
  6. 記録を見られる人を絞る … 問い合わせと候補の記録には、お客様の工事の予定がにじみます。見られる人を営業と営業の責任者に限り、保存の期間を決めて消します

誤りが起きた場合のリスクは、指摘事項を伝えずに売ること、メーター交換の機械を稼働時間の少ない機械として示すこと、整備記録の無い機械を問題の無い機械のように示すことの3つです。 どれも「記載の写し」と「状態の判断」を分けることで防ぎます。

10まず何から始めるか

1週目:台帳と作業報告を見る

販売管理の仕組みから全在庫を書き出し、型式・バケット容量・備考の書き方を見ます。型式の一覧を作り、型式の対応表の下書きを作ります。 整備工場の作業報告を20台分集め、指摘事項がどう書かれているかを見ます。

2週目:30件で試す

第8章のとおり、30件の問い合わせで、営業が提案した機械が絞り込みに残るかを見ます。作業報告の読み取りで、書かれていない作業を足していないかを最優先で見ます。

3週目:表と書き方の決まりを作る

営業と整備の担当から、配管と部位の言い方を集めて対応表にします。整備工場と、指摘事項を別の欄に書く決まりを話します。 表の手入れをする担当を決めます。

4週目:索引を作る

OpenSearch に在庫と整備記録の索引を作り、営業が条件を画面で選んで探せるようにします。この時点では問い合わせの文の読み替えと、整備記録の読み取りは使いません。

2か月目: 問い合わせの読み替えと、整備記録の読み取り、販売の状態の照会を足します。3か月目以降: 営業が読み替えを直した件数、根拠の照合に失敗した件数、候補が0件だった件数を毎月数え、1件40分が何分になったかを実測します。新しい営業が全ヤードの在庫を同じ早さで提案できるようになった時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-10-26/最終更新:2026-10-26
確認した内容情報源確認日
OpenSearch Service のドメインに Japanese(kuromoji)と ICU の解析のプラグインが全ドメインに含まれること。日本語向けとして Sudachi も選べることAWS: Plugins by engine version in Amazon OpenSearch Service2026-10-26
OpenSearch Service が対応するバージョンに 3.5、3.3、3.1、2.19 などがあることAWS: What is Amazon OpenSearch Service?2026-10-26
配列の中の同じオブジェクトで条件をそろえて探すときに nested を使うこと。通常のオブジェクトの配列は項目ごとに平らにされること。nested は索引と検索の負荷が高いことOpenSearch: Nested field type2026-10-26
synonym_graph は検索の分析器だけで使い、索引のときに使うと複数の語からなる同義語の後ろの語の位置がずれることOpenSearch: Synonym graph token filter2026-10-26
Converse API の outputConfig.textFormat で JSON スキーマに沿った出力が得られること。すべての object に additionalProperties: false が要ること。数値の minimum・maximum などに対応しないこと。新しいスキーマの最初の呼び出しで最大90秒ほどかかることAWS: Structured outputs(Amazon Bedrock)2026-10-26
労働安全衛生法 第45条:政令で定める機械等について事業者が定期に自主検査を行い結果を記録すること。特定自主検査は資格を有する者または検査業者が行うことe-Gov 法令API: 労働安全衛生法2026-10-26

機械の状態の説明と保証、どの機械を勧めるかは、整備の担当と営業がお客様と話して決めてください。 本記事は上記の公式ページで確認できた範囲だけを扱っています。

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

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

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

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