調べ物をしていて Dev Proxy (開発プロキシ) という、Microsoft 製品のいくつかのワークロードをローカルリソースでシミュレートするためのツールの存在を知りました。
このツールがサポートするシナリオとして Azure OpenAI API をシミュレートする があります。
このシナリオを使用してローカルの Ollama のモデルを使用して Azure OpenAI API をシミュレートするということができましたのでメモを残しておきたいと思います。
Azure OpenAI API のシミュレート
Azure OpenAI API のシミュレートではローカル LM として Ollama を使用することができます。
使用するモデルは 開発プロキシでローカル言語モデルを使用する に記載されている通り任意のモデルに設定変更できます。
シミュレートの手順としては次のようになります。
- Ollama をダウンロードして任意のモデルをダウンロード
- ターミナルで「ollama serve」を実行
- 「%USERPROFILE%\AppData\Local\Programs\Dev Proxy\devproxyrc.json」を編集
- ターミナルで「devproxy」を実行
「devproxyrc.json」については次のような設定を使用しています。
{ "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.28.0/rc.schema.json", "plugins": [ { "name": "RetryAfterPlugin", "enabled": true, "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll" }, { "name": "GenericRandomErrorPlugin", "enabled": true, "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll", "configSection": "genericRandomErrorPlugin" }, { "name": "OpenAIMockResponsePlugin", "enabled": true, "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll" } ], "urlsToWatch": [ "https://jsonplaceholder.typicode.com/*", "https://*.openai.azure.com/openai/deployments/*/completions*" ], "genericRandomErrorPlugin": { "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.28.0/genericrandomerrorplugin.schema.json", "errorsFile": "devproxy-errors.json", "rate": 50 }, "languageModel": { "enabled": true, "model": "phi4", "client": "Ollama", "url": "http://localhost:11434" }, "logLevel": "trace", "newVersionNotification": "stable", "showSkipMessages": true, "showTimestamps": true, "validateSchemas": true }
設定の JSON ファイルの設定については次のドキュメントで確認できます。
Dev Proxy を起動すると「127.0.0.1:8000」でプロキシが起動しますので、このプロキシを介して (例: netsh winhttp set proxy)、API にアクセスをさせるようにします。
Dev Proxy の「urlsToWatch」で設定した URL がプロキシでローカル要求に変換されて処理されますので、次のような Azure OpenAI に対して要求を行った場合、プロキシが湯汲をインターセプトして Ollama にリクエストを投げるようになります。
Invoke-RestMethod -Method "POST" ` -Uri "https://xxxxxxx.openai.azure.com/openai/deployments/gpt-4o-mini/chat/completions?api-version=2023-09-15-preview" ` -ContentType "application/json" ` -Body '{"messages":[{"role":"system","content":"You are AI Assistant"},{"role":"user","content":"why is the sky blue?"}]}'
正常に設定できていれば、Dev Proxy を介して Ollama の「/api/chat」へのアクセスが確認できます。
Dev Proxy を使用することで、Azure OpenAI に直接アクセスを行えなくてもローカル LM を LLM として使用して、API のテストを行うことが可能となります。
なぜ Dev Proxy を使おうと思ったか
最新の SSMS では Copilot が搭載されていますが、使用できる AI の環境は Azue OpenAI に限定されています。
これを Dev Proxy を介して Ollama が使えないかが気になって試していました。
結果としては SSMS Copilot から Dev Proxy を介して Ollama にアクセスさせることは出来そうだったのですが、要求を処理することができておらず、エラーとなってしまい、SSMS Copilot で Ollama を使用するということは実現できませんでした。