生成AIアプリ開発大全
――Difyの探求と実践活用

[表紙]生成AIアプリ開発大全――Difyの探求と実践活用

紙版発売

B5変形判/560ページ

定価4,620円(本体4,200円+税10%)

ISBN 978-4-297-14744-0

電子版
  • 電子化の予定があります

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

Chat GPTをはじめとした生成AIサービスが躍進しています。Gemini,ClaudeやAzure OpenAI,Llamaなど生成AIのサービスは日々能力が向上し,さまざまなビジネスシーンですでに活用されています。本書で解説するDIfy(ディファイ)とは,各種生成AIを使用してアプリケーション開発ができるプラットフォームです。しかもオープンソースで利用可能です。Webサービス版Difyではすぐに自分が使いたいアプリを作ることができます。さらにDockerを使用すれば,個人や自社の環境で開発ができるようになります。本書はアプリを作りながらさまざまな視点からDIfyの活用方法の解説をします。例を挙げるとAIチャットボット,RAG(Retrieval-Augmented Generation),エージェント,ワークフロー,ノードの活用,各種ツールやAPIの使い方,チャットフローの作り方まで詳しくフルカラーで説明します。最終的にはDockerで完全クローズドなシステムを構築するまで完全解説します。Difyは作りたいアプリをノーコード・ローコードで実現できます。その威力と影響力に刮目するでしょう。生成AIの可能性にITエンジニアは興奮が止まらないかもしれません。500ページを超えるボリュームで全方位から詳しく解説します!

こんな方におすすめ

  • 生成AIを利用してアプリケーション開発をしてみたいITエンジニア
  • 生成AIの可能性を調査している方,またはこれから活用してみたい方
  • 各種生成AIでアプリケーション開発できるDIfyの機能を知りたい方

この書籍に関連する記事があります!

著者の一言

本書のサンプル

本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。

サンプル画像1

サンプル画像2

サンプル画像3

サンプル画像4

サンプル画像5

目次

第1章 生成AIの理解と活用

1.1 生成AIの回答の仕組みとユーザーアプリケーション

1.2 Difyの役割と課題ドリブン開発

  • 1.2.1 Difyの登場
  • 1.2.2 なにを作りたいのか?
  • 1.2.3 人間とAIの新しい協業
  • 1.2.4 Difyで始める課題ドリブン開発

1.3 Difyとはどのようなものか?

  • 1.3.1 オープンソースの利点
  • 1.3.2 ノーコード,ローコード開発の魅力
  • 1.3.3 APIとして呼び出しが可能
  • 1.3.4 ローカル環境で動く安心感
  • 1.3.5 正直,ここが物足りないDify

第2章 チャットボットの作成

2.1 さっそくDifyを使ってみる

  • 2.1.1 Difyの始め方:クラウド版とコミュニティ版
  • 2.1.2 Difyアカウントの作成
  • 2.1.3 最初のアプリケーション作成
  • 2.1.4 アプリケーションのテスト
  • 2.1.5 アプリケーションの公開
  • 2.1.6 チャットボットWebアプリケーションの共有
  • 2.1.7 次のステップへ

2.2 LLMのモデルの登録

  • 2.2.1 デフォルトモデルを確認してみよう
  • 2.2.2 他のLLMを使いたい
  • 2.2.3 API料金について
  • 2.2.4 Geminiを使えるようにしてみよう
  • 2.2.5 Geminiモデルでテストする

2.3 LLMパラメータの調整

  • 2.3.1 パラメータ設定の基本
  • 2.3.2 パラメータの違いを体験してみよう
  • 2.3.3 LLMパラメータの仕組みを理解しよう
  • 2.3.4 Temperature:創造性温度調整
  • 2.3.5 TopP:選択肢の絞り込み
  • 2.3.6 2つのパラメータの関連
  • 2.3.7 実践:用途に応じた設定

2.4 プロンプトを考える

  • 2.4.1 プロンプトの重要性
  • 2.4.2 システムプロンプトとユーザープロンプト
  • 2.4.3 Zero-Shot LearningとFew-Shot Learning
  • 2.4.4 Zero-ShotLearning
  • 2.4.5 Few-ShotLearning
  • 2.4.6 CoTで問題を解いてみる
  • 2.4.7 まとめ

