エージェント基盤・プロトコル

DSPyとは|指標で選んだら試験データで満点、未知のデータでは8件中2件

DSPyとはどういう考え方の枠組みなのか指標で選ぶと何が変わるのか選んだあとに何を確かめるのか

AIへの指示を良くしようとすると、たいてい書き直しては手応えで判断する作業になります。DSPyはここを、指標で選ぶ形に置き換えます。

分類のやり方8通りを実際に評価したところ、最初に書いたものは20件中7件、指標で選んだものは20件すべて当たりました。ところが試験に使っていない8件では2件です。

この記事の要点

  • DSPyは指示ではなく、型のある宣言として書く枠組み
  • 最初に書いたやり方は20件中7件、指標で選ぶと20件
  • ところが未知の8件では2件まで落ちた
  • 指標で選ぶなら別のデータで測り直すところまでが一組

指標で選んだら試験データで満点、未知のデータでは8件中2件

8通りを実際に評価しました。指標で選ぶと20件中20件になりますが、試験に使っていない8件では2件まで落ちます。

DSPyが掲げる「指標で選ぶ」という考え方を、実際に回して確かめました。用意したのは問い合わせを担当課に振り分けるやり方8通りです。

評価は本当に実行しています。やり方の中身も試験データも未知のデータもコードに書いてあり、当たったかどうかを機械で数えました。

javascript
const classify = (text, rules) => {
  for (const [word, dest] of rules) if (text.includes(word)) return dest;
  return '営業';   // どれにも当たらなければ営業
};

const score = (c) => DATA.filter(([t, want]) => classify(t, c.rules) === want).length;

const first = scored[0];
const best = scored.reduce((a, b) => (b.hit > a.hit ? b : a));
text
やり方                    語の数  正答  正答率
返金・故障・見積の3語だけ               3個    7件    35%
経理の語を厚くする                   7個   11件    55%
技術の語を厚くする                   7個   11件    55%
法務を先に見る                     8個   12件    60%
契約の語をまとめて営業へ                5個    8件    40%
4分野を均等に                     8個   11件    55%
語を最大まで足す                   20個   20件   100%
全部営業に寄せる                    0個    5件    25%

最初に書いたやり方: 返金・故障・見積の3語だけ  → 7 / 20(35%)
指標で選んだやり方: 語を最大まで足す  → 20 / 20(100%)
差: 13件

やり方                    試験データ  未知のデータ
語を最大まで足す                     20/20         2/8
法務を先に見る                      12/20         2/8
経理の語を厚くする                    11/20         2/8

前半だけ見れば成功です。手で書いた35%が、選ぶだけで100%になりました。13件ぶんの改善です。

満点が出たら疑う

ところが100%という数字自体が警告でした。選ばれた「語を最大まで足す」の中身は、試験データに出てくる語をそのまま20個並べただけです。

当たるのは当然で、答えを見ながら作ったのと変わりません。指標としては最高点が出ますが、何かを学んだわけではありません

未知のデータで測り直す

そこで、選ぶときには使わなかった8件で測り直しました。結果は2件です。「振込先を教えてください」も「起動しなくなりました」も当たりません。

上位3つがそろって2件だったところも見てください。試験データでの順位は、未知のデータでの強さを予測していません

それでも選ぶ価値はある

誤解しないでほしいのは、選ぶこと自体は有効だという点です。最初に書いたやり方は20件中7件で、これは未知のデータでも良くはならないはずの水準でした。

問題は選ぶ工程ではなく、測り直す工程を省くことにあります。

試験データでの順位は、未知のデータでの強さを予測しない。

語を最大まで足す未知のデータでの正答率25試験データとの差75100%法務を先に見る253560%経理の語を厚くする253055%試験データ20件・未知データ8件での実測。3つとも未知のデータでは8件中2件だった。
図1 ── 上位3つの、試験データと未知データでの正答率
出典stanfordnlp/dspy README2026-08-18 確認
It allows you to iterate fast on building modular AI systems and offers algorithms for optimizing their prompts and weights , whether you're building simple classifiers, sophisticated RAG pipelines, or Agent loops.
原文stanfordnlp/dspy README この内容の有効期限2027-02-18

DSPyとはどういう考え方の枠組みなのか

指示の文面を書くかわりに、入力と出力を型として宣言します。文面のほうは指標にもとづいて調整させます。

DSPyは、言語モデルにプロンプトを書くのではなく、プログラムとして組むための枠組みだとされています。特徴は書き方にあります。

文面ではなく宣言を書く

READMEでは、部品に分けたAIの仕組みを素早く作り直せるようにし、その指示や重みを最適化する手法を用意するものだと説明されています。単純な分類から検索を組み合わせた処理、エージェントの繰り返しまでを対象に挙げています。

