Difyの紹介 - 生成AIシステム開発のライフサイクル全体を支援するツール

# Dify - Your Weekend GenAI Magics
May 5, 2024 • Benny Cheung

[https://bennycheung.github.io/dify-your-weekend-genai-magics](https://bennycheung.github.io/dify-your-weekend-genai-magics)

---

AIや生成AIのような複雑な分野では、理論に深く潜り込む傾向があります。書籍、論文、講義 – これらは知識習得の伝統的なツールで有効ではありながらも、真の価値はその理論を実プロジェクトに適用するときに現れます。抽象的なものが具体的なものになり、アイデアが見たり触れたり、相互作用したりできるものに変わるのです。

生成AI、特にChatGPTのようなツールは、このプロセスを革命的に変えました。従来、AIにおける概念から実行までの道のりは困難で、何ヶ月／何年もかかり、イノベーションやAI技術の広範な普及への大きな障壁となっていました。しかし、今では、大規模言語モデル（LLM）の登場により、劇的な変化が起きています

ChatGPT等のAIツールは、アイデアを現実に変えるための新しいパラダイムシフトと言えます。プロンプトエンジニアリング等を通じて、これらの複雑なAIモデルと簡単な言葉で対話することができます。モデルは私たちの考えを構造化された繰り返し可能な方法で生成したり、完成させたりします。これはAI開発のアプローチにおける根本的な変化です。

しかし、まだ大きな障壁が残っています。この巧妙に作られたプロンプトを実現可能な製品に変えることは簡単ではありません。多くの場合、単一のプロンプトでのタスク完了は難しく、複数の調整されたプロンプトが必要です。これには、目的とする製品を実現するための追加のツールやプラットフォームが必要です。

この課題に対して、[Tencent Cloud CODING DevOpsチーム](https://dify.ai/blog/open-source-llmops-platform-define-your-ai-native-apps)のメンバーによる数年にわたる研究と実践的な開発の結果、解決できるソリューションが登場しました。生成AIの分野でコンセプトから製品への移行を支援するために設計されたさまざまなプラットフォームやツールの中で、Difyは特に革新的なソリューションとして際立っています。Difyの注目度は高く、立ち上げからわずか36時間で1,500以上のアプリケーションが作成されました。

目次

- 教育プラットフォームとしてのDify：実践的な生成AI技術と実装技術の学習
    - 5分でRAGを構築する
    - RAGを活用した学習体験の向上
    - Dify の Prompt IDE
    - LLMコンポーネントの概要
    - 設定の詳細
    - Prompt IDEの利用
- アイデアの迅速なプロトタイピングと実験のためのPoCプラットフォームとしてのDify
    - Difyアプリの作成 - ユーザーガイド
- エージェントコンポーネントの構築とプロンプトエンジニアリング技術の学習プラットフォームとしてのDify
    - エージェントツールとその統合
- AI製品のデプロイと監視のためのプロダクションプラットフォームとしてのDify
    - クイックスタート
    - Dockerデプロイメントアーキテクチャ
    - ボリュームマッピング
    - サービスの相互作用
    - Difyのアップグレード
    - OpenAI GPT-4-oモデル
- Difyの拡張 - HTTPリクエストとツール
    - ローカルAPIサーバーに接続する技術
    - DifyをローカルLLMに接続
- 結論
- 参考文献

---

Dify（Do It For Yourselvesの略）は、AI初心者から熟練した開発者、大企業に至るまで、幅広いユーザーに対応するユニークな開発空間を提供します。このプラットフォームは次の4つのシナリオに合わせてプラットホームを提供します。

1. 生成AIを習得できる教育プラットホーム
2. アイデアの迅速なプロトタイピングと実験のためのPoCプラットフォーム
3. エージェントコンポーネントの構築とプロンプトエンジニアリング技術の学習プラットフォーム
4. AI製品のデプロイと監視のためのプロダクションプラットフォーム

## 教育プラットフォームとしてのDify：実践的な生成AI技術と実装技術の学習

生成AI技術はまだ未知の領域がまだ広く、技術を理解し活用するためには、徐々に発見を重ねる事が重要です。

Difyは、視覚的な学習ツールとして活用できます。際立たせているのは、Visual AI apps orchestration studioというローコード/ノーコードのツールです。これにより、AIコンポーネントを視覚的に組み合わせてアプリケーションを作成することができます。深いプログラミング知識を持たない個人にとっての参入障壁が大幅に低くなるため、優れた教育ツールとなります。

さらに、DifyのRetrieval-Augmented Generation（RAG）パイプラインは、AIアプリケーションにベクターデータベースを装備し、正確で文脈的関連性のある出力を生成できるようにすることで、学習体験を豊かにします。この機能は、AIが膨大なリソースを活用して情報に基づいた応答を生成する方法を実際に示し、先進的なAI機能が実際にどのように動作するかを実践的に垣間見ることができます。

### 5分でRAGを構築する

以下は、Difyワークフローコンポーネントを使用してシンプルなRAGパイプラインを構築する例です。

![https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_Workflow_Knowledge_Retrieval_Chatbot.jpg](https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_Workflow_Knowledge_Retrieval_Chatbot.jpg)

*Difyのナレッジリトリーバル + チャットボットテンプレートを使用して、5分で実装できるRAGパイプラインを示しています。*

DifyのナKnowledge Retrieval + Chatbotテンプレートから始めることができます。このワークフローテンプレートがどのように機能するかを、特に最もシンプルな形式のRAGに焦点を当てて説明します。

1. **開始**:
    - これはワークフローの初期トリガーポイントです。AIアプリケーションが動作を開始するプロセスの始まりを表しており、通常はユーザーのクエリや自動イベントによって開始されます。
2. **ナレッジリトリーバル**:
    - これはRAGセットアップの重要なコンポーネントです。システムが広範なデータベースやナレッジベースにクエリを実行し、ユーザーの質問に関連するテキストコンテンツを取得できるようにします。このステップの目的は、よく情報を持った応答を生成するために必要なすべての情報を収集することです。これにより、AIは事前学習されたモデルの知識を超えた広範なデータにアクセスできるようになります。
3. **LLM**:
    - ここでは、ワークフローが強力な言語モデルを呼び出します。この場合、`gpt-3.5-turbo`が使用されます。Difyには、多くのLLMコネクタが用意されてます。このモデルは、前のステップで取得した情報を使用してコンテキストを理解し、適切な応答を生成します。モデルは自然言語の入力を処理し、取得した知識によって文脈的に豊かな応答を生成します。
4. **回答**:
    - ワークフローの最終出力がこのステップで生成されます。回答モジュールはLLMからの応答を取得し、最終ユーザーにテキストとして届けます。これはユーザーの質問に対する直接の回答、タスクの完了、またはアプリケーションが提供するように設計された他の種類の応答である可能性があります。

![https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_Settings_on_Model_Providers.jpg](https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_Settings_on_Model_Providers.jpg)

*Difyには設定で利用可能な多くの他のLLM接続があります。各モデルはサービスにアクセスするためにAPIキーを必要とします。*

### RAGを活用した学習体験の向上

教育や学習の領域でDifyのワークフローにおけるRAGパイプラインは、AIが広範なデータベースを動的に利用して、応答内容と正確性を向上させる方法の理解に役立ちます。この設定は、次のような高度なAI機能を示します。

- **動的なデータ取得**: 広大なリポジトリから必要に応じてデータを引き出す能力により、AIの応答が現在の文脈や特定のユーザーの質問により適合するようになります。
- **文脈的理解と応答生成**: 最先端のLLMを使用することで、システムは微妙なニュアンスを理解し、事実に基づいて正確であるだけでなく、文脈的に適切な応答を生成することができます。
- **リアルタイムの学習と適応**: AIが取得した情報を効果的に使用して、新しい情報や進化する文脈に応じて応答を適応させる方法を示しています。

### Dify の Prompt IDE

さらに、DifyのPrompt IDEはプロンプトエンジニアリングを習得するためのツールとして際立っています。プロンプトエンジニアリングは、AIの応答を形成する上で重要なスキルです。この環境では、ユーザーがさまざまなプロンプトを試し、その調整の即時効果を観察し、AIを特定の結果に導く微妙な技術を理解することができます。

![https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_Workflow_LLM_Component_Prompt_Engineering_Example.jpg](https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_Workflow_LLM_Component_Prompt_Engineering_Example.jpg)

*LLMワークフローコンポーネントを拡張することで、取得したコンテキストを要約するプロンプトを対話的に作成できます。*

この画像は、Difyワークフロー内のLLMコンポーネントのビューであり、自然言語の問い合わせを処理し応答するためのLLMの設定に焦点を当てています。この例は、DifyのPrompt IDEを使用してプロンプトエンジニアリング技術を強化する方法を理解するのに非常に有益です。以下に、画像に示されている機能と特徴の概要と説明を示します。

### LLMコンポーネントの概要

- **モデルの選択:**
    - このコンポーネントは、OpenAIの`gpt-3.5-turbo`を使用するように設定されています。設定で構成された別のモデルプロバイダーを選択することもできます。
- **呼び出し方法:**
    - このモデルはチャットで呼び出され、対話形式で入力を処理し、応答を生成するフォーマットに適しています。

### 設定の詳細

- **コンテキスト変数:**
    - 「変数設定」機能を使用すると、ワークフローはLLMが応答を生成する際に使用できるコンテキスト情報を保存および伝達できます。これは、会話内の相互作用でコンテキストを維持するために重要です。
- **システム指示:**
    - システム設定で提供される詳細なプロンプト指示は、LLMが情報をどのように処理するかを導きます。
    - `<context></context>` XMLタグ内にカプセル化された学習済みの知識を使用することに言及しています。モデルは、動的に提供されたコンテキストを参照して応答を強化できます。
    - 指示は、知識の欠如を認めたり、明確化を求めたりするなどの行動を指定しており、これらは現実的で信頼性の高いAI相互作用を作成するために不可欠です。
    - モデルは知識の出典（コンテキスト）に言及しないように勧められており、これにより、やり取りがより人間らしくなります。

### Prompt IDEの利用

DifyのPrompt IDEにより、LLMに入力するプロンプトを対話的に作成／改善することが可能になります。このツールは、プロンプトエンジニアリング習得に不可欠であり、以下を行うことを可能にします：

- **さまざまなプロンプトの実験:** 質問やプロンプトのフレーミング方法をさまざまに試して、それがAIの応答にどのように影響するかを確認できます。これは、AIを特定の種類のクエリに対応させたり、異なるユーザー要件に従ってタスクを実行させたりするために最適化する上で重要です。
- **即時効果の観察:** プロンプトに加えた変更をすぐにテストして、それがAIの出力にどのように影響するかを観察できます。この即時フィードバックは、ユーザーとAIの相互作用のダイナミクスを理解し、改善するために有効です。
- **微妙な点の理解:** プロンプトを微調整し、結果を観察することで、特定のフレージングやコンテキストの手がかりがAIの応答の性質を大きく変える微妙な点を学ぶことができます。

この環境は、より洗練されたAI駆動のアプリケーションを構築できるようにするだけでなく、AI初心者にとっても実践的な学習ツールとして機能し、言語の微妙な違いやコンテキストがAIの相互作用に与える影響を理解するのに役立ちます。

## アイデアの迅速なプロトタイピングと実験のためのPoCプラットフォームとしてのDify

開発者がアイデアを具体化させるために、Difyは迅速なプロトタイピングと実験のためのリソースを提供します。プラットフォームの組み込みツールとAPIベースのツールの組み合わせにより、開発プロセスが簡素化され、迅速な反復と改良が可能になります。

![https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_Workspace_Template_for_Wide_Range_of_Apps.jpg](https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_Workspace_Template_for_Wide_Range_of_Apps.jpg)

*Difyには広範なワークスペーステンプレートが用意されており、プロジェクトを迅速に開始するのに役立ちます。*

このテンプレート群は、AIアプリケーション内で異なるコンポーネントがどのように連携するかについての仮説をテストし検証する環境をサポートするために重要です。アプリケーションの要素を組み立てたり、分解したり、再構成したりすることが容易であるため、創造的な実験が奨励され、コンセプトからプロトタイプへのアイデアの迅速な進化が可能になります。

### Difyアプリの作成 - ユーザーガイド

Difyは、生成AIアプリケーションの作成を案内するチュートリアルを提供しています。特にこのチュートリアルは、LLMの能力を実用的でユーザーフレンドリーなアプリ開発に活用できる内容です。

- [エージェントアシスタント](https://docs.dify.ai/user-guide/creating-dify-apps/prompt-engineering/agent-assistant)
    - LLMの推論能力を活用して、自律的に目標を設定し、複雑なタスクを分解し、ツールをナビゲートし、プロセスを洗練してタスクを独自に達成するツールです。
- [チャットアプリ](https://docs.dify.ai/user-guide/creating-dify-apps/prompt-engineering/conversation-application)
    - ユーザーとのシームレスな会話を促進し、簡単な質問と回答の形式で運営されるアプリです。継続的な対話を通じて、AIとのやり取りをより自然で直感的なものにします。
- [テキストジェネレーター](https://docs.dify.ai/user-guide/creating-dify-apps/prompt-engineering/text-generation-application)
    - 記事の要約から翻訳まで、ユーザープロンプトに基づいてさまざまな形式の高品質なテキストを生成する能力をもつアプリです。このアプリケーションは、創造的なコンテンツ生成タスクにおけるAIの可能性を示し、自動化されたライティングの未来を垣間見ることができます。

## エージェントコンポーネントの構築とプロンプトエンジニアリング技術の学習プラットフォームとしてのDify

エージェントプラットフォームとして、Difyはエージェントコンポーネント（タスクを自律的に実行できる自己操作ユニット）の構築支援に優れています。プラットフォームのエージェントアシスタント機能は、LLMの力を活用して、詳細な分析の実施から包括的なレポートの作成まで、複雑な任務を独立して遂行します。

![https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_Assistant_Agent_UI.jpg](https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_Assistant_Agent_UI.jpg)

*Dify Studioで完全に構築されたアシスタントエージェントアプリケーションの例を示します。必要なのはアイデアと生成AIに関する高レベルの理解だけで、コーディング経験は不要です。*

Difyのエージェントインターフェースは、特定用途のアシスタントエージェントを作成するために設計されてます。一例として、投資分析コパイロットは、株式の専門データ分析を提供するために設計された専門のAIエージェントなどがあります。以下に、インターフェースを構成するコンポーネントと機能の詳細を示します。

- **指示セクション:**
    - ここでは、エージェントの詳細な業務内容が定義されています。エージェントは、ファンダメンタル分析、テクニカル分析、市場感情分析などの専門分野に精通したデータ分析コパイロットとして定義されます。
    - エージェントの能力を構築するためのスキルが明確に定義されます。例えば、Yahoo Financeからティッカー情報を使用して株式情報を検索したり、ターゲット企業に関する最近のニュースを検索したりする能力、等です。
- **変数:**
    - ここでは「会社」などの変数が定義されており、ユーザーの入力をキャプチャし、動的な入力に基づいてエージェントの動作や応答に影響を与えることができます。
- **コンテキスト:**
    - 知識をコンテキストとしてインポートする機能が示唆されており、これによりAIが分析や応答を行うための追加情報を提供し、出力の精度と関連性を高めることができます。
- **ツール:**
    - Yahooの「Analytics」、「News」、「Ticker」などのツールが示されており、エージェントがタスクを実行するために利用できる組み込み機能を示しています。これらのツールは、データソースやAPIに接続して必要な情報を取得するように設計されています。
- **デバッグおよびプレビューウィンドウ:**
    - 右側にはエンドユーザーに表示されるユーザーインターフェースのプレビューが表示されます。これには、特定の株式の分析、企業の最近の動向の問い合わせ、ファンダメンタル分析の実施など、AIとの潜在的なユーザーの対話例が含まれます。これは、エージェントのユーザーとのやり取りをテストし、改善するために重要です。

### エージェントツールとその統合

Difyプロジェクトでは、エージェントおよびワークフローのツールが2つのタイプに分類されています。1つ目は、製品のコアに直接組み込まれている「組み込みツール」です。これらは事前にコード化され、追加のコーディングなしで利用できます。2つ目は、サードパーティAPIを利用する「APIベースのツール」です。

- **組み込みツール:** プラットフォームの一部として組み込まれたツールで、株式データや最新ニュースの取得など、特定の機能を実行するために事前にコード化されています。追加のコーディングなしで展開可能です。
- **APIベースのツール:** 外部サービスとの統合を目的としたツールで、APIを通じてカスタマイズや拡張が可能です。これにより、エージェントはより複雑で多様なタスクを実行できるようになり、ユーティリティと適応性が向上します。

これらのツールは使いやすさを重視して設計されており、ユーザーは直接コーディングする必要がありません。OpenAPIやSwagger、OpenAIプラグインなどのなじみのある形式でインターフェース定義を提供するだけで統合が可能です。この分類は、ユーザーエクスペリエンスを簡素化するとともに、Difyエコシステム内で利用可能なカスタマイズと機能の範囲を広げます。

## AI製品のデプロイと監視のためのプロダクションプラットフォームとしてのDify

クリエイティブAIプログラムの使用について議論することは、特に初心者にとっては難しいかもしれません。このセクションはその詳細に触れており、理解が深い人向けです。初心者の方は、この部分を飛ばしても構いません。

AIプログラムのデプロイと監視に関しては、Difyが包括的なサポートを提供します。バックエンドサービスにより、AIをさまざまな製品に統合するプロセスが簡素化され、開発から完全な利用までのシームレスな移行が可能になります。

### クイックスタート

DifyのGitHubリポジトリからプロジェクトをクローンできます。

> Dify.ai - GitHubリポジトリ: - langgenius/dify
> 

リポジトリをクローンしたら、Difyサーバーを起動する最も簡単な方法は、[docker-compose.yml](https://github.com/langgenius/dify/blob/main/docker/docker-compose.yaml)ファイルを実行することです。インストールコマンドを実行する前に、[Docker](https://docs.docker.com/get-docker/)と[Docker Compose](https://docs.docker.com/compose/install/)がマシンにインストールされていることを確認してください。

```
cd dify/docker
docker compose up -d

```

オープンソースの最大の利点の一つは、内部構造にアクセスしてその動作を理解できることです。商用製品では断片的な公開情報に限定されます。Difyの機能はオープンソースコミュニティによって維持／拡張されています。開発者は、自分のコードでプラットフォームを拡張することが可能です。

### Dockerデプロイメントアーキテクチャ

システムのアーキテクチャはDockerを使用してデプロイされ、複数のサービスとボリュームが関与し、それらの関係が示されています。これは、関心の分離とデータの永続性が重要な現代のWebアプリケーションに典型的なセットアップです。DockerおよびDocker Composeを使用することで、これらのサービスを分離されたがネットワーク化された方法で管理し、開発、デプロイ、スケーリングをより効率的に行うことができます。

![https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_docker_compose.jpg](https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_docker_compose.jpg)

*DifyのDocker Composeデプロイメントアーキテクチャ（画像提供：[Dify.ai](http://dify.ai/)）。*

- **Nginx**: リバースプロキシおよびWebサーバーとして機能します。設定ファイルは次のとおりです：
    - `nginx/nginx.conf`: 主な設定ファイル。
    - `/etc/nginx/nginx.conf`: コンテナ間で設定を永続化または共有するためのマウントされたボリューム。
    - `nginx/conf.d`: 追加の設定ファイル用のディレクトリ。
- **Weaviate**: ベクトル検索エンジンで、データストレージ用のボリュームで構成されています：
    - `/volumes/weaviate`: Weaviateのデータストレージ。
    - `/var/lib/weaviate`: Weaviateコンテナ内のデータのマウントポイント。
- **PostgreSQL (`db`)**: データベースサービスで、そのデータボリュームがあります：
    - `/volumes/db/data`: PostgreSQLのデータストレージ。
    - `/var/lib/postgresql/data`: PostgreSQLコンテナ内のデータのマウントポイント。
- **Redis**: インメモリデータ構造ストアで、データベース、キャッシュ、およびメッセージブローカーとして使用されます：
    - `/volumes/redis/data`: Redisのデータストレージ。
- **API (`api`)**: PostgreSQLおよびRedisを使用するバックエンドAPIサービス：
    - `/app/api/storage`: APIに関連するデータを保存するためのボリューム。
- **Worker (`worker`)**: APIおよびデータベース（PostgreSQLおよびRedis）の両方とやり取りするバックグラウンドワーカー。
- **Web (`web`)**: APIと通信するフロントエンドWebサービス。

### ボリュームマッピング:

- Nginx、PostgreSQL、Redis、Weaviateの設定ファイルとデータは、Dockerボリュームに格納されます。これらはホスト上のディレクトリであり、コンテナにマウントされます。このセットアップにより、コンテナの再起動時にもデータが永続化され、異なるコンテナ間で設定を共有できます。

### サービスの相互作用:

- **Nginx** は外部からのリクエストを適切なコンテナやサービス（APIやWebインターフェースなど）にルーティングします。
- **API** はデータの保存と取得のためにPostgreSQLに接続し、キャッシュやセッションストレージのためにRedisとやり取りすることもあります。
- **Worker** プロセスは、重い処理やバックグラウンド処理を含む非同期タスクを処理し、APIやデータベースとやり取りします。

これは、docker-composeが完了したときに表示される内容です。

```
...                                                                             40.6s
[+] Running 9/9
 ✔ Network docker_default       Created                                                        0.0s
 ✔ Container docker-weaviate-1  Started                                                        0.2s
 ✔ Container docker-web-1       Started                                                        0.2s
 ✔ Container docker-db-1        Started                                                        0.2s
 ✔ Container docker-sandbox-1   Started                                                        0.2s
 ✔ Container docker-redis-1     Started                                                        0.2s
 ✔ Container docker-api-1       Started                                                        0.0s
 ✔ Container docker-worker-1    Started                                                        0.0s
 ✔ Container docker-nginx-1     Started                                                        0.0s
```

実行後、ブラウザでDifyダッシュボードにアクセスし、[http://localhost/install](http://localhost/install) で初期化プロセスを開始できます。

### Upgrade Dify

Difyは、コミュニティの貢献により頻繁に変更されるプラットフォームで、毎週更新されます。

Difyを更新するには、そのソースコード、特にdockerディレクトリを見る必要があります。これは簡単なコマンドで行うことができます：`cd dify/docker`。

次に、セットアッププロセスを開始するために、ウェブブラウザでhttp://localhost/installのDifyのダッシュボードを開きます。

```
cd dify/docker
git pull origin main
docker compose down
docker compose pull
docker compose up -d
```

最後に、すべての準備が整ったら、`docker compose up -d`コマンドを実行してDifyの更新バージョンに命を吹き込みます。このコマンドは、すべてを動かし始め、バックグラウンドで静かに作業を進めます（`-d`はデタッチモードを意味します）。そのため、新しいバージョンが稼働している間も、作業を中断せずに続けることができます。

デプロイメントアーキテクチャにDockerを使用することは、Difyがスケーラブルで管理しやすく、効率的なプロダクション環境を提供することにコミットしていることを示しています。このセットアップにより、容易なスケーリング、堅牢なデータ永続性、および関心の分離が実現され、現代の信頼性の高いWebアプリケーションの主要コンポーネントが提供されます。さらに、Difyのオープンソース基盤は、継続的なコミュニティの貢献を奨励し、プラットフォームが技術とユーザー要件の最新の進展に沿って進化することを保証します。

### OpenAI GPT4-oモデル

2024年5月13日時点で、DifyのDockerリフレッシュと再起動を実行しています。

```
...
create mode 100644 api/core/model_runtime/model_providers/openai/llm/gpt-4o-2024-05-13.yaml
create mode 100644 api/core/model_runtime/model_providers/openai/llm/gpt-4o.yaml
...
```

![https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_OpenAI_gpt4o_is_here.jpg](https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_OpenAI_gpt4o_is_here.jpg)

*最新のGPT4-oは、使用可能なOpenAIモデルの1つとして利用できます。*

## Difyのリーチを広げる - HTTPリクエストとツール

Difyは「カスタムツールの作成」ボタン等、シンプルなインターフェースを提供してツール作成が可能です。例えば、メンバーの保険適用範囲を照会するためのヘルスケアAPIツールを考えてみましょう。これは特定のタスクですが、Difyが対応できる、ニッチな要件の一つです。

DifyのUXは、ツールの説明とスキーマの扱いに集約されています。例えば、前述のヘルスケアツールは、ユーザーがメンバーの保険適用範囲を見つけることを可能にする明確な目的に基づいています。スキーマはOpenAPI-Swagger仕様に準拠しており、標準化されアクセスしやすい言語でAPIコールの構造を示しています。これにより、API開発の詳細に詳しくない人でもツールの仕組みを理解できます。

![https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_Create_Custom_Tool_via_OpenAPI_Spec.jpg](https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_Create_Custom_Tool_via_OpenAPI_Spec.jpg)

*「カスタムツールの作成」は、APIの統合を通じてカスタムツールを作成および編集するためのインターフェースを特に紹介しています。*

エンドポイントの設定により、データの受信と処理方法が分かりやすくなります。サーバー設定がローカル開発環境を指していることで、ユーザーはテストと実験を行うことができます。

### ローカルAPIサーバーへの接続方法

Difyをローカル開発環境で使用する際には、コンピュータ上のサービスと通信できるようにすることが重要です。これはテストに必要です。まず、`ifconfig`を実行してコンピュータのIPアドレスを特定します。例えば、`192.168.50.197`のようなアドレスです。

この情報を元にHTTPリクエストを設定できます。例えば、サービスと対話するには、`http://192.168.50.197:8001/answer`にリクエストを送信します。

サービスの機能を理解するためのOpenAPI仕様を取得するには、次のURLを使用します：

- インタラクティブなSwagger-UI: `http://192.168.50.197:8001/docs`
- JSON形式の仕様書: `http://192.168.50.197:8001/openapi.json`

設定を簡素化するために、`/etc/hosts`ファイルに以下のエントリを追加します：

```
192.168.50.197 test.me.com

```

これにより、ローカルサービスへのアクセスが容易になり、URLが読みやすくなります。実際のDNS設定を模倣し、より現実的なテストと開発環境を提供します。これにより、開発ツールとサービス間の効率的な相互作用が強調され、テストが効率的で実際のデプロイメントシナリオを反映したものになります。

### ローカルLLMでDifyを使用する

Difyを[Ollama](https://github.com/ollama/ollama)を通じてローカルLLMと接続すると、GPUアクセラレーションを利用してモデルを使用するのが簡単になります。OllamaはシンプルなコマンドラインまたはREST APIで利用でき、アプリケーションがモデルと連携するのをサポートします。まずは、[Ollamaをダウンロードしてインストール](https://ollama.ai/download)しましょう。

macOSを使用している場合は、Docker Desktopと組み合わせることでGPUアクセラレーションをより効果的に活用できます。例えば、`llama3`モデルを起動するには、シンプルなコマンドを実行するだけです。初回使用時には、Ollamaがモデルのダウンロードを含めて処理します。例えば、`llama3-8b`モデルはローカル使用のために約4GBに効率的にパックされています。

```
ollama run llama3

```

> Ollamaは多くのオープンソースLLMモデルをサポートしています。詳しくはOllamaの公式サイトをご覧ください。
> 

[DifyはOllamaとよく連携します](https://docs.dify.ai/tutorials/model-configuration/ollama)。Ollamaをモデルプロバイダーとして認識するように設計されています。macOSでOllamaを使用する場合、`launchctl`を使って環境変数を設定する必要があります。Ollamaアプリケーションを再起動すると、これらの設定が適用されます。

```
launchctl setenv OLLAMA_HOST "0.0.0.0"

```

最後に、Dify内でOllamaを設定してセットアップを完了します。この接続により、プロセスが簡素化され、GPUアクセラレーションを利用してローカルモデルをより高速に実行できるようになります。

![https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_Model_Provider_Ollama_Llama3_Setup.jpg](https://bennycheung.github.io/images/dify-your-weekend-genai-magics/Dify_Model_Provider_Ollama_Llama3_Setup.jpg)

*Difyのモデルプロバイダーの1つとしてOllamaを設定し、ローカルIPアドレスとポートでインターフェースします。*

## 結論

Difyは単なるプラットフォームではありません。生成AI技術を扱う全過程をサポートする包括的なソリューションです。初期の学習段階から本格的なプロダクションデプロイメントまで、DifyはAI開発の複雑な領域でのガイド役を果たします。

Difyの特長は、そのアクセスしやすさにあります。経験豊富な開発者であれ、AIの実験を始めたばかりの人であれ、Difyはすべての人に何かを提供します。AIを使った創造のプロセスを簡素化し、恐怖感を和らげ、楽しささえも感じさせます。これは単にツールを持つことではなく、生成AIを使用してアイデアを実現する冒険を始めることです。

## 参考文献

- [Dify.ai](https://dify.ai/) - DifyはオープンソースのLLMアプリ開発プラットフォームです。直感的なインターフェースは、AIワークフロー、RAGパイプライン、エージェント機能、モデル管理、可観測性機能などを組み合わせており、プロトタイプからプロダクションまで迅速に移行できます。
- Dify.ai, [Introducing Dify Workflow](https://dify.ai/blog/dify-ai-workflow), Dify Insights Blog, 8 Apr 2024.
- Dify.ai, [Easy-to-Use LLMOps Platform for Visually Creating and Operating Your AI Native Applications](https://dify.ai/blog/open-source-llmops-platform-define-your-ai-native-apps), Dify Insights Blog, 10 May 2023.
- Dify.ai, [AI in Finance: Building an AI Investment Analysis Assistant with Dify](https://www.youtube.com/watch?v=Hm4kBQSkNaA), video, 18 Feb 2024.
- Xiao Yi, [Unleashing AI in Finance: Building an AI Investment Analysis Assistant with Dify](https://dify.ai/blog/build-your-own-investment-analysis-assistant-with-dify), Dify Insights, 26 Jan 2024.