土曜日, 7月 12, 2025
土曜日, 7月 12, 2025
- Advertisment -
ホームニューステックニュースDify:新しいOCI Gen AIモデル(Grok, Llama, Cohere Embed)をPluginに追加してみた #LLM

Dify:新しいOCI Gen AIモデル(Grok, Llama, Cohere Embed)をPluginに追加してみた #LLM



Dify:新しいOCI Gen AIモデル(Grok, Llama, Cohere Embed)をPluginに追加してみた #LLM

はじめに

Dify、使っていますか?
色々なLLMモデルを使えるのが一つの魅力ですよね。

今回は、Oracle Cloud Infrastructure(OCI)の生成AIサービス(Generative AI)で新たに利用可能になった GrokLlamaCohereなどのモデルを、Difyのプラグインで使えるように修正して、公式に反映されるところまでやってみました。
その手順や気づいたポイントをこの記事で紹介していきます。

image (5).png

今回承認されたPR(Pull Request)


Difyのモデル拡張性と開発のしやすさ

Difyは、OpenAIやAnthropic、Googleなどの主要なLLMプロバイダーのモデルをGUI上で簡単に扱って、アプリケーションを構築できるオープンソースのプラットフォームです。

モデルを切り替えて試せるだけでなく、独自のモデルやプラグインを追加することもでき、エンジニアだけでなく非エンジニアでも使いやすいのが特長です。

また修正を加えたプラグインのデバッグもDifyのUI上から行える(リモートデバック機能)ため、テストコードを書かなくても簡単に動作確認ができる点も便利で、非エンジニアフレンドリーです!


今回やってみたこと:DifyのプラグインにLLMモデルを追加!

今回は、OCIで使えるようになった以下のモデルを、Difyで動かせるようにプラグインを修正しました。

  • meta.llama-4-maverick-17b-128e-instruct-fp8
  • meta.llama-4-scout-17b-16e-instruct
  • xai.grok-3
  • cohere.embed-v4.0

そして最終的に、Dify公式のGitHubリポジトリにPull Request(PR)を提出し、無事にマージされるところまで進めました。
初めてのOSSへのコントリビュートでしたが、公式ドキュメントや過去のPull Requestを参考にしながら進めていきました。Difyのシンプルで分かりやすいプラグイン構成リモートデバック機能でリアルタイムに動作を確認できたことで、最後までやり切ることができました!


OCIのGenerative AIについて

簡単に、今回追加したOCI(Oracle Cloud Infrastructure)のGenerative AIモデルについて触れておきます。

OCIでは、OCI Generative AIというサービスにて、いくつかの大規模言語モデル(LLM)が利用可能です。
OCIではこれらのモデルをAPI経由で呼び出せるようになっており、OpenAI API互換の形式で提供されているため、 OpenAIベースのDifyとも比較的スムーズに連携することができます。

手順

0. ドキュメントを読んでみる

新しいLLMモデル開発について、以下のようなドキュメントが用意されていたのでこちらを参考にしました。

  • Difyプラグイン開発

  • モデルの追加について

1. 開発環境の準備

対象ファイルに「:コロン文字」が含まれ、Windowsのファイル名では禁止されているため、Gitがファイルをローカルに展開できずエラーになります。WindowsPCで開発する場合は、WSLなどを利用して作業します。

Dify プラグイン開発のひな形ツールのインストール

Dify Plugin CLI プロジェクトのページにアクセスし、オペレーティングシステムに対応する最新バージョンのツールをダウンロードしてインストールします。

ubuntu@yushibats:~/tools$  ./dify-plugin version
v0.1.3

Python 環境の初期化

sudo apt install python3.12 python3.12-venv python3.12-dev -y
ubuntu@yushibats:~$ python3.12 --version
Python 3.12.3

公式プラグインリポジトリをフォーク&クローン

Dify公式プラグインリポジトリ https://github.com/langgenius/dify-official-plugins

langgenius/dify-official-pluginsを、Githubの自分のリポジトリにフォークします。

VScodeで開いて作業していきます。
拡張機能を利用するとWSLにリモート接続してコードを修正していくことができます。

ubuntu@yushibats:~/dify-official-plugins/models/oci$

dify-official-plugins のファイル構造

dify-official-pluginsの中には、いくつかのディレクトリが切られていますが、そのうち /models/の中にプラグインとして追加できるLLMモデルのコンテンツが入っています。

用語 説明
モデルプロバイダー 大規模言語モデルの提供元。例:OpenAI、Anthropic、Googleなど。
モデルカテゴリ モデルプロバイダーによって、大規模言語モデル(LLM)、テキスト埋め込みモデル(Text embedding)、音声テキスト変換(Speech2Text)などのカテゴリが存在します。
特定のモデル claude-3-5-sonnet、gpt-4-turbo など、個別に指定できる具体的なモデル名。

