Skip to main content

このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、英語版 を参照してください。

このガイドでは、Weaviate クライアント v3 から weaviate-client v4(v4.17.0 以降)への移行方法を説明します。また、Weaviate サーバーをバージョン 1.19.0 から 1.27.0 以降にアップグレードする方法も説明します。この移行は、weaviate-client v4 アップグレードを含む Dify バージョンに必要です。

Info

すでに 1.27 を使用していて、Dify 1.17.1 にアップグレードする場合、同梱される Weaviate イメージは 1.39.2 です。この差を越えるには、マイナーリリースを順に進める必要があります。手順の一覧は Weaviate サーバーのアップグレード経路 を参照してください。

概要#

Dify v1.9.2 以降、weaviate-client が v3 から v4.17.0 にアップグレードされました。このアップグレードにより、パフォーマンスが大幅に向上し、安定性が向上しますが、Weaviate サーバーバージョン 1.27.0 以降が必要です。

Warning

破壊的変更:新しい weaviate-client v4 は、Weaviate サーバーバージョン 1.27.0 未満との後方互換性がありません。バージョン 1.19.0 以前のセルフホスト Weaviate インスタンスを実行している場合は、Dify をアップグレードする前に Weaviate サーバーをアップグレードする必要があります。

影響を受けるユーザー#

この移行の影響を受けるのは:

  • 1.27.0 未満のバージョンでセルフホスト Weaviate インスタンスを実行しているセルフホスト Dify ユーザー
  • 現在 Weaviate サーバーバージョン 1.19.0-1.26.x を使用しているユーザー
  • weaviate-client v4 を含む Dify バージョンにアップグレードするユーザー

影響を受けないユーザー:

  • クラウドホスト Weaviate ユーザー(Weaviate Cloud がサーバーバージョンを管理)

破壊的変更#

クライアント v4 の要件#

weaviate-client v4 では、いくつかの破壊的変更が導入されています:

  1. 最小サーバーバージョン:Weaviate サーバー 1.27.0 以降が必要
  2. API 変更:新しいインポート構造(weaviate.client ではなく weaviate.classes)
  3. gRPC サポート:パフォーマンス向上のため、デフォルトでポート 50051 で gRPC を使用
  4. 認証の変更:更新された認証方法と構成

なぜアップグレードするのか?#

  • パフォーマンス:gRPC (50051) により、クエリおよびインポート操作が大幅に高速化
  • 安定性:接続処理とエラー回復の改善
  • 将来の互換性:最新の Weaviate 機能と継続的なサポートへのアクセス
  • セキュリティ:Weaviate 1.19.0 は 1 年以上前のもので、セキュリティアップデートを受け取っていません

バージョン互換性マトリックス#

Dify バージョンWeaviate-client バージョン互換性のある Weaviate サーバーバージョン
≤ 1.9.1v3.x1.19.0 - 1.26.x
1.9.2 - 1.13.0v4.17.01.27.0 以降
1.13.1 - 1.13.3v4.20.41.27.0 以降
1.14.0 - 1.16.1v4.20.51.27.0 以降
1.17.0 - 1.17.1v4.22.01.27.0 以降
Info

この移行は、weaviate-client v4.17.0 以降を使用するすべての Dify バージョンに適用されます。

Info

Weaviate サーバーバージョン 1.19.0 は 1 年以上前にリリースされ、現在は古くなっています。1.27.0+ にアップグレードすると、パフォーマンス、安定性、機能の数多くの改善にアクセスできます。

前提条件#

移行を開始する前に、次の手順を完了してください:

  1. 現在の Weaviate バージョンを確認

    レスポンスで version フィールドを探します。

  2. データをバックアップ

    • Weaviate データの完全バックアップを作成
    • Docker Compose を使用している場合は、Docker ボリュームをバックアップ
    • 現在の構成設定を文書化
  3. システム要件を確認

    • データベース移行のための十分なディスク容量を確保
    • Dify と Weaviate 間のネットワーク接続を検証
    • 外部 Weaviate を使用している場合、gRPC ポート (50051) がアクセス可能であることを確認
  4. ダウンタイムを計画

    • 移行にはサービスのダウンタイムが必要
    • 本番環境で実行している場合はユーザーに通知
    • トラフィックの少ない時間帯に移行をスケジュール

