この記事の図と依頼文は、英語で記録したものです。

誰が、何をしたいか

小さな機械加工工場の生産技術担当が、配置の変更を試したいと考えています。フォークリフトを2台にするか、ラックを搬入口に寄せるか、といった変更です。建屋は20年前のもので、図面は見つからず、測量する時間もありません。手元にあるのはスマートフォンと、AIエージェントです。

ほしいのは、機械まで入った建屋のモデルです。変更を試せる精度で、2D平面図、3D、パレットの流れのシミュレーション、同僚に見せる図面まで作りたいと考えています。そして、そのモデルをどこまで信じてよいかも知りたいところです。

手元にあったもの

  • 写真8枚:外のヤードから2枚、中から目の高さで6枚。
  • 長さ1つ:建屋の長さは約48 m。どちらが南かも分かっていました。
エージェントに渡した写真8枚
エージェントに渡した写真8枚

エージェントに渡した写真8枚。いずれも生成した画像です(下記)。

写真は撮影したものではなく、生成したものです。 エージェントの誤差を測るには、本当の配置が要ります。そこでまず、架空の工場「Kestrel Bend Precision Works」(48 × 28 mの加工・組立工場)をLaydyneで作り、正解モデルとしました。これを8か所のカメラ位置から get_view_image で描き、Codexの画像生成で、カメラ・部屋・機械やラックや作業台の数を保ったままカラーの写真にしました。プロンプトと全試行は prompts.mdにあります。作り直したエージェントが見たのは写真8枚だけです。正解モデル、描画、プロンプトは見ていません。

流れ

  1. 担当者が写真を撮る。
  2. エージェントが写真を読み、建屋をつくる:壁、柱、扉、搬入口、窓、トップライト、事務所。
  3. 設備を置き、Laydyneが配置を検査する。
  4. エージェントが写真ごとの撮影位置からモデルを描き、違う所を直す。
  5. Laydyneが、フォークリフト1台と2台でパレットの流れを流して比べる。
  6. 担当者が、縮尺付きの図面・数量・案件ファイルを渡す。

各段階の道具と成果は flow.json にあります。

手順

エージェントは、Codex(CLI 0.160.1、既定のモデルgpt-6-astra、推論low)です。Laydyne StudioにMCPでつなぎ、写真8枚だけを置いた空のフォルダで作業させました。各プロンプトは同じ会話の続きとして送っています。プロンプトは、送ったとおり英語のまま載せます。

1. 建屋

I'm the production engineer at our machining plant. We have no drawings of the hall, only the 8 photos I attached (they are also in this folder as photo-*.webp): photos 1 and 2 are taken outside in the yard, photos 3 to 8 inside the hall. The hall is about 48 m long; the long façade with the two dock doors and the personnel door faces south.

Using the Laydyne tools, start a new project (create_space with fresh: true) and build the building only: the hall floor, the outer walls with their height, the steel columns, the personnel door, the dock doors, the windows and roof lights, and the glazed office / QC room. Estimate the other sizes from things of known size in the photos (doors, dock doors, pallets, workbenches, the forklift) and give every part source "assumed" and a short note on how you estimated it. Show me a 2D plan and a 3D view, and tell me how you estimated the width and the height of the hall.

2分18秒、ツール呼び出し10回で、48 × 24 m・52部品の建屋ができました。大事な2つの推定について、エージェントは次のように説明しています。

  • 奥行き(24 m):室内に約12 mのスパンが2つあると読んだ。「全体の寸法でいちばん不確か」とも書いている。
  • 壁の高さ(9 m):外壁の高さが、出入口の扉(2.2〜2.3 m)のおよそ4つ分に見えた。

2. 設備

Now place the equipment you can see in the photos: every machine by type (machining centres, lathes, grinders, saws, measuring machines and so on), the pallet racking, the workbenches and assembly cells, the roller conveyor and packing table, the pallets, the forklift, and the painted floor zones (aisles, walkways, hatched areas). Use get_part_catalog for suitable parts and sizes, turn each machine to face the side it is operated from, and count carefully across the photos so that nothing seen in two photos is placed twice. Give each part source "assumed" and a short note naming the photos it is seen in. Then run check_space and fix what it finds.

3分52秒・16回でした。エージェントが置いたものは次のとおりです。

  • 機械通路をはさんで向かい合う2列の機械
  • 東壁沿いに2列のパレットラック
  • 組立台、ローラーコンベヤ、梱包台2台、パレット、フォークリフト
  • 床に塗られた通路

検査の指摘は0件まで直しています。見分けられなかったことも、「旋盤・研削盤・帯鋸を確信をもって見分けられなかった」とはっきり書いています。

3. 写真と見比べて直す

Check the model against each photo. For every photo, estimate where it was taken from (eye at about 1.6 m, a target point and the vertical field of view) and draw the model from there with get_view_image (camera eye, target and fov; caption: false; 1536 × 1024 like the photos). Compare each drawing with its photo and fix what differs: sizes, positions, counts, doors and windows. When the model matches the photos, run check_space on all floors, save the project in the browser with save_local_project, and export it with export_project to the file rebuild.laydyne.json in this folder (join the pieces and check the SHA-256). Finally list which sizes are still estimates and the one measurement that would improve the model most.

9分50秒・46回(うち画像25回)でした。エージェントは写真ごとにカメラの位置を推定し、そこからモデルを描きました。そのうえで、屋根の構造、ラックの間隔、機械のずらし方、コンベヤの向き、搬入口まわりを直しています。

写真3と作り直したモデル
写真3と作り直したモデル

左:写真3(生成)。右:エージェントが推定した撮影位置から描いた、作り直しのモデル。

写真5と作り直したモデル
写真5と作り直したモデル

機械通路。左:写真5(生成)。右:推定したカメラから描いたモデル。

写真8と作り直したモデル
写真8と作り直したモデル

ラックの間。左:写真8(生成)。右:作り直しのモデル。

8組すべては compare-sheet.webp にあります。一番役立つ実測を1つ挙げるよう頼むと、エージェントは「建屋の南北の内法幅」を挙げました。これは、実際に外れた寸法そのものです(後述)。

作り直した建屋の3D
作り直した建屋の3D

Laydyneで作り直した建屋(屋根を外した表示)。

4. フォークリフトは1台で足りるか

Next I want to know whether one forklift is enough. Read get_process_catalog first. On this model, set up the material flow for one 8-hour shift: a pallet of raw material arrives at the dock doors about every 6 minutes and the forklift puts it away in the pallet racks; every 6 minutes on average a pallet is taken from the racks to the machines; machined parts go to the assembly cells, then along the roller conveyor to the packing table, and every 10 minutes on average a finished pallet is taken by forklift from the packing table to the dock staging area. One forklift does all the pallet moves. Run it, then tell me the forklift utilisation, how long pallets wait for the forklift, and how many pallets are moved. Save this as option A (save_process_option). Then change one thing, a second forklift, save it as option B, and compare A and B with compare_process_options under the same arrivals, seed and number of runs. Tell me which differences are beyond the noise and which inputs are assumptions I should measure.

6分58秒・19回でした。エージェントは作り直したモデルの上に工程を組み、同じ8時間シフトを両案それぞれ20回(乱数の種20261006、対にして比較)流しました。

フォークリフト1台と2台の稼働率・待ち・搬送回数
フォークリフト1台と2台の稼働率・待ち・搬送回数

保存された比較結果より(process-des-2.7.0)。

1シフトあたり、20回の平均A:1台B:2台
フォークリフトの稼働率(1台あたり)90.3%46.4%
フォークリフト待ちの平均9.9分0.5分
パレットの搬送回数200.8207.2

待ち時間の差は、ばらつきを超えています(待ちの平均の差の95%区間は6.1〜12.7分)。フォークリフトの走行距離の差は、ばらつきの範囲内でした。

エージェントが最初に測るべき入力として挙げたのは、積み込みと荷下ろしの時間です(仮定は20/40/60秒と30/60/90秒)。プロンプトの矛盾も指摘しています。生産には毎時10パレットを供給するのに、出荷は毎時6パレットなので、どちらの案でも完成品がたまっていきます。

案Bの開始1時間後の様子
案Bの開始1時間後の様子

2台で開始1時間後の平面:フォークリフトと運んでいるパレット。この図のために案Bをもう1回流しています。上の数値は、エージェントが保存した比較結果のものです。

5. 受け渡し

Finally, prepare the hand-over for my colleagues: a dimensioned A3 PDF drawing of the hall (get_view_image with delivery: true, format "pdf", dimensions: true; join the pieces and check the SHA-256), the floor areas and part counts from get_space_quantities saved as quantities.json, and a fresh export of the whole project as handover.laydyne.json. Save the files in this folder, save the project in the browser again, and tell me where each file is.

1分51秒・9回でした。できたのは、寸法と面積表の入ったA3・1:200の図面、数量(1,152 m²、136部品)、両案と比較結果を含む案件ファイルです。PDF、quantities.json、案件ファイルを取得できます。

寸法入りの図面
寸法入りの図面

エージェントが作ったA3の図面。測量ではなく、モデルを描いた図面です。

結果

正解モデルとの誤差

作り直したモデル(手順3の後)を 採点用のスクリプトで採点しました。このスクリプトは、作り直しのモデルを壁の中心で正解モデルに重ね、同じ種類の部品どうしを近い順に4 m以内で対応づけます。全結果は score.json、要約は facts.json にあります。

