フルコード(失敗)
前書き
クラウドLLM(ChatGPT,Gemini,Claude)の傍らで
ローカルLLMがアツいのだが、クラウドLLMと比較すると、基礎の強さ(インフラ、対応するハードウェアスペック、データ量)で個人でギリギリ扱えるハードウェアでのAI駆動開発では、クラウドと比較して使いやすさに雲泥の差があることはどうしても否定できない・・・・
まず結論から
SLM(ローカルAI)のミスは人間の指示ミスとデータモデルの仕様に対する知識不足
指示出しのスキルとLLMに関する基本の理解を求められる
マネジメントの技術を学ぶという事なのだろうか?
SLM(Small Language Model)にコード修正をお願いをするときの注意点
ドメイン知識の理解に基づいているか
何が問題なのか
どこを見てほしいのか
どこは触らないでほしいのか
成功条件は何か
ローカルLLMに任せるなら例えばこのプロンプトを
このコードを直接修正しないでください。
まず問題になりそうな箇所を列挙してください。
削除してよい処理と、削除すると危険な処理を分けてください。
D3D12のResource State前提が崩れないかを重点的に確認してください。
修正コードは最後に最小差分だけ提示してください。
開発環境
GPU:RTX 3050 VRAM8GB
LM Studio
データモデル:Qwen 3.5 9B
コンテキスト長 147000
やったこと
https://github.com/kantamRobo/D3D12MA_DirectXTK12Polygon/tree/DXR_DXTK12_D3D12MA_Assimp
このリポジトリに存在する、DirectX Raytracingのソースコードを試しにQwen3.5 9B
に修正指示を出してみた。
"これらはDirectX Raytracing用のコードになる。
(中略)レイトレーシングパイプラインの描画に支障があるようであれば、
それを修正してほしい"
備考
こちらのプロンプトはGPT-5.5 Thinkingへの指示文そのままである
あのAIは頭がとてもいいので動くコードを書いてくれた
(ただし厳密に正確なコードかどうかはわからない)
結果
・必要なコードの欠落が発生
・潜在的なバグの可能性があるコードの生成
・論理エラーの発生(こちらはヒューマンエラーが大きい)
原因
・9B(9 Billion)モデルに身の丈を超えたコンテキスト長を要求してしまった
→その結果、コード生成の精度が悪化。
・プロンプトの指示文とその要求範囲が広すぎた
→これもコード生成の精度を悪化させた
長大コンテキストのデメリット
結論を言うと
Qwen側が疲れ果てて仕事が超雑になる
・コードに応じた柔軟な対応ができず、教条的な対応を乱暴に当てはめる
・そもそもコードの依存関係を把握できていない
・コメントだけを読んで拙速な修正を行う
・関数の呼び出し順を「当て勘」で行う
では、どういった対策を?(再掲)
より狭い範囲で具体的な指示を出す事
たとえば・・・・
・なぜそうするのか
・何が問題なのか
・どこを見てほしいのか
・どこは触らないでほしいのか
・成功条件は何か
を記述する
使うならこういう役割
Qwen3.5-9B は直接修正役よりも、
コードの怪しい箇所を列挙させる
関数の役割を要約させる
コメントを整理させる
候補を出させる
くらいが安全
逆に避けた方がいいのは、
今回の場合
既存D3D12/DXRコードを直接書き換えさせる
リソース状態遷移を判断させる
複数ファイル横断で責務を再設計させる
「不要な処理」を削除させる
とくに**「削除する」**はDX12ではリスクのある指示となるし、
また、AIがコードを削除した場合はミスの可能性がある。
後書き
今回の失敗経験を通じて、ローカルAIを使う事の最大の意義は
試行錯誤、歩み寄り、失敗と苦労の経験をする事
にあると思った。
苦労は買ってでもしろという奴である
そのコミュニケーションの過程は人間臭くあり愛着がわいてくるものだった。
使うのではなく、すり合わせ、歩み寄るような姿勢が求められるのだろう