不具合の連絡を受けたときの初動調査を、該当ロットと過去の類似事例からまとめる
顧客から不具合の連絡が入った直後の1時間を対象にします。製造番号を渡すと、生産管理・出荷・検査記録・過去の不具合台帳をAIエージェントが順に照会し、集めた事実と類似事例を出どころ付きで一次報告の下書きにします。
- 利用ツール
- ChatGPT/Claude/Gemini/Google Apps Script/Make/n8n/Power Automate/Python
- 対象業界
- 医療/小売/物流/製造/飲食
- 対象部門
- 品質管理
- 対象業務
- 情報検索/比較検討
- 主な課題
- 判断に時間がかかる/属人化している/情報が見つからない
- AIで行う処理
- エージェント
- 主な効果
- 対応スピード向上/工数削減/検索時間短縮
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 営業またはメールで不具合の連絡を受け、受付票に症状と製造番号を書き取る
- 生産管理システムで製造番号から製造実績を検索し、ロット番号、品番、製造日、製造ライン、作業班、使用した材料ロットを控える
- 出荷管理システムで出荷実績を検索し、出荷先、出荷日、数量、伝票番号を書き出す(複数の顧客に分かれていることが多い)
- 検査記録システムで検査成績表を探し、規格値と測定値を見て規格に近い値がないかを確認する
- 設備の記録を開き、その製造日のそのラインで工程条件の外れやアラームが無かったかを見る
- 過去の不具合台帳で、似た症状の事例を言葉を変えながら何度も検索し、報告書PDFを開いて原因と対処を読む
- 集めた内容を一次報告の様式に転記し、上長に提出する
- 人受付担当が、症状と製造番号を受付フォームに入力する
- 自動受付レコードの作成をきっかけにワークフローが動き、製造番号の書式を検証し、症状の文章を整え、顧客名を伏せ字に置き換える
- 自動エージェントが `lookup_lot_by_serial` を呼び、製造番号からロットを特定する
- 自動エージェントが `expand_lot_range` を呼び、関係する可能性のあるロットを広めに出す
- 自動出荷先・検査記録・工程記録・過去の類似事例の4つを照会する
- 自動集めた事実を出どころ付きでJSONにし、伏せ字を戻して一次報告の様式に流し込む
- 人担当者が、事実の出どころを1つずつ確かめる
- 人担当者が、広めに出されたロット範囲を絞る
- 人担当者が、次に確かめることを決めて書き足す
- 人一次報告を確定し、関係部門へ共有する
各工程の詳しい説明を読む
- 営業またはメールで不具合の連絡を受け、受付票に症状と製造番号を書き取る
- 生産管理システムで製造番号から製造実績を検索し、ロット番号、品番、製造日、製造ライン、作業班、使用した材料ロットを控える
- 出荷管理システムで出荷実績を検索し、出荷先、出荷日、数量、伝票番号を書き出す(複数の顧客に分かれていることが多い)
- 検査記録システムで検査成績表を探し、規格値と測定値を見て規格に近い値がないかを確認する
- 設備の記録を開き、その製造日のそのラインで工程条件の外れやアラームが無かったかを見る
- 過去の不具合台帳で、似た症状の事例を言葉を変えながら何度も検索し、報告書PDFを開いて原因と対処を読む
- 集めた内容を一次報告の様式に転記し、上長に提出する
(a)システムを行き来する時間が、そのまま報告の遅れになる。 2から6までは「画面を開いて、検索して、値を書き写す」だけです。判断は何もしていないのに1時間以上が消え、その間、該当ロットの出荷は止まりません。
(b)できる人が限られている。 目当ての画面を迷わず開ける人が5名中2名で、その2名が休んだ日は初動が翌日になります。
(c)過去の類似事例が出てこない。 台帳の検索は文字列の一致でしか引けません。顧客は「動かない」と言い、台帳には「起動不良」とあります。言葉が違うだけで、同じ不具合が見つかりません。
(d)該当ロットの範囲を、その場で決めてしまう。 時間がないので今回のロットだけで報告を出し、前後のロットや同じ材料ロットの製品は範囲から落ちます。あとから範囲を広げ直すやり直しが、いちばん高くつきます。
- 【人】 受付担当が、症状と製造番号を受付フォームに入力する
- 【自動】 受付レコードの作成をきっかけにワークフローが動き、製造番号の書式を検証し、症状の文章を整え、顧客名を伏せ字に置き換える
- 【自動】 エージェントが
lookup_lot_by_serialを呼び、製造番号からロットを特定する - 【自動】 エージェントが
expand_lot_rangeを呼び、関係する可能性のあるロットを広めに出す - 【自動】 出荷先・検査記録・工程記録・過去の類似事例の4つを照会する
- 【自動】 集めた事実を出どころ付きでJSONにし、伏せ字を戻して一次報告の様式に流し込む
- 【人】 担当者が、事実の出どころを1つずつ確かめる
- 【人】 担当者が、広めに出されたロット範囲を絞る
- 【人】 担当者が、次に確かめることを決めて書き足す
- 【人】 一次報告を確定し、関係部門へ共有する
4番目が、この設計の分かれ目です。この構成は範囲を広めに出します。 今回のロットに加え、前後のロット、同じ日に同じラインで作ったロット、同じ材料ロットのロットまで一覧に出します。広く出して人が絞るほうが、狭く出して人が広げるより安全です。 出荷を止める判断は、範囲が足りないことで失敗します。
7番目から9番目を自動化しないことが、もう一つの分かれ目です。 出荷を止めるかどうかは、事実の確かさを人が確かめたうえで決めることです。
02今回想定するシステム構成
顧客からの不具合の連絡(電話・メール) │ 受付担当が製造番号と症状を受付フォームに入力 ▼【トリガー】受付レコードの作成 Power Automate ├──▶ Python ── 製造番号の書式検証/症状文の整形/顧客名の伏せ字化 ▼ Claude API(ツール利用)── 調べる手順にそって順に照会 │ ① lookup_lot_by_serial ──▶ 生産管理システム │ ② expand_lot_range ──▶ 生産管理システム(範囲を広めに出す) │ ├──▶ ③ list_lot_shipments ──▶ 出荷管理システム │ ├──▶ ④ get_inspection_records ──▶ 検査記録システム │ ├──▶ ⑤ get_process_records ──▶ 設備・工程の記録 │ └──▶ ⑥ search_past_incidents ──▶ 過去の不具合台帳 │ (③〜⑥は同時に呼べる) ▼ Claude API(structured outputs)── 事実・類似事例・次に確かめることをJSONで返す ▼ Python ── 出どころの突合/伏せ字を戻す/一次報告の下書きを組む ▼ 【品質管理の担当者が確認】事実を確かめる・ロット範囲を絞る・次の確認先を決める ▼ 一次報告の確定 ──▶ 関係部門へ共有/不具合台帳へ登録
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理 | Claude API | OpenAI API、Gemini API |
| 集計 | Python | Google Apps Script |
| 連携 | Power Automate | Make、n8n |
新しく足すのは、エージェントを動かす部分と、読み取り専用の照会口の2つだけです。土台は Claude API のツール利用(tool use)です。 関数呼び出しとも呼ばれ、どのツールを呼ぶかは、依頼内容とツールの説明文(description)をもとに Claude が決めます。 定義は name、description、input_schema(type/properties/required を持つ JSON Schema)で書き、strict: true で呼び出しがスキーマどおりになります。
Claude が生産管理システムに直接つながるわけではありません。 クライアントツールは自社のアプリケーション側で動き、Claude は stop_reason: "tool_use" と tool_use ブロックを返すだけです。実際にデータベースを叩くのは自社のプログラムで、結果を tool_result として送り返すと Claude が続きを進めます。
もう一つの土台が structured outputs です。 応答を指定したJSONスキーマに従わせる機能で、output_config.format に {"type": "json_schema", "schema": ...} を渡します。 制約付きデコードで応答が保証され、解析の失敗や必須項目の欠落を後段で受けずに済みます。 提供状況はGAで、ツール利用との併用が公式に示されています。
03どうやって実装するのか
処理の起点を決める
受付フォームにレコードが1件作られたことを起点にします。 不具合の連絡は時間を選ばずに入るため、定時実行にはしません。 1日1回にした瞬間、「報告を早く出す」という目的が失われます。
入力項目は製造番号、症状の文章、連絡を受けた日時の3つだけにします。品番や顧客名は製造番号から引けます。番号が聞き取れない連絡では起動せず、受付票だけを担当者に回します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 受付内容 | 製造番号、症状の文章、連絡を受けた日時、連絡の経路 | 受付フォーム |
| 製造実績とロットの近傍 | ロット番号、品番、製造日、製造ライン、作業班、材料ロット番号、前後および同日同ラインのロット | 生産管理システム |
| 出荷実績 | 出荷先コード、出荷日、数量、伝票番号 | 出荷管理システム |
| 検査記録と工程の記録 | 検査項目、規格値、測定値、判定、検査日、設備番号、工程条件の実績値、アラーム履歴 | 検査記録システム/設備の記録 |
| 過去の不具合 | 不具合番号、発生日、症状、原因区分、対処、再発防止策 | 過去の不具合台帳 |
この構成の質を決めるのは「製造番号とロットの対応」です。 ここが無ければ残りを整えても始まりません。逆にここさえあれば、他はロット番号で串刺しにできます。
データの取得方法を決める
6つのツールを定義し、エージェントに順に呼ばせます。 中身はすべて、自社プログラムからの読み取り専用の照会です。
| 順 | ツール名 | 照会先 | 入力 | 返すもの |
|---|---|---|---|---|
| ① | lookup_lot_by_serial | 生産管理システム | 製造番号 | ロット番号、品番、製造日、製造ライン、作業班、材料ロット番号 |
| ② | expand_lot_range | 生産管理システム | ロット番号、広げ方 | 関係する可能性のあるロットの一覧と、その理由 |
| ③ | list_lot_shipments | 出荷管理システム | ロット番号の配列 | 出荷先コード、出荷日、数量、伝票番号 |
| ④ | get_inspection_records | 検査記録システム | ロット番号の配列 | 検査項目、規格値、測定値、判定、検査日 |
| ⑤ | get_process_records | 設備・工程の記録 | ロット番号、製造日 | 設備番号、工程条件の実績値、アラーム履歴 |
| ⑥ | search_past_incidents | 過去の不具合台帳 | 検索語、品番、期間 | 不具合番号、発生日、症状、原因区分、対処 |
ツール定義は、次のように書きます。
{
"name": "lookup_lot_by_serial",
"description": "製造番号から、その製品が属する製造ロットを1件返す。生産管理システムの製造実績テーブルを照会し、ロット番号・品番・製造日・製造ライン・作業班・製造数量・材料ロット番号を返す。実績に存在しない場合は found を false にする。不具合の調査では最初にこのツールを呼ぶこと。ロット番号が分からない状態で他のツールを呼んではいけない。",
"strict": true,
"input_schema": {
"type": "object",
"properties": {
"serial_no": {
"type": "string",
"description": "銘板に刻印された製造番号。英字2文字・数字4桁・数字6桁をハイフンでつなぐ。例: PX-2409-018432"
}
},
"required": ["serial_no"],
"additionalProperties": false
}
}
description の書き方が、この構成でいちばん効きます。 説明文には、(1)何を返すか (2)どのシステムの何を照会するか (3)いつ呼ぶか (4)見つからないときどうなるか の4つを書きます。「ロットを調べる」だけでは呼ぶ順番が安定しません。入力の書式を例つきで書くのも、後述する「足りない引数を勝手に補う」への対策です。
expand_lot_range は lot_no と scope を required にし、scope を ["adjacent", "same_day_line", "same_material"] の enum で持たせます。説明文に「3つの scope をすべて呼び、重複を除いた一覧を作ること」「範囲を自分の判断で狭めてはいけない」と書きます。 広げ方の定義をツール側に置くのがねらいです。
③から⑥は、②が終わったあとなら同時に呼べます。 ツールを1つずつしか呼ばせたくない場合は tool_choice に {"type": "auto", "disable_parallel_tool_use": true} を指定しますが、ここでは指定しません。早く出すことが目的です。
AIへ渡す前に整形する
- 製造番号の書式検証 … 正規表現で確かめ、合わなければ起動しません
- 症状の文章の整形 … 挨拶や経緯を落とし、症状の記述だけを残します
- 検索語の組み立て … 「動かない」に対する「起動不良」「通電しない」を対応表から引きます
- 顧客名の伏せ字化 … 顧客名と担当者名を
CUST_Aのような符号に置き換えます - 照会件数の上限設定 … 上限を設け、達した場合はその旨を結果に含めます
- 同一連絡の検知 … 同じ製造番号で直近に調査済みなら、その調査番号を渡します
AIに処理させる
させるのは、「調べる手順」をたどることと、集まった事実を並べることの2つだけです。 6つのツールを順に呼び、台帳の検索が空振りしたら言い換えを試し、過去の事例から症状と品番が近いものを選び、集めた値を出どころ付きで並べ、照会できなかった項目を欠けとして書き出し、次に確かめることを候補として出します。
| させないこと | 理由 |
|---|---|
| 原因の推定 | 推定に引きずられて確認の順番が決まる。出力スキーマに原因を書く欄を作らない |
| ロット範囲の絞り込み | 安全側に倒すため。広げるのは機械、絞るのは人 |
| 出荷を止めるかどうかの判断 | 顧客との関係と在庫の状況を見て、人が決めること |
| 数値の計算・丸め | 測定値、数量、規格値は照会結果をそのまま載せる |
| 顧客への連絡文の作成 | この構成の範囲外。一次報告は社内向け |
1行目がいちばん大事です。確実なのは、出力のスキーマに原因を書く場所を作らないことです。 structured outputs は additionalProperties: false に対応し、制約付きデコードでスキーマどおりの応答が保証されます。スキーマに無い項目は出力できません。 ただし自由文に推定が混じることはあるので、そこはプロンプトで縛ります。
指示内容を固定する
あなたは製造業の品質管理部門で、不具合の初動調査を支援する立場です。
与えられたツールを使って事実を集めてください。推測で答えないでください。
【調べる手順】
1. lookup_lot_by_serial に製造番号を渡し、ロットを特定してください。
found が false のときは、そこで止めて data_gaps に理由を書いてください。
他のツールを呼ばないでください。
2. expand_lot_range を scope を変えて3回呼び、
関係する可能性のあるロットをすべて集めてください。
範囲を自分の判断で狭めないでください。
「関係なさそうだ」と思っても、一覧から外さないでください。
3. 1と2で得たロット番号について、list_lot_shipments(どこに何個出ているか)、
get_inspection_records(検査記録)、get_process_records(工程の記録)、
search_past_incidents(過去に似た不具合)の4つを調べてください。
4. search_past_incidents が0件のときは、渡された言い換えの検索語を
順に試してください。すべて試して0件なら、0件だったと書いてください。
【厳守事項】
- 不具合の原因を書かないでください。推定も、可能性の示唆もしないでください。
「〜が原因と考えられる」「〜の可能性がある」と書いてはいけません。
similarity_reason には、症状と品番のどこが一致したかだけを書いてください。
- ツールが返した値以外の数値・日付・ロット番号・出荷先を書かないでください。
四捨五入も、単位の変換も、概算への言い換えもしないでください。
- すべての事実に source を付けてください。
「どのシステムの、どのレコードか」が分かる形にしてください。
例: 生産管理システム/製造実績/LOT-2409-0182
- ツールが値を返さなかった項目は、空のままにしてください。
data_gaps に「どのツールが、なぜ返さなかったか」を書いてください。
空欄を埋めるために、他の項目から補わないでください。
- 出荷を止めるべきかどうか、対応の要否や緊急度を書かないでください。
- next_checks には「何を」「なぜ」「誰が」「どこで」の4つをそろえ、
そこに原因の推定を書かないでください。
【受付内容】{intake}
【台帳検索用の言い換え】{search_terms}
【過去に同じ製造番号で調査した記録】{past_investigation}
「原因を書かない」を3回に分けて書いているのは、書き方を変えて出てくるためです。 「原因」を禁じると「要因」と書き、それも禁じると「傾向として」と書き始めます。禁止する対象は言葉ではなく、文の形で示します。
「範囲を狭めない」と「0件だったと書く」も必要です。 何も言わないと、関係が薄そうなロットを気を利かせて落とし、似た事例が無いときは一般的な事例を持ち出します。落とされたことは出力から分かりません。
出力形式を固定する
output_config.format に、次のJSONスキーマを渡します。
{
"intake_id": "", "serial_no": "", "reported_symptom": "",
"identified_lot": { "found": true, "lot_no": "", "part_no": "", "production_date": "",
"line": "", "shift": "", "material_lot_no": "", "source": "" },
"lot_range": [
{ "lot_no": "", "scope": "target | adjacent | same_day_line | same_material", "source": "" }
],
"shipments": [
{ "lot_no": "", "customer_code": "", "ship_date": "", "quantity": 0, "slip_no": "", "source": "" }
],
"inspection_records": [
{ "lot_no": "", "item": "", "spec": "", "measured": "", "judgment": "", "source": "" }
],
"process_records": [
{ "lot_no": "", "equipment": "", "condition": "", "value": "", "alarm": "", "source": "" }
],
"similar_past_cases": [
{ "incident_no": "", "occurred_on": "", "symptom": "", "cause_category": "",
"action_taken": "", "similarity_reason": "", "source": "" } ],
"next_checks": [ { "what": "", "why": "", "who": "", "where": "" } ],
"data_gaps": [ { "tool": "", "reason": "" } ]
}
1つ目の理由は、原因を書く場所を作らないためです。 このスキーマには cause も root_cause もありません。similar_past_cases の cause_category は過去の事例に記録されている原因区分であって、今回の原因ではありません。
2つ目は、出どころの確認を速くするためです。 すべての事実に source が付くので、担当者は「この測定値はどのレコードか」を1行で確かめられます。本文だけでは値ごとに元のシステムを開くことになり、確認が元の30分に戻ります。3つ目は、lot_range と shipments から「止める候補の出荷伝票の一覧」を機械で作れることです。
使えるJSON Schemaの機能には範囲があります。enum、const、required、additionalProperties: false、$ref や $def は使えますが、minimum/maximum、minLength/maxLength は使えず、書くと400エラーになります。 数値の範囲の検証は後段のプログラムで行ってください。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォーム | Power Automate のトリガー | 受付レコードの作成を検知する |
| 生産管理システム/出荷管理システム | 読み取り専用のAPIまたはビュー | 製造実績、ロットの近傍、出荷実績を返す |
| 検査記録システム/設備・工程の記録 | 読み取り専用のAPIまたはCSV出力 | 検査成績、工程条件、アラーム履歴を返す |
| 過去の不具合台帳 | 検索API(全文検索) | 検索語での過去事例を返す |
| Claude API | ツール利用と structured outputs | 手順をたどり、事実をJSONで返す |
すべての照会を読み取り専用にしてください。 検査記録と工程の記録は日次のCSVでもかまいませんが、製造実績と出荷実績は、その日のデータが見えないと意味がありません。
人が確認する
全件、人が確認します。確認せずに報告を出す設計にしません。
- 事実の出どころを確かめる …
sourceのレコードを開き、出荷数量・測定値・製造日の3つは必ず見ます - ロット範囲を絞る … 症状と関係しないロットを外し、外した理由を記録に残します
- 次に確かめることを決める …
next_checksは候補です。順番と担当を決めるのは人です
2番目が、この構成の中心の作業です。 機械は広げるだけ広げ、人が絞ります。絞る判断には、「同じ材料ロットでも、この工程を通っていれば影響しない」といった現場の知識が要ります。 その知識を持つ人の時間をここに使えるようにするのがねらいです。
確認の目標は1件39分です。 それ以上かかるなら source の粒度が粗いか、lot_range が広すぎます。広すぎる場合は expand_lot_range の範囲の定義を見直します。プロンプトで狭めさせるのではありません。
例外に対処する
| 起きること | 対応 |
|---|---|
| 製造番号が聞き取れていない | エージェントを起動しない。 受付票だけを担当者に回す |
| 製造番号が製造実績に存在しない | found を false にして止める。他のツールを呼ばせない |
| 引数が足りないのにツールが呼ばれる | required と strict: true に加え、ツール側でも書式を検証してエラーを返す |
| 出荷実績が上限を超える | data_gaps に書き、「全部見た」ように見せない |
| 照会先が応答しない/類似事例が0件 | 空のまま返し欠けを明示する。 0件は0件と書かせ、一般的な事例を持ち出させない |
| 原因の推定が自由文に混じる | 「考えられる」「可能性がある」を機械で検知し、要確認として上に出す |
最後の行を軽く見ないでください。 プロンプトの制約は必ずすり抜けるので、出力の側でも文末表現を機械で検知し、 印を付けて担当者が先に読む形にします。
記録を残す
- 受付内容(製造番号、症状の文章、連絡を受けた日時と経路)
- エージェントが呼んだツールの順番と引数、各ツールが返した結果とJSONの全文
- 担当者が
lot_rangeから外したロットと、外した理由 - 一次報告の確定版と、配布した先と日時
- 後日判明した実際の原因と、そのときの対処
3つ目と5つ目を突き合わせると、絞る判断の基準を見直すべきかが分かります。
04実装レベルの3段階
最小構成でも105分が85分程度になりますが、①から③の75分は残るので、初動が早くなる効果はほとんどありません。半自動化で85分から39分程度になり、下書きが出るまでが数分になります。この段階の効果がいちばん大きく、本記事が想定するのもここです。 本格構成では工数は変わりませんが、(d)の「範囲をその場で決めてしまう」が解けます。
05工数削減シミュレーション
導入後 20件 × 39分 ÷ 60 = 13 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 顧客からの不具合連絡が月10件以上あり、製造番号からロットをたどる調査を品質管理の担当者が人手で行っている製造業。生産管理・出荷・検査記録・不具合台帳が別のシステムに分かれ、読み取り専用の照会口を用意できる場合。一次報告の様式が社内で決まっている場合。
- 不具合の連絡が月2〜3件で、担当者1名が記憶の範囲で追える場合。製造番号とロットの対応が記録されておらず、どの製品がどのロットから出たのか遡れない場合(先にトレーサビリティの記録を作るほうが効果が大きい)。報告様式と期限が法令で定められている業務では、法定報告の代わりにはできません。
07最小構成で試す方法
- 過去3か月の不具合連絡から5件を選ぶ(うち1件は類似事例が過去にあったもの)
- その5件について、当時どのシステムを何回開いたかを数える
- 1件分の製造実績・出荷実績・検査記録・工程記録・過去事例を、手でCSVに書き出す
- AIの画面に、そのCSVと症状の文章を貼り付ける
- 「この情報から、集めた事実と過去の類似事例と、次に確かめることをまとめてください。原因は書かず、すべての事実に出どころを付けてください」と指示する
- 出てきた内容を、当時の一次報告と比べる
この5件は必ずやってください。 ツールを作る前に「材料がそろえば報告が書けるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 当時の一次報告と同じ事実がそろっている | 6つのツールの定義に進む |
| 出どころが曖昧/原因の推定が混じる | 識別子を照会結果に含め、スキーマから原因の欄を外す。構成は有効 |
| 材料がそろわない(記録が無い) | 記録の整備が先。 AIの問題ではない |
最後の行が出ることは珍しくありません。 失敗ではなく、初動調査が遅い理由が分かったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 製造番号が無いのに調査が始まる | 前処理で弾く。 書式が合わない連絡では起動しない |
| 足りない引数をAIが補ってしまう | モデルが妥当に見える値を推測して埋めることがある。 required と strict: true に加え、ツール側でも書式を検証する |
| ツールを呼ぶ順番が安定しない | 説明文に「いつ呼ぶか」「その前に何が必要か」を書き、ログで順番を見ながら直す |
| ロット範囲を勝手に狭められる | expand_lot_range を3つの scope すべてで呼ばせる |
| 原因の推定が混じる | スキーマから原因の欄を外し、文末表現を後段で機械検知する |
| 類似事例が出てこない | 症状の言い換え対応表を先に作る |
| 出どころが曖昧で確認に時間がかかる | source を「システム名/テーブル/識別子」の形に固定する |
| 最初の1件だけ遅い | スキーマの文法はコンパイルされ24時間キャッシュされる。最初に時間がかかるのは仕様 |
| 担当者が下書きをそのまま出す | 出荷数量・測定値・製造日の3つの照合を必須にする |
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 顧客名、出荷先、出荷数量、不具合の症状、製造ロットの検査記録と工程条件。このうち「どの顧客が、どの不具合を申告したか」と「どの顧客に何個納めているか」は、外に出せない情報です。
- 顧客名を外部AIに渡さない … 顧客名と担当者名は前処理で符号に置き換え、出荷先も顧客コードのまま渡します。社名に戻すのは一次報告を組み立てる段階です。 外部へ出るのは「どこの誰か分からない取引先のロット番号と数量」だけになります
- 不具合の内容そのものが機微な情報 … 「納めた製品が動かない」は顧客の稼働状況を示します。符号化しても、品番と時期がそろえば推測できる場合があります。 入力を学習に使わないサービスを選んでください
- エージェントに書き込み権限を渡さない … ツールはすべて読み取り専用にします。接続情報はモデルに渡りません。 加えて、全ロットの検査記録を引ける全件検索のツールを用意しないでください。 そこが情報の出口になります
- 原因の断定をAIにさせない … 一次報告の原因の推定は社内で事実として扱われます。 後日それが誤りだったと分かっても、その推定を前提に動いた対応は戻せません
- 出荷を止める判断は人が行う … 出すのは候補の一覧までです。出荷の保留は顧客の生産計画に直接影響します
- 記録の保持期間を決める … 保証期間や法令上の保存義務に応じて変わります。ツールの結果も記録として扱うかを先に決めてください
誤りが起きた場合のリスクは、範囲の取り違えと、原因の誤った推定の2つです。 範囲は広めに出す設計で対処しますが、推定は設計だけでは防げません。 スキーマ、プロンプト、検知の3つを重ねます。
10まず何から始めるか
1週目:製造番号からロットをたどれるかを確かめる
過去3か月の不具合連絡から5件を選び、その製造番号で生産管理システムを検索します。5件すべてでロットが特定できるかを見ます。 できない件があれば、そこが最初に直すところです。
2週目:5件で試す
同じ5件の製造実績・出荷実績・検査記録・工程記録・過去事例を手でCSVに書き出し、AIに渡します。当時の一次報告と比べ、事実がそろっているかを最優先で見ます。
3週目:症状の言い換え対応表を作る
過去2年分の台帳から症状の書かれ方を洗い出し、「動かない/起動不良/通電しない」のように同じことを指す言葉をまとめます。
4週目:ツールを2つだけ作る
lookup_lot_by_serial と list_lot_shipments だけを定義し、「製造番号を渡すとロットと出荷先が返る」ところまで作ります。 この2つで105分のうち45分が対象になります。
2か月目: 残る4つのツールを足し、expand_lot_range の範囲の定義を現場と詰めます。どこまでを「関係する可能性がある」とするかは品質管理の判断です。3か月目以降: 受付フォームを起点に自動で動かし、105分が何分になるかを実測します。担当者が lot_range から外したロットを必ず記録し、 後日そこで同じ不具合が出ていないかを追えた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
ツール利用(関数呼び出し)が、自分で定義した関数や Anthropic が用意する関数を Claude に呼ばせる仕組みであること。どのツールを呼ぶかを、依頼内容とツールの説明文(description)から Claude が判断すること。クライアントツールは自分のアプリケーション側で動き、Claude は stop_reason: "tool_use" と tool_use ブロックを返し、実行結果を tool_result として送り返す往復になること。ツール定義が name、description、input_schema(type/properties/required)で書かれること。tool_choice の既定が {"type": "auto"} で、disable_parallel_tool_use を真にすると呼び出しを1つに抑えられること。strict: true で呼び出しがスキーマどおりになること。tools パラメータも入力トークンとして課金され、専用のシステムプロンプトが加わること。情報が足りないとき、モデルが渡されていない値を推測して埋めることがあること | Claude Docs: Tool use with Claude | 2026-09-22 |
structured outputs が、応答を指定したJSONスキーマに従わせる機能であり、output_config.format に {"type": "json_schema", "schema": ...} を渡す形であること。制約付きデコードにより応答が保証され、解析の失敗・必須項目の欠落・型の不一致を防げること。enum、const、required、additionalProperties: false、$ref/$def が使え、minimum/maximum、minLength/maxLength、再帰的なスキーマ、外部の $ref は使えず400エラーになること。スキーマの文法はコンパイルされ最後に使ってから24時間キャッシュされ、構造やツールの集合を変えると無効になるが name や description だけの変更では無効にならないこと。出力形式を説明するシステムプロンプトが加わるため入力トークンが増え、output_config.format の変更でプロンプトキャッシュが無効になること。strict: true のツール利用と併用できること。提供状況がGAであること。旧来の output_format が置き換えられていること | Claude Docs: Structured outputs | 2026-09-22 |
4つの社内システムへの照会方法は製品によって異なるため、読み取り専用のAPIやビューが用意できるかは導入前にベンダーへ確認してください。 また、不具合発生時の報告義務や記録の保存期間は法令や顧客との取り決めで定まるため、自社の品質保証部門と法務部門への確認が必要です。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0169)についてのご相談はこちらから。
