
【Dify入門】Difyで再現するAnthropicのAIエージェントワークフロー
話題のAIエージェントですが、先日Anthropicから効果的なAIエージェントの作り方の記事が出ていました。
現場目線で書かれた記事で、AIエージェントにありがちな浮ついた情報が無いので、とても有益な記事だと思います。
ワークフローの種類もわかりやすく体系的に紹介されていたので、ノーコードツールのDifyでワークフローを再現してみました。

プロンプトチェーン
ルーティング
並列化
オーケストレータ
評価・最適化
Difyのワークフローの作成
トップ画面で「最初から作成」をクリック

「ワークフロー」を選択し

ワークフロー: プロンプトChaining
プロンプトChainingは、タスクを一連のステップに分解し、各LLMの呼び出しが前のステップの出力を処理する方法です。下図の「ゲート」のように、中間ステップにプログラムによるチェックを追加して、プロセスが正しく進んでいることを確認できます。

このワークフローを使用するタイミング:
このワークフローは、タスクを固定的なサブタスクに簡単かつ明確に分解できる状況に最適です。主な目的は、各LLMの呼び出しをより簡単なタスクにすることで、レイテンシーと引き換えに精度を向上させることです。
プロンプトチェーニングが有用な例:
マーケティングコピーを生成し、それを別の言語に翻訳する
文書の概要を作成し、その概要が特定の基準を満たしているかを確認した後、その概要に基づいて文書を作成する
全体フロー

開始ブロック


入力フィールドに「query」というパラメータを追加しておきます。
チャット入力欄に入れた文章がここに入ります。

LLM Call 1ブロック


LLMを実行するブロックです。
「USER」のところが実行するプロンプトになります。
開始ブロックの変数を貼り付けるため、「/]キーを押して「開始/[x]query」を選択します。
IF/ELSEブロック


ここは疑似的に「Gate」を実現するため、単純に「LLM Call 1」ブロックの結果が空かどうかで判定しています。
LLMの出力結果が空でなければ「IF」のフローに進みます。
LLM Call2 ブロック


LLM Call 2では、LLM Call1の出力結果をもとにタスクリストを生成しています。
ここでも「/」キーを押して「LLM Call1/[x] text」選択するだけで、LLM Call1の出力結果をプロンプトに貼り付けることができます。
LLM Call 3ブロック


LLM Call3では、LLM Call1の出力結果とLLM Call2の出力結果を活用します。
これまでと同じようにLLM Call1とLLM Call2の出力結果をプロンプトに貼り付けます。
終了ブロック


終了ブロックで結果を出力します。
実行
それでは実行します。右上の「実行」をクリックすると「Test Run」パネルが開きます。
入力欄にプレゼンのテーマを入力し「実行を開始」をクリックします。

結果

