なぜこの実験をしようと思ったか
CADデータを元に加工作業を行う現場には、熟練者の頭の中にしか存在しない知識がある。
「この部品はこの順番で削る」「この材質にはこの工具を使う」——そういった判断は、長年の経験から来るものであり、マニュアルには書かれていない。
では、その判断をAIに学習させることはできるか。そのための入力データとして、CAD(設計データ)と過去の作業指示データのペアが使えないか——そういう問いから、この実験は始まった。
やったこと
データの準備
今回使ったデータは2種類だ。
① 形状データ(STEPファイル) 部品の3D形状を定義したCADファイル。加工の各工程ごとに、形状がどう変化したかを記録した途中形状データも用意した。
② 作業指示データ(JSON) 過去の加工プログラムをJSON化したもの。どの工具を使い、どの順番で、どんな切削条件で加工したかという情報が入っている。
この2つをペアにして、「この形状変化にはこの作業指示が対応する」という教師データを作った。
形状特徴の抽出
STEPファイルをPythonで解析し、以下の特徴量を抽出した。
- 面数・エッジ数
- 円筒面の直径リスト
- 面取りの数
- バウンディングボックス(X/Y/Z方向の寸法)
これらを固定長ベクトルに変換し、工程間の差分(Δ面数・追加された円筒径など)も特徴量として加えた。
scikitで類似検索
scikit-learnのコサイン類似度を使って、新しいCADデータが来たとき、過去のペアデータの中から最も似た形状変化を検索し、対応する作業指示を推奨値として出力する仕組みを作った。
python
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
# 形状ベクトルで類似検索
scores = cosine_similarity([query_vec], db_vecs)[0]
top_k = np.argsort(scores)[::-1][:3]
結果:動いた。ただし、誤判定した。
動作確認として、ある工程のCADデータを投入したところ、類似度1.0000という結果が出た。しかし推奨された作業指示は別の工程のものだった。
なぜか。
同じ部品の加工途中には、形状が同一に見える工程が複数存在する。外形の削り出しが終わった状態と、内径加工が終わった状態が、特徴量ベクトルとして区別できないケースがあるのだ。
形状は「何が出来上がっているか」を表すが、「次に何をすべきか」は表さない。
気づき:「意図」のメタデータが鍵だった
誤判定の原因を分析すると、一つの結論に至った。
形状データは必要条件だが、十分条件ではない。
正解率を上げるために有効だったのは、以下の情報を検索キーに加えることだった。
- 加工フェーズ(荒加工か、仕上げか)
- 品番(どの部品か)
- 工程番号(何番目の工程か)
これらは「形状」ではなく「意図」の情報だ。加工フェーズが分かれば、検索空間が一気に絞られ、正解率が大幅に改善する見込みが立った。
言い換えると、AIに渡すべきなのは「どう見えるか」だけでなく「何をしようとしているか」だということだ。
スモールスタートから複数部品への拡張設計
今回は1部品・1プログラムという最小単位で実験した。これは意図的な選択だった。
複数部品から始めると、「なぜ誤判定するのか」の原因が見えにくくなる。1部品で構造的な問題を特定してから拡張する方が、設計の精度が上がる。
複数部品に拡張する際の設計思想はシンプルだ:
1部品: JSON + scikit(メモリ上で完結)
数十部品: SQLite + numpy(ファイルベースDB)
数百部品〜: ベクトルDB(OpenSearch等)
段階的にスケールさせ、各段階で精度評価をする。一気にインフラを作らない。
展望
今回の実験で見えてきたことがある。
推論の精度は、データの量よりデータの構造化の質で決まる。形状・材質・フェーズ・品番——これらを正しく紐づけて蓄積できた側が、推論精度で圧倒的な優位に立つ。
今回はscikitによる類似検索で概念実証したが、ここに生成AIを組み合わせることで、推論の柔軟性はさらに上がるだろう。