今回はLLMモデルと、テキスト埋め込みモデルを追加するので、/models/oci/models/の中にあるそれぞれllmtext_embeddingの中を確認していきます。

以下のようなファイル構造になっています。
modelsの中に、対応しているLLMプロバイダーがリストされています。
今回は既にあるOCIのモデルを追加するので、このディレクトリ下に必要なファイルを追加・修正していきます。

models/oci/
├── models                   # モデル実装と設定ディレクトリ
│   ├── llm                  # LLMタイプ
│   │   ├── _position.yaml    (オプション、ソート順制御)
│   │   ├── my-llm-model-v1.yaml
│   │   ├── my-llm-model-v2.yaml
│   │   └── llm.py            # LLM実装ロジック
│   └── text_embedding       # Embeddingタイプ
│       ├── _position.yaml    (オプション、ソート順制御)
│       ├── my-embedding-model.yaml
│       └── text_embedding.py  # Embedding実装ロジック
├── provider                 # プロバイダーレベルのコードディレクトリ
│   └── my_provider.py       (認証情報検証などに使用、詳細は「モデルプロバイダーの作成」ドキュメント参照)
└── manifest.yaml            # プラグインマニフェストファイル

2. 該当ファイルを修正・追加する

以前OCIのモデルを追加して頂いた @engchina さんのPull Requestを参考にさせていただき、修正が必要な箇所を特定しました。
必要な箇所を修正していきます。

manifest.yaml の更新

manifest.yamlのversionを更新します。
image.png

各モデルの.yamlファイルの作成

各モデルについて、パラメータや機能などを記述する.yamlファイルをそれぞれ用意します。
既にあるモデルのファイルを複製して、必要な箇所を書き換えます。

/oci/models/llm

- meta.llama-4-scout-17b-16e-instruct.yaml
- meta.llama-4-maverick-17b-128e-instruct-fp8.yaml
- xai.grok-3.yaml

/oci/models/text_embedding

主なパラメーターは以下のとおりです。

項目名 必須 説明
model モデルの公式API識別子。一意のIDとして利用されます(例:meta.llama-4-scout-17b)。
label ✓  Dify UIで表示されるモデル名。多言語対応形式(例:en_US, ja_JP など)で記述。
model_type モデルの種類。llm, text_embeddingなど、格納されるディレクトリ名と一致する必要があります。
features 任意 モデルが持つ特殊機能を配列で指定。例:vision, tool-call, stream-tool-call など。
model_properties モデルの基本特性を記述。例:mode: chatcompletionも可)、context_size: 8192 など。
parameter_rules モデルの調整可能パラメータ(例:temperature, max_tokensなど)を定義。
共通設定はuse_templateで簡略化可能。
各ルールは、name, type, required, default, min, max, options などで細かく制御。
pricing 任意 モデルの課金情報。例:入力/出力トークンごとの価格設定(input: 0.002, output: 0.004)。

_position.yamlファイルの修正

(オプション)

こちらのファイルで、そのカテゴリタイプ(llmtext_embedding)下に配置されているモデルのDify UI上に表示される順番を指定できます。

  • /oci/models/llm/_position.yaml
    該当の3つを追加します。
    - cohere.command-r-08-2024
    - cohere.command-r-plus-08-2024
    - meta.llama-3.1-405b-instruct
    - meta.llama-3.2-90b-vision-instruct
    - meta.llama-3.3-70b-instruct    
    - meta.llama-4-scout-17b-16e-instruct #追加
    - meta.llama-4-maverick-17b-128e-instruct-fp8 #追加
    - xai.grok-3 #追加
  • /oci/models/text_embedding/_position.yaml
- cohere.embed-english-light-v2.0
- cohere.embed-english-light-v3.0
- cohere.embed-english-v3.0
- cohere.embed-multilingual-light-v3.0
- cohere.embed-multilingual-v3.0
- cohere.embed-v4.0 #追加

モデル呼び出しの.pyコードの更新

/models/の中に、モデルタイプごとに呼び出しコードのPythonファイルが存在しています(例:llm.py text_embedding.py) 。
API呼び出し、パラメータ変換、結果返却を処理するコードを記述されており、こちらもモデル追加に併せて編集していきます。

詳細は、こちらに記述するとコードが長くなるので割愛しますが、修正点は以下をご覧ください。

主な修正内容としては以下の2点です。

  • OCILargeLanguageModelに定義されているモデルを追加