以下は、日本の自動車産業に関するプレゼンテーション資料の作成に向けたタスクの実行結果に基づく構成案です。
### プレゼンテーション資料構成
#### スライド1: タイトルスライド
- タイトル: 日本の自動車産業の現状と未来
- サブタイトル: 技術革新と市場動向
- 発表者名
- 日付
#### スライド2: 日本の自動車産業の現状
- 現在の市場規模
- 生産台数や販売台数の主要な統計データ
- 国内外の市場シェアのトレンド
#### スライド3: 技術革新の影響
- 電動化の進展(例: トヨタのハイブリッド車、日産のリーフ)
- 自動運転技術の状況(例: ソフトバンクとトヨタの提携)
- コネクテッドカーの動向(例: 車両間通信技術)
#### スライド4: 競合他社の動向
- 海外メーカーの動向(例: テスラ、フォード、BMW)
- 日本の自動車メーカーとの比較分析(生産効率、技術革新の進展)
#### スライド5: 環境規制と政策の影響
- 環境規制の現状(例: CO2排出規制、EV普及に向けた政策)
- 政策変化による影響の考察(例: 補助金制度)
#### スライド6: 消費者のニーズと嗜好
- 消費者の購買行動の変化(例: EVへの移行)
- トレンド分析(例: サステナビリティへの関心)
#### スライド7: 日本の自動車産業が直面する課題
- 人材不足の現状(例: 技術者の確保)
- グローバル競争の影響(例: 海外メーカーの台頭)
#### スライド8: 課題に対する解決策
- 人材育成プログラムの提案
- 競争力強化のための戦略(例: 国際展開、提携戦略)
#### スライド9: 今後の展望
- 技術革新の進展による市場の変化
- 未来の自動車産業のビジョン
#### スライド10: まとめ
- 日本の自動車産業の現状と課題
- 技術革新の重要性
- 未来に向けた戦略の必要性
#### スライド11: 質疑応答
- 聴衆からの質問を受け付ける
### プレゼンテーションの具体化
各スライドの内容を具体化し、視覚的なデザインを考慮します。以下のポイントを考慮して具体化します。
- **グラフやチャート**:データを視覚的に表現するために、グラフやチャートを使用します(例: 市場規模の推移、競合他社の比較)。
- **画像やアイコン**:技術革新を示すための画像やアイコンを挿入します(例: EV車の写真、自動運転車のイラスト)。
- **要点の箇条書き**:各スライドの要点を簡潔にまとめ、視覚的に分かりやすくします。
- **カラースキーム**:統一感のあるカラースキームを選定し、視覚的な魅力を高めます。
### リハーサルとフィードバック
プレゼンテーションのリハーサルを行い、フィードバックを受けて改善点を見つけます。これにより、内容の明確さやプレゼンテーションの流れを確認し、必要に応じてスライドの修正を行います。
### 最終準備
最終的なプレゼンテーション資料を完成させ、配布資料や質問への準備を整えます。これにより、聴衆に対して効果的な情報提供が可能となります。
この構成に基づいて、詳細な内容を作成し、プレゼンテーションを完成させていきます。
実行結果のトレース
各ブロックごとの結果を確認可能です。

ワークフロー: ルーティング
ルーティングは入力を分類し、それを特殊なフォローアップ タスクに誘導します。このワークフローにより、懸念事項の分離と、より特殊なプロンプトの作成が可能になります。このワークフローがない場合、1 種類の入力を最適化すると、他の入力のパフォーマンスが低下する可能性があります。

このワークフローを使用する場合:
ルーティングは、別々に処理した方がよい明確なカテゴリがあり、分類を LLM または従来の分類モデル/アルゴリズムによって正確に処理できる複雑なタスクに適しています。
ルーティングが役立つ例:
さまざまな種類のカスタマー サービス クエリ (一般的な質問、払い戻しリクエスト、テクニカル サポート) を、異なる下流プロセス、プロンプト、およびツールに誘導します。
簡単な一般的な質問を Claude 3.5 Haiku などの小規模なモデルにルーティングし、難しい珍しい質問を Claude 3.5 Sonnet などのより高性能なモデルにルーティングして、コストと速度を最適化します。
全体フロー

質問分類器ブロック: LLM Call Routing

「LLM Call Routing」は質問分類器ブロックで再現しました。
プロンプトの内容に応じて、振り向け先を変更します。
ルート(経路)を振り分けるのでRoutingと呼ばれています。
ポイントはIF文による条件分岐ではなく、LLMが文章を解釈して振り分けるのがポイントです。
そのため質問分類器ではLLMのモデルを指定します。

入力変数に、開始ブロックで入力した変数を指定します。
今回は3つの経路に振り分けることにしました。
自動車の話題
食べ物の話題
スポーツの話題
話題によって、それぞれ別のLLMブロックに振り分けています。
LLM Call 1、2、3ブロック

質問の内容に応じたLLMのプロンプトを用意します。



それぞれ、少しだけプロンプトの内容を変えています。
実行
プロンプトを入力して実行します。

実行したブロックは緑色の枠になります。
今回は自動車の話題でしたので、意図したとおり一番上の自動車の話題と質問分類器が認識して、LLM Call 1に振り分けました。

結果

