本ガイドで構築するもの: SambaCloud でホストされているモデル上で動作する DSPy プログラムを構築します。基本的な予測、ツール呼び出しエージェント、構造化出力、プロンプトオプティマイザーの実行について、動作確認済みの例を掲載しています。
概要
DSPy は、言語モデルをプロンプトで操作するのではなく、プログラミングで扱うための Stanford NLP 発のフレームワークです。宣言的なシグネチャ (signature) をプロンプトにコンパイルし、そのプロンプトを評価指標と訓練セット (training set) に照らして自動的に最適化できます。SambaCloud と接続することで、以下のことが可能になります。フレームワーク変更不要
dspy.LM は、openai/ プレフィックス付きのモデル名と api_base・api_key を受け付けるため、接続先を SambaCloud に向ける作業は、コードの変更ではなく設定の変更だけで済みます。ツール呼び出しエージェント
dspy.ReAct は、通常の Python 関数をツールとしてラップし、モデルに対する reasoning と acting (行動) のループを実際に実行します。構造化出力
Pydantic モデルをシグネチャの出力フィールドとして宣言すると、検証済みのオブジェクトが返されます。
プロンプト最適化
BootstrapFewShot などのオプティマイザーは、SambaCloud に対して実際に推論を実行し、少数のラベル付きの例からより良いプロンプトをコンパイルします。推論中心の利用プロファイルによく適合する使い方です。前提条件
- SambaCloud アカウントと、SambaCloud ポータル で取得した API キー
- Python 3.10 以上
- Python の仮想環境に関する基本的な知識
セットアップ
1
仮想環境の作成と有効化
2
DSPy のインストール
3
SambaCloud API キーのエクスポート
使用例: 基本的な予測
dspy.LM は、内部で LiteLLM を経由してリクエストをルーティングします。モデル名に openai/ プレフィックスを付け、api_base と api_key を渡すことで、SambaCloud にルーティングされます。
basic_example.py
Output
"MiniMax-M3" は、SambaCloud 対応モデル ページに記載されている任意のモデルに差し替えられます。その際も openai/ プレフィックスはそのまま残してください。使用例: ReAct によるツール呼び出し
dspy.ReAct は、通常の Python 関数をツールに変換し、reasoning と acting のループを実行します。モデルが呼び出すツールを決定し、DSPy がそれを実行して結果をモデルに戻す、という流れを、モデルが完了するまで繰り返します。
react_example.py
Output
軌跡全体の確認 (result.trajectory)
軌跡全体の確認 (result.trajectory)
ReAct は、すべての思考 (thought)、ツール呼び出し、観測 (observation) を result.trajectory に記録します。これにより、モデルがもっともらしい回答を推測したのではなく、実際に get_weather を呼び出したことを確認できます。使用例: 構造化出力
シグネチャの出力フィールドの型として Pydantic モデルを宣言します。DSPy はこの処理に API のresponse_format パラメータを使用しません。JSON スキーマをプロンプトに直接書き込み、モデルの応答を自らパースするため、ネイティブの構造化出力に対応していないモデルでも動作します。
structured_example.py
Output
DSPy が実際に SambaCloud に送信する内容
DSPy が実際に SambaCloud に送信する内容
lm.history[-1]["messages"] を確認すると、実際のリクエストの中身がわかります。JSON スキーマは response_format パラメータとして送信されるのではなく、システムプロンプト内にテキストとして埋め込まれています。System message (excerpt)
result.info が返す CityInfo(...) オブジェクトに変換されます。使用例: プログラムの最適化
オプティマイザーは、訓練セットに対して実際に推論を実行し、評価指標を改善する例を残すことで、プログラムをコンパイルします。最もシンプルなオプティマイザーがBootstrapFewShot です。
optimize_example.py
Output
オプティマイザーの実行では、評価時にプログラム自体が行う呼び出しに加えて、ブートストラップ試行 1 回につき SambaCloud への実際の推論呼び出しが 1 回発生します。DSPy は設計上、このように推論量の多い利用プロファイルを持ちます。そのため DSPy のコストは、コンパイル済みプログラムがその後呼び出される頻度だけでなく、訓練セットのサイズやオプティマイザーのラウンド数に応じて増加します。
参考情報
DSPy リポジトリ
DSPy のソースコード、サンプル、リリースノート。
DSPy ドキュメント
シグネチャ、モジュール、オプティマイザー、評価を扱う公式ガイド。
対応モデル
SambaCloud で現在利用可能なモデルの一覧。
Function calling と JSON モード
ツール呼び出しと構造化出力にネイティブ対応している SambaCloud モデルの一覧。
トラブルシューティング
ModuleNotFoundError: No module named 'dspy'
ModuleNotFoundError: No module named 'dspy'
pip install dspy でインストールし、仮想環境が有効化されていることを確認してください。which python3 の出力が .venv 内を指している必要があります。KeyError: SAMBANOVA_API_KEY
KeyError: SAMBANOVA_API_KEY
実行前にキーをエクスポートしてください:
export SAMBANOVA_API_KEY="your-key"。echo $SAMBANOVA_API_KEY で確認できます。LMInvalidRequestError: Unmapped LLM provider for this endpoint
LMInvalidRequestError: Unmapped LLM provider for this endpoint
モデル名に
openai/ プレフィックスが付いていません。DSPy は LiteLLM を経由してルーティングしており、LiteLLM はこのプレフィックスでリクエスト形式を判別します。"MiniMax-M3" ではなく "openai/MiniMax-M3" を使用してください。LMAuthError: Incorrect API key provided
LMAuthError: Incorrect API key provided
SAMBANOVA_API_KEY のキーが誤っているか、失効しています。SambaCloud ポータル で新しいキーを生成し、再度エクスポートしてください。ReAct エージェントがツールを呼び出さずに回答する
ReAct エージェントがツールを呼び出さずに回答する
dspy.ReAct は API ネイティブの Function calling (関数呼び出し) を使用しません。プロンプト内でツールを説明し、モデルの返答をパースして、実行するツールを決定します。モデルが回答を推測で返している場合は、result.trajectory に tool_name_0 エントリがあるか確認したうえで、dspy.inspect_history(n=1) を実行して実際のプロンプトと返答を確認してください。ツールには明確な docstring と型ヒントを与えてください。モデルに見えるのはそのテキストだけです。AdapterParseError: Adapter ChatAdapter failed to parse the LM response
AdapterParseError: Adapter ChatAdapter failed to parse the LM response
モデルの返答が、DSPy の期待するフィールド形式に従っていませんでした。
dspy.inspect_history(n=1) を実行して生の応答を確認してください。通常は再試行すると成功します。失敗が続く場合は、対応モデル ページから別のモデルをお試しください。
