Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DSPy入門 Pythonで実現する自動プロンプト最適化 〜人手によるプロンプト調整から...

Avatar for sea-turt1e sea-turt1e
February 20, 2026

DSPy入門 Pythonで実現する自動プロンプト最適化 〜人手によるプロンプト調整からの卒業〜

# 概要
プロンプトはLLMを使ったサービス開発の生命線。でも、モデルを変えるたび手作業調整に消耗していませんか?

このトークのテーマは、プロンプト調整の“属人化”を打破し、モデル変更にもしなやかに追従できる新時代の自動プロンプト最適化フレームワーク“DSPy(Declarative Self-improving Python)”の紹介です。

LLMのモデルやバージョン変更の際のプロンプト調整に疲弊した結果、自動でプロンプト最適化がこれから盛り上がっていくことを感じ、本トークでは以下の内容をお伝えします。

## なぜプロンプトの自動最適化が必要か
LLMサービスの現場では、GPT-4/5やClaude、Geminiなどモデル/バージョンの切替が急速に発生
そのたび「出力結果が崩れた」「従来のプロンプトでは最適でなくなった」悩みが頻発
従来は人手による微調整(プロンプトエンジニアリング)が膨大な工数で発生
プロンプトは人手の属人的な運用から脱却し、仕様書とデータ駆動で“自動的に改善”すべき

## DSPyとは
- 仕様書(シグネチャ)と具体例で“理想の変換”を定義
- DSPyが効率よく「最適なプロンプト」を探索し、人手不要で最適化
- たとえば「あるキャラクターの口調」で話すボットを作成したい場合、以前は手動でプロンプトを書き、入出力を見比べながら微調整していました。
- DSPyでは、仕様と変換例を与えることで、モデル特性を学習し、自律的に最適プロンプトを生成することができます。

## アウトライン
時間 内容
2分 自己紹介とトークの背景説明
8分 プロンプト最適化の必要性と課題の説明
10分 DSPyの技術的詳細と仕組みの解説
15分 コード例を交えた実践的な使い方の紹介
5分 まとめと今後の展望

Avatar for sea-turt1e

sea-turt1e

February 20, 2026
Tweet

More Decks by sea-turt1e

Other Decks in Programming