移行パス#

デプロイメント設定と現在の Weaviate バージョンに一致する移行パスを選択してください。

パスを選択#

  • パス A – バックアップを使用した移行(1.19 から):まだ Weaviate 1.19 を使用している場合に推奨されます。バックアップを作成し、1.27+ にアップグレードし、孤立したデータを修復してから、スキーマを移行します。
  • パス B – 直接リカバリ(すでに 1.27+ の場合):すでに 1.27+ にアップグレードしてナレッジベースが動作しなくなった場合に使用します。このパスはデータレイアウトの修復とスキーマ移行の実行に焦点を当てています。
Warning

1.19 へのダウングレードを試みないでください。スキーマ形式に互換性がなく、データ損失につながります。

パス A:バックアップを使用した移行(1.19 から)#

Info

最も安全なパスです。アップグレード前にバックアップを作成するため、問題が発生した場合に復元できます。

前提条件#

ステップ A1:Weaviate 1.19 でバックアップモジュールを有効化#

docker/docker-compose.yaml を編集して、weaviate サービスにバックアップ構成を含めます:

Weaviate を再起動して変更を適用:

ステップ A2:バックアップを作成#

  1. コレクションを一覧表示:

  2. バックアップをトリガー:必要に応じて特定のコレクション名を含めます。

  3. バックアップステータスを確認:

  4. バックアップファイルの存在を確認:

ステップ A3:Weaviate 1.27+ にアップグレード#

  1. Weaviate 1.27+ を同梱する Dify バージョンにアップグレード:

  2. 新しい Weaviate イメージを確認:

  3. 新しいバージョンで再起動:

ステップ A4:孤立した LSM データを修正(存在する場合)#

孤立した LSM データは、ホストからまたはコンテナ内で修正できます:

オプション A: ホストから(ボリュームがマウントされている場合):

オプション B: Weaviate コンテナ内(推奨):

ステップ A5:スキーマを移行#

  1. 依存関係をインストール(一時的な virtualenv で問題ありません):

  2. 移行スクリプトを実行:ローカルまたは Worker コンテナ内で実行できます。
    オプション A: ローカルで実行(Python 3.12 と依存関係がインストールされている場合):

    オプション B: Worker コンテナ内で実行(Docker セットアップに推奨):

    Info

    移行スクリプトは構成に環境変数を使用するため、Docker コンテナ内での実行に適しています。Dify 1.11.0+ で uv の権限エラーが発生した場合は、代わりに uv run --no-cache を使用してください。

  3. Dify サービスを再起動:

  4. UI で検証:Dify を開き、移行されたナレッジベースに対して取得をテストします。

    Warning

    大規模なコレクション(10,000 オブジェクト以上)の場合、古いコレクションと新しいコレクション間でオブジェクト数が一致することを確認してください。移行スクリプトは検証カウントを自動的に表示します。

Info

正常な移行を確認した後、weaviate_migration_env とバックアップファイルを削除してディスク容量を回復できます。

パス B:直接リカバリ(すでに 1.27+ の場合)#

Warning

このパスは、すでに 1.27+ にアップグレードしてナレッジベースが動作しなくなった場合にのみ使用してください。1.19 のバックアップはもう作成できないため、データをその場で修復する必要があります。

前提条件#

  • 現在 Weaviate 1.27+(1.33 を含む)を実行中
  • Docker + Docker Compose がインストール済み
  • 移行スクリプト用に Python 3.12

ステップ B1:孤立した LSM データを修復#

Weaviate を停止して孤立した LSM データを修正:

Weaviate を再起動:

コレクションを一覧表示し、オブジェクト数がゼロでないことを確認:

ステップ B2:スキーマ移行を実行#

ステップ A5 と同じコマンドに従います。スクリプトはローカルまたは Worker コンテナ内で実行できます:

Worker コンテナ内で実行する場合:

Info

移行スクリプトはカーソルベースのページネーションを使用して、大規模なコレクションを安全に処理します。移行完了後にオブジェクト数が一致することを確認してください。

ステップ B3:Dify で検証#

  • Dify のナレッジベース UI を開きます。
  • 取得テストを使用して、クエリが結果を返すことを確認します。
  • エラーが続く場合は、docker compose logs weaviate を確認して追加の修復手順を確認してください(トラブルシューティングを参照)。