2.5 Webページにチャットボットを埋め込む

  • 2.5.1 さあ埋め込んでみよう!
  • 2.5.2 こんなに簡単でいいの?

2.6 履歴の確認と監視について

  • 2.6.1 ログの確認方法
  • 2.6.2 ログの重要性
  • 2.6.3 チャットボットの監視
  • 2.6.4 監視とログ,その真価

第3章 RAGを使いこなす

3.1 RAGとは何か?

  • 3.1.1 4つのステップで理解するRAG
  • 3.1.2 類似度検索を理解しておこう
  • 3.1.3 RAGのすごいところ
  • 3.1.4 RAGをDifyで構築する

3.2 ナレッジの構築

  • 3.2.1 ナレッジベースを作成してみよう
  • 3.2.2 テキストの前処理とクリーニング
  • 3.2.3 インデックスモードと埋め込みモデルの選択
  • 3.2.4 検索設定
  • 3.2.5 ちゃんと検索できるかテストしてみる

3.3 チャットボットでRAGを行ってみる

  • 3.3.1 新規アプリの作成
  • 3.3.2 プロンプトとコンテキストの設定
  • 3.3.3 モデルの選択
  • 3.3.4 デバッグとプレビュー
  • 3.3.5 実際にチャットしてみる

3.4 RAGのポイントは入力データにあり

  • 3.4.1 データの下ごしらえ
  • 3.4.2 なぜ分割(チャンク)が大事なの?
  • 3.4.3 データの整え方
  • 3.4.4 文学作品をAIに読ませる
  • 3.4.5 PDFからの単純な変換の罠
  • 3.4.6 「テキストのパラグラフ化手法」の登場
  • 3.4.7 パラグラフ化の効果
  • 3.4.8 出力結果を統合してベクトル化
  • 3.4.9 きれいに並んだデータの威力
  • 3.4.10 まずはここから始めよう

3.5 ハイブリッド検索について

  • 3.5.1 リランクで検索結果をもう一段階磨く
  • 3.5.2 Cohereのモデルを使うには?
  • 3.5.3 ハイブリッド検索でさらに網羅的に

第4章 エージェントの作成

4.1 エージェントとは

  • 4.1.1 なぜAIエージェントの時代と言われるのか
  • 4.1.2 AIエージェントの簡単なしくみ
  • 4.1.3 AIエージェントを構築するには

4.2 DifyでAIエージェントを作る

  • 4.2.1 エージェントの選択と作成
  • 4.2.2 コンテキストを登録
  • 4.2.3 ツールを登録
  • 4.2.4 「手順」にプロンプトを書く
  • 4.2.5 個別のツールが機能するか会話でテストする
  • 4.2.6 まとめ

4.3 ツールの連携の実例

  • 4.3.1 時間と情報検索の連携
  • 4.3.2 Web検索と計算の連携
  • 4.3.3 ナレッジと計算の連携
  • 4.3.4 まとめ

4.4 マルチモーダル対応の実例

  • 4.4.1 マルチモーダルの可能性
  • 4.4.2 エージェントの設定
  • 4.4.3 画像を読んで質問をする
  • 4.4.4 PDFファイルを読み要約してもらう
  • 4.4.5 まとめ

第5章 ワークフローの作成

5.1 AIアプリ開発の基本技術

  • 5.1.1 通常のワークフローとAIワークフローの違い
  • 5.1.2 Difyを使ったワークフローはどんなものか

5.2 さっそく作ってみよう

  • 5.2.1 ワークフローの新規作成
  • 5.2.2 「開始」ノードの設定
  • 5.2.3 LLMノードの追加
  • 5.2.4 LLMノードの設定項目
  • 5.2.5 テスト実行
  • 5.2.6 「終了」ノードをつなぐ
  • 5.2.7 ワークフローを公開する

5.3 ワークフロー公開の2つのモード

  • 5.3.1 アプリを実行
  • 5.3.2 バッチでアプリを実行

5.4 知識をつなげて統合する

  • 5.4.1 社内相談窓口というユースケース
  • 5.4.2 知識取得ノードをつなげる
  • 5.4.3 総務担当者ノードを追加
  • 5.4.4 責任者ノードを追加
  • 5.4.5 実行例:上司のパワハラ相談

