nikkie-ftnextの日記

イベントレポートや読書メモを発信

DSPy 素振りの記:GPT-4.1 mini に AIME を Chain-of-Thought で解かせる

はじめに

七尾百合子さん、お誕生日 229日目 おめでとうございます! nikkieです。

名前だけ知っている DSPy を素振りします。

目次

GEPA? と DSPy?

10月から始まった松尾研 LLM 講座 2025 の中で、最近の動向として GEPA という手法1を聞きました。
その後、この10月に GEPA を DSPy とセットでたびたび見聞きしました。

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を指定して3marimo edit --sandboxで動かしています。
marimo export htmlした静的サイトバージョン(実行結果込み)で共有します4

2025年の AIMEtest_setだけ使います。
train_settest_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) に解かせます。

AIMEanswer が整数なので、int(correct_answer == llm_answer)で簡単に評価できますね(llm_answerのパースは不要)

reasoning 込みで answer が返ってきています
(reasoning を GEPA で参照すると思っています)

成績としては OpenAI が発表しているのと同じくらいになりました。

Average Metric: 65 / 150 (43.3%)

openai.com

AIME '24 49.6%

終わりに

DSPy + GEPA を理解するを先の目標に、今回は DSPy を触りました。
プロンプトを一切書かずに LLM を呼び出すのは新鮮でした。
このあとは GEPA によるプロンプト最適化です。