レガシーバージョンのデータ移行#

Warning

重要:データ移行が必要です

移行なしではアップグレード後に既存のナレッジベースは動作しません!

移行が必要な理由:

  • 古いデータ:Weaviate v3 クライアントで作成(シンプルなスキーマ)
  • 新しいコード:Weaviate v4 形式が必要(拡張スキーマ)
  • 互換性なし:古いデータに必要なプロパティがない

移行オプション:

  • オプション A:Weaviate バックアップ/復元を使用

  • オプション B:元のドキュメントから再インデックス

  • オプション C:古い Weaviate を維持(まだアップグレードしない)ダウンタイムやデータ損失を許容できない場合。

自動移行#

ほとんどの場合、Weaviate 1.27.0 は 1.19.0 からデータを自動的に移行します:

  1. Weaviate 1.19.0 を停止
  2. 同じデータディレクトリで Weaviate 1.27.0 を起動
  3. Weaviate は古い形式を検出し、自動的に移行
  4. ログを監視して移行の進行状況とエラーを確認

手動移行(自動移行が失敗した場合)#

自動移行が失敗した場合は、Weaviate のエクスポート/インポートツールを使用:

1. 旧バージョンからデータをエクスポート#

Cursor API またはバックアップ機能を使用してすべてのデータをエクスポートします。大規模なデータセットの場合は、Weaviate のバックアップ API を使用:

2. 新しいバージョンにデータをインポート#

Weaviate 1.27.0 にアップグレードした後、バックアップを復元:

Info

複雑なスキーマや大規模なデータセットの場合の包括的な移行ガイダンスについては、公式の Weaviate 移行ガイドを参照してください。

構成の変更#

新しい環境変数#

weaviate-client v4 を含む Dify バージョンで利用可能な新しい環境変数:

WEAVIATE_GRPC_ENDPOINT#

説明:Weaviate 接続の gRPC エンドポイントを指定します。gRPC を使用すると、バッチ操作とクエリのパフォーマンスが大幅に向上します。

形式:hostname:port(プロトコルプレフィックスなし)

デフォルトポート:

  • 非セキュア:50051
  • セキュア (TLS):443

例:

Warning

WEAVIATE_GRPC_ENDPOINT 値に grpc:// や http:// などのプロトコルプレフィックスを含めないでください。hostname:port のみを使用してください。

更新された環境変数#

