DeepSeek + Dify AI アプリを構築
コードを一切書かずに、ローコードで AI アプリを構築。ビジュアルなオーケストレーションインターフェース、ドラッグ&ドロップのワークフロー設計で、ナレッジベースの Q&A、Agent インテリジェントエージェント、エンタープライズ向け AI アプリをゼロから作成できます。
学習を始めるデータソース:github.com/langgenius/dify 公式リポジトリ
DifyでAIアプリを構築する理由
DifyはオープンソースのLLMアプリケーション開発プラットフォームで、DeepSeekモデルを素早くAIアプリに構築できます。ビジュアルオーケストレーション、ドラッグ&ドロップのワークフロー、ナレッジベース、エージェント、チャットボットをサポートし、DeepSeekモデルに完全に対応しています。
| 公式リポジトリ | github.com/langgenius/dify |
| オープンソースライセンス | Apache 2.0(商用利用可) |
| デプロイ方法 | Docker Compose / 公式クラウドサービス |
| コア機能 | ビジュアルプロンプトオーケストレーション、RAGナレッジベース、エージェントワークフロー、API公開 |
| DeepSeekサポート | OpenAI-API互換経由でネイティブ統合、V3およびR1全シリーズをサポート |
Difyの主な利点
- ビジュアルプロンプトオーケストレーション、ドラッグ&ドロップのワークフロー設計、コード不要
- 組み込みRAGエンジン、PDF / Word / TXT / Markdown / Webページなど複数形式をサポート
- エージェント:ツール呼び出し、コード実行、条件分岐
- 会話ログと分析でアプリの効果を継続的に最適化
- ワンクリックAPI公開、iframe埋め込みと共有リンクをサポート
- OpenAI-API互換経由でDeepSeekとシームレスに統合
Difyの紹介とインストール
DifyはオープンソースのLLMアプリケーション開発プラットフォームで、大規模言語モデル(DeepSeekなど)をすぐに使えるAIアプリケーションに構築するのに役立ちます。Docker Composeによるワンクリックデプロイで、5分でインストールが完了します。
Difyとは?
DifyはLangGeniusチームによって開発された、LLMアプリケーションのライフサイクル全体をカバーする開発プラットフォームです。プロンプトオーケストレーション、ナレッジベース管理、エージェントワークフローからアプリケーションの公開まで、ワンストップのソリューションを提供します。Difyは「AIアプリケーションのWordPress」と考えることができます。ビジュアルインターフェースを通じて、コードを書かずにさまざまなAIアプリケーションを迅速に構築できます。
環境要件
- DockerとDocker Compose(必須)
- 少なくとも4GBの空きメモリ(8GB以上推奨)
- 少なくとも20GBの空きディスク容量
- Windows / macOS / Linuxに対応
Docker Composeによるワンクリックデプロイ
以下のコマンドでDifyリポジトリをクローンし、Docker Composeですべてのサービスを起動します:
# Difyリポジトリをクローン git clone https://github.com/langgenius/dify.git # Dockerディレクトリに移動 cd dify/docker # 環境変数設定ファイルをコピー cp .env.example .env # すべてのサービスを起動(PostgreSQL、Redis、Weaviate、Nginx、Dify API、Dify Web) docker compose up -d # サービス状態を確認 docker compose ps
デプロイ完了後、ブラウザでhttp://localhost:3000にアクセスすると、Dify管理画面に入れます。初回アクセス時には管理者のメールアドレスとパスワードを設定する必要があります。
ヒント
ローカルにデプロイしたくない場合は、Difyは公式クラウドサービス(cloud.dify.ai)も提供しており、登録するだけでデプロイ手順なしで利用できます。ただし、セルフデプロイではデータを完全に制御できるため、プライバシー要件がある場合に適しています。
DeepSeekモデルの接続
DifyはOpenAI-API互換方式でDeepSeekモデルを接続できます。DeepSeek公式APIでも、OllamaでローカルにデプロイしたDeepSeekでも、Difyで設定して使用できます。
設定手順
- Dify管理画面にログイン後、右上のアバターをクリックし、「設定」を選択
- 左側のメニューで「モデルプロバイダー」をクリック
- モデルプロバイダー一覧で「OpenAI-API互換」を見つける
- 「プロバイダーに追加」ボタンをクリック
- 以下の設定情報を入力
方法1:DeepSeek公式APIに接続
DeepSeek公式APIを使用する場合、以下のように設定します:
| プロバイダータイプ | OpenAI-API互換 |
| プロバイダー名 | DeepSeek(カスタム) |
| API Base URL | https://api.deepseek.com/v1 |
| API Key | sk-your-deepseek-api-key |
APIキー取得先:platform.deepseek.com/api_keys。登録後に作成でき、新規ユーザーには無料枠があります。
方法2:OllamaでローカルにデプロイしたDeepSeekに接続
Ollamaを使用してDeepSeekモデルをローカルで実行している場合、以下のように設定します:
| API Base URL | http://localhost:11434/v1 |
| API Key | 任意の値(Ollamaローカルでは検証不要) |
DifyとOllamaが同じマシンで動作している場合は、localhostを使用します。Ollamaが別のマシンにある場合は、対応するIPアドレスに置き換えてください。OllamaにOLLAMA_HOST=0.0.0.0:11434環境変数が設定されていることを確認してください。
モデルの追加
設定後、「モデルプロバイダー」ページで追加したDeepSeekプロバイダーをクリックし、「モデルを追加」ボタンをクリックします:
deepseek-chat(V3)または deepseek-reasoner(R1)deepseek-r1:8bなどのOllamaモデル名を入力します保存後、DeepSeekモデルが利用可能なモデルリストに表示され、アプリ作成時に選択できます。
最初のチャットアプリを作成する
DeepSeekモデルを統合したら、最初のAIチャットアプリを作成しましょう。Difyには、チャットアシスタント、テキスト生成、エージェントの3つのアプリタイプがあります。まずは最もシンプルなチャットアシスタントから始めます。
ステップ1:アプリを作成する
- Difyのホームページで「アプリを作成」ボタンをクリックします
- 「チャットアシスタント」アプリタイプを選択します
- アプリ名を入力します(例:「DeepSeekスマートアシスタント」)
- アプリアイコンを選択します(任意)
- 「作成」をクリックします
ステップ2:モデルを設定する
アプリ編集ページに入ったら、右側の「モデル設定」領域で:
- 「モデル」ドロップダウンメニューで、先ほど追加したDeepSeekモデル(deepseek-chatまたはdeepseek-reasoner)を選択します
- モデルパラメータを設定します:
- Temperature:0.7(会話)/ 0.1(コード)/ 0.9(クリエイティブライティング)
- 最大トークン数:ニーズに応じて設定します。通常2048で十分です
- コンテキストウィンドウ:デフォルト値を維持することをお勧めします
ステップ3:システムプロンプトを設定する
システムプロンプトは、AIの役割と動作を定義します。「オーケストレーション」ページの「プロンプト」領域に、以下を入力します:
あなたはDeepSeekモデルによって駆動されるプロフェッショナルなAIアシスタントです。 あなたの回答スタイル: - 簡潔明瞭で、冗長でなく、要点を直接伝えます - 質問がコードに関する場合は、完全に実行可能な例を提供します - 質問が数学や論理に関する場合は、推論プロセスを示します - ユーザーの説明が不明瞭な場合は、積極的に詳細を尋ねます - 中国語で回答し、専門用語には英語の原文を併記しても構いません あなたの制限: - 知らないことは知らないと言い、情報を捏造しません - 医療、法律などの専門的なアドバイスに関わる場合は、専門家に相談するようユーザーに注意を促します
ステップ4:チャットをテストする
ページ右側の「プレビュー」領域で、チャットを直接テストできます。質問を入力し、DeepSeekの応答が期待どおりか確認します。効果が不十分な場合は、Temperatureパラメータを調整するか、システムプロンプトを最適化できます。
デバッグのヒント
- 回答が短すぎる場合は、Temperatureを下げてmax_tokensを増やしてみてください
- 回答がトピックから外れている場合は、システムプロンプトを最適化して、役割をより明確に説明します
- R1モデルを使用する場合、思考連鎖(thinking)が出力されることに注意してください。これは正常な推論プロセスです
- 「ログと注釈」をクリックすると、過去の会話を表示して効果を分析できます
システムプロンプトの設計に関する詳細は、DeepSeek使用チュートリアルのプロンプトエンジニアリングのセクションを参照してください。
ナレッジベース構築
ナレッジベースはRAG(検索拡張生成)の中核です。ドキュメントをDifyナレッジベースにアップロードすると、DeepSeekはドキュメントの内容に基づいて回答できるようになり、回答の正確性と専門性が大幅に向上します。
ドキュメントのアップロード
Difyの上部ナビゲーションバーで「ナレッジベース」をクリックし、ナレッジベース管理ページに移動します:
- 「ナレッジベースを作成」ボタンをクリックします
- ナレッジベース名を入力します(例:「会社製品マニュアル」)
- 「ドキュメントをアップロード」をクリックし、アップロードするファイルを選択します
対応ドキュメント形式
PDF / Word / PPT
.pdf、.docx、.pptx形式に対応し、テキスト内容を自動抽出します。
TXT / Markdown / CSV
.txt、.md、.csv形式に対応し、構造化データに適しています。
ウェブスクレイピング
URLを入力すると、Difyが自動的にウェブコンテンツを取得し、ナレッジベースにインポートします。
コードファイル
.py、.js、.javaなどのコードファイルに対応し、技術文書に適しています。
チャンク設定
ドキュメントをアップロードすると、Difyは自動的にドキュメントを複数の「チャンク」に分割し、各チャンクは独立してベクトル化され、保存・検索されます。チャンク設定は検索結果に直接影響します:
| チャンクサイズ | 推奨値は500〜1000文字です。小さすぎると情報が不完全になり、大きすぎると検索精度が低下します。 |
| オーバーラップ | 推奨値は50〜100文字です。チャンク間の重複部分で、重要な情報が途切れるのを防ぎます。 |
検索設定
ナレッジベースの「検索設定」で、以下のパラメータを設定できます:
| 検索方式 | ベクトル検索(意味的マッチング)/ 全文検索(キーワードマッチング)/ ハイブリッド検索(推奨) |
| Top K | 関連性の高い上位K件のドキュメントチャンクを返します。推奨値は3〜5です。値が大きいほどコンテキストが豊富になりますが、ノイズが混入する可能性があります。 |
| 類似度しきい値 | このしきい値以上の類似度の結果のみを返します。推奨値は0.5〜0.7です。しきい値が高いほど結果は正確になりますが、関連コンテンツを見逃す可能性があります。 |
ベストプラクティス
- ドキュメントの品質が高いほど、検索結果も良くなります。まずドキュメント内の無関係なコンテンツをクリーンアップすることをお勧めします。
- ドキュメントに多数の表が含まれる場合は、アップロード前にMarkdownテーブル形式に変換することをお勧めします。
- ナレッジベースのドキュメント量が多い場合(10万文字以上)は、ハイブリッド検索モードの使用をお勧めします。
- アップロード後、いくつかの質問をテストして検索効果を確認し、パラメータを調整することをお勧めします。
RAGアーキテクチャの詳細については、DeepSeek導入チュートリアルのDify統合セクションを参照してください。
ナレッジベースQ&Aアプリ
ナレッジベースとDeepSeekを組み合わせて、専門的なドキュメントQ&Aボットを構築します。ユーザーが質問すると、Difyはまずナレッジベースから関連するドキュメントの断片を検索し、それらの断片に基づいてDeepSeekが正確な回答を生成します。
ナレッジベースQ&Aアプリの作成
- Difyのホームページで「アプリ作成」をクリックし、「チャットアシスタント」を選択します
- アプリ名を入力します(例:「製品ドキュメントQ&A」)
- アプリのオーケストレーションページに移動し、「コンテキスト」領域で「追加」をクリックします
- 先ほど作成したナレッジベースを選択します
- 右側のモデル設定でDeepSeekモデルを選択します
システムプロンプトの設定
ナレッジベースQ&Aアプリでは、AIが取得したドキュメントをどのように利用するかを知るために、特別なシステムプロンプトが必要です:
あなたは専門的なナレッジベースQ&Aアシスタントです。回答は提供されたドキュメントの内容に基づく必要があります。 回答ルール: 1. ドキュメントの情報を優先的に使用して質問に回答します 2. ドキュメントに関連情報がある場合は、直接引用して回答します 3. ドキュメントに関連情報がない場合は、ユーザーに「この内容はドキュメントに含まれていません」と明確に伝えます 4. 回答時には情報源を明記します(例:「製品マニュアル第3章によると...」) 5. ドキュメントにない情報を捏造しないでください ドキュメントの内容: {{#context#}} ユーザーの質問:{{#query#}} 上記のドキュメントの内容に基づいてユーザーの質問に回答してください。
RAGワークフロー
ナレッジベースQ&Aの完全なワークフローは次のとおりです:
- ユーザーの質問:ユーザーが質問を入力します
- ベクトル検索:Difyが質問をベクトルに変換し、ナレッジベースから最も関連性の高いドキュメントの断片を検索します
- コンテキストの組み立て:取得したドキュメントの断片をコンテキストとして、ユーザーの質問とともにプロンプトに組み立てます
- LLM推論:DeepSeekがコンテキストと質問に基づいて回答を生成します
- 結果の返却:回答をユーザーに返し、引用元を明記します
テストと最適化
プレビュー領域でいくつか質問をテストし、回答の品質を確認します:
- 回答が十分に正確でない場合は、ナレッジベースのドキュメントの分割と検索設定を確認します
- 回答がドキュメントと無関係な場合は、システムプロンプト内の変数参照が正しくない可能性があります
- 関連コンテンツを取得できない場合は、類似度しきい値を下げるか、Top K値を増やしてみてください
- 「ログと注釈」ページで、各回に取得された具体的なドキュメントの断片を確認できます
Agentワークフロー
AgentはDifyの最も強力な機能です。ビジュアルなワークフローオーケストレーションを通じて、自律的な意思決定、ツール呼び出し、コード実行が可能なAIエージェントを構築できます。DeepSeekは推論エンジンとして、Agentの意思決定ロジック全体を駆動します。
Agentアプリの作成
- Difyのホームページで「アプリ作成」をクリックします
- 「Agent」アプリタイプを選択します
- アプリ名を入力します(例:「データ分析アシスタント」)
- ワークフローオーケストレーションページに移動します
ワークフローノードの紹介
| ノードタイプ | 機能説明 | 使用シナリオ |
|---|---|---|
| 開始ノード | ワークフローの入り口で、入力変数を定義します | 各ワークフローには必ず1つだけ必要です |
| LLMノード | DeepSeekモデルを呼び出して推論と生成を行います | テキスト生成、分析、要約、翻訳 |
| ツールノード | 外部APIや組み込みツールを呼び出します | 検索、計算、メール送信、データベースクエリ |
| コードノード | PythonまたはJavaScriptコードを実行します | データ処理、フォーマット変換、カスタムロジック |
| 条件分岐 | 条件に基づいて異なる分岐に進みます | 分類、ルーティング、複数シナリオの処理 |
| 知識検索 | ナレッジベースから関連ドキュメントを検索します | ナレッジベースQ&A、ドキュメント分析 |
| 終了ノード | ワークフローの出口で、出力変数を定義します | 各ワークフローには少なくとも1つの出力が必要です |
実践:データ分析Agentの構築
以下は完全なデータ分析Agentワークフローの例です:
ワークフロー構造:
- 開始ノード:ユーザーのデータ分析リクエストを受け取ります
- LLMノード(意図分析):DeepSeekがユーザーの意図を分析し、分析タイプ(記述的分析 / 傾向分析 / 比較分析)を判断します
- 条件分岐:分析タイプに基づいて異なる処理フローにルーティングします
- コードノード(データ処理):Pythonコードを実行してデータのクリーニング、集計、計算を行います
- LLMノード(レポート生成):DeepSeekが処理結果に基づいて分析レポートを生成します
- 終了ノード:最終的な分析レポートを出力します
LLMノード設定例
LLMノードでDeepSeekモデルを選択し、以下のプロンプトを設定します:
あなたはデータ分析の専門家です。ユーザーのデータ分析ニーズを分析し、以下のタイプのどれに属するかを判断してください: 1. 記述的分析:ユーザーはデータの基本状況を理解したい(例:「売上額はいくらか」) 2. トレンド分析:ユーザーはデータの変化傾向を理解したい(例:「直近3ヶ月の変化」) 3. 比較分析:ユーザーは異なる次元を比較したい(例:「製品Aと製品Bの比較」) ユーザーニーズ:{{#query#}} 分析タイプの番号(1、2、または3)のみを出力してください。他の内容は出力しないでください。
コードノード例
コードノードでは、データ処理用のPythonコードを記述できます:
def main(data: str) -> dict: """入力データを処理し、分析結果を返す""" import json # 入力データを解析 records = json.loads(data) # 基本統計指標を計算 values = [r["value"] for r in records] total = sum(values) avg = total / len(values) if values else 0 max_val = max(values) if values else 0 min_val = min(values) if values else 0 return { "total": total, "average": round(avg, 2), "max": max_val, "min": min_val, "count": len(values), "summary": f"合計 {len(values)} 件のデータ、合計 {total}、平均 {avg:.2f}" }
条件分岐設定
条件分岐ノードは、LLMノードの出力結果に基づいてルーティングします:
- 条件1:LLM出力 == "1" -> 記述的分析フローへ
- 条件2:LLM出力 == "2" -> トレンド分析フローへ
- 条件3:LLM出力 == "3" -> 比較分析フローへ
- デフォルト分岐:その他の場合 -> 一般分析フローへ
Agentデバッグのヒント
- 「実行」機能を使用してワークフローを段階的にデバッグし、各ノードの入出力を確認します
- LLMノードでTemperature=0.1に設定すると、分類がより安定します
- コードノードで出力されたログは実行ログで確認でき、デバッグに便利です
- 複雑なワークフローでは、最初にフローチャートを描き、その後Difyで実装することをお勧めします
公開と埋め込み
アプリケーション開発が完了したら、Difyは複数の公開方法を提供します:API公開(プログラム呼び出し用)、iframe埋め込み(Webページへの埋め込み用)、共有リンク(直接共有用)。追加開発は不要で、ワンクリックで公開できます。
方法1:API公開
アプリケーションをREST APIとして公開し、任意のバックエンドプログラムから呼び出すことができます:
- アプリケーション編集ページで、右上の「公開」ボタンをクリックします
- 「APIアクセス」を選択します
- APIキーとインターフェースドキュメントを取得します
# DifyアプリケーションAPIを呼び出す curl -X POST https://your-dify-host/v1/chat-messages \ -H "Authorization: Bearer app-xxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "inputs": {}, "query": "こんにちは、最近の売上データを分析してください", "response_mode": "streaming", "user": "user-001" }'
方法2:iframe埋め込み
アプリケーションをWebサイトに埋め込むと、ユーザーはWebページ上で直接使用できます:
- アプリケーション編集ページで、右上の「公開」をクリックします
- 「Webサイトに埋め込む」を選択します
- 生成されたiframeコードをコピーします
<!-- 以下のコードをWebページに貼り付けてください --> <iframe src="https://your-dify-host/chatbot/xxxxxxxxxxxxx" style="width: 100%; height: 600px; border: none; border-radius: 12px;" allow="microphone"> </iframe>
方法3:共有リンク
公開共有リンクを生成すると、誰でもリンクからアプリケーションにアクセスできます:
- アプリケーション編集ページで、右上の「公開」をクリックします
- 「実行」を選択します
- 生成された共有リンクをコピーします
アクセス制御設定
| APIキー | API呼び出し時の認証資格情報として使用されます。「APIアクセス」ページで管理できます |
| IPホワイトリスト | 特定のIPアドレスのみAPIを呼び出せるように制限します |
| レート制限 | 1分/1時間あたりの最大リクエスト数を設定し、不正使用を防ぎます |
| 会話ログ | 「ログと注釈」で全ユーザー会話を表示し、利用状況を分析します |
実践事例
以下は、DeepSeek + Dify の実際のアプリケーション事例3つです。簡単なものから複雑なものまで、最も一般的なアプリケーションシナリオをカバーしています。各事例には、完全な設定の考え方とパラメータの参考が含まれています。
事例1: インテリジェントカスタマーサービスボット
シナリオ説明: 企業ウェブサイト向けにインテリジェントカスタマーサービスを構築し、製品の使用方法、アフターサービス方針、よくある質問などのユーザーからの問い合わせに自動で回答します。
設定ポイント:
- ナレッジベース: 製品マニュアル、FAQドキュメント、アフターサービス方針ファイルをアップロード
- モデル選択: DeepSeek V3 (deepseek-chat)、Temperature=0.3
- システムプロンプト: 「プロフェッショナルなカスタマーサービス」に設定し、丁寧さ、忍耐強さ、正確さを要求
- 公開方法: iframeで公式サイトのカスタマーサービスページに埋め込む
- 効果最適化: ログを定期的に確認し、頻度の高い質問のナレッジベースドキュメントを補充
事例2: ドキュメントQ&Aアシスタント
シナリオ説明: チーム向けに社内ドキュメントQ&Aシステムを構築し、同僚が会社の規程、プロジェクトドキュメント、技術仕様などについて直接質問できるようにします。
設定ポイント:
- ナレッジベース: すべての社内ドキュメントをアップロード、チャンクサイズ800、オーバーラップ100
- 検索設定: ハイブリッド検索、Top K=5、類似度しきい値0.6
- モデル選択: DeepSeek V3 (deepseek-chat)、Temperature=0.1
- システムプロンプト: 「ドキュメントに基づいて回答し、情報を捏造しない」ことを強調
- 変数設定: {{#context#}} と {{#query#}} 変数を使用
事例3: データ分析アシスタント
シナリオ説明: データ分析Agentを構築し、ユーザーがデータファイルをアップロードすると、Agentがデータクリーニング、分析、レポート生成を自動的に実行します。
ワークフロー設定:
- 開始ノード -> ユーザー入力とデータファイルを受け取る
- LLMノード -> ユーザーの意図を分析し、分析タイプを決定
- 条件分岐 -> 分析タイプに基づいて異なる処理フローを選択
- コードノード -> Pythonデータ処理を実行(pandas、numpy)
- LLMノード -> 処理結果に基づいて分析レポートを生成
- 終了ノード -> フォーマットされたレポートを出力
主要パラメータ:
- モデル選択: 複雑な推論にはDeepSeek R1 (deepseek-reasoner)、レポート生成にはV3を使用
- コードノードタイムアウト: 大規模データ処理のタイムアウトを避けるため60秒に設定
- ツール設定: 外部データの照会をサポートするウェブ検索ツールを追加
その他のアプリケーションシナリオ
AIチューター
教科書と問題集をアップロードし、DeepSeekがナレッジベースに基づいて学生の質問に答え、解法の考え方を説明します。
商品レコメンドアシスタント
商品データベースと組み合わせ、DeepSeekがユーザーのニーズに基づいて適切な商品を推薦し、コンバージョン率を向上させます。
健康相談アシスタント
医学ナレッジベースをアップロードし、一般的な病気の科普相談を提供します(注意:専門医の診断の代わりにはなりません)。
法規検索アシスタント
法律・規制ドキュメントをアップロードし、ユーザーが関連する法条や解釈を迅速に検索できるようにします。
DeepSeek + Dify よくある質問
関連チュートリアル
DeepSeek モデルの使用方法、デプロイ、開発テクニックを詳しく学びます。
DeepSeek エコシステムツール
Ollama、Open WebUI、Dify、Continue.dev などの完全ガイド。
DeepSeek デプロイチュートリアル
Ollama、Docker、vLLM、K8s の全シナリオ対応デプロイソリューション。
DeepSeek 使用チュートリアル
4 つの使用方法、初心者から上級者まで。
DeepSeek モデルダウンロード
Ollama、Hugging Face、GitHub のダウンロードガイド。
DeepSeek Model 完全ガイド
技術アーキテクチャ、ベンチマーク性能比較、モデル選定。
DeepSeek オープンソースモデル
6 シリーズ、20 以上のモデルの完全カタログ。