MLX-LM が v0.30.4 で Nemotron をサポートしたということでアップデートしました。そうしたら予想通り gpt-oss のマルチターンチャットができなくなりました。MLX-LM として OpenAI のHarmony Response Format には絶対対応しないつもりみたいっすね。
以前は直接server.pyスクリプトを魔改造をして動くようにしましたが、アップデートのたびに毎回そうもやってられないので、プロキシサーバを書いて mlx_lm.server の手前に立てることにしました。<think></think>タブを思考部分として隠す LLM クライアント (Dify、Open WebUI、LibreChat、など) で適切に gpt-oss が使えるようになります。思考部分が表示されるクライアントでも、マルチターンチャットができます。
GitHub リポジトリはこちら
https://github.com/tokyohandsome/mlx-lm-harmony-proxy
GitHub の説明文には英語しかないので、日本語の使い方を簡単に書いておきます。
プロキシサーバの立ち上げ方
まずはリポジトリをクローンしてください。
その後.env.exampleを.envとしてコピーし、既存の MLX-LM サーバの IP アドレスとポートに書き換えてください。192.168.100.100:8585 ならこんな感じです。PROXY_PORTは今回立てるプロキシサーバのポート番号ですので、未使用のものを指定してください (同一サーバ上なら 8484 とか)。
MLX_SERVER_URL=http://192.168.100.100:8585/v1
PROXY_PORT=8585Docker が動いている環境であれば、docker compose up -d --buildでプロキシサーバが立ち上がります。
Docker を使わない場合は、Python の仮想環境にfastapi uvicorn httpx python-dotenvをインストールし、python main.pyで立ち上げます。
LLM クライアントからの接続
無事に立ち上がったら、Dify や Open WebUI 等のクライアントで LLM プロバイダアドレスをプロキシサーバの IP とポートにしてあげるだけです。同一サーバ上であれば、http://192.168.100.100:8484/v1 に変える、みたいなことです。
何をしているのか
gpt-oss からクライアントへのレスポンスにある<|channel|>analysis<|message|>を<think>に、<|end|><|start|>assistant<|channel|>final<|message|>を</think>に書き換えます。最近の LLM クライアントは<think></think>の間を思考部分としてチャット画面から隠し、マルチターンの時には LLM に送らないのでチャットが継続できます。
Dify でモデルを追加する時には Stream すると失敗するので、そのときはStream: Falseで対応するようにしてあります。
どうしてこれを作ったのか
っていうか、MLX-LM だと gpt-oss をまともに動かせないので、逆に皆さんどうしてるんでしょうか。うまい方法があるのだろうかと調べるたびに自分の過去のブログが出てきて、欲しい情報が見つからないので作りました。いまだに 32B パラメータ以下ぐらいのクラスだと gpt-oss-20B の性能は高いと思いますけどね。
次回予告?
話は変わりますが Dify の Community Edition って無料で使えてとても良いんですけど、ブラウザのキャッシュをクリアしたら履歴が見れなくなるし、URL がわかれば誰でもアクセスできちゃうしで、会社や複数ユーザでちゃんと使うのには適していません。
ということで、ユーザ認証&セッション管理用に LibreChat をインストールしてみました。立ち上げるのも Dify との連携も面倒ですが、Open WebUI よりレンダリングが速くて HTML タグ等を解釈・描画せずにちゃんと文字として表示してくれたりで、なかなか良いです。ただ、思考部分が長いと?描画がクラッシュするっぽく、そこが解決できたら設定の仕方を記事にしてもいいな、と思い、絶賛いじり中です。
Image by Stable Diffusion (Mochi Diffusion)
電話で情報を受けるプロの代理人、みたいなのを期待してそれっぽいプロンプトを入力。”young” を入れる前はもう少し年齢層が上で、いくらやっても主に目が破綻していたのですが、年齢層を低くしたら安定しました。学習に使った画像の枚数差?
Date:
2026年2月2日 0:11:10
Model:
realisticVision-v51VAE_original_768x512_cn
Size:
768 x 512
Include in Image:
a proxy young lady talking over deskphone in a clean and professional looking room
Exclude from Image:
Seed:
3264770378
Steps:
24
Guidance Scale:
20.0
Scheduler:
DPM-Solver++
ML Compute Unit:
CPU & GPU