既存のすべての Weaviate 環境変数は変更なし:

  • WEAVIATE_ENDPOINT:Weaviate の HTTP エンドポイント(例:http://weaviate:8080)
  • WEAVIATE_API_KEY:認証用の API キー(有効な場合)
  • WEAVIATE_BATCH_SIZE:インポートのバッチサイズ(デフォルト:100)
  • WEAVIATE_GRPC_ENABLED:gRPC の有効化/無効化(v4 のデフォルト:true)

完全な構成例#

検証手順#

移行完了後、すべてが正常に動作していることを検証:

1. Weaviate 接続を確認#

Weaviate がアクセス可能で正しいバージョンで実行されていることを確認:

2. Dify 接続を検証#

Dify ログを確認して Weaviate への接続が成功していることを確認:

「No module named ‘weaviate.classes’」エラーなしで接続成功を示すメッセージを探します。

3. ナレッジベースの作成をテスト#

  1. Dify インスタンスにログイン
  2. ナレッジベースセクションに移動
  3. 新しいナレッジベースを作成
  4. テストドキュメント(PDF、TXT、または MD)をアップロード
  5. インデックス作成が完了するまで待つ
  6. ステータスが「QUEUING」→「INDEXING」→「AVAILABLE」に変わることを確認
Info

ドキュメントが「QUEUING」ステータスで止まっている場合は、Celery worker が実行されているか確認:docker compose logs worker

4. ベクトル検索をテスト#

  1. ナレッジベース統合を含むチャットアプリケーションを作成または開く
  2. ナレッジベースから情報を取得する質問をする
  3. 正しいスコアで関連する結果が返されることを確認
  4. 引用/ソースリンクが正しく機能することを確認

5. gRPC パフォーマンスを検証#

gRPC が有効になっている場合、パフォーマンスの向上が見られるはずです:

Info

gRPC が適切に構成されている場合、ベクトル検索クエリは HTTP のみの接続と比較して 2〜5 倍高速になるはずです。

トラブルシューティング#

問題:「No module named ‘weaviate.classes’」#

原因:weaviate-client v4 がインストールされていないか、v3 がまだ使用されています。

解決策:

Docker インストールの場合は、正しい Dify バージョンを実行していることを確認します。docker ディレクトリで実行してください:

ソースインストールの場合は、チェックアウトが固定しているクライアントバージョンをインストールします。docker ではなくリポジトリのルートで実行してください:

問題:gRPC ポート (50051) で接続拒否#

原因:ポート 50051 が公開されていない、アクセスできない、または Weaviate がリッスンしていません。

解決策:

  1. バンドルされた Weaviate を使用する Docker Compose ユーザーの場合: ポートはコンテナ間で内部的に利用可能です。Docker 外部から接続しない限り、アクションは不要です。

  2. 外部 Weaviate の場合:

  3. ファイアウォールルールを確認:

問題:認証エラー(401 未承認)#

原因:API キーの不一致または認証構成の問題。

解決策:

  1. Weaviate と Dify の API キーが一致することを確認:

  2. 匿名アクセスを使用している場合:

    次に、Dify 構成から WEAVIATE_API_KEY を削除します。

問題:ドキュメントが「QUEUING」ステータスで止まる#

原因:Celery worker が実行されていないか、Redis に接続されていません。

解決策:

問題:移行後のパフォーマンス低下#

原因:gRPC が有効になっていないか、正しく構成されていません。

解決策:

  1. gRPC 構成を検証:

    次のように表示されるはずです:

  2. gRPC 接続をテスト:

  3. それでも遅い場合は、Dify と Weaviate 間のネットワーク遅延を確認

問題:スキーマ移行エラー#

原因:Weaviate バージョン間の互換性のないスキーマ変更またはデータの破損。

解決策:

  1. Weaviate ログで特定のエラーメッセージを確認:

  2. 現在のスキーマをリスト:

  3. 必要に応じて、破損したコレクションを削除(⚠️ すべてのデータが削除されます):

  4. Dify を再起動してスキーマを再作成:

Warning

コレクションを削除するとすべてのデータが削除されます。バックアップがあり、すべてのコンテンツを再インデックスする準備ができている場合にのみ実行してください。

問題:Docker ボリュームの権限エラー#

原因:Docker コンテナのユーザー ID の不一致。

解決策:

問題:移行スクリプト実行時の権限拒否(Dify 1.11.0+)#

原因:新しい Dify バージョンでは /home/dify ディレクトリが存在しない可能性があり、uv キャッシュの作成に失敗します。

解決策:

ロールバック計画#

移行が失敗してロールバックする必要がある場合:

ステップ 1:サービスを停止#

ステップ 2:バックアップを復元#

ステップ 3:Dify バージョンを元に戻す#

ステップ 4:サービスを再起動#

ステップ 5:ロールバックを検証#

サービスが古いバージョンで実行されていることを確認:

Info

可能であれば、常にステージング環境でロールバック手順を最初にテストしてください。大規模な移行を試みる前に、複数のバックアップコピーを保持してください。

追加リソース#

公式ドキュメント#

コミュニティリソース#

移行ツール#

まとめ#

この移行により、Dify のベクトルストレージ機能に重要な改善がもたらされます:

  • パフォーマンスの向上:gRPC サポートにより、クエリとインポート速度が大幅に向上(2〜5 倍高速)

  • 安定性の向上:接続処理とエラー回復の強化

  • セキュリティ:Weaviate 1.19.0 では利用できないセキュリティ更新とパッチへのアクセス

  • 将来性:最新の Weaviate 機能と継続的なサポートへのアクセス

これは古いバージョンのユーザーにサーバーアップグレードを必要とする破壊的変更ですが、その利点は移行作業を大きく上回ります。ほとんどの Docker Compose ユーザーは、自動更新により 15 分以内に移行を完了できます。

Info

このガイドでカバーされていない問題が発生した場合は、Dify GitHub Issues ページで「weaviate」および「migration」ラベルを付けて報告してください。