生成AIアプリ開発大全
――Difyの探求と実践活用
――
2025年3月25日紙版発売
小野哲 著
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章 生成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 まとめ
終章 次なる一歩に向けて
この本に関連する書籍
-
世界一やさしいRAG構築入門 ── Azure OpenAI Serviceで実現する賢いAIチャットボット
本書では,RAGの基本概念から構築・活用までを徹底的にわかりやすく解説しています。初心者でも理解しやすいよう,図解をふんだんに用いて,従来技術との違いを明確にし...
-
LangChainとLangGraphによるRAG・AIエージェント[実践]入門
本書では,OpenAIによるAIサービスを利用するためのOpenAI API,オープンソースのLLMアプリ開発ライブラリLangChain を使って,LLM(大規模言語モデル)を活用したRAG(...