Skip to main content
本ガイドで構築するもの: 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 に対して実際に推論を実行し、少数のラベル付きの例からより良いプロンプトをコンパイルします。推論中心の利用プロファイルによく適合する使い方です。

前提条件

セットアップ

1

仮想環境の作成と有効化

2

DSPy のインストール

3

SambaCloud API キーのエクスポート

API キーは決してソース管理にコミットしないでください。.env ファイルまたはシェルのシークレット管理ツールを使用してください。

使用例: 基本的な予測

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
ReAct は、すべての思考 (thought)、ツール呼び出し、観測 (observation) を result.trajectory に記録します。これにより、モデルがもっともらしい回答を推測したのではなく、実際に get_weather を呼び出したことを確認できます。

使用例: 構造化出力

シグネチャの出力フィールドの型として Pydantic モデルを宣言します。DSPy はこの処理に API の response_format パラメータを使用しません。JSON スキーマをプロンプトに直接書き込み、モデルの応答を自らパースするため、ネイティブの構造化出力に対応していないモデルでも動作します。
structured_example.py
実行します。
Output
lm.history[-1]["messages"] を確認すると、実際のリクエストの中身がわかります。JSON スキーマは response_format パラメータとして送信されるのではなく、システムプロンプト内にテキストとして埋め込まれています。
System message (excerpt)
その後、DSPy はモデルが整形して返したテキスト応答をパースし、Pydantic モデルに照らして検証します。この処理によって、文章としての出力が、result.info が返す CityInfo(...) オブジェクトに変換されます。

使用例: プログラムの最適化

オプティマイザーは、訓練セットに対して実際に推論を実行し、評価指標を改善する例を残すことで、プログラムをコンパイルします。最もシンプルなオプティマイザーが BootstrapFewShot です。
optimize_example.py
実行します。
Output
オプティマイザーの実行では、評価時にプログラム自体が行う呼び出しに加えて、ブートストラップ試行 1 回につき SambaCloud への実際の推論呼び出しが 1 回発生します。DSPy は設計上、このように推論量の多い利用プロファイルを持ちます。そのため DSPy のコストは、コンパイル済みプログラムがその後呼び出される頻度だけでなく、訓練セットのサイズやオプティマイザーのラウンド数に応じて増加します。

参考情報

DSPy リポジトリ

DSPy のソースコード、サンプル、リリースノート。

DSPy ドキュメント

シグネチャ、モジュール、オプティマイザー、評価を扱う公式ガイド。

対応モデル

SambaCloud で現在利用可能なモデルの一覧。

Function calling と JSON モード

ツール呼び出しと構造化出力にネイティブ対応している SambaCloud モデルの一覧。

トラブルシューティング

pip install dspy でインストールし、仮想環境が有効化されていることを確認してください。which python3 の出力が .venv 内を指している必要があります。
実行前にキーをエクスポートしてください: export SAMBANOVA_API_KEY="your-key"。echo $SAMBANOVA_API_KEY で確認できます。
モデル名に openai/ プレフィックスが付いていません。DSPy は LiteLLM を経由してルーティングしており、LiteLLM はこのプレフィックスでリクエスト形式を判別します。"MiniMax-M3" ではなく "openai/MiniMax-M3" を使用してください。
SAMBANOVA_API_KEY のキーが誤っているか、失効しています。SambaCloud ポータル で新しいキーを生成し、再度エクスポートしてください。
dspy.ReAct は API ネイティブの Function calling (関数呼び出し) を使用しません。プロンプト内でツールを説明し、モデルの返答をパースして、実行するツールを決定します。モデルが回答を推測で返している場合は、result.trajectory に tool_name_0 エントリがあるか確認したうえで、dspy.inspect_history(n=1) を実行して実際のプロンプトと返答を確認してください。ツールには明確な docstring と型ヒントを与えてください。モデルに見えるのはそのテキストだけです。
モデルの返答が、DSPy の期待するフィールド形式に従っていませんでした。dspy.inspect_history(n=1) を実行して生の応答を確認してください。通常は再試行すると成功します。失敗が続く場合は、対応モデル ページから別のモデルをお試しください。