Transcript

  1. プロンプトの修正が必要になる • モデルそのものを変更する場合(例 : GPT4 → GPT5や、GPT5→Claude4.5) • モデルのバージョンアップをする場合(例 :

    GPT4-202404→GPT4-202504) 同じGPT4だったとしても、別バージョンで出力が大きく変わることも。 LLMの出力をエンドユーザーに直接届けるような サービスでは致命的な変更にもなりかねない。 なんか出力が前より悪くなっ たな...。 サービス使うのやめよ。 8
  2. DSPyの構成要素 • シグネチャ : タスクを定義した仕様書 • モジュール : シグネチャ(仕様書)を使って動く部品 •

    最適化: プロンプトを最適化    (DSPyではCompileやOptimizeと呼んだりする) 「最適化」がDSPyの肝 22
  3. シグネチャ(仕様書)の例 「以下のような変換(入力 → 出力)をしたい」という仕様書 • 質問 → 回答 • 例:

    1+1は? → 2 ⚠ 注意: 上記はまだ「プロンプト」ではありません。あくまで「タスクの入出力」を定義 しています。 24
  4. モジュール シグネチャ(仕様書)を使って動く部品。 • dspy.Predict 最も基本的。シグネチャ(例:質問 -> 回答)に従う • dspy.ChainOfThought 思考を連鎖して回答する

    (質問 -> (計算式) -> 回答 を自動で行う) • dspy.ReAct 外部ツール(検索API等)と連携し、情報を収集しながら段階的に推論・回答す るモジュール (質問 → 思考 → 行動(検索等) → 観察 → ... → 回答) 25 今回は最もシンプルな Predictを使う。
  5. シグネチャ(仕様書)で「何をさせたいか」を定義 class MathQA(dspy.Signature): """算数問題を解く""" question = dspy.InputField(desc="問題文") answer = dspy.OutputField(desc="数値回答")

    predict = dspy.Predict(MathQA) # 実行 result = predict(question="5個のりんごが入った箱が3箱ある。全部で何個?") print(result.answer) # => 15 > シグネチャ = タスクの入出力の宣言 。プロンプトはDSPyが自動生成します。 31
  6. 34

  7. プロンプトの最適化結果 35 質問の内容に基づいて、回答を生 成してください。 自然言語で書かれた数学の文章問題が与えられます。 あなたの仕事は、最終的な数値を単一の整数で計算する ことです。 内部的に実行する手順(出力には表示されません) テキストを解析してすべての数値と単位を特定し、関係と 必要な算術を決定し、結果を計算します。

    最終的な整数値のみを数字で出力し、追加のテキスト、説 明、書式設定は行わないでください。 思考の連鎖的推論や中間ステップは提供しないでくださ い。 単位の一貫性と正確性を確認してください。最終的な答え は整数でなければなりません。 最適化 正解率 91.67% → 94.67%(3%UP) 最適化前 最適化後
  8. 最適化で何が変わったか? 36 質問の内容に基づいて、回答を生 成してください。 自然言語で書かれた数学の文章問題が与えられます。 あなたの仕事は、最終的な数値を単一の整数で計算する ことです。 内部的に実行する手順(出力には表示されません) テキストを解析してすべての数値と単位を特定し、関係と 必要な算術を決定し、結果を計算します。

    最終的な整数値のみを数字で出力し、追加のテキスト、説 明、書式設定は行わないでください。 思考の連鎖的推論や中間ステップは提供しないでくださ い。 単位の一貫性と正確性を確認してください。最終的な答え は整数でなければなりません。 最適化前 最適化後 一般的で、アバウト ✓ 具体的な仕事内容: 「最 終的な数値を単一の整数で 計算」 ✓ 制約条件: 「余分なテキ スト、説明は不要」 ✓ 単位の一貫性を確保 ✓ 最終形式の指定: 「整数 でなければならない」
  9. 必要なデータ量 推奨量:10 ~ 100 個 ┗ 10個: 最小限(Light最適化向け) ┗ 50個:

    標準(Medium最適化向け) ┗ 100個: しっかり最適化したい場合 38
  10. データのポイント • 機械学習の fine-tuning に比べ、必要データが圧倒的に少ない • データの多様性が重要(異なるバリエーション を含める) ◦ りんご5個、みかん3個、合計は?(複数単位)

    ◦ 5x3+2は?(複合計算) ◦ 100円から3個で50円の品を買いました。おつりは?(引き算) • 100個を超えてもリターンは小さくなる傾向 • 質 > 量(低品質なお手本は避ける) 39
  11. 最適化の役割 データに基づいて最も正答率の高いプロンプト を自動的に探索 する。 1. 訓練データを使って成功パターンを収集 2. 複数の命令文(Instruction)候補を自動生成 3. 命令文と

    Few-Shot例の最適な組み合わせを探索 4. 評価関数で数値的に最も良い組み合わせを選択 人間がプロンプトを試行錯誤する作業を、アルゴリズムが自動で行う 42
  12. 何を最適化するのか? 1. 命令文(Instruction) — LLM への指示テキスト ◦ 例) 算数の文章問題を解いて最終的な数値のみ回答してください 2.

    Few-shot 例(Demonstrations) — 入出力のお手本 ◦ 例) Q:りんご3個×5箱=? → A:15 3. 上記の最適な組み合わせ — ベイズ最適化等で探索 43
  13. 最適化の具体的な流れのイメージ 1. プログラム定義 シグネチャ("Q -> A")+ モジュール(Predict)を定義 2. 入出力のお手本データ 質問と正解のペアを

    10〜100 個用意 3. 最適化 Optimizerがデータを使って最適な命令文+Few-Shotの例を探索 4. 最適化済みプログラム JSON として保存。いつでも読み込んで再利用可能 44
  14. 使用するLLMのモデルが変わったら 再度「最適化」のプログラムを走らせればOK。これだけ。 【実行時間】 • プロトタイプやデモ用途(Light 最適化): 5~10 分 • コスパ重視(Medium

    最適化): 20~30 分 • 精度重視(Heavy 最適化): 60~120 分 (トレーニングデータ数、トライアル数に依存) これまでのプロンプトエンジニアリング(数日~1週間) と比較して圧倒的に高速化 46
  15. 比較項目 従来の手法 DSPy 開発者がやること プロンプトを手動で作成/修正(試行錯誤) シグネチャ定義+お手本データの用意 最適化 勘と経験による手動チューニング お手本データに基づき自動最適化 ロジックとプロン

    プト 密結合(変更が大変) 分離(ロジックはそのまま) LLMモデルの変 更 GPT-5 nano→Claude 4.5 Haiku に変えたら正 解率が落ちたため、全面見直し LLMモデルを変えたら、再度、最適化 すればOK 「従来の手法」と「 DSPy」の比較表 50
  16. 参考文献等 【公式リソース】 • DSPy 公式ドキュメント: https://dspy.ai/ • DSPy GitHub リポジトリ:

    https://github.com/stanfordnlp/dspy • MIPROv2 詳細ガイド: https://dspy.ai/api/optimizers/MIPROv2/ 【学習用記事】 • 「プロンプトエンジニアリングを終わらせる DSPy」 • Zenn: DSpyの基礎と構成(プログラムの実行と最適化) • Dev.to: The Power of MIPROv2 【実装例】 • HuggingFace Spaces: DSPy Demo • Google Colab チュートリアル(公式) 【学術論文】 • "DSPy: Optimizing LM Calls with Weak Supervision" Khattab et al., 2023 53
  17. 最適化アルゴリズムの紹介 • BootstrapFewShot 訓練データでプログラムを実行し、正解した例を Few-shot 候補として自動収集するシンプ ルなアルゴリズム。命令文の最適化は行わない。 • COPRO 命令文(Instruction)を

    LLM で生成・改善していく手法 • MIPROv2 ← 今回はこれを使っている Few-shot 収集 + 命令文生成 + ベイズ最適化を統合した高性能手法 • GEPA 進化的アルゴリズムによる最適化 55