作成日:2025年3月22日(土)
1.はじめに
近年、生成AIの発展により、多くの企業がAIを活用したビジネス変革を模索しています。しかし、AIアプリケーションの開発には専門的な知識やスキルが必要とされ、その恩恵を受けられる人材は限られていました。
私の会社では、AIの民主化を重要な経営課題と位置づけ、非エンジニアでも容易にAIアプリケーションを開発できる環境の整備を進めてきました。その取り組みの一環として、ノーコードチャットボット開発プラットフォーム「Dify」を導入し、社内での活用を推進しています。
このたび、Difyの最新バージョンv1.0.0がリリースされ、より高度な機能と使いやすさが実現されました。本記事では、v1.0.0へのアップグレードの意義と手順について解説し、非エンジニアの方々がより効果的にAI開発に取り組めるよう、その道筋を示していきます。
2.Dify-v1.0.0とは
Dify-v1.0.0は、2024年3月にリリースされた最新バージョンです。このバージョンでは、LLMのオーケストレーション機能が強化され、より柔軟なAIアプリケーションの構築が可能になりました。また、UIの刷新やセキュリティの向上など、多くの改善が施されています。
特筆すべき新機能として、プラグインシステムの導入があります。このプラグインシステムにより、開発者は独自の機能拡張を作成し、Difyプラットフォームに統合することができるようになりました。これにより、カスタムツールの開発やサードパーティサービスとの連携が容易になり、より多様なAIアプリケーションの開発が可能となっています。
3.バージョンアップ計画
Difyのバージョン0.15から1.1への直接アップグレードはできません。そのため、まずバージョン1.0.0へアップグレードする必要があります。
以下が私の環境でのバージョンアップ手順です。
4.GitHub公式のリリースノートに注意
Dify-v1.0.0へのバージョンアップ手順はlanggenius/difyのRelease/1.0.0に記載されていますが、情報が不十分なため、その手順だけでは正しくアップグレードできません。
Difyのドキュメントにある「コミュニティ版を v1.0.0 に移行する」ページを参照してバージョンアップすることを推奨します。
Release/1.0.0に記載されていない重要な注意点
-
最新版のfetch
git fetch originコマンドをgit checkout 1.0.0の前に実行する必要があります。このコマンドを実行しないと、ローカルリポジトリに1.0.0のタグが存在せず、checkoutに失敗します。
git fetch origin
git checkout 1.0.0
-
.envファイルの再作成
.envファイルの再作成は、v1.0.0に特有の要件ではありませんが、.env.exampleが定期的に更新されるため、最新の.env.exampleから.envを新しく作成することをお勧めします。
企業プロキシなどで.envファイルをカスタマイズしている場合は、その設定を新しい.envファイルに反映してください。
mv .env .env_250322_bak
cp -p .env.example .env
-
docker-compose.override.yamlの整合性確認について
docker-compose.yamlファイルを直接修正した場合、Difyのバージョンアップ時のgit pullで毎回コンフリクトが発生してしまいます。この問題を回避するため、多くのユーザーはdocker-compose.override.yamlでオーバーライドする方法を採用しています。docker-compose.yamlは頻繁に更新されるため、override.yamlとの整合性を必ず確認してください。
なお、docker-compose.yamlの詳細については、@TKDSさんの「docker compose override入門」をご参照ください。 - データマイグレーションツールの実行環境について
Dify-1.0.0には各種データマイグレーションツールが同梱されていますが、Release/1.0.0には実行環境の記載がありませんでした。「コミュニティ版を v1.0.0 に移行する」を参照することで、これが明確になりました。extract-plugins —workers=20、install-plugins —workers=2、migrate-data-for-pluginの各ツールは、docker-api-1コンテナ内で実行する必要があります。実行手順としては、まずdocker compose up -dでDifyを起動し、その後docker exec -it docker-api-1 bashコマンドでdocker-api-1コンテナ内のbashを起動して実行します。
[root@localmotion docker]# docker compose -f docker-compose.yaml up -d
[root@localmotion docker]# docker exec -it docker-api-1 bash
root@b2f93e7305c8:/app/api# poetry run flask extract-plugins --workers=20
root@b2f93e7305c8:/app/api#
root@b2f93e7305c8:/app/api# cat plugins.jsonl
{"tenant_id": "1a551d58-5fc9-44cf-b4fd-3825b05c5880", "plugins": ["langgenius/openai", "langgenius/google", "langgenius/azure_openai", "langgenius/openrouter"]}
root@b2f93e7305c8:/app/api#
root@b2f93e7305c8:/app/api# poetry run flask install-plugins --workers=2
2025-03-21 20:21:56.151 INFO [MainThread] [utils.py:162] - NumExpr defaulting to 4 threads.
2025-03-21 20:21:59.797 INFO [MainThread] [_client.py:1038] - HTTP Request: GET https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json "HTTP/1.1 200 OK"
Input file [plugins.jsonl]:
Output file [installed_plugins.jsonl]:
Starting install plugins.
2025-03-21 20:22:07.983 INFO [MainThread] [plugin_migration.py:304] - Extracting unique plugins from plugins.jsonl
25%|███████████████████████████████▎ 100%|█████████████████████████████████████████████████████████████████████████████ 100%|█████████████████████████████████████████████████████████████████████████████ ████████████████████████████████████████████████| 4/4 [00:01<00:00, 3.39it/s]
2025-03-21 20:22:09.182 INFO [MainThread] [plugin_migration.py:342] - Installing 4 plugin instances for fake tenant 41503b334b3a4987b8d63f5aad3d8fc7
2025-03-21 20:22:10.438 INFO [ThreadPoolExecutor-4_2] [_client.py:1038] - HTTP Request: GET https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/openai:0.0.13@9caa0421b5519db036aaccdbf1980d1071550767d6c59e9d9388dd386a92e9f6 "HTTP/1.1 200 OK"
2025-03-21 20:22:10.453 INFO [ThreadPoolExecutor-4_1] [_client.py:1038] - HTTP Request: GET https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/google:0.0.8@3efcf55ffeef9d0f77715e0afb23534952ae0cb385c051d0637e86d71199d1a6 "HTTP/1.1 200 OK"
2025-03-21 20:22:10.459 INFO [ThreadPoolExecutor-4_3] [_client.py:1038] - HTTP Request: GET https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/openrouter:0.0.5@55ddb36a03717ec8c10945eca203f066ef53d8ab692a17050fdc730000ba1e0a "HTTP/1.1 200 OK"
2025-03-21 20:22:10.470 INFO [ThreadPoolExecutor-4_0] [_client.py:1038] - HTTP Request: GET https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/azure_openai:0.0.10@6dd624f6fe6e7ac3bae02890e42be143aab0dd461fe1dff94731a98343ff36f6 "HTTP/1.1 200 OK"
2025-03-21 20:23:04.030 INFO [ThreadPoolExecutor-3_0] [plugin_migration.py:351] - Installing 4 plugins for tenant 1a551d58-5fc9-44cf-b4fd-3825b05c5880
2025-03-21 20:23:04.090 INFO [MainThread] [plugin_migration.py:400] - Uninstall plugins
Install plugins completed.
root@b2f93e7305c8:/app/api# poetry run flask migrate-data-for-plugin
2025-03-21 20:23:18.072 INFO [MainThread] [utils.py:162] - NumExpr defaulting to 4 threads.
2025-03-21 20:23:21.857 INFO [MainThread] [_client.py:1038] - HTTP Request: GET https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json "HTTP/1.1 200 OK"
Starting migrate data for plugin.
Migrating [providers] data for plugin
...
[1] Migrated [tool_builtin_providers] 11af3008-9a7a-42ef-97e7-88e923ee966e (google)
Migrate [tool_builtin_providers] data for plugin completed, total: 1
Migrate data for plugin completed.
※プロンプトが「root@b2f93e7305c8」になっている部分がdocker-api-1コンテナ内での作業です
※extract-pluginsコマンドで生成される「plugins.jsonl」ファイルは、poetry run flask install-plugins --workers=2コマンドがプロキシ環境下で失敗するのと、後述するプロキシ環境下でDify Marketplaceにアクセスできない問題があるため、catコマンドで内容を表示して控えておくことをお勧めします。
Dify-1.0.0では大規模言語モデルや今まで「ツール」だったものがDify Marketplaceに移行されているため、プロキシ問題でDify Marketplaceにアクセスできないのは困りました。
回避策はあります。
私の環境はプロキシを使用していませんが、plugins.jsonlのフォーマットは以下のような構造(整形済み)となっています。
{
"tenant_id": "1a551d58-5fc9-44cf-b4fd-3825b05c5880",
"plugins": [
"langgenius/openai",
"langgenius/google",
"langgenius/azure_openai",
"langgenius/openrouter"
]
}
5.Dify-1.0.0の動作確認
バージョンアップとデータマイグレーションの完了後、DifyのURLにアクセスして、バージョンが正しく1.0.0に更新されていることを確認してください。
6.Dify-1.1.2へのバージョンアップ
バージョン1.0.0へのアップグレード完了後は、通常のアップグレード手順に従って最新版へ更新できます。
私の環境では、0.15.2から1.0.0、1.1.1へと段階的にアップグレードし、2025年3月22日にリリースされた1.1.2へ更新しました。
バージョンアップ方法はlanggenius/difyのRelease/1.1.2を参照してください。
Docker Composeデプロイメントの手順
-
カスタマイズしたdocker-compose YAMLファイルのバックアップ(任意)
cd docker cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
-
メインブランチから最新のコードを取得
git checkout main git pull origin main
-
サービスの停止(dockerディレクトリで実行)
docker compose down
-
データのバックアップ
tar -cvf volumes-$(date +%s).tgz volumes
-
サービスのアップグレード
docker compose up -d
6.Dify-1.1.1の問題
個人環境ではあまり問題は発生していませんが、企業プロキシがある会社環境では問題が発生していますので、少しまとめておきます。
No | 環境 | 問題 | 関連Issues | 備考 |
---|---|---|---|---|
1 | 個人/会社 | Azure DALL-E(0.0,.2)でDall-E3の認証が’base64’ is not definedエラーで認証できない(*1) | OpenAI版は動きます。 | |
2 | 会社 | Dify Marketplaceに接続できるがmarketplace.dify.aiがSSL証明書エラーとなりダウンロードインストールできない | ||
3 | 会社 | プラグインインストール時に”Expecting value: line 1 column 1 (char 0)"エラーが発生してインストールできない |
#14608 #15449 |
NO_PROXYで対策可能 |
4 | 会社 | Google Search、Perplexityプラグインがプロキシを越えられない | #14621 |
7.Dify-1.1.1の問題の回避策
今、発見できている問題は大きく4つです。回避策があるものは回避策を記載します。
No | 環境 | 問題 | 回避策 |
---|---|---|---|
1 | 個人/会社 | Azure DALL-E(0.0,.2)でDall-E3の認証が’base64’ is not definedエラーで認証できない | OpenAI DALL-Eを使う それ以外回避策なし |
2 | 会社 | Dify Marketplaceに接続できるがmarketplace.dify.aiがSSL証明書エラーとなりダウンロードインストールできない | 対策(#14608、#15449問題)をしたのち、プラグインをDifyの[プラグインをインストールする]→[ローカルパッケージファイル]から手動インストール |
3 | 会社 | プラグインインストール時に”Expecting value: line 1 column 1 (char 0)"エラーが発生してインストールできない | 同上 |
4 | 会社 | Google Search、Perplexityプラグインがプロキシを越えられない | 回避策なし、PROXYに関して複数報告されているissuesの対策待ち |
7.参考URL