手法

プロンプト最適化:反復的な手法

プロンプト最適化とは、測定によってプロンプトを改善することです。推敲、テストセット、やめどきを含む、LLM プロンプト最適化の再現可能なループを紹介します。

英語の原文からの翻訳です。コード、プロンプト、モデルの出力は英語のまま掲載しています。

プロンプト最適化とは、定めた目標に照らしてプロンプトを改善するプロセスです。目標は、より良い回答、少ないトークン、低い遅延、より一貫した形式などです。いじり回すことと違うのは、測定があることです。「より良い」とは何かを決め、1 つだけ変えて、確認します。

何のために最適化するかを決める

プロンプトはいくつもの軸で最適化でき、それらは互いに引っ張り合います。

目標 測定方法 犠牲になりがちなもの
品質 テストセットでの合格率 トークン
一貫性 同じ入力に同じ形の出力 柔軟性
コスト 呼び出しごとの入出力トークン 文脈、例
遅延 最初と最後のトークンまでの時間 推論の深さ
安全性 インジェクションや漏えいへの耐性 有用性の一部

主な目標を 1 つ選び、他には上限を設けます。たとえば「入力 800 トークンを超えずに、合格率を上げる」のように。

最適化ループ

1. まず静的な問題を直す

モデルがなくても見つかる欠陥があります。目的がない、あいまいな言葉、数値のないサイズ、矛盾する指示、出力形式がない、繰り返される文、区切りのない変数などです。モデルの呼び出しにお金をかける前に、これらを片づけましょう。PromptFlowEngine のプロンプトアナライザーが、修正案とともに一覧にします。

2. テストセットを作る

実際の使い方を代表する入力を 20〜50 件集めます。含めるもの:

  • 典型的なケース。
  • エッジケース:空、非常に長い、言語が混在、不正な形式。
  • 敵対的なケース:指示を変えようとするテキスト。
  • 過去の失敗。すべてのバグがテストになります。

各入力について、正しい出力が含むべきことや満たすべきことを書き出します。

3. ベースラインを確立する

現在のプロンプトをすべての入力で実行し、結果を記録します。この数字が、あらゆる変更の比較対象です。これがなければ、改善とノイズを区別できません。

4. 失敗を読む

グループ分けします。10 件の失敗には、たいてい 2〜3 個の原因があります。パターンを探しましょう。いつも長い入力か、いつも特定のカテゴリか、いつも同じ欠けたフィールドか。

5. 仮説を 1 つ立て、変更を 1 つ行う

「プロンプトに JSON のみを返すよう書いていないので、モデルがコメントを付けている。」その変更だけを行います。

6. セット全体を再実行する

失敗が直ったこと、そして同じくらい重要な、以前は通っていたものが失敗していないことを確認します。1 つのケースを直して 2 つを壊したなら、それは回帰です。

7. 残すか戻すかを決め、繰り返す

何をなぜ変えたかを記録します。バージョン管理はプロンプトの管理を参照してください。

たいてい効く推敲

症状 推敲
出力の長さがばらつく サイズを表す語を数値に置き換える
出力の形がばらつく 明示的な形式またはスキーマを追加する
ルールが無視される 段落からリストに移す。矛盾を取り除く
一般的すぎる 対象読者と分野の文脈を追加する
エッジケースで間違う そのケース用のルールまたは例を追加する
事実を捏造する 出典を渡し、ない場合は「記載なし」を求める
冗長 語数の上限を示し、省くものを伝える

たいてい効かない推敲

  • すべての行に強調(大文字、「非常に重要」)を加える。
  • 同じ指示を複数の場所で繰り返す。
  • 矛盾を確認せずに、失敗のたびに特殊ケースのルールを足す。
  • 原因でなかったものの言い回しを変える。

トークンの最適化

品質が許容できるようになったら、振る舞いを変えずにコストを下げます。

  1. 挨拶、丁寧表現、つなぎの言葉を取り除く。
  2. 繰り返しの文やほぼ同じ文を削除する。
  3. テストセットのどの答えも変えない文脈を削る。
  4. 例の数を減らして再テストする。
  5. 提供元のキャッシュが効くよう、プロンプトの変わらない部分を先頭に置く。

ステップ 1 と 2 は機械的で、安全に自動化できます。PromptFlowEngine のプロンプトオプティマイザーはそれらを実行したうえで、元のすべての文、要件、保護された範囲がまだ残っていることを検証するので、短いプロンプトは長いプロンプトとまったく同じことを求めます。詳細はトークン最適化を参照してください。

自動最適化

モデルに変種を提案させ、テストセットで採点することで、より良いプロンプトを自動的に探すツールがあります。人が見落とす改善を見つけることがあります。機能するには 3 つが必要です。良いテストセット、信頼できる採点関数、そして勝ったプロンプトのレビューです。最適化は指標の弱点を突くからです。

チャットモデルに「このプロンプトを改善して」と頼む場合にも、似た注意が必要です。読みやすいものは出てきます。ただし、制約を落としたり、前提を追加したりすることがあります。結果を元のものと差分で比較し、すべての要件が残っていることを確認してください。

やめどき

テストセットで目標を満たし、さらなる変更が結果をノイズの範囲内でしか動かさなくなったら、やめます。そこから先の改善は、より良い文脈、プロンプトチェーンのような別の手法、あるいは別のモデルから生まれます。

ルールベースのスコアで分かることと分からないこと

プロンプト評価のような静的な品質スコアは、書かれたとおりのプロンプトを測ります。明確さ、網羅性、一貫性、安全性です。速く再現できるため、あらゆる編集とコミットに向いています。モデルがそのプロンプトで何をするかは測りません。プロンプトを健全に保つのにはスコアを、出力の確認にはテストセットを使いましょう。両方をプロンプトのテストと評価で扱っています。

実践してみる

プロンプトオプティマイザーで試す

すべての要件が残っていることを証明しながら、トークンを削り、構造を加えます。 無料・決定論的で、アカウントは不要です。

関連する PromptFlowEngine ツール

手法のその他のガイド

プロンプトエンジニアリングガイドをすべて見る