Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Optuna MCPサーバ開発 - AI Engineering Decoded #10

Optuna MCPサーバ開発 - AI Engineering Decoded #10

2025/09/22開催のAI Engineering Decoded #10でのPreferred Networksエンジニア柳瀬利彦のプレゼンテーション資料です。

Avatar for Preferred Networks

Preferred Networks PRO

September 22, 2025
Tweet

More Decks by Preferred Networks

Other Decks in Technology

Transcript

  1. 2 柳瀬利彦 (YANASE Toshihiko) • エンジニア兼エンジニアリングマネージャ • Optunaのメンテナの1人 • プロンプト最適化にも取り組む

    経歴 • 2010年まで: 大学院で進化計算の研究 • 2018年まで: メーカーで言語処理と大規模並 列機械学習 • 現在: OptunaのOSS開発・応用 自己紹介 Optunaの入門書を出版しました 電子本もあります ぜひお手に取ってみてください
  2. 5 探索空間と評価値の計算が定まれば、最適化対象を選ばない 過去の探索履歴をもとにブラックボックス最適化で徐々に改善 Optuna 最適化対象 機械学習 結晶構造最適化 クッキーレシピの改善 探索空間 ハイパーパラメータ

    (学習率, 正則化項, etc) 元素種、比率など化学的 組成等 小麦、砂糖、バターなど材 料の種類や量 評価値 ロスや精度など エネルギー等 おいしさ 最適化 対象 探索空間の1点 評価値
  3. 11 題材: Solnik et al., Bayesian Optimization for a Better

    Dessert, Proceedings of the 2017 NIPS Workshop on Bayesian Optimization, December 9, 2017 • GoogleのPittsburghとCaliforniaの2箇所のオフィスで、実際にクッキーを焼い て試食して改良する、というプロセスを144回繰り返したブラックボックス最適 化の論文 ◦ 入力: 小麦、砂糖、チョコチップなどの量 ◦ 出力: 7段階評価(1: 2度と作らないでほしい。7: 生涯で一番美味しい) ▪ ※カリフォルニアの場合 • 論文に載っているレシピをCSVで与え、新しいレシピを提案 ◦ 市販のクッキー: 程々の評価値(4)を仮定 ◦ Googleのクッキー: 高い評価値(6)を仮定 デモ: クッキーレシピの最適化
  4. 19 案1: LLMが書いたコードを実行するツール • Pros: 自由度が高い • Cons: セキュリティリスクが大きい •

    例: blender-mcp はPythonコードでオブジェク トや表示を操作 案2: プリミティブな操作に対応するツール • Pros: セキュリティリスクが小さくできる • Cons: 複数の機能を組み合わせるにはAPI呼 び出し回数が多くなる • 例: github-mcp-server は既存のGitHub API を提供 アプローチ Optuna MCP 最適化結果のグラフ Optuna MCP パラメータ値 ask グラフ plot history ... ...
  5. 21 3種類の機能を提供 • 最適化 ◦ create_study, ask, tellなど最適値を求めるための機能 • 可視化

    ◦ plot_optimization_historyなど、最適化の状況をグラフ化 • Dashboardの起動 ◦ 最適化の状況を可視化・分析できるDashboardサーバを起動 設計
  6. 25 uvx: Python版npx。仮想環境をセットアップし、スクリプトの実行まで一気通貫で実 行できる。インストールと設定が簡単に。 uvxを利用するモチベーション { "mcpServers": { "Optuna": {

    "command": "uvx", "args": ["optuna-mcp"] } } } { "mcpServers": { "Optuna": { "command": "/path/to/venv/bin/python", "args": ["-m", "optuna-mcp"] } } } $ python -m venv .venv $ . .venv/bin/activate $ pip install optuna-mcp 必要なし インストール JSON コンフィグ Python uvx
  7. 26 現象 • from __future__ imports がファイル先頭にない、というSyntaxError • optunaではなく、依存関係のbottle のエラー

    • pip install optuna-mcp は正常 $ uvx optuna-mcp Traceback (most recent call last): File ".../.cache/uv/archive-v0/EmP7RHGe6_uDSR99lOFJV/bin/optuna-mcp", line 6, in <module> from optuna_mcp.server import main ... File ".../.cache/uv/archive-v0/EmP7RHGe6_uDSR99lOFJV/bin/bottle.py", line 18 from __future__ import print_function ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SyntaxError: from __future__ imports must occur at the beginning of the file uvxでのインストールに失敗する
  8. 27 原因 • uvxがbottleをインストールする際にbottle.pyファイルの先頭を書き換え • from __future__ import print_functionの位置がずれ、SyntaxErrorが発生 ◦

    https://github.com/bottlepy/bottle/issues/1486 uvxでのインストールに失敗する #!/usr/bin/env python # -*- coding: utf-8 -*- """ Bottle is a fast and simple ... """ from __future__ import print_function #!/bin/sh '''exec' "$(dirname -- "$(realpath -- "$0")")"/'python' "$0" "$@" ' ''' # -*- coding: utf-8 -*- """ Bottle is a fast and simple ... """ from __future__ import print_function Before After
  9. 28 対策 • この問題はbottleのmasterブランチでは解消済み • pyproject.tomlにGitHubからmasterをインストールするように指示を追加 • 今度はPyPI(正確にはTestPyPI)へのアップロードが失敗。これは、PyPI上に 存在しない依存パッケージをinstall_requiresに書くべきではない、というガイド ラインに違反

    • > PyPI and other standards-conformant package indices do not accept packages that declare dependencies using direct URLs. 最終的には、 @HideakiImamura がbottleのメンテナに相談 パッチリリースとして bottle 0.13.4をリリースしていただくことで解決 uvxでのインストールに失敗する
  10. 29 • セキュリティ向上 • インストールが簡単 • ポータビリティ高 Docker image提供のモチベーション {

    "mcpServers": { "Optuna": { "command": "docker", "args": ["run", "-i", "optuna/optuna-mcp:latest"] } } } インストール設定 Host Docker container Optuna MCP Claude 実行環境がコンテナに隔離されておりセキュア
  11. 31 原因 • ImageのArchが amd64 のみ ◦ RosettaのないMacだと動かない ◦ しかし、RosettaはSunset予定

    • Docker Imageが3.6GBと大きい ◦ Download中にタイムアウト ◦ 例: Claude Codeの場合、30秒でタイムアウト "error": "Connection failed: Connection to MCP server \"Optuna\" timed out after 30000ms → 120MB/s以上の転送速度が必要 Docker containerが立ち上がらない 画像は https://support.apple.com/ja-jp/102527 より引用
  12. 32 対策 • CIでのビルド対象にARM64を追加 • Docker Imageのサイズを削減 ◦ 依存パッケージのサイズを調査 →

    torchが大きかったので、CUDA版からCPU版に切り替え ◦ Before: 3.6GB ◦ After: 397MB Docker containerが立ち上がらない
  13. 33 • 事前にすべての問題を予測することは難しい ◦ トラブルを織り込み、公開作業を前倒しで実施 ◦ 多くの課題はリリース日までに解決 ◦ 記録を残して共有し、同じ失敗を避けたい •

    MCPサーバ開発での心の持ち方 ◦ ツールチェーンの多くの部分が発展段階 ▪ LLM自体 ▪ MCPの仕様、SDK ◦ OSSとしてリリースすることで、LLMと一緒に育っていく ▪ コード、ドキュメントがLLMの事前学習に利用されるかも ▪ リクエスト、レスポンスが事後学習に利用されるかも 反省
  14. 34 本日紹介した技術 • Optuna: ブラックボックス最適化フレームワーク • Optuna MCP: ClaudeやCopilotがOptunaを使えるようにする トラブルシューティング

    • uvx, dockerで環境依存の問題に遭遇 • 余裕を持ったリリーススケジュールと再発の防止 • ツールチェーン全体が発展中でMCPサーバも一緒に育っていく心持ち 今後の予定 • MCPの最新仕様(2026-06-18)への対応 • 2026年8月のOptuna V5リリースに向け、生成AIとの連携をさらに強化 まとめ