5.5 議事録を作成する

  • 5.5.1 まずは簡単な議事録を作成
  • 5.5.2 もっと詳細にまとめるように改造する
  • 5.5.3 この方法のポイント

5.6 DSLのエクスポートとインポート

  • 5.6.1 DSLのエクスポート
  • 5.6.2 DSLのインポート
  • 5.6.3 DSLエクスポートの別の方法
  • 5.6.4 実践的なアドバイス:DSLの効果的な活用法

第6章 各種ノードの型

6.1 壱ノ型=開始-終了:アルファでありオメガである

  • 6.1.1 ノードとは何か?
  • 6.1.2 すべての始まりは「開始」から
  • 6.1.3 [開始]-[終了]は最も基本な組み合わせ
  • 6.1.4 この中で何が起こっているのか
  • 6.1.5 入力フィールドの設定を理解しよう
  • 6.1.6 複数の入力フィールドの設定
  • 6.1.7 出力変数も複数指定OK! でも少し注意が必要

6.2 弐ノ型=開始-LLM-終了:究極の型

  • 6.2.1 なぜ「究極」なのか
  • 6.2.2 LLMの追加
  • 6.2.3 変数はいたるところで設定できる
  • 6.2.4 この型の真の力
  • 6.2.5 CoTをLLMノードで実装するヒント

6.3 参ノ型=条件分岐:条件によって処理を分ける

  • 6.3.1 単純な条件分岐IF/ELSE
  • 6.3.2 各分岐にLLMをつなげて設定する
  • 6.3.3 終了ノードの追加
  • 6.3.4 実行してみる
  • 6.3.5 ELIFについて
  • 6.3.6 質問分類器で自動振り分け
  • 6.3.7 質問分類器の設定

6.4 四ノ型=知識取得:RAGで知識を得る

  • 6.4.1 なぜワークフローでRAGなのか
  • 6.4.2 開始ノード設定
  • 6.4.3 知識取得ノードの追加と設定
  • 6.4.4 LLMノードの追加
  • 6.4.5 終了ノードにつなげる
  • 6.4.6 ワークフローでのRAGの応用

6.5 伍の型=変数を取り出す:パラメータ抽出

  • 6.5.1 パラメータ抽出とは?
  • 6.5.2 実際に作ってみよう
  • 6.5.3 パラメータ抽出のパターン集
  • 6.5.4 シンプルな配列パターンの例
  • 6.5.5 パラメータ抽出の真価

6.6 六ノ型=繰返し処理:イテレータで回す

  • 6.6.1 最も簡単な繰り返し処理をつくる(果物カラーガイド)
  • 6.6.2 テストしてみる

6.7 七ノ型=定型文の処理:テンプレートはどう使うのか

  • 6.7.1 繰り返し処理を行ったあとはどうする?
  • 6.7.2 テンプレートはもっとすごい
  • 6.7.3 テンプレートの基本
  • 6.7.4 もう少し複雑なテンプレート
  • 6.7.5 入力処理でのテンプレート活用
  • 6.7.6 テンプレートの型の本質
  • 6.7.7 テンプレートを使いこなすコツ

6.8 八ノ型=コード実行:ラストワンマイルの切り札

  • 6.8.1 コードノード,使ってみよう
  • 6.8.2 いろいろなサンプル
  • 6.8.3 httpxでAPIを呼ぶ

6.9 九ノ型=API召喚術:HTTPリクエストノードでAPI連携

  • 6.9.1 なぜHTTPリクエストノードを使うの?
  • 6.9.2 地名から緯度経度を取得する例をつくろう
  • 6.9.3 実行してレスポンスを確認しよう
  • 6.9.4 データを抽出・整形する(コードノード)
  • 6.9.5 再び実行してみる

6.10 拾ノ型=パラレル実行:ノードを同時に実行する

  • 6.10.1 パラレル実行の基本の型
  • 6.10.2 実際にやってみよう
  • 6.10.3 終了ノード以外でパラレル実行の結果を受ける
  • 6.10.4 注意点やコツなど
  • 6.10.5 活用例をいくつか
  • 6.10.6 まとめ

6.11 拾壱ノ型=ファイル処理:あらゆるファイルを読むこと

  • 6.11.1 ドキュメントを読み込み要約する
  • 6.11.2 ワークフローの作成
  • 6.11.3 画像ファイルを読み,解説してもらう
  • 6.11.4 音声ファイルを読んで文字起こし
  • 6.11.5 リスト処理で振り分けて処理する