日本の自動車産業は、技術革新、環境への配慮、そしてグローバルな競争の中で進化を続けています。以下に、今後の展望と課題についていくつかのポイントを挙げてみます。
### 1. 電動化の推進
日本の自動車メーカーは、電動車両(EV)やハイブリッド車の開発に力を入れています。政府の政策としても、2035年までに新車販売の全てを電動車にする目標が掲げられています。この流れは、環境問題に対する意識の高まりや、海外市場での競争力を維持するために不可欠です。
### 2. 自動運転技術の進展
自動運転技術は、自動車産業の重要なトレンドの一つです。日本のメーカーは、センサー技術やAIを活用し、安全性の高い自動運転システムの開発を進めています。これにより、交通事故の減少や、都市の交通渋滞の緩和が期待されています。
### 3. 環境規制への対応
環境規制が厳しくなる中、自動車メーカーは排出ガスの削減やリサイクル技術の向上に取り組む必要があります。これにより、持続可能な社会の実現に寄与することが求められています。
### 4. グローバルな競争
日本の自動車産業は、テスラや中国の新興企業など、グローバルな競争にさらされています。これに対抗するためには、革新的な技術の開発や、コスト削減、マーケティング戦略の見直しが不可欠です。
### 5. 人材育成と技術者の確保
自動車産業の未来を担うためには、優れた技術者や専門家の育成が重要です。大学や専門学校との連携を強化し、次世代の人材を育てる取り組みが必要です。
### 結論
日本の自動車産業は、変革の時代を迎えています。電動化、自動運転、環境対応、グローバル競争など、多くの課題に直面していますが、これらを乗り越えることで未来を切り開く可能性があります。持続可能な社会を目指し、革新を続けることが求められています。
話題を変えて実行

結果


本来は終了ブロックの前に変数集約器ブロックを挟んだほうがすっきりしますが、Routingのワークフロー確認ができればよいので、今回は省略しました。
ワークフロー: 並列化
LLM は、タスクを同時に処理し、その出力をプログラムで集約できる場合があります。このワークフロー (並列化) には、2 つの主なバリエーションがあります。
セクション化: タスクを独立したサブタスクに分割し、並列で実行します。
投票: 同じタスクを複数回実行して、さまざまな出力を取得します。

このワークフローを使用する場合:
並列化は、分割されたサブタスクを並列化して速度を上げることができる場合、または信頼性の高い結果を得るために複数の視点や試行が必要な場合に効果的です。複数の考慮事項がある複雑なタスクの場合、各考慮事項が個別の LLM 呼び出しで処理され、特定の側面に集中して注意を払うことができると、LLM のパフォーマンスが一般的に向上します。
並列化が役立つ例:
セクション化:
ガードレールを実装し、1 つのモデル インスタンスがユーザー クエリを処理し、別のモデル インスタンスが不適切なコンテンツやリクエストをスクリーニングします。これは、ガードレールとコア レスポンスの両方を同じ LLM 呼び出しで処理するよりもパフォーマンスが向上する傾向があります。 LLM パフォーマンスを評価するための評価を自動化します。各 LLM 呼び出しは、特定のプロンプトでモデルのパフォーマンスのさまざまな側面を評価します。
投票:
脆弱性がないかコードの一部をレビューします。複数の異なるプロンプトがコードをレビューし、問題が見つかった場合はフラグを立てます。 特定のコンテンツが不適切かどうかを評価します。複数のプロンプトでさまざまな側面を評価したり、誤検知と誤検知のバランスを取るためにさまざまな投票しきい値を要求したりします。
全体ワークフロー

LLM Call 1、2、3ブロック

今回は各LLMブロックごとに別々のLLMモデルを指定しています。
プロンプトは同じにしました。
LLM Call 1: gpt-4o-mini
LLM Call 2: claude-3.5-haiku
LLM Call 3: o1-mini



LLM Aggregatorブロック

