はじめに
七尾百合子さん、お誕生日 230日目 おめでとうございます! nikkieです。
DSPy + GEPA のチュートリアルに取り組んでいるのですが、その途中の寄り道です
目次
「Recommended: Set up MLflow Autologging」
DSPy + GEPA のチュートリアルの冒頭でお勧めされていました。
コードは以下を設定するだけです。
import mlflow mlflow.set_tracking_uri("http://0.0.0.0:5000") mlflow.set_experiment("Default") # MLflow を起動したらできていた experiment をそのまま使います mlflow.dspy.autolog( log_compiles=True, log_evals=True, log_traces=True, )
MLflow も起動します。
$ uvx --python 3.13 mlflow ui --port 5000 --backend-store-uri sqlite:///mlruns.db
- uv (0.9.0) が Python 3.14 を使う時、mlflow 3.5.1 が依存する pyarrow がインストールできなかった(ビルドエラー。macOS 環境)ので、深追いせずに 3.13 にしました
mlflow.set_tracking_uri()ですが、ドキュメント通り"http://localhost:5000"を設定すると MLflow の API から 403 が返ってきました1- 起動ログに「Security middleware enabled with default settings (localhost-only). To allow connections from other hosts, use --host 0.0.0.0 and configure --allowed-hosts and --cors-allowed-origins.」
- 0.0.0.0 指定だけ試して、うまくいっています
MLflow に自動ロギング!
GPT-4.1 mini に CoT で AIME を解かせたログが記録されます!
http://localhost:5000/#/experiments/0/traces


example あたりの入出力を見て、CoT という指定に対して DSPy がどんなプロンプトを組んでいるかが垣間見えました。
User が problem を与えるので、Assistant (LLM) が reasoning して answer を返す

autolog()のドキュメントによると、デフォルト値はlog_traces=Trueで、log_compilesとlog_evalsを今回有効にしています。
https://mlflow.org/docs/latest/api_reference/python_api/mlflow.dspy.html#mlflow.dspy.autolog
GEPA で効いてくるのでしょうね。楽しみです。
なお、OpenAI の platform (dashboard) にも記録はされています。
https://platform.openai.com/logs?api=chat-completions
ですが、MLflow では平均 metric が見えてますし、他にも高機能なんじゃないかと思っています。

終わりに
DSPy を使う際に、簡単に MLflow2 の自動ロギングを有効にできました。
LLM API のレスポンスだけでなく、DSPy の動き(どんなプロンプトにして LLM に入力したか)も確認できます。
今回設定した範囲の理解を深めるのによさそうなドキュメントも見つけました(積ん読)
どうやら marimo は、OpenAI へのリクエストをキャッシュしているような雰囲気ですね(API のレスポンスがあまりに早かったり、dashboard で usage が増えなかったり)
今回のコードの全容はこちらです: