AIへの指示を良くしようとすると、たいてい書き直しては手応えで判断する作業になります。DSPyはここを、指標で選ぶ形に置き換えます。
分類のやり方8通りを実際に評価したところ、最初に書いたものは20件中7件、指標で選んだものは20件すべて当たりました。ところが試験に使っていない8件では2件です。
8通りを実際に評価しました。指標で選ぶと20件中20件になりますが、試験に使っていない8件では2件まで落ちます。
DSPyが掲げる「指標で選ぶ」という考え方を、実際に回して確かめました。用意したのは問い合わせを担当課に振り分けるやり方8通りです。
評価は本当に実行しています。やり方の中身も試験データも未知のデータもコードに書いてあり、当たったかどうかを機械で数えました。
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));
やり方 語の数 正答 正答率 返金・故障・見積の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件で、これは未知のデータでも良くはならないはずの水準でした。
問題は選ぶ工程ではなく、測り直す工程を省くことにあります。
試験データでの順位は、未知のデータでの強さを予測しない。
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は、言語モデルにプロンプトを書くのではなく、プログラムとして組むための枠組みだとされています。特徴は書き方にあります。
READMEでは、部品に分けたAIの仕組みを素早く作り直せるようにし、その指示や重みを最適化する手法を用意するものだと説明されています。単純な分類から検索を組み合わせた処理、エージェントの繰り返しまでを対象に挙げています。
つまり「こう書けばうまくいく」という文面を人が探すのをやめて、入力と出力の形だけを決めるという発想です。
文面のほうは、指標を渡して調整させます。前の節でやったのが、その考え方をいちばん単純にした形です。候補を並べ、指標で測り、良いものを採る。
ですから指標を決められない仕事には使えません。何をもって良しとするかを先に決める作業はシミュレーション評価の記事で扱っています。
手で書く場合、良し悪しの判断は書いた人の手応えになります。DSPyの形では判断が数字に置き換わります。
この置き換えは効きます。前の節でも、手で書いた35%が選ぶだけで上がりました。依頼文そのものを詰める作業はプロンプト設計の記事で扱っています。
測ってみて痛感したのは、指標が測っているものしか良くならないということでした。前の節では正答数だけを見たので、答えを丸暗記したようなやり方が選ばれています。指標を決める段階で、何を測っていないかも一緒に書き出しておくべきだと考えています。
DSPy is the framework for programming—rather than prompting—language models .原文stanfordnlp/dspy README この内容の有効期限2027-02-18
試験データの一部を選ぶ工程から外しておきます。外していないと、満点が出ても意味がありません。
DSPyのように指標で選ぶ仕組みを使うとき、いちばん多い失敗は、選んだデータで良さを主張することです。
4番目を省くと、前の節のような結果になります。20件中20件という数字が、8件中2件を隠します。
もうひとつの落とし穴が指標の選び方です。正答数だけを見ると、正答数を上げる以外のことは何も良くなりません。
たとえば「分からない場合は保留にする」という振る舞いは、正答数では評価されません。むしろ当てずっぽうで答えたほうが点が上がります。
この枠組みが効くのは、良し悪しを数字にできる仕事です。分類、抽出、形式の変換。答えが1つに決まる種類の処理になります。
逆に、文章の良し悪しのように数字にしにくい仕事では、指標そのものを作る段階で止まります。READMEも壊れやすいプロンプトのかわりに、組み合わせられるPythonのコードを書いて、モデルに良い出力を出させるよう教えると述べていますが、教える基準がなければ何も動きません。
選んだデータで良さを主張しない。取り分けたデータで測り直す。
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
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る