「Aggregator」は何のブロックが該当するのかな?と一瞬迷いましたが、Aggregatorなので意見をまとめるという意図と受け止めて、ここもLLMブロックで実現しました。
3者の意見を踏まえてLLMが回答をまとめています。

実行

結果

LLM各ブロックが全て緑色の枠になっているので全て並列に動いたのがわかります。
余談ですが、この3つのLLMモデルの中ではClaudeのHaikuが一番回答が早いのが実行の状況を見ているとわかります。
以下のトレースの結果を見ても並列実行されているのがわかります。

LLM Call 1の回答結果

LLM Call 2の回答結果

LLM Call 3の回答結果

プロンプトは同じですが、なぜかClaudeのHaikuだけ具体的な文章が無いからと言って答えてくれませんでした。
Claude系のLLMは、プロンプトの情報が足りない場合によく人間に質問を返してくるので、そういう風に事前学習されてるのかもしれないですね。
ここはLLMモデルの優越というより特徴なので、Claude系のほうがよりエージェントっぽい動きを実現するためにチューニングされてるのかもしれません。
Aggregatorによる最終結果

日本の自動車産業の未来に関するAさん、Bさん、Cさんの意見を総合的に考察すると、以下のような見解が得られます。
### 1. 電動化と環境への取り組み
AさんとCさんが指摘するように、電動化は日本の自動車産業にとって不可欠なテーマです。国際的な環境規制や消費者の環境意識の高まりにより、電気自動車(EV)やハイブリッド車の需要が急増しています。この流れに乗るためには、技術開発だけでなく、充電インフラの整備やバッテリー技術の革新が重要です。日本のメーカーは、この転換に迅速に対応し、競争力を維持する必要があります。
### 2. 自動運転技術の進展
自動運転技術は、AさんとCさんの両方で強調されている重要な要素です。自動運転の普及は交通の安全性を向上させ、効率的な移動を実現する可能性を秘めていますが、法規制や社会的受容といった課題も存在します。技術的な優位性を持つ日本のメーカーは、これらの挑戦を克服し、自動運転車の実用化を推進することが求められます。
### 3. グローバル競争と市場の多様化
AさんとCさんは、グローバル競争の激化についても言及しています。特に中国やアメリカのメーカーが急速に成長している中で、日本の自動車メーカーは自らの技術力をアピールし、現地市場への適応や新興市場への進出を図る必要があります。また、Bさんが指摘するように、競争力を高めるためには、革新的な製品やサービスの開発が不可欠です。
### 4. サプライチェーンの安定性
Cさんは、COVID-19や半導体不足によって明らかになったサプライチェーンの脆弱性について触れています。日本の自動車産業は、サプライチェーンの多様化やデジタル化を進めることで、リスク管理能力を強化し、安定した生産体制を確立する必要があります。
### 5. 人材育成と組織改革
人材育成はAさんとCさんの意見の中で共通して重要視されています。新技術の進展に対応するためには、高度な専門知識を持つ人材の確保が不可欠です。また、企業内の組織文化や働き方の改革も、イノベーションを促進するために重要です。
### 結論
日本の自動車産業の未来は、電動化、自動運転、グローバル競争、サプライチェーンの安定、人材育成といった多くの要因によって形作られます。これらの課題に積極的に取り組むことで、日本の自動車産業は競争力を維持し、新しいビジネスモデルを開発することができるでしょう。また、持続可能な社会への貢献を果たしながら、未来のモビリティ社会をリードする役割を果たすことが求められます。
ちゃんとAさん、Cさんの意見を踏まえてAggregateしてくれました。
Bさんは答えてくれていないですが、なぜか「Bさんが指摘するように」というのが入ってしまっているようです。
このあたりはAIっぽい動きなので仕方ないでしょう。
ワークフロー: オーケストレーター×ワーカー
オーケストレーター×ワーカー ワークフローでは、中央の LLM がタスクを動的に分解し、ワーカー LLM に委任して、その結果を合成します。