class OCILargeLanguageModel(LargeLanguageModel):
    _supported_models = {
  • _generate()_handle_generate_stream_responseメソッドに、新しく追加したプロバイダーxAIのGrokを対応

requirements.txtの更新

models/oci/requirements.txtに記載された、依存ライブラリのバージョンを更新します。
Oracle SDKのアップデートと、dify_pluginについてはPR後、レビュー時にこの内容で修正いただきました。

- dify_plugin==0.0.1b65
+ dify_plugin>=0.4.0,
 numpy==2.1.3

- oci==2.139.0
+ oci==2.155.0

コードの修正は以上です!
では、早速正しく機能するか試していきます。

3. プラグインのDebug

修正したプラグインを リモートデバック機能を使用してテストしていきます!
リモートデバック機能とは、ローカルで開発したプラグイン開発環境と、Difyの環境を接続してデバックする方法です。
テストコードを用意することなく、UIでリアルタイムに動きが確かめることが出来るので非常に便利です。

プラグイン管理ページからデバックキーを取得

「プラグイン管理」(https://cloud.dify.ai/plugins) ページに移動し、リモートサーバーアドレスデバッグキーを取得します。

image.png

.envファイルを作成

/models/ociに.envファイルを作成します。
先程取得したリモートサーバーアドレスデバッグキーなどの情報を入力します。

INSTALL_METHOD=remote
REMOTE_INSTALL_URL=xx.xx.xx.xx(localhost):5003
REMOTE_INSTALL_KEY=f7xxxxxxe6ec-xxxx-a180-xxxxxxxx812

Ubuntu(WSL)で仮想環境の作成

リモート接続しているVSCodeのターミナルで、Python3.12の仮想環境を作成します。

python3.12 -m venv venv
source ./venv/bin/activate

依存環境のインストール

dify-plugin パッケージは手動でインストールする必要があったので、以下を実行しました。

/models/ociの中にある依存関係パッケージをインストールします。

pip install -r models/oci/requirements.txt

プラグインを起動

以下のコマンドを実行してプラグインを起動します。

以下のような形で、 {"event": "log", "data": {"level": "INFO", "message": "Installed model: oci", "timestamp": xxxxxx}}のような形で表示されれば、正常に起動されています。

    Successfully installed dify_plugin-0.0.1b65 gevent-24.2.1 httpx-0.27.2 pydantic_settings-2.3.4
    (venv) ubuntu@yushibats:~/dify-official-plugins$ cd models/oci
    (venv) ubuntu@yushibats:~/dify-official-plugins/models/oci$ python3 -m main
    {"event": "log", "data": {"level": "INFO", "message": "Installed model: oci", "timestamp": 1751810230.593944}}

起動すると、Difyの画面に修正したプラグイン(0.0.4)が表示されました!

image.png

私が追加したモデルも無事リストアップされていることが確認できました!

image.png

新しいプラグインを使用して動作をテストする際には、APIの設定が必要になるのでセットアップを行います。

image.png

OCI Generative AIのAPIキーのセットアップについてはこちらを参考にしてください。

image.png

追加したモデルを試してみる

追加したLLMのチャットモデルを試してみます。
返答が返ってくることが確認できました!

image.png

追加した埋め込みモデルも、ナレッジベースでベクトル化してみると上手く機能していることが確認できました。
image.png

4. Githubで公式レポジトリにPull Requestする

一通りの修正・動作確認が完了したら、いよいよPull Request(PR)を作成して、Dify公式リポジトリに修正リクエストをしていきます!

作業ブランチへPush

git status #修正ファイルとブランチを確認
git diff #修正内容を確認
git add .
git commit -m "Add Grok and Llama4 models for OCI GenAI"
git push -u origin grok

Pull Requestの作成

New pull request から新しいPRを作成していきます。

image.png

該当のブランチを選択して、修正内容などを記載していきます。
フォーマットがあったので、その記載内容に従ってメッセージを記入しました。
スクリーンショットを添付するように指示があったので、検証画像を取って添付しました。

PRが承認され公式レポジトリにマージされる

リクエストを出した2日後に、レビュワーの方からコメントが入り上記記載した一部(dify_pluginのバージョン)修正して頂いたとのこと。
その後すぐにMergeされました!

image.png

マージされると、自分のDify環境でもすぐにプラグインのバージョンアップができ、新しいモデルが使えるようになりました。

image.png

まとめ:OSSコントリビュートとDifyプラグインの開発体験

今回、OCI Generative AIモデルをDifyに追加するという形で、はじめてOSSにコントリビュートしてみました。

  • Difyのプラグイン構成がシンプルで分かりやすい
  • UIからすぐに動作を確認できるリモートデバッグ機能
  • 以前のPRやドキュメントを参考に

このような特徴を生かして、コードを書いて即確認、少しずつ改善していくという流れがとてもスムーズに行うことができました。

OSSに貢献する経験ができただけでなく、OCIのモデルの扱いやDifyの仕組みにも理解が深まる良い機会になりました。

最後に

今回の対応を通じて、Difyプラグイン開発の流れやコツを掴むことができました。

今後は、対応LLMによるマルチモーダル対応や、新たなLLMモデルの追加があった際には、引き続き積極的に対応していきたいと思います。

参考資料

ここまでで紹介した参考資料一覧です。

参考資料

この記事で参照した公式ドキュメントや関連リンクをまとめます。





Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -