プロンプト作成と改善の自動化
ChatGPTなどへ日常的に依頼するプロンプトは、ここまでの方法で作成できます。
一方、メール要約、問い合わせ分類、文書からの情報抽出など、同じAI処理を何度も実行するシステムでは、一つの入力だけでなく、多様な入力で品質を確認する必要があります。
プロンプトを自動化する目的
一つの事例だけを見てプロンプトを修正すると、その事例は改善しても、別の入力で結果が悪くなる場合があります。複数の入力で変更前後を比較すれば、システム全体が改善したかを確認できます。
自動化されたシステムでは、必要な情報の抽出、推測の有無、出力形式、処理時間、API料金などを継続的に確認します。また、モデルを変更したときに、以前できていた処理が失敗していないかも確認できます。
評価データを使って改善する
代表的な入力を用意する
メール要約システムなら、単純な連絡、作業依頼、日程調整、複数の依頼、期限の有無、長い返信履歴、HTMLメール、日本語と英語が混在するメールなどを用意します。
実際のメールを使用する場合は、氏名、メールアドレス、電話番号、会社名、契約情報などを匿名化します。
期待する結果と評価基準を定義する
それぞれの入力について、期待する要約、対応の要否、依頼事項、担当者、期限などを定義します。完全に同じ文章であることではなく、必要な情報を含んでいるかを評価する方法もあります。
- 重要事項を含んでいる
- 依頼事項を取りこぼしていない
- 日付、金額、氏名が原文と一致している
- 原文にない内容を追加していない
- 対応の要否を正しく判定している
- 指定した長さと出力形式を守っている
形式や日付の一致はプログラムで判定できます。読みやすさなどは人が評価するか、別のAIを評価者にする「LLM as a Judge」も利用できます。ただし、評価用AIも間違えるため、人の評価と一致するか確認します。
ベースラインを測定する
最適化前に、現在のプロンプトを評価します。これをベースラインと呼びます。同じデータと基準で改善後を評価すれば、本当に品質が向上したか判断できます。
評価データは、最適化用、調整中の確認用、最後の評価用に分けます。すべてを最適化に使用すると、見たことのある入力だけに適したプロンプトになる可能性があります。
Prompt Optimizerを利用する
Prompt Optimizerは、既存のプロンプトや評価データを使って、改善されたプロンプトを生成する機能です。
単にAIへ「改善してください」と依頼する場合は、AIが文章を見て良いと思うプロンプトを作ります。評価データを利用するOptimizerでは、実際の入力例と評価結果を基に改善できます。
自動生成されたプロンプトが必ず優れているとは限りません。変更前後を同じ評価データで比較し、改善した場合だけ採用します。
DSPyによる自動最適化
DSPyとは何か
DSPyは、AIを利用する処理をPythonプログラムとして構成し、プロンプトや例を評価結果に基づいて最適化するためのオープンソースフレームワークです。
DSPyは「Declarative Self-improving Python」の略で、公式サイトでは「Program, don’t prompt」と表現されています。
参考:DSPy公式サイト
プロンプトではなく入出力を定義する
通常は人がプロンプトの文章を作ります。DSPyでは、最初に何を入力し、何を出力するかを定義します。
件名、メール本文
↓
要約、対応の要否、依頼事項、担当者、期限
DSPyは、その定義を基に実際にモデルへ渡す指示を組み立てます。
DSPyを構成する主な要素
| 要素 | 役割 |
|---|---|
| Signature | 入力、出力、処理目的を定義する |
| Module | AIを使った処理方法を構成する |
| Metric | 結果の良し悪しを採点する |
| Optimizer | 評価結果を基に指示や例を改善する |
例えばGEPAというOptimizerは、実行結果への文章形式のフィードバックを分析し、新しい指示候補を作成して評価します。
DSPyによる改善の流れ
- AI処理の入力と出力を定義する
- 代表的な評価データを用意する
- 良い結果を判定するMetricを作る
- 最適化前の結果を測定する
- Optimizerで複数の候補を試す
- 未使用のテストデータで確認する
- 最適化した結果を保存する
- 本番では保存済みの結果を使用する
本番のリクエストごとに最適化するわけではありません。通常は開発時に最適化し、選ばれた指示やFew-shot例を本番で使用します。
メール要約APIへの適用例
メール要約APIは、同じ処理を多数のメールへ実行し、必要な出力項目も定義しやすいため、DSPyを利用しやすい用途です。
- 重要な依頼事項が要約から抜ける
- 期限を取り違える
- 誰が対応するのか分からない
- 原文にない担当者を追加する
- 古い返信を最新の依頼として扱う
- 要約が長くなりすぎる
これらを含む評価用メールを用意し、現在のプロンプトと最適化後を比較します。DSPyを導入しただけで品質が向上するわけではなく、代表的な評価データと適切な評価基準が重要です。
DSPyの実際の利用例
- Shopify:各ショップの商品情報などから構造化メタデータを抽出
- Dropbox Dash:検索結果の関連性判定とチャットエージェントの改善
- JetBlue:顧客意見の分類と社内文書を検索するRAGチャットボット
- Microsoft AI:学習データとなるWebページの品質判定
- AWS:大型モデル用プロンプトの小型モデルへの移行
参考:DSPy「DSPy in Production」、DropboxのDSPy活用事例、JetBlueとDatabricksの事例
自動最適化を利用するか判断する
ChatGPTに一度だけ文章を作成させる場合や、調査を一度依頼する場合は、自動最適化を導入する必要はありません。概要を伝え、AIにプロンプトを作らせ、結果を確認する方法で十分です。
自動最適化は、同じ処理を何度も実行する、出力品質を一定にする必要がある、代表的なデータと評価基準を用意できる、モデル費用を削減したいといった場合に検討します。
導入前には、評価データの作成、API料金、実装、バージョン管理、再評価、監視などの負担も確認します。
最初からDSPyを導入するのではなく、通常のプロンプトで処理を作り、実際の問題を評価データとして蓄積し、必要になった段階でPrompt OptimizerやDSPyを試すのが現実的です。
まとめ
現在は、すべてのプロンプトを人が一から書く必要はありません。AIとの対話で条件を整理し、AIに実行用プロンプトを作らせることができます。
さらに、同じ処理を繰り返すシステムでは、評価データを使って結果を測定し、Prompt OptimizerやDSPyで改善を自動化できます。
重要なのは、長く複雑なプロンプトを作ることではありません。目的、必要な情報、守る条件、期待する結果を明確にし、実際の結果を確認しながら改善することが、現在のプロンプト作成の基本です。
