はじめに
以前の記事で、ChatGPTを使ってPCの自動操作を行う方法を解説しました。
- 画面に「OKボタン」があったら押す
- 「ERROR」表示があれば停止する
- など、画面解析と操作指示をAIに任せる流れ
本編では、その中でもChatGPTへのプロンプト設計にフォーカスします。特に、「何々だったら何々の操作指示を出して」といった条件が増えていく状況で、どのようにプロンプトを書けばよいか、具体例と注意点をまとめました。
1. なぜプロンプト設計が重要なのか
ChatGPT(GPT-4など)は、自然言語で指示すると柔軟に回答してくれる一方、こちらの意図が曖昧だと余計な文章や想定外の形式で返してくることがあります。
自動化システムでは、**確定したフォーマット(例: JSON)**で返してもらうと処理しやすいため、
- 条件分岐の明示
- 応答形式(JSONなど)の強調
- 余計な文章を抑える指示
をプロンプトの中で丁寧に指定する必要があります。
2. 条件追加の基本的なやり方
「OKボタンがあったらクリック、CANCELボタンがあったらクリック、ERRORがあったら停止…」など、条件が1つ増えるごとに、プロンプトにも追記していきます。たとえば以下のように箇条書きで書くのが簡単です。
あなたは画像解析アシスタントです。
必ずJSON形式で回答してください。
以下の条件をチェックし、それに該当する場合は対応するJSONを返してください:
1) 画面に「OKボタン」がある → {"action":"click","target":"ok_button"}
2) 画面に「CANCELボタン」がある → {"action":"click","target":"cancel_button"}
3) 画面に「ERROR」が見つかった → {"action":"stop","reason":"error_detected"}
上記のいずれにも当てはまらない場合は {"action":"none","target":""} を返してください。
重要: JSON以外の文章や説明は付与せず、
最終的に JSONオブジェクトだけ を出力してください。
2.1 具体例
- 「OKボタン」と「CANCELボタン」が同時に見つかる場合はどっちを優先する?
- その場合のルールをあらかじめ追記します。
- 条件4つ目を追加したい場合、同じ構文で**4) ~~~ → {JSON}**を付け足せばOK。
3. 条件の増加と表形式
条件が10個、20個…と増えたら、箇条書きが長くなって読みにくいですよね。
そこで、表形式で「(条件) → (JSON出力)」をまとめるのも便利です。
ChatGPTに対して、**「この表のとおりに出力してください」**と書けば、記述が明瞭になります。
3.1 サンプル(表形式)
あなたは画像解析アシスタントです。
次の表どおりにJSON形式で回答してください。
(条件) (JSON出力)
-------------------------------------------------
画面に「OKボタン」 {"action":"click","target":"ok_button"}
画面に「CANCELボタン」 {"action":"click","target":"cancel_button"}
画面に「ERROR」 {"action":"stop","reason":"error_detected"}
該当なし {"action":"none","target":""}
不要な文章は一切書かず、JSONのみを返してください。
このように書くと、ChatGPTは表を見て判断し、対応するJSONオブジェクトを返しやすくなります。
4. 応答形式を厳密に維持するための工夫
4.1 「JSONだけで返す」ことを強く求める
LLMは優秀ですが、しばしば「説明文」や「(例: 了解しました)と言った余計なメッセージ」を付けがちです。
「一切の文章は書かず、必ずJSONだけで返してください」と明記し、さらに例示も載せると良いです。
重要:
返答は {"action":"click","target":"ok_button"} のような JSON だけで、
前後に文章や改行を付けず、1行に出力してください。
4.2 複数条件が同時に当てはまる場合のルール
- 例えば、画面に「OKボタン」も「ERROR」も同時に出ていたら、どちらを優先するのか?
- これもプロンプト内で優先順位を決めておきます。
もし複数の条件が同時に該当する場合は、
ERROR > WARNING > OKボタン > CANCELボタン の順に優先してください。
LLMは自然言語のやり取りが得意なので、こうした優先度ルールを盛り込むと、より的確な応答が得られます。
5. 大規模な条件分岐になったら?
5.1 トークン数の問題
- ChatGPT (GPT-4)にはトークン上限があり、条件が膨大(数十個以上)になるとプロンプトが長くなりすぎる恐れがあります。
- その場合、外部ファイルやローカルのプログラムロジックで条件をまとめる方法も検討しましょう。
- ChatGPTには「曖昧な状態の画像だけを送って判断を仰ぐ」、それ以外はローカルで判定、という役割分担も有効です。
5.2 ローカル制御とのバランス
- 画面から文字列を抽出(OCR)してif-elseで処理可能なものはローカルでやり、
-
曖昧な表現(例: 「ボタンのラベルが英語か日本語か」「ERRORメッセージの詳細によって対処が変わる」など)だけChatGPTに任せる
といったハイブリッド設計が、実運用ではよく使われます。
6. 最後に
- プロンプト設計はシステム全体の精度に直結します。
- 条件を増やす場合は、箇条書き or 表形式で対応するJSONを明確に示しましょう。
- 複数条件が同時に成立する場合の優先度や、JSON以外は返さない指示を徹底するのがコツです。
- 規模が大きくなりすぎたら、トークン数や管理性にも気を配り、ローカル側との役割分担を最適化しましょう。
参考リンク
以上