このワークフローを使用する場合:
このワークフローは、必要なサブタスクを予測できない複雑なタスクに適しています (たとえば、コーディングでは、変更する必要があるファイルの数と各ファイルの変更の性質は、タスクによって異なります)。トポロジ的には似ていますが、並列化との主な違いは柔軟性です。サブタスクは事前に定義されておらず、特定の入力に基づいてオーケストレーターによって決定されます。
オーケストレーター ワーカーが役立つ例:
毎回複数のファイルに複雑な変更を加える製品のコーディング。 複数のソースから情報を収集して分析し、関連する可能性のある情報を検索するタスク。
全体ワークフロー

このオーケストレーションのワークフローはDifyで再現するのは難しいでした。
並列化も近そうですが、再現するにはルーティングを繰り返し実行させるワークフローにしないといけないかもしれません。
以下Difyではないですが、オーケストレーションの実装は以下が近そうです。

ワークフロー: 評価者-最適化
評価者-最適化ワークフローでは、1 つの LLM 呼び出しで応答が生成され、別の呼び出しでループ内で評価とフィードバックが提供されます。

このワークフローを使用する場合:
このワークフローは、明確な評価基準があり、反復的な改良によって測定可能な価値が得られる場合に特に効果的です。適合性の 2 つの兆候は、1 つ目は、人間がフィードバックを明確に表現すると LLM 応答が明らかに改善されること、2 つ目は LLM がそのようなフィードバックを提供できることです。これは、人間のライターが洗練されたドキュメントを作成するときに行う反復的な執筆プロセスに似ています。
評価者-最適化が役立つ例:
翻訳者 LLM が最初は捉えられないニュアンスがあるが、評価者 LLM が有用な批評を提供できる文学翻訳。
包括的な情報を収集するために複数回の検索と分析を必要とする複雑な検索タスク。評価者がさらに検索が必要かどうかを決定します。
全体ワークフロー

このワークフローもDifyで再現するのは難しそうですね。
無理やりDifyでワークフローを組むとこんな感じでしょうか。
LLM Call Generatorブロック


最初のLLMは調査レポートを指示しています。
LLM Call Evaluatorブロック


LLM Call Generatorの出力結果をこのLLM Call Evaluatorで評価します。
評価を数値で点数つけてもらいましょう。
質問分類器ブロック


質問分類器で評価判定結果による条件分岐をします。
さきほどの点数をもとに、判定OKな場合は終了ブロックに進みます。
残念ながら改善の余地がある場合は、LLM Call Generatorにフィードバックをします。
本来はここでループさせるのですが、Difyの場合は難しそうなので2つ目のLLM Call Generatorを作ってそこに進むようにします。
LLM Call Generator2


最初のLLM Call Generatorの文章と、Evaluatorが指摘した箇所を合わせて貼り付けます。
そして改善してもらいます。
LLM Call Evaluator2


1つ目のLLM Call Evaluatorと同じです。
再度文章の評価をします。
質問分類器2


1つ目の質問分類器と同じです。
今回で終了させるため合格の点数を低めにしておきます。
実行

結果


