Difyのチュートリアル（Basic）を試してみた

# 背景・目的
先日、MeetupでDifyについて概要を学びました。今回あらためて整理しました。

# まとめ
下記に特徴をまとめます。

|特徴|説明|
|:--|:--|
|Difyとは|Difyは、AIアプリケーションを構築するためのOSS<BR>Backend as a ServiceとLLMOpsを組み合わせることで、生成型AIソリューションの開発を効率化する<BR>Difyは、Define + Modifyが由来|
|Difyの機能|下記を統合する<BR>・LLMサポート<BR>・Promtオーケストレーションインターフェイス<BR>・RAGエンジン<BR>・AIエージェントフレームワーク<BR>・ローコードワークフロー<BR>・インターフェイスとAPI|


# 概要
下記を基に整理します。

https://docs.dify.ai/

## Welcome to Dify
> Dify is an open-source platform for building AI applications. We combine Backend-as-a-Service and LLMOps to streamline the development of generative AI solutions, making it accessible to both developers and non-technical innovators.

> Our platform integrates:

> - Support for mainstream LLMs
> - An intuitive Prompt orchestration interface
> - High-quality RAG engines
> - A flexible AI Agent framework
> - An Intuitive Low-code Workflow
> - Easy-to-use interfaces and APIs

> With Dify, you can skip the complexity and focus on what matters most - creating innovative AI applications that solve real-world problems.



- Difyは、AIアプリケーションを構築するためのOSS
- Backend as a ServiceとLLMOpsを組み合わせることで、生成型AIソリューションの開発を効率化する
- 下記を統合する
    - LLMサポート
    - Promtオーケストレーションインターフェイス
    - RAGエンジン
    - AIエージェントフレームワーク
    - ローコードワークフロー
    - インターフェイスとAPI


### The Advantage of Dify
> While many AI development tools offer individual components, Dify provides a comprehensive, production-ready solution. Think of Dify as a well-designed scaffolding system, not just a toolbox.

> As an open-source platform, Dify is co-created by a dedicated professional team and a vibrant community. This collaboration ensures rapid iteration, robust features, and a user-friendly interface.

> With Dify, you can:

> - Deploy capabilities similar to Assistants API and GPTs using any model
> - Maintain full control over your data with flexible security options
> - Leverage an intuitive interface for easy management and deployment

- Difyは単なるツールボックスではなく、well-designed scaffolding systemである
- プロフェッショナルチームとコミュニティにより共同開発されている
- 迅速なイテレーション、堅牢な機能、ユーザーフレンドリーなインターフェイスが実現されている
- 下記のことが可能になる
    - 任意のモデルを使用して、アシスタントAPIやGPTと同様の機能を展開する
    - 柔軟なセキュリティオプションで完全に制御
    - 直感的なインターフェイスを活用して簡単に管理と導入が可能

### Dify
- Difyは、Define + Modifyが由来
- AIアプリとの定義と継続的な改善を意味する
- Difyの活用事例
    - Startups
        - AIアイデアのプロトタイプ作成と反復と迅速に行う
        - MVPを構築し、資金調達や顧客契約
    - Established Businesses
        - LLM機能を活用して既存アプリケーションを強化する
        - DifyのRESTful APIを使用してプロンプトとビジネスロジックを分離し、管理I/Fを使用してデータ、コスト、使用状況を追跡する
    - Enterprise AI infrastructure
        - 銀行、テクノロジー企業はDifyを社内LLMゲートウェイとして導入し、集中管理されtあガバナンスによるGenAIの導入を促進する
    - AI Enthusiasts and Learners
        - 6万人以上の開発者がDifyで最初のAIアプリを開発

### Features and Specifications
下記を基に整理します。

https://docs.dify.ai/getting-started/readme/features-and-specifications

#### Project Basics

| 項目| 内容|
|:--|:--|
|設立| 2023/3|
|Official R&D Team|フルタイム従業員15名以上|
|コミュニティ コントリビューター| 290人以上|
|BEテクノロジー|Pyhon/Flask/PostgreSQL|
|FEテクノロジー|Next.js|
|コードベースサイズ|130,000以上|
|リリース頻度|平均 一週間に一度|

## 料金
下記を基に整理します。

https://dify.ai/jp/pricing

- クラウドサービスとセルフホストサービスの2つがある
- クラウドサービス
    - SANDBOX
        - 無料
    - PROFESSIONAL
        - 59 USD ワークスペース / 月
    - TEAM
        - 159 USD ワークスペース / 月
- セルフホストサービス
    - COMMUNITY
        - 無料
    - PREMIUM
        - クラウドマーケットプレイスに基づく
    - ENTERPRISE
        - 年間契約のみ

## What is an Agent

