2
1

はじめに

DifyでVertex AIを使用するために試行錯誤したことを書き残しておきます。

Difyとは

Difyとは、オープンソースのLLMアプリ開発プラットフォームです。ノーコードでRAGの構築などができます。
詳細は公式サイト等をご確認ください。

前提

DifyはSaaSとして利用もできますが、GitHubからソースコードをクローンしてローカル環境などで使用することも可能です。
今回はローカル環境での実行を前提としています。なお、ローカル環境にはDockerが使用できる環境も整っている想定です。

※なお、2024年7月14日時点での情報となります。

事前準備

Difyの環境構築

以下のGitHubからソースコードをクローンします。

GitHubのREADMEに記載のように、以下のコマンドを実行することで環境構築・起動が可能です。

cd docker
cp .env.example .env
docker compose up -d

起動が環境したら、http://localhost でアクセスできます。

Vertex AI用のサービスアカウント準備

Vertex AIを使用できるサービスアカウントをこちらなどを参考に準備して下さい。

ロールは適切なものを設定頂ければと思いますが、今回はVertex AI Userを設定しているものとします。
サービスアカウントは作成後、JSONキーファイルをダウンロードして下さい。

参考:

Difyによる設定

では、DifyでVertex AIを使用できるように設定していきます。

画面右上のユーザーアイコンのボタンから、[設定]を選択します。
image.png

設定画面で[モデルプロバイダー]→[Google Cloud]を選択します。
image.png

セットアップ画面にて、[Project ID]には先ほどVertex AIのサービスアカウントを作成したGoogle CloudのプロジェクトIDを、[Location]には使用したいリージョンを入力します。
image.png

[Service Account Key]には、事前準備で取得したJSONキーの情報を入力します。
ここで1点注意しなければならないのが、入力欄のプレースホルダーに記載があるようにbase64エンコードした文字列を入れる必要があります。
ですので、JSONキーファイルに記載されているJSON形式のテキスト文字列全てをbase64エンコード変換して、そのエンコードされた文字列を[Service Account Key]に貼り付けて下さい。

base64エンコードは以下のようなツールを使用できます。

Webアプリケーションの場合サーバー上に情報が保存されるリスクなどが存在しますので、キーファイルをbase64エンコードするツールはご自身で責任を持って選定して下さい。

[Service Account Key]入力後、[保存]をクリックします。
image.png

設定がうまくいくと、[モデルプロバイダー]で使用できるモデルとしてGoogle Cloud(Vertex AI)が増えているのが確認できます。
image.png

DifyでのVertex AIの使用

ここまでの手順で、DifyでVertex AIを使用する準備が整ったはずなのでGemini 1.5 Flashで試してみます。
が、筆者の環境では(2024年7月14日時点で)以下のようなエラーが発生してうまくいきませんでした。

Run failed: Node LLM run failed: [vertex_ai] Bad Request Error, 400 User has requested a restricted HarmBlockThreshold setting BLOCK_NONE. You can get access either (a) through an allowlist via your Google account team, or (b) by switching your account type to monthly invoiced billing via this instruction: https://cloud.google.com/billing/docs/how-to/invoiced-billing.

image.png

エラーの原因は、Dify側で安全性設定に"BLOCK_NONE"を設定していることに起因しています。
こちらのページにも記載があるように、この設定は全てのユーザーが使用できるわけではありません。少なくとも、Google Cloudのデフォルト設定では使用できない認識です。

注: 「BLOCK_NONE」設定は制限付きフィールドで、一般提供のモデル バージョンのすべてのユーザーが使用できるわけではありません。詳しくは、このドキュメントの残りの部分をご覧ください。

エラー文言にも記載がありますが、このパラメータ(BLOCK_NONE)を使用するためには以下に記載の内容(許可リストの申請 or 請求書払いに変更)を実施しなければならず、少々面倒です。

なので今回はDifyのソースコード自体を修正して試してみることにしました。
こちらの_generate()メソッド内のsafety_settingsパラメータをコメントアウトしてみました。

        # safety_settings={
        #     HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_NONE,
        #     HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_NONE,
        #     HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_NONE,
        #     HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_NONE,
        # }

        google_model = glm.GenerativeModel(
            model_name=model,
            system_instruction=system_instruction
        )

        response = google_model.generate_content(
            contents=history,
            generation_config=glm.GenerationConfig(
                **config_kwargs
            ),
            stream=stream,
            # safety_settings=safety_settings,
            tools=self._convert_tools_to_glm_tool(tools) if tools else None
        )

この修正を実施後に再度試してみると、Gemini 1.5 Flashを使用できることが確認できました。
image.png

まとめ

DifyでVertex AIを試してみましたが、本記事公開時点でのDifyの仕様では使用できるユーザーがかなり限られると感じました。
今後BLOCK_NONEの制約が無くなったり等、使いやすくなったらまた色々試してみたいと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1