6.12 拾弐ノ型=構造化出力:非構造データを構造化する

  • 6.12.1 テキストから構造化出力
  • 6.12.2 画像から構造化出力(名刺リーダーのユースケース)

6.13 まとめ:十二の型,その先にある無限の可能性

第7章 各種ツールの使い方

7.1 エージェントとワークフローでのツールの扱いの違い

  • 7.1.1 エージェントとワークフローとでは使い方が異なる
  • 7.1.2 エージェントで作ってみてからワークフローで使う

7.2 Webブラウジングをつくる

  • 7.2.1 エージェントでつくる
  • 7.2.2 ワークフローでつくる
  • 7.2.3 まとめと実践的なポイント

7.3 コードインタプリターをつくる

  • 7.3.1 エージェントでつくる
  • 7.3.2 実行をして確認
  • 7.3.3 ワークフローで実現(パラメータ抽出を使う場合)
  • 7.3.4 結果をテンプレートでまとめて実行まで
  • 7.3.5 ワークフローで実現(構造化出力を使う場合)
  • 7.3.6 まとめ:CodeInterpreterの2つの実現方法

7.4 ワークフローをツールとして組み込む

  • 7.4.1 なぜワークフローをツール化するとよいのか
  • 7.4.2 ワークフローをツールとして保存する
  • 7.4.3 ツールを使ってみる
  • 7.4.4 ツールの設定と実行
  • 7.4.5 実行してみよう
  • 7.4.6 なぜこれがすごいのか

7.5 カスタムツールの作成

  • 7.5.1 カスタムツールの正体
  • 7.5.2 GitHubAPIで試してみよう
  • 7.5.3 カスタムツールの設定
  • 7.5.4 テストボタンで動作確認
  • 7.5.5 ちょっとした疑問=レスポンスの制御について
  • 7.5.6 OpenAPI(swagger)仕様で最も重要な部分はどこか

7.6 まとめ:創造のための三つの極意

  • 7.6.1 極意その一:型で基礎を固める
  • 7.6.2 極意その二:ツールで可能性を広げる
  • 7.6.3 極意その三:手法を使い分ける
  • 7.6.4 創造への扉が開かれた

第8章 チャットフローの作成

8.1 チャットフローを理解する

  • 8.1.1 なぜ最後にチャットフローなのか
  • 8.1.2 チャットフローの特徴
  • 8.1.3 チャットフローの実践的な活用
  • 8.1.4 チャットフローの発展性

8.2 チャットフローを作ってみよう

  • 8.2.1 最も簡単なQ&Aボットから始める
  • 8.2.2 実行してみる
  • 8.2.3 もう少し賢くしてみよう
  • 8.2.4 実行してみよう
  • 8.2.5 知識を使って賢くする
  • 8.2.6 実行してみる

8.3 マルチモーダルに対応してみよう

  • 8.3.1 マルチモーダルの可能性
  • 8.3.2 マルチモーダルチャットフローの仕組み
  • 8.3.3 チャットフローを作成する
  • 8.3.4 画像をアップロードできる設定をする
  • 8.3.5 実行してテストする
  • 8.3.6 ドキュメント処理ルートの実装
  • 8.3.7 ドキュメントの読み込みに対応する
  • 8.3.8 実行してテストする
  • 8.3.9 実用的な使用例を考える

8.4 任意に会話を記憶できる会話変数と変数代入

  • 8.4.1 なぜ会話変数が必要なの?
  • 8.4.2 会話変数とは?
  • 8.4.3 変数代入で記憶を保存する
  • 8.4.4 変数代入ノードの追加
  • 8.4.5 実行してみよう
  • 8.4.6 会話変数のさまざまな応用
  • 8.4.7 注意点
  • 8.4.8 まとめ

第9章 APIとしての活用を探る

9.1 APIで自由を手にいれる

  • 9.1.1 DifyはBaaSでもある
  • 9.1.2 APIで広がる可能性

9.2 DifyAPIとしてアクセスする

  • 9.2.1 まずはシンプルなアプリを作る
  • 9.2.2 APIキーを取得する
  • 9.2.3 APIを呼び出してみよう(cURLを使う)
  • 9.2.4 コマンドの説明
  • 9.2.5 どんな動きをしているのか
  • 9.2.6 Pythonでプログラミングをしてみよう
  • 9.2.7 APIを呼び出すプログラムを書いてみよう
  • 9.2.8 もう少し実用的なプログラムに
  • 9.2.9 WebUIで試してみる
  • 9.2.10 ワークフローのAPIについてのまとめ

9.3 チャットボットAPIを使うには

  • 9.3.1 基本的なチャットボット
  • 9.3.2 APIキーを取得する
  • 9.3.3 APIを動かしてみる
  • 9.3.4 Python+Gradioでチャットボットを作る

9.4 ストリーミングに対応する

  • 9.4.1 ストリーミングとは?
  • 9.4.2 さっそく試してみよう
  • 9.4.3 Pythonでプログラミング
  • 9.4.4 プログラムの説明

9.5 エージェントに対応する

  • 9.5.1 エージェントに対応するには
  • 9.5.2 エージェントのAPIを取得する
  • 9.5.3 エージェントAPIをテストする
  • 9.5.4 返信内容を解析してみる
  • 9.5.5 エージェントとしてプログラミングする

9.6 APIでナレッジを操作する

  • 9.6.1 なぜナレッジAPIが必要なの?
  • 9.6.2 ナレッジの仕組みを理解しよう
  • 9.6.3 ナレッジからAPIを取得する
  • 9.6.4 空のデータセットを作成する
  • 9.6.5 テキストをドキュメントに追加してみよう
  • 9.6.6 APIでドキュメントを更新する
  • 9.6.7 ファイルからドキュメントを作成する
  • 9.6.8 ファイルからドキュメントを更新する
  • 9.6.9 その他の主要なナレッジAPI
  • 9.6.10 この章まとめ:筆者の実践例から見たDifyAPIの可能性

第10章 ローカル環境の構築

10.1 Dockerの物語

  • 10.1.1 さまざまな住人が暮らすLinux街
  • 10.1.2 便利な引っ越し箱の登場
  • 10.1.3 Docker……そしてDify

10.2 Dockerを使ったインストール方法

  • 10.2.1 Dockerのインストールの前提条件
  • 10.2.2 事前準備:Gitのインストール
  • 10.2.3 Dockerをインストールする
  • 10.2.4 Dockerはどうやって使うのか
  • 10.2.5 DifyをDocker上でインストールする
  • 10.2.6 Difyのバージョンアップ手順

10.3 Difyの内部構造

  • 10.3.1 docker-compose.yamlを読み解く
  • 10.3.2 各種コンテナの詳細を覗いてみる
  • 10.3.3 Webサービスを見てみよう
  • 10.3.4 Difyの記憶装置を理解する
  • 10.3.5 weaviate
  • 10.3.6 まとめ

10.4 環境変数とカスタマイズ

  • 10.4.1 設定できることを知ろう
  • 10.4.2 環境変数の世界を覗いてみよう
  • 10.4.3 環境変数の文法を解読する
  • 10.4.4 環境変数の設定方法
  • 10.4.5 環境変数の優先順位を理解する
  • 10.4.6 .envファイルの活用
  • 10.4.7 カスタマイズ設定例
  • 10.4.8 トラブルシューティング
  • 10.4.9 まとめ:環境変数マスターへの道

10.5 OllamaでローカルAIチャットボットを作る

  • 10.5.1 システム要件をチェックしよう
  • 10.5.2 モデルのダウンロードと実行
  • 10.5.3 環境変数の設定(外部アクセスを許可する)
  • 10.5.4 外部アクセスの確認
  • 10.5.5 Difyと連携しよう
  • 10.5.6 まとめ

終章 次なる一歩に向けて

著者プロフィール

小野哲(おのさとし)

ソフトウェア開発歴40年を超えるプロ技術者。当社では『ソフトウェア開発にChatGPT は使えるのか?』『逆算式SQL教科書』『最新図解 データベースのすべて』『3ステップで学ぶOracle入門』などの書籍がある。そのほかに『現場で使えるSQL』(翔泳社)など。ウェブアプリからデータベースまで幅広い知見と技術を持つ。最近ではPythonでAI関連やIoT関連のシステム開発を請け負う。