正解モデルと作り直しの平面
正解モデルと作り直しの平面

上:写真の元になった正解モデル。下:写真から作り直した建屋。どちらも1:200。

正解作り直し誤差
建屋の長さ(与えた値)48.0 m48.0 m0
建屋の奥行き28.0 m24.0 m−4.0 m(−14%)
壁の高さ8.6 m9.0 m+0.4 m
床面積1,344 m²1,152 m²−14%
長手方向の柱の間隔8 m8 m0
機械12129台が対応
ラックの連10108連が対応
窓/トップライト14/614/6すべて対応
搬入口の位置(壁沿い)36.0/44.0 m35.8/44.3 m−0.2/+0.3 m
出入口の位置(壁沿い)12.5 m10.4 m−2.2 m
  • 対応できた47部品の位置誤差:中央値1.97 m、95%値3.08 m、最大3.16 m。 - 大部分は奥行きの4 mの誤差によるもので、配置全体が南北に約2 mずれる。 - 本当の壁に縮尺を合わせると、配置の誤差は中央値1.63 m、95%値2.59 m。
  • その内訳:柱0.05 m、搬入口0.25 m、窓0.40 m、機械1.86 m、ラック1.84 m。
  • 機械の向き:対応した9台は、すべて正しい向き。
  • 見落とし・まとめたもの: - 正解は、マシニングセンタ6台と旋盤2・研削盤2台が向かい合う配置。エージェントは6台×2列とし、両方の列を帯鋸のある工具の隅まで延ばした。 - 組立台は、3つのセルにある9台のところ6台。コンベヤは4 m×3本ではなく12 m×1本。
  • 撮影位置の推定:ずれは中央値で4.0 m(上の約2 mのずれを含む)、向きは4.6°。最大は写真6の27.5°。
  • 写真との見比べ(手順3)の効果:手順2の時点と比べて、95%値は3.35 mから3.08 mに下がった。4 m以内で対応したラックは4連から8連に増えた。

最大の誤差は、幅を1か所実測すれば消えた誤差です。 その実測は、エージェント自身が挙げていました。

トークンと時間

プロンプト時間ツール呼び出し(失敗)入力トークン(うちキャッシュ)出力トークン
1. 建屋2分18秒10(1)57.8万(51.1万)2.3千
2. 設備3分52秒16(0)83.3万(81.0万)4.9千
3. 見比べと修正9分50秒46(3)266万(249万)13.5千
4. シミュレーション6分58秒19(0)255万(237万)6.2千
5. 受け渡し1分51秒9(0)102万(97万)1.7千
合計24分49秒100(4)764万(715万、94%)28.7千

作り直し(手順1〜3)だけなら16分・72回です。失敗した4回はどれもエージェント側の入力の誤りで、Laydyneは理由をはっきり返していました。

  • 2Dの図にカメラを指定した
  • 床の表示の文字を消すために text: null、続けて text: "" を送った(その後、null で消せるように直した)
  • 先の3件の処理中に画像を頼んだ(Studioのタブは同時に3件まで受け付ける)

できないこと

  • 測ること。 ここでの寸法はすべて、写真の中の比率からの推定です。奥行きの4 mのずれは、1つの読み違いがそのまま出た典型で、エージェントは全部品を推定として印を付けています。巻尺で1か所測れば、いちばん大事な数字が直ります。
  • 写っていないものを見ること。 ほかの機械の陰になった機械、部屋の奥、事務所の中は分かりません。旋盤とマシニングセンタの区別もつかず、エージェントもそう書いています。
  • 仕事の中身を知ること。 シミュレーションの到着の間隔、積み下ろしの時間、加工時間は、担当者がプロンプトに書いた仮定です。Laydyneはその数字で待ちと能力を計算しますが、フォークリフト同士の衝突や、実際の運転者のふるまいは計算しません。
  • 写真を測量に変えること。 図面はモデルを縮尺どおりに描いたもので、表題欄にも「寸法は現地で未測定」と書かれます。

試してみる

  1. 自分のエージェントをLaydyneにMCPでつなぎ(Codex、Claude Codeなど。説明)、Studioを開いておきます。
  2. 自分の現場の写真を、室内は目の高さで、外からも合わせて6〜10枚撮り、分かっている長さを1つ控えます。
  3. 上のプロンプトか、最初のプロンプト集の「写真から部屋をつくる」から始めます。
  4. 正解の分かった状態で同じ試験をするなら、images/photo-*.webp の写真から作り、結果を answer-key.laydyne.json と比べます。
node apps/studio/scripts/score-photo-rebuild.mjs docs/articles/factory-from-photos/answer-key.laydyne.json your-rebuild.laydyne.json

モデル作成・検査・図面・書き出しは無料です。シミュレーションの実行にはProが必要です。