つまり「こう書けばうまくいく」という文面を人が探すのをやめて、入力と出力の形だけを決めるという発想です。

調整は指標にもとづく

文面のほうは、指標を渡して調整させます。前の節でやったのが、その考え方をいちばん単純にした形です。候補を並べ、指標で測り、良いものを採る

ですから指標を決められない仕事には使えません。何をもって良しとするかを先に決める作業はシミュレーション評価の記事で扱っています。

手で書く場合との違い

手で書く場合、良し悪しの判断は書いた人の手応えになります。DSPyの形では判断が数字に置き換わります

この置き換えは効きます。前の節でも、手で書いた35%が選ぶだけで上がりました。依頼文そのものを詰める作業はプロンプト設計の記事で扱っています。

余談 指標が悪いと、悪い方向に最適化される

測ってみて痛感したのは、指標が測っているものしか良くならないということでした。前の節では正答数だけを見たので、答えを丸暗記したようなやり方が選ばれています。指標を決める段階で、何を測っていないかも一緒に書き出しておくべきだと考えています。

出典stanfordnlp/dspy README2026-08-18 確認
DSPy is the framework for programming—rather than prompting—language models .
原文stanfordnlp/dspy README この内容の有効期限2027-02-18

指標で選ぶときに気をつけること

試験データの一部を選ぶ工程から外しておきます。外していないと、満点が出ても意味がありません。

DSPyのように指標で選ぶ仕組みを使うとき、いちばん多い失敗は、選んだデータで良さを主張することです。

先に取り分ける

  1. 試験データを用意する。実際の入力の幅を写す
  2. 一部を取り分ける。選ぶ工程では絶対に使わない
  3. 残りで候補を評価して選ぶ。ここまでが最適化
  4. 取り分けたデータで測り直す。ここまでで一組

4番目を省くと、前の節のような結果になります。20件中20件という数字が、8件中2件を隠します

指標が測っていないもの

もうひとつの落とし穴が指標の選び方です。正答数だけを見ると、正答数を上げる以外のことは何も良くなりません

たとえば「分からない場合は保留にする」という振る舞いは、正答数では評価されません。むしろ当てずっぽうで答えたほうが点が上がります。

使いどころ

この枠組みが効くのは、良し悪しを数字にできる仕事です。分類、抽出、形式の変換。答えが1つに決まる種類の処理になります。

逆に、文章の良し悪しのように数字にしにくい仕事では、指標そのものを作る段階で止まります。READMEも壊れやすいプロンプトのかわりに、組み合わせられるPythonのコードを書いて、モデルに良い出力を出させるよう教えると述べていますが、教える基準がなければ何も動きません。

選んだデータで良さを主張しない。取り分けたデータで測り直す。

充足 2 / 4試験データの一部を取り分けている取り分けた8件では、試験データ満点のやり方が2件しか当たらなかった良し悪しを数字にできる仕事だ分類や抽出のように答えが1つに決まる処理なら指標を作れる試験データでの順位を成果として報告する上位3つはいずれも未知のデータでは8件中2件。順位は強さを予測しない指標が測っていないものを確かめていない正答数だけを見ると、当てずっぽうで答えるほうが点が上がるやり方8通りを試験データ20件と未知データ8件で評価した実測にもとづく。
図2 ── 指標で選ぶときの点検項目
出典stanfordnlp/dspy README2026-08-18 確認
Instead of brittle prompts, you write compositional Python code and use DSPy to teach your LM to deliver high-quality outputs .
原文stanfordnlp/dspy README この内容の有効期限2027-02-18

よくある質問

なぜ満点が出たのに未知のデータで落ちるのですか
試験データに出てくる語をそのまま並べたやり方が選ばれたためです。知らない言い回しには当たりません。
指標で選ぶこと自体が悪いのですか
違います。最初に書いたやり方は20件中7件でしたから、選ぶ効果はあります。問題は、選んだあとに測り直さないことです。
DSPyは何を書く道具ですか
プロンプトではなく、入力と出力を型として宣言する形で書きます。保守しやすく、部品に分けられ、最適化できるプログラムにすることが狙いだとされています。
試験データは何件必要ですか
件数より、実際の入力の幅を写しているかが効きます。この記事の計測でも、20件すべてに当たるやり方が8件では2件しか当てられませんでした。

まとめ

  • DSPyは指示を書くかわりに型で宣言し、指標で選ぶ枠組み
  • 指標で選ぶと試験データでは7件から20件
  • ところが未知のデータでは8件中2件
  • 選ぶ工程と測り直す工程は一組で扱う

今日から始められること

  1. 良し悪しを判定する指標を1つ決める
  2. 試験データを、実際の入力の幅を写す形で用意する
  3. そこから一部を取り分けて、選ぶときには使わない
  4. 選んだあと、取り分けたデータで測り直す

実務で組んだDSPyのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る