はじめに
七尾百合子さん、お誕生日 229日目 おめでとうございます! nikkieです。
名前だけ知っている DSPy を素振りします。
目次
GEPA? と DSPy?
10月から始まった松尾研 LLM 講座 2025 の中で、最近の動向として GEPA という手法1を聞きました。
その後、この10月に GEPA を DSPy とセットでたびたび見聞きしました。
HuggingFace's new course on Prompt Optimization for Language Models with DSPy GEPA https://t.co/q6mNuqwxoc
— Vinh Nguyen (@vinhnx) 2025年10月17日
DSPy 自体も最近注目されている感があります2。
キャッチアップによさそうなチュートリアルを見つけました。
新しい概念は1つ1つ押さえていくのが早道と思っているので、DSPy + GEPA を理解するを少し先の目標に、今回は DSPy だけを素振りします。
GPT-4.1 mini に AIME を Chain-of-Thought で解かせる
チュートリアルとしては、単に Chain-of-Thought したときと、GEPA でプロンプトを最適化させた時を比較します。
今回は Chain-of-Thought だけを試します。
DSPy、私の手ではプロンプトを一切書かずに進みました。
環境変数OPENAI_API_KEYを指定して3、marimo edit --sandboxで動かしています。
marimo export htmlした静的サイトバージョン(実行結果込み)で共有します4
2025年の AIME のtest_setだけ使います。
train_setとtest_set(2022年〜2024年の AIME をシャッフルして分割)は GEPA に使うものなので、今回は使っていません。
Exampleは DSPy で標準的なデータ構造とのこと。
ref: https://dspy.ai/api/primitives/Example/#dspy.Example
複数フィールドのうちどれが入力かを指定するみたいですね(with_inputs())
dspy.ChainOfThought(GenerateResponse)とModule & Signatureを指定して、LM (GPT-4.1 mini) に解かせます。
Moduleはプロンプトテクニックの抽象化(今回は Chain-of-Thought)Signatureは docstring、InputField、OutputField
AIME は answer が整数なので、int(correct_answer == llm_answer)で簡単に評価できますね(llm_answerのパースは不要)
reasoning 込みで answer が返ってきています
(reasoning を GEPA で参照すると思っています)
成績としては OpenAI が発表しているのと同じくらいになりました。
Average Metric: 65 / 150 (43.3%)
AIME '24 49.6%
終わりに
DSPy + GEPA を理解するを先の目標に、今回は DSPy を触りました。
プロンプトを一切書かずに LLM を呼び出すのは新鮮でした。
このあとは GEPA によるプロンプト最適化です。
- 元論文 (スタンフォード大の DSPy のメンバーも関わってるみたいですね)↩
- Databricksさんが普及に力を入れているのかもしれません。ほかにも ↩
- ref: https://dspy.ai/learn/programming/language_models/↩
- スクリプトバージョン https://github.com/ftnext/ml-playground/blob/79f2d7ff38f4bfcc46c5107ea48f771f034d213b/dspy/first_dspy.py↩