以下に指摘ポイントに基づいて修正した文章を示します。
---
# 日本の自動車産業の未来に関する調査レポート
## 1. はじめに
日本の自動車産業は、世界的に見ても非常に重要な位置を占めています。トヨタ、日産、ホンダなどの大手メーカーは、革新技術の開発と品質の高い製品で知られています。しかし、近年の環境問題や技術革新、国際競争の激化により、自動車産業は大きな変革の時期を迎えています。本レポートでは、日本の自動車産業の未来に関する主要なトレンドと展望を考察します。
## 2. 現状分析
### 2.1 経済的背景
日本の自動車産業は、国内総生産(GDP)の約3%を占め、約500万人の雇用を支えています。しかし、少子高齢化や人口減少が進む中、国内市場は縮小傾向にあります。2022年のデータによると、日本国内の新車販売台数は約400万台に減少しました。さらに、円安や原材料費の高騰などの影響も受けています。
### 2.2 環境規制の強化
環境問題に対する意識が高まり、各国で厳しい排出ガス規制が導入されています。日本政府も2030年までに新車販売の全てを電動車にする目標を掲げており、これに対応するために各メーカーは電動化を進めています。例えば、トヨタは2022年度において、全体の新車販売に占める電動車(HV、EV、FCV)の比率を50%に達成しました。
## 3. 技術革新とトレンド
### 3.1 電動化の推進
日本の自動車メーカーは、ハイブリッド車(HV)や電気自動車(EV)の開発に注力しています。トヨタは燃料電池車(FCV)にも力を入れており、2023年には次世代FCVモデルを市場投入する予定です。これにより、今後の市場での競争力を高めるために多様な電動化戦略を採用しています。
### 3.2 自動運転技術
自動運転技術の開発も進んでおり、特にトヨタや日産はこの分野でのリーダーシップを目指しています。トヨタは2025年に完全自動運転車を市販する計画を掲げており、自動運転車両は交通事故の減少や交通渋滞の解消などの社会的課題を解決する可能性を秘めています。
### 3.3 MaaS(Mobility as a Service)
MaaSの概念が広がる中、交通手段の選択肢を統合するサービスの開発が進行中です。日本の都市部では、公共交通機関と自動車を組み合わせた新しい移動手段が求められています。2023年には、東京でMaaSプラットフォームが立ち上がり、乗客はアプリを通じて最適な移動手段を選択できるようになりました。
## 4. 国際競争と市場動向
### 4.1 グローバルな競争
中国や欧州の自動車メーカーが急成長しており、日本の自動車産業は競争が激化しています。特に中国市場はEVの需要が高まっているため、日本メーカーの戦略が問われています。2022年のデータによれば、中国のEV市場では、テスラやBYDが市場シェアを拡大しており、日本メーカーは新たな競争戦略が必要です。
### 4.2 新興市場の開拓
アジアやアフリカの新興市場への進出は、今後の成長戦略として重要です。例えば、インドや東南アジアでは、経済成長とともに自動車の需要が増加しており、日本メーカーの競争力を活かせるチャンスがあります。2022年には、インド市場において日本車の販売が前年比20%増加しました。
## 5. まとめと展望
日本の自動車産業は、電動化、自動運転技術、MaaSの導入など、多くの変革を迎えています。国内市場の縮小を克服するためには、グローバルな視野を持った戦略が必要です。新興市場への進出や、環境に配慮した技術開発を進めることで、日本の自動車産業は未来に向けてさらなる発展が期待されます。具体的には、EVや自動運転技術のさらなる革新が求められ、インドやアフリカ市場での戦略的投資が重要となります。
## 6. 参考文献
- 日本自動車工業会(2022年報告書)
- 経済産業省の報告書(2023年)
- 自動車関連の学術論文(2021年)
- 業界ニュースサイト(2023年)
以上が、日本の自動車産業の未来に関する調査レポートです。今後の動向に注目し、持続可能な成長に向けた戦略を模索していくことが求められます。
---
この修正により、具体的なデータや事例が追加され、構成が明確になり、バランスの取れた視点が強調されています。また、結論部分には具体的なアクションプランも盛り込まれています。
LLM Call Evaluatorの評価結果

質問分類器の結果

89点以下でしたので終了せずに、LLM Call Generator2にフィードバックします。
LLM Call Generator2の結果

指摘ポイントをもとに文章に修正をかけています。
LangGraphでは以下の「Refledtion」がこのワークフローに近いかもしれません。

まとめ
ワークフローをプログラムで再現しようとすると少し手間がかかりますが、ノーコードツールのDifyを使えば比較的簡単にワークフローが実現できます。
オーケストレータや評価・最適化ワークフローなど、Difyでは実現難しいフローはどうしてもLangGraphなどのフレームワークを使うことになると思いますが、実際そこまでしなくてもDifyで工夫すれば似たようなワークフローを作ることも可能です。
AIエージェントは、頭で考えていても実際役に立つかどうかわからないのでまずはDifyを使ってAIエージェントのイメージを固めるのが一番手軽かなと思います。