🔥

LM Studioを使ったgpt-oss-20bとDifyの連携方法【Mac】

に公開

最近発表されたOpenAIのオープンウェイト言語モデルgpt-oss-20bをDifyで使いたい!🔥
https://openai.com/ja-JP/index/introducing-gpt-oss/

ということで、ローカルでLLMを動かせるLM Studioを使ってgpt-oss-20bをDifyで扱えるようにしました。

動作環境はMac(M4)です。

事前にインストールするもの

Dify

Difyを以下URLからgit cloneしてdockerで起動しておきましょう!
https://github.com/langgenius/dify

LM Studio

LM Studioは8/5にgpt-ossシリーズに対応しました。仕事が早い!
既にインストールしている方はアップデートしておきましょう!
※私は当初アップデートしていなかったのでgpt-oss-20bが扱えず苦労しました笑
https://lmstudio.ai/blog/gpt-oss

LM Studioの設定

LM Studioでgpt-oss-20bをダウンロードしてAPIサーバーを立てます。

①gpt-oss-20bのダウンロード

LM StudioでDiscoverタブを選ぶとLLMモデルの検索とダウンロードができます。
Model Searchタブを選ぶと今なら一番上にgpt-ossシリーズが出てくるので選択してダウンロードしましょう。

②APIサーバーを立てる

LM StudioでDeveloperタブを選び、モデルを選択すればAPIサーバーを簡単に立てれます。
openai/gpt-oss-20bをロードしましょう!

また、デフォルトでLLMをロードするとコンテクスト長が4096にセットされるのですが、お使いのMacのメモリに合わせて増やすことが可能です。

Difyの設定

お次はDifyの設定です。
Dify側からLM StudioのAPIを叩けるようにプラグインをインストールします。

①OpenAI-API-compatibleのプラグインをインストール

OpenAI-API-compatibleのプラグインをインストールしましょう。
プラグインはこちら👇
https://marketplace.dify.ai/plugins/langgenius/openai_api_compatible?source=http%253A%252F%252Flocalhost&language=ja-JP&theme=system

※実はLM Studioのプラグインがあるのですが、そちらではPydantic検証エラーが発生してしまい使えないため、OpenAPI互換プロバイダとして設定するという回避策なのです。

LM Studioのプラグインを使うと発生するエラー👇

②プラグインの設定

OpenAI-API-compatibleプラグインの設定をします。

ポイントは以下👇

  • APIキーは何でもOK(LM StudioのAPIサーバーは認証不要)
  • Dockerで起動しているDifyからローカルホストされているLM StudioのAPIサーバーに接続するためには、APIのエンドポイントを ”http://host.docker.internal:1234/v1” にする必要があります。(ホストマシンのlocalhostに解決)
  • コンテクスト長はLM Studioでセットした値と同じにすれば問題なし


Difyでチャットボットを作って動作確認

設定は以上なので、最後にDifyでチャットボットを作って動作確認しましょう。

Difyで最初から作成→チャットフローを選択して作成すれば簡単にチャットボットが作れます。
あとはAIモデルに先ほどプラグインで設定したgpt-oss-20bをセットしましょう。

実行してエラーなく動けば完了です!

OpenAIのモデルをローカルで動かせるようになり感激!😄

おわりに

LM Studioを使ってgpt-oss-20bをDifyで扱えるようにしました。
API使用料を気にすること無くOpenAIのモデルが試せるようになったので色々と使ってみようと思います🔥

おまけ

今回はDifyからLM StudioのAPIを叩きましたが、Pythonでも使うことができます。
OpenAIライブラリのResponses APIを使った簡単なテキスト生成の例はこちら👇

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:1234/v1",
    api_key="1234567890",
)

response = client.chat.completions.create(
    model="openai/gpt-oss-20b",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hello, how are you?"}
    ]
)

print(response.choices[0].message.content)

Discussion