オレオレプロンプトTips
はじめに
生成AIの出力精度を上げることは、とても重要な課題です。
出力精度を上げる方法はいくもありますが、そのなかで精度向上のために特に簡単に取り組めるのは、以下の2つであると私は考えます。
- 利用するモデルの選択
- プロンプトのチューニング
最近は精度の向上によりモデルが文脈を読めるようになったことや、Chain of Thought(CoT)をはじめとした重要なテクニックがあらかじめサービスに組み込まれていることにより、プロンプトエンジニアリングの話題は下火になりつつあります。
一方で新しいモデルは、驚くことが仕事の方たちによって度々注目を浴びます。GPTやClaude、Geminiのどれが優れているのかといった議論は頻繁に行われますが、現在においてこの議論はむしろ重要ではない、と私は考えます。モデルはすぐに新しいバージョンに代替されますし、直近のLLMの精度はどれも大差ないからです。
GPT-3.5やGPT-4の時代において、モデルが文脈を読みきれないことは多々ありました。そのような中では、生成AIの利用者がプロンプトの緻密なテクニックによって「行間」を埋めてあげる作業が必要でした。
モデルの精度が向上した現在では、この作業は不要となりつつあります。しかし、生成AIの出力が求める精度に達していないとき、そしてそれがRAGやワークフローの実装などの多大な労力をかけずとも達成できそうなとき、依然としてプロンプトエンジニアリングは必要です。
ということで、早くも廃れつつある(?)プロンプトエンジニアリングのちょっとした価値を深堀りするために、今回は擦り切れるほど読み込まれた一般的なプロンプトのテクニックではなく、自分にしか需要がないのでは?というレベルのローカルプロンプトTIPSをご紹介します。
結論
言語ごとのRulesが知りたい人はPatrickJS/awesome-cursorrulesとか見るといいと思います。
その前に:いまだによく使う一般的なテクニック
まず、基本的なプロンプトエンジニアリングのテクニックから確認しておきましょう。これらは今でも十分に効果があります。
役割を与えるのは定番中の定番です。「あなたは優秀なエンジニアです」「あなたはデザインの専門家です」などと明示することで、出力の質が向上します。
成果物の形式を指定することも重要です。「Markdown形式で」「JSON形式で」「箇条書きで」など、形式を明確にすることで、期待通りの出力が得られやすくなります。
箇条書きで手順を与えるのも効果的です。Step-by-stepの指示は良くないと言われることもありますが、個人的には体感的に効果があると感じています。タスクを明確に分解することで、AIも理解しやすくなるのでしょう。
あとは、スクリプトを使って文字数をカウントしてもらうのも便利です。文字数制限のある文章を書くときに重宝します。
これらは基本ですが、押さえておいて損はないテクニックです。
実践的なプロンプトTips
それでは、ここからは自分が実際に使っているプロンプトTipsを紹介していきます。
コーディング全般
コーディングに関するプロンプトで、自分が最も気に入っているのがこちらです。
与えられた要件を満たすための、必要最低限かつ本質的な実装をお願いします。
これが1番好きです。このプロンプトを使うことで、対処療法的なコードを書かなくなります。
LLMは放っておくと、あれもこれもと機能を盛り込んだり、冗長なコードを生成したりしがちです。しかし「必要最低限かつ本質的な実装」と明示することで、シンプルで保守性の高いコードが生成されるようになります。
それに、LLMが書く膨大な量のコードをレビューする際の認知負荷が高すぎるんですよね。変更差分が大きいと、何が本質的な変更なのか見極めるのが大変です。そういう意味でも、変更差分を最小限にしてほしいという気持ちがあります(これはAIコーディングに限った話ではありませんが)。
Google Apps Script
Google Apps Scriptを扱う際は、以下のプロンプトが必須です。
ES6に従ったモダンなJavaScriptの記法で記述してください。
これを指定しないと、LLMが var とか使いだすんですよね💢
Google Apps ScriptはJavaScriptベースですが、古い記法でも動いてしまうため、LLMが古い記法を使ってしまうことがあります。しかし、保守性や可読性を考えると、モダンな記法を使うべきです。const や let、アロー関数など、ES6の記法を明示的に指定することで、読みやすく保守性の高いコードが生成されます。
React
フロントエンドはライブラリの栄枯盛衰が激しいので、バージョンや使用する技術を明確に指定することが特に重要です。
例えば、Next.jsを使っている場合はこのように指定します。
Pages Routerで記述してください。
または
App Routerで記述してください。
Next.jsにはPages RouterとApp Routerという2つのルーティング方式があり、それぞれ書き方が大きく異なります。どちらを使っているのかを明示しないと、意図しない実装が生成されてしまいます。
Remixを使っている場合も同様です。
Remix v2で記述してください。
または
React Router v7で記述してください。
Remix v2とReact Router v7は、ほぼ同じAPIを持っていますが、微妙に異なる部分もあります。バージョンを明示することで、正確な実装が得られます。
フロントエンド界隈は変化が激しいので、こういった細かい指定が効いてくるんですよね。
画像生成
画像生成においても、具体的な指示が重要です。
まず、色温度について。
色温度を6,500Kのホワイトバランスに調整してください。
某社のバナー生成では、この指定がないと色味が全然違ってしまうので、これありきで指定しています。色温度を明示することで、一貫性のある色味の画像が生成されます。
次に、フォントの装飾について。
フォントには立体文字・縁取り・シャドウなどの装飾を施してください。
平面的な文字だと見栄えが悪いので、立体感のある装飾を施してもらいます。これだけで、バナーのクオリティがぐっと上がります。
そして、画像生成で最も重要なのが、yamlプロンプトしか勝たんという点です。構造化されたプロンプトを用意しておくことで、一貫性のある高品質な画像を生成できます。
以下は、実際に使っているバナー生成用のプロンプトです。
- 画像は信頼感のあるテイストで作成する(人物のイラストは避ける)。
- フォントには立体文字・縁取り・シャドウなどの装飾を施す。
- クリックを促すリッチなCTAボタン(立体感・影つき)を配置する。
- 要素としてリアルな3Dオブジェクトを配置し、背景はイラストベースのフラットデザインとする。
- 背景にはイラストやグラデーションなどを施し、情報量を1.2倍にして余白を適切にコントロールする。
- 色は3色程度とし、バランスの取れた親和性のある色合いとする。
- 色温度は6,000K程度のホワイトバランスに調整する。
このように、箇条書きで具体的な指示を並べていくことで、意図した通りの画像が生成されやすくなります。YAML形式(というかMarkdownの箇条書き形式)だと、後から修正や追加もしやすいのでおすすめです。
なぜこれらのプロンプトが効くのか
ここまで紹介してきたプロンプトTipsを振り返ってみると、共通点が見えてきます。
例えば:
- 「ES6に従ったモダンなJavaScriptの記法で記述して」→ JavaScript記法の具体的なバージョン指定
- 「色温度は6,000K程度のホワイトバランスに調整する」→ デザインの詳細な数値指定
- 「変更差分を最小限にしてほしい」→ コードレビューの観点からの要求
すべてに共通するのは、ドメイン固有の詳細な知識を明示的に言語化しているという点です。
結局のところ、AIを活用するドメインの最先端かつ詳細な知識が重要なんですよね。
生成AIは確かに賢くなっています。しかし、私たちの頭の中にある暗黙知や、プロジェクト固有の細かい要求までは読み取れません。「こう書けば分かるだろう」「このくらいは察してくれるだろう」と期待しても、AIには伝わらないことが多いです。
困ったとき、自分は常に「要求を言語化できてないんだなぁ」と思うようにしています(ポエ)。そして、頭の中にある暗黙の前提を、できるだけ具体的な言葉にしてプロンプトに落とし込む。それだけで、出力の質が格段に上がります。
「ES6」「6,000K」「必要最低限」といった具体的な言葉は、一見すると細かすぎるように思えるかもしれません。しかし、こういった細かい指定の積み重ねが、実用的なAI活用には欠かせないのです。
おわりに
正直、解説することはあまりないのですが、自分が日常的に使っているプロンプトTipsをまとめてみました。
プロンプトエンジニアリングは廃れつつあると言われながらも、タスクの難易度が高い場合や細かい要求がある場合には、まだまだ重宝します。一般的なテクニックだけでなく、自分の業務やドメインに特化した「オレオレプロンプトTips」を蓄積していくことで、生成AIをより効果的に活用できるようになります。
皆さんも、ぜひ自分だけのプロンプトTipsを見つけて、蓄積していってください。
(募)生成AIっぽくない文章や画像にする方法
ところで、「生成AIっぽくない文章や画像にする方法」について、以前Twitterで見かけた記憶があるのですが、いざ探すと見当たらないんですよね。。もしご存知の方がいらっしゃいましたら、ぜひ教えてください。
Discussion
以下の内容をMermaidのDFDにして
変数名(物理名)はcamelCaseの英語、表示名(論理名)は日本語で表記し、いずれもできる限りシンプルな単語を利用すること。
またCSSによるスタイルは適用しないこと。