Dify をアップグレードした後に知識ベースのベクトル検索がエラーになる場合の修正方法

Dify のアップグレード後に発生する知識ベースのベクトル検索エラーの修正方法


問題

Dify をアップグレードした後(例:1.8.x/1.10.x から 1.11.0+ へ)、知識ベースの検索テスト時に以下のエラーが発生することがあります:

Query call with protocol GRPC search failed with message extract target vectors: class 
Vector_index_xxx_Node does not have named vector default configured. 
Available named vectors map[].


根本原因

英語: これは Weaviate のスキーマ形式の変更が原因です。古い知識ベースはトップレベルに vectorIndexConfig を使用していますが、新しい Dify バージョンでは vectorConfig.default が期待されています。この不一致により、ベクトル検索が失敗します。

中国語: これは Weaviate のスキーマ形式の変更が原因です。古い知識ベースはトップレベルに vectorIndexConfig を使用していますが、新しい Dify バージョンでは vectorConfig.default が期待されています。この不一致により、ベクトル検索が失敗します。


解決策

この問題を一括で修正するため、Python スクリプトを作成しました:

:link: GitHub リポジトリ


クイックスタート

ステップ 1: スクリプトのダウンロードとコピー

# ダウンロード
curl -o /tmp/batch_fix_weaviate.py https://raw.githubusercontent.com/yupoet/dify-weaviate-fix/main/batch_fix_weaviate.py

# コンテナにコピー
docker cp /tmp/batch_fix_weaviate.py docker-api-1:/tmp/

ステップ 2: 影響を受けるコレクションのスキャン

docker exec docker-api-1 python /tmp/batch_fix_weaviate.py scan

ステップ 3: すべての影響を受けるコレクションの修正

docker exec -it docker-api-1 python /tmp/batch_fix_weaviate.py fix

ステップ 4: Dify で再埋め込み

英語: 各影響を受ける知識ベースについて、設定 → 埋め込みモデル に移動し、別のモデルに切り替えて保存し、元のモデルに戻して再度保存します。これにより再埋め込みが強制されます。

中国語: 各影響を受ける知識ベースについて、設定 → 埋め込みモデル に移動し、別のモデルに切り替えて保存し、元のモデルに戻して再度保存します。これにより再埋め込みが強制されます。


利用可能なコマンド

コマンド 説明
scan 修正が必要なコレクションを一覧表示
dry-run 修正をシミュレート(実際の変更は行わない)
fix すべての影響を受けるコレクションを修正
fix-one <name> 単一のコレクションを修正
cleanup 孤立したコレクションを削除
list-names 知識ベースの名前を表示

環境変数

変数 デフォルト 説明
WEAVIATE_ENDPOINT http://weaviate:8080 Weaviate の URL
WEAVIATE_API_KEY (空) API キー

テスト環境

  • Dify 1.11.0
  • Weaviate 1.27.0

完全なドキュメント


この情報が役に立ちましたか?リポジトリに :star: をつけてください!

GitHub: GitHub - yupoet/dify-weaviate-fix: How to Fix Knowledge Base Vector Search After Upgrading Dify (Weaviate vectorConfig Issue)

この問題については、すでに公式の移行ガイドと移行スクリプトが用意されています。

また、公式の移行ガイドを簡略化したコミュニティ主導のGistも公開されています。

公式リソースを共有していただきありがとうございます!しっかりと確認しました。

両方の解決方法の違いについての補足:

公式ソリューション 私のソリューション
アプローチ データの移行(ベクトルを保持) スキーマの再構築 + 再埋め込み
ベクトルを保持 :white_check_mark: はい :cross_mark: いいえ、再埋め込みが必要
適している場面 大規模データセット 小規模データセット、またはembeddingモデルの切り替えを前提とする場合
複雑さ 高い(LSMの修正 + データ移行) 低い(スキーマの再作成のみ)

私のソリューションは、以下の状況を想定した「迅速な簡易修正」です:

  • 知識ベース数が少ない小型のデプロイメント
  • 本来embeddingモデルの切り替えを予定しているユーザー
  • 再埋め込みが許容可能な状況

公式ソリューションは、以下のような場面に適しています:

  • ドキュメント数が多い大規模なデプロイメント
  • 既存のベクトルデータを保持したいユーザー
  • 再埋め込みに時間がかかるプロダクション環境

GitHubリポジトリを更新し、この位置付けを明確にし、公式ガイドへの参照を追加します。ご意見をいただきありがとうございます!:folded_hands: