Stanford NLP グループが開発したLLMプログラミングフレームワーク。プロンプトエンジニアリングを「プログラミング」に置き換え、LLMパイプラインのモジュール定義・自動プロンプト最適化・評価を体系的に行う。手動プロンプト調整からの脱却を目指す2023年公開のPythonライブラリ。
DSPy(Declarative Self-improving Language Programs in Python)は、Stanford大学のNLPグループが2023年に公開したLLMプログラミングフレームワークである。GitHub Stars 22,000超(2026年時点)。最大の特長は「プロンプトエンジニアリングからの脱却」で、LLMパイプラインの入出力をシグネチャとして宣言し、コンパイラ(Optimizer)が自動的に最適なプロンプトや少数ショット例を生成する。
question -> answer のように宣言的に定義。プロンプトの具体的な文面を書かないimport dspy
# LMの設定
lm = dspy.LM("openai/gpt-4o-mini")
dspy.configure(lm=lm)
# シグネチャ定義(入出力を宣言するだけ)
class QA(dspy.Signature):
"""質問に正確に答えてください"""
question: str = dspy.InputField()
answer: str = dspy.OutputField()
# モジュール(ChainOfThoughtで推論)
cot = dspy.ChainOfThought(QA)
# 実行
result = cot(question="日本で最も高い山は?")
print(result.answer) # "富士山(3,776m)"
# オプティマイザで自動最適化
from dspy.teleprompt import BootstrapFewShot
optimizer = BootstrapFewShot(metric=exact_match, max_bootstrapped_demos=4)
optimized_cot = optimizer.compile(cot, trainset=train_examples)
| 観点 |
|---|
| 従来のプロンプト |
|---|
| DSPy |
|---|
| プロンプト作成 | 手動で試行錯誤 | シグネチャ宣言→自動生成 |
| 少数ショット例 | 手動で選択・配置 | オプティマイザが自動選択 |
| モデル切替 | プロンプト全面書き直し | シグネチャ同一で自動適応 |
| 評価 | 主観的・非体系的 | メトリクス関数で定量評価 |
| 再現性 | 低(プロンプト職人芸) | 高(コード化・バージョン管理可能) |
dspy.inspect_history() で内部プロンプトを確認推奨Q1: DSPyを使うとプロンプトエンジニアリングが完全に不要になる? A: 「手動プロンプト調整」は不要になるが、シグネチャの設計(入出力の定義)とメトリクスの設計は人間が行う必要がある。プロンプトの「文面」を考える作業が、「インターフェース」を設計する作業に置き換わる。
Q2: LangChainとDSPyの違いは? A: LangChainはLLMアプリケーションの「配管工事」(ツール接続・メモリ管理・チェーン構築)、DSPyはLLMパイプラインの「最適化エンジン」。両者は競合ではなく補完関係。LangChainで構築したパイプラインの各LLM呼び出しをDSPyモジュールに置き換える併用が理想的。
Q3: 小規模プロジェクトでもDSPyは有効? A: LLM呼び出しが1回だけの単純なタスクではDSPyのオーバーヘッドが大きい。3段階以上のLLMパイプライン(検索→判断→生成等)で初めてDSPyの自動最適化が威力を発揮する。