下記を基に整理します。

https://docs.dify.ai/workshop/basic/build-ai-image-generation-app#id-3.-build-an-agent

> An Agent is an AI system that simulates human behavior and capabilities. It interacts with the environment through natural language processing, understands input information, and generates corresponding outputs. The Agent also has "perception" capabilities, can process and analyze various forms of data, and can call and use various external tools and APIs to complete tasks, extending its functional scope. This design allows the Agent to handle complex situations more flexibly and simulate human thinking and behavior patterns to some extent.

- エージェントとは、人間の行動・能力をシミュレートするAIシステム
- 自然言語処理を通じて環境とインタラクションし、入力情報を理解しそれに応じた出力を生成する
- エージェントはperceptionも有しており、様々な形式のデータを処理・分析し、様々な外部ツールやAPIを呼び出してタスクを実行し、機能範囲を拡張する
- エージェントは複雑な状況にも柔軟に対応し、人間の思考や行動パターンをある程度シミュレートする事が可能

# 実践
## アカウントの作成
1. 画面右上の「始める」をクリックします
1. 今回は、GitHubでサインアップします
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/37526c68-2945-4610-ba5a-41db57d29986.png" width=300/>

1. Authorize langgeniusをクリックします
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b83ff9a9-83d1-41cc-9fdd-cd5695cd2710.png" width=300 />

1. できました
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b63d0eda-2625-4dd0-9923-d7ffdc27e5b1.png" width=300 />

## Workshop / Basic
下記を基に試します。

https://docs.dify.ai/workshop/basic

### How to Build an AI Image Generation App
Diyを使用してAI画像生成アプリを作ります。

ここでは下記を学びます。
- Difyを使ったエージェント構築方法
- エージェントの基本概念
- 迅速なエンジニアリングの基礎
- ツールの使用
- 大規模モデルハルシネーションの概念

### Setting Stability API Key
1. [こちら](https://platform.stability.ai/account/keys)から、Stability APIキー管理ページに移動します
1. ユーザ登録が必要です
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/fd20f3d2-27f0-4237-989f-7065e894fa4d.png)
1. 管理ページに移動し、コピーします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/20518283-fb89-42ec-8338-b6608ee7712e.png)

1. Difyの管理画面で、ツールをクリックします
1. Stabilityを検索します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/f460507b-e9dc-4f77-8043-7c2f70c610ec.png)

1. 「インストール」します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/89301726-d481-4d44-ab10-f0775f8ee6c4.png)

1. 「認証する」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/196e1b36-408f-48e2-ab78-94023e811360.png)

1. API Keyに、Stabilityで取得したAPI Keyを設定し保存します

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/e452852a-6d04-4ed3-a65d-233d8ff6caec.png)

### Configure Model Providers
画像生成のためのプロンプトを記述するためのLLMを用意します。

:::note info
Difyの無料バージョンでは、200の無料のOpneAIメッセージ具レジットが提供されています
:::

1. 画面右上のアカウント＞「設定」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/bcaa0684-3d6e-4e6a-b3ad-15dc81d45156.png)

1. 「モデルプロバイダー」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/d3976ca4-ed92-476f-a4d6-71b13bd89387.png)

1. OpenAIをインストールします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a986b085-44ba-4c6b-988f-ea5e04f9f222.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b30861e1-4ef3-45a7-9198-b0a74cca4cba.png)

1. 追加されました。確かにクォーターが200クレジットになっています
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b8ad40a5-0e49-49a4-a7c2-57a20d8c67d5.png)

### Build an Agent
1. ①「Studio」＞②「Agent」＞②「Create from Blank」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/2c4f81e5-938b-4905-b4fb-c7f567b75734.png)

1. Choose App Typeを①「Chatbot」を②「Name」を入力しCreateをクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/25127122-8590-40db-bfa6-fde3adef67fa.png)

1. Toolsで「＋Add」をクリックし、「StableDiffusion」を選択します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b5677ce6-01a5-4718-bced-25f7d03ea1e3.png)



#### Write Prompts

1. Instructionsに下記のプロンプトを入力します
    ```
    Draw the specified content according to the user's prompt using stability_text2image.
    ```

1. Modelを「gpt-3.5-turbo-16k」を指定します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/9533085f-77c8-4b5d-9247-b5c153e13f68.png)


1. 下記をTalk to Botに入力します
    ```
    Draw a girl holding an open book
    ```

1. レスポンスが返ってきました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/c4bc25e7-b690-4ded-97e8-0978eb9c5011.png)


# 考察
今回、Difyのチュートリアル（Basic）を試してみました。次回はIntermediateのチュートリアルを試してみます。

# 参考
https://docs.dify.ai/

https://github.com/langgenius/dify