この記事は GMOインターネットグループ Advent Calendar 2024 8日目の記事です。Difyのワークフロー機能を使って日々の情報収集を自動化しようと試みたので、その際の手順やできたこと・できなかったことをまとめます。
はじめに
こんにちは。GMOソリューションパートナーの洲崎です。もうすぐ2024年も終わりになりますが、皆さんはどんな1年をお過ごしになったでしょうか。今年もたくさんAI関連サービスや新しいLLMが登場しましたね。LLMの精度も上がり、周辺のサービスが整備されていくことで、できることがたくさん増えたなあと感じます。
実現したいこと
日々のニュース収集(テキストおよび音声)を自動化し、Discodeにまとめて送信させる。
Difyについて
生成AIのパイプラインをノーコードで作成できるサービスです。今回はこちらを使って朝の情報収集を効率化できないかと考えました。Dify公式サイト
バージョン
0.11.2
システムフロー
毎朝7時にEventBridge→Lambda経由でDifyのAPIをコールします。
Difyでは、以下を担当。
Perplexity AIを使った情報収集ポッドキャスト形式の音声ファイルに変換ファイルおよびテキストをDiscodeへWebhook送信
ワークフロー作成手順 Part1(テキスト送信のみ)
ワークフローアプリを作成
スタジオタブからアプリを作成できます。色んな種類のアプリを作れますが、ここではワークフローを選びました。
ワークフローを選ぶとこちらの初期画面が表示されます。1つ1つの処理パーツを「ノード(もしくはブロック)」と呼ぶのですが、初めは開始ノードのみ配置されています。ここに処理させたいノードをパズルにように組み合わせていきます。
各ノードを配置
Perplexity Search
「ブロックを追加」から目当てのツールを指定します。
選択するとプロンプトや利用モデル、APIキーの入力が求められます。Query(=プロンプト)は以下を入力しておきます。※条件内で対象サイト(ここではSEOタイムズ)を絞っています。
以下の形式で、最新のテクノロジーニュースについて教えてください:
テーマ:Web開発、およびAIに関する最新の重要ニュースを探しています。
条件:
1. **[重要]**以下の情報源からのニュースのみを対象:
- seotimes.jp
2. 過去 **1日** 以内の情報に限定
出力形式:
1. ニュースのヘッドライン
2. 発表日時
3. 情報源(メディア名)
4. 主要ポイント(3行程度)
5. 業界への影響
6. 関連する企業・技術
7. 信頼性スコア(情報源の信頼性を1-5で評価)
追加リクエスト:
- 各ニュースの根拠となる一次ソースへのリンク
- 関連する専門家のコメント(該当する場合)
- 競合他社や類似技術の動向
- 将来的な展開の可能性
優先順位:
1. 革新的な技術発表
2. 主要企業の戦略的な動き
3. 業界に影響を与える規制や政策の変更
4. 重要な研究成果や特許
5. 市場動向に関する分析
除外項目:
- 未確認の噂や推測
- 個人のSNSでの発言のみを根拠とするニュース
- プロモーション目的の発表
- 十分な根拠のない予測
- ページへのリンク
JSON Parse
Difyの各ノードではtext/files/jsonの3種類の出力がなされます。前段のPerplexity Searchノードからは以下のように出力されます。(引用元が指定したサイトになっていますね)
{
"text": "{\n \"content\": \"1. **ニュースのヘッドライン**\\n - **「JSON-LD構造化マークアップの適切な使い方と作り方」**\\n\\n2. **発表日時**\\n - **2024-11-21**\\n\\n3. **情報源(メディア名)**\\n - **seotimes.jp**\\n\\n4. **主要ポイント**\\n - **JSON-LD構造化マークアップの基本を押さえることで、E-E-A-T基準に適合し、検索エンジンに正確な情報を提供することが可能。**\\n - **構造化マークアップを正しく使うためのステップや例を紹介。**\\n - **SEO戦略の重要な要素である構造化マークアップの使い方を説明。**\\n\\n5. **業界への影響**\\n - **SEO戦略に大きな影響を与えるJSON-LD構造化マークアップの使い方を理解することで、Web開発者が検索エンジンに優先順位を得ることができる。**\\n - **検索エンジンのアルゴリズムに適合する情報を提供し、サイトの信頼性を高めることができる。**\\n\\n6. **関連する企業・技術**\\n - **Googleが推進するE-E-A-T基準とJSON-LD構造化マークアップの関連。**\\n - **Web開発におけるSEO戦略の一環としての構造化マークアップの重要性。**\\n\\n7. **信頼性スコア(情報源の信頼性を1-5で評価)**\\n - **信頼性スコア:4**\\n\\n8. **根拠となる一次ソースへのリンク**\\n - **https://seotimes.jp/json-ld-structured-markup/** \\n\\n9. **専門家のコメント**\\n - **「JSON-LD構造化マークアップは、検索エンジンのアルゴリズムに適合する情報を提供するための重要なツールです。E-E-A-T基準を満たすことで、サイトの信頼性を高めることができます。**」 - SEO専門家\\n\\n10. **競合他社や類似技術の動向**\\n - **GoogleのE-E-A-T基準に適合する構造化マークアップは、競合するSEOツールやサービスとは異なる独自のアプローチを持ち、Web開発者が優位に立つための重要な要素です。**\\n\\n11. **将来的な展開の可能性**\\n - **将来的には、JSON-LD構造化マークアップがさらに進化し、新しいSEO戦略として広く採用される可能性があります。**\\n\\n---\\n\\n**優先順位に基づいた追加ニュース**\\n\\n1. **「Web制作会社を特徴別に紹介する」**\\n - **ヘッドライン**\\n - **「おすすめのWeb制作会社を特徴別に紹介」**\\n - **発表日時**\\n - **2024-11-08**\\n - **情報源(メディア名)**\\n - **seotimes.jp**\\n - **主要ポイント**\\n - **Web制作会社をSEO、デザイン、ブランディングなどの特徴別に紹介。**\\n - **各分野を極めたWeb制作会社を特徴別に紹介。**\\n - **Web担当者が自社の課題を洗い出して、どの制作会社に依頼すべきか考える際の参考となる。**\\n - **業界への影響**\\n - **Web制作の質が向上し、顧客満足度が高まることが期待される。**\\n - **各分野を極めたWeb制作会社が増え、競争が激化する可能性がある。**\\n - **関連する企業・技術**\\n - **Web制作会社の特徴に応じたサービス提供。**\\n - **デザイン、SEO、ブランディングなど、多様な専門分野を持つ会社が増える。**\\n - **信頼性スコア(情報源の信頼性を1-5で評価)**\\n - **信頼性スコア:4**\\n - **根拠となる一次ソースへのリンク**\\n - **https://seotimes.jp/web-designer-company-list/**\\n - **専門家のコメント**\\n - **「特徴別に紹介されることで、Web担当者が適切な制作会社を選ぶことが容易になるでしょう。**」 - Web開発専門家**\\n - **競合他社や類似技術の動向**\\n - **競合するWeb制作会社が特徴を強化するために、独自のサービスを提供する可能性が高い。**\\n - **新規参入者が特徴別に紹介されることで、市場に新しい価値を提供することが期待される。**\\n - **将来的な展開の可能性**\\n - **将来的には、Web制作会社がさらに分化し、専門性が高まる可能性が高い。**\\n\\n---\\n\\n**その他のニュース**\\n\\n1. **「306 HTTPステータスコードの意味と使用方法」**\\n - **ヘッドライン**\\n - **「306 HTTPステータスコードの意味と使用方法」**\\n - **発表日時**\\n - **2024-11-22**\\n - **情報源(メディア名)**\\n - **seotimes.jp**\\n - **主要ポイント**\\n - **306 HTTPステータスコードは現在使用されていないステータスコードで、Switch Proxyという意味で使用されていた。**\\n - **HTTP/1.1仕様の更新で正式に「未使用」のステータスとしてマークされ、HTTP/2やHTTP/3でも使用されていない。**\\n - **ウェブ開発者やネットワークエンジニアがHTTPステータスコードに関する資料を参照する際に「未使用」と記載されることが一般的。**\\n - **業界への影響**\\n - **HTTPステータスコードの標準化に影響を与える。**\\n - **Web開発者が新しいプロトコルや規定に適応する必要がある。**\\n - **関連する企業・技術**\\n - **HTTP/1.1、HTTP/2、HTTP/3など、HTTPプロトコルの進化。**\\n - **信頼性スコア(情報源の信頼性を1-5で評価)**\\n - **信頼性スコア:5**\\n - **根拠となる一次ソースへのリンク**\\n - **https://seotimes.jp/glossary/306-unused/**\\n - **専門家のコメント**\\n - **「HTTPステータスコードの標準化は、Web開発の基盤となる重要な要素です。**」 - ネットワークエンジニア**\\n - **競合他社や類似技術の動向**\\n - **競合するHTTPプロトコルが新しい機能を提供するため、HTTP/1.1が後退する可能性があります。**\\n - **新しいHTTPプロトコルが開発され、旧バージョンが非推奨になる可能性があります。**\\n - **将来的な展開の可能性**\\n - **将来的には、新しいHTTPプロトコルが標準化され、Web開発者の作業が簡単になる可能性があります。**\",\n \"role\": \"assistant\",\n \"citations\": [\n \"https://seotimes.jp/web-designer-company-list/\",\n \"https://seotimes.jp/glossary/306-unused/\",\n \"https://seotimes.jp/json-ld-structured-markup/\"\n ]\n}",
"files": [],
"json": [
{
"content": "1. **ニュースのヘッドライン**\n - **「JSON-LD構造化マークアップの適切な使い方と作り方」**\n\n2. **発表日時**\n - **2024-11-21**\n\n3. **情報源(メディア名)**\n - **seotimes.jp**\n\n4. **主要ポイント**\n - **JSON-LD構造化マークアップの基本を押さえることで、E-E-A-T基準に適合し、検索エンジンに正確な情報を提供することが可能。**\n - **構造化マークアップを正しく使うためのステップや例を紹介。**\n - **SEO戦略の重要な要素である構造化マークアップの使い方を説明。**\n\n5. **業界への影響**\n - **SEO戦略に大きな影響を与えるJSON-LD構造化マークアップの使い方を理解することで、Web開発者が検索エンジンに優先順位を得ることができる。**\n - **検索エンジンのアルゴリズムに適合する情報を提供し、サイトの信頼性を高めることができる。**\n\n6. **関連する企業・技術**\n - **Googleが推進するE-E-A-T基準とJSON-LD構造化マークアップの関連。**\n - **Web開発におけるSEO戦略の一環としての構造化マークアップの重要性。**\n\n7. **信頼性スコア(情報源の信頼性を1-5で評価)**\n - **信頼性スコア:4**\n\n8. **根拠となる一次ソースへのリンク**\n - **https://seotimes.jp/json-ld-structured-markup/** \n\n9. **専門家のコメント**\n - **「JSON-LD構造化マークアップは、検索エンジンのアルゴリズムに適合する情報を提供するための重要なツールです。E-E-A-T基準を満たすことで、サイトの信頼性を高めることができます。**」 - SEO専門家\n\n10. **競合他社や類似技術の動向**\n - **GoogleのE-E-A-T基準に適合する構造化マークアップは、競合するSEOツールやサービスとは異なる独自のアプローチを持ち、Web開発者が優位に立つための重要な要素です。**\n\n11. **将来的な展開の可能性**\n - **将来的には、JSON-LD構造化マークアップがさらに進化し、新しいSEO戦略として広く採用される可能性があります。**\n\n---\n\n**優先順位に基づいた追加ニュース**\n\n1. **「Web制作会社を特徴別に紹介する」**\n - **ヘッドライン**\n - **「おすすめのWeb制作会社を特徴別に紹介」**\n - **発表日時**\n - **2024-11-08**\n - **情報源(メディア名)**\n - **seotimes.jp**\n - **主要ポイント**\n - **Web制作会社をSEO、デザイン、ブランディングなどの特徴別に紹介。**\n - **各分野を極めたWeb制作会社を特徴別に紹介。**\n - **Web担当者が自社の課題を洗い出して、どの制作会社に依頼すべきか考える際の参考となる。**\n - **業界への影響**\n - **Web制作の質が向上し、顧客満足度が高まることが期待される。**\n - **各分野を極めたWeb制作会社が増え、競争が激化する可能性がある。**\n - **関連する企業・技術**\n - **Web制作会社の特徴に応じたサービス提供。**\n - **デザイン、SEO、ブランディングなど、多様な専門分野を持つ会社が増える。**\n - **信頼性スコア(情報源の信頼性を1-5で評価)**\n - **信頼性スコア:4**\n - **根拠となる一次ソースへのリンク**\n - **https://seotimes.jp/web-designer-company-list/**\n - **専門家のコメント**\n - **「特徴別に紹介されることで、Web担当者が適切な制作会社を選ぶことが容易になるでしょう。**」 - Web開発専門家**\n - **競合他社や類似技術の動向**\n - **競合するWeb制作会社が特徴を強化するために、独自のサービスを提供する可能性が高い。**\n - **新規参入者が特徴別に紹介されることで、市場に新しい価値を提供することが期待される。**\n - **将来的な展開の可能性**\n - **将来的には、Web制作会社がさらに分化し、専門性が高まる可能性が高い。**\n\n---\n\n**その他のニュース**\n\n1. **「306 HTTPステータスコードの意味と使用方法」**\n - **ヘッドライン**\n - **「306 HTTPステータスコードの意味と使用方法」**\n - **発表日時**\n - **2024-11-22**\n - **情報源(メディア名)**\n - **seotimes.jp**\n - **主要ポイント**\n - **306 HTTPステータスコードは現在使用されていないステータスコードで、Switch Proxyという意味で使用されていた。**\n - **HTTP/1.1仕様の更新で正式に「未使用」のステータスとしてマークされ、HTTP/2やHTTP/3でも使用されていない。**\n - **ウェブ開発者やネットワークエンジニアがHTTPステータスコードに関する資料を参照する際に「未使用」と記載されることが一般的。**\n - **業界への影響**\n - **HTTPステータスコードの標準化に影響を与える。**\n - **Web開発者が新しいプロトコルや規定に適応する必要がある。**\n - **関連する企業・技術**\n - **HTTP/1.1、HTTP/2、HTTP/3など、HTTPプロトコルの進化。**\n - **信頼性スコア(情報源の信頼性を1-5で評価)**\n - **信頼性スコア:5**\n - **根拠となる一次ソースへのリンク**\n - **https://seotimes.jp/glossary/306-unused/**\n - **専門家のコメント**\n - **「HTTPステータスコードの標準化は、Web開発の基盤となる重要な要素です。**」 - ネットワークエンジニア**\n - **競合他社や類似技術の動向**\n - **競合するHTTPプロトコルが新しい機能を提供するため、HTTP/1.1が後退する可能性があります。**\n - **新しいHTTPプロトコルが開発され、旧バージョンが非推奨になる可能性があります。**\n - **将来的な展開の可能性**\n - **将来的には、新しいHTTPプロトコルが標準化され、Web開発者の作業が簡単になる可能性があります。**",
"role": "assistant",
"citations": [
"https://seotimes.jp/web-designer-company-list/",
"https://seotimes.jp/glossary/306-unused/",
"https://seotimes.jp/json-ld-structured-markup/"
]
}
]
}
欲しい部分はtext.content、もしくはjson.contentのどちらかになります。「JSON Parse」というノードがあったので、そちらでtext.contentを抽出します。(別の方法として、コードノード上でPython等を使ってjson.contentを取得してもOKです。)
HTTP リクエスト
一旦現時点でパースしたテキストをDiscodeへ投げてみましょう。実はDiscode Webhook用のノードもDifyに用意されていますが、制限が多いため代わりにHTTPリクエストノードを用いています。
テスト実行
画面上部の「実行」ボタンからテスト実行できます。Discodeに通知が来ているので、ここまでは上手くいっているようです。
定期実行
定期実行させるため、このアプリのAPIをAWS EventBridge等を利用してコールします。
APIキーは対象アプリケーションの「APIアクセス」ページから取得します。
例えばcurlで実行する場合はこのようにリクエストを作ります。
curl -X POST 'https://api.dify.ai/v1/workflows/run' \
--header 'Authorization: Bearer {api_key}' \
--header 'Content-Type: application/json' \
--data-raw '{
"inputs": {},
"response_mode": "streaming",
"user": "abc-123"
}'
AWSへの組み込み部分は割愛させて頂きます。
ワークフロー作成手順 Part2(ポッドキャスト音声ファイルも送信)
【注意点⚠️】こちらは現状Difyで不具合が出ており、完遂できない状態です。ワークフロー機能自体がBetaなのですが、早く正式版になることを願います。(issueはいくつか上がっているので、きっと数ヶ月には直ってるはず...!)
ver 0.11.2・・・ポッドキャストの音声ファイルは作成されるが、ファイル送信機能に不具合
ver 0.12.0・・・Podcast Audio Generator自体が実行完了できない状態
ですが、やろうとした軌跡だけでも残しておこうと思います。
ノード修正
先ほど作成したワークフローに、ポッドキャスト音声ファイル作成と送信処理を付け加えようと思います。
Podcast Audio Generatorノードを追加
こちらでは入力したテキストをポッドキャスト形式に変換してくれます。
▼参考https://dify.ai/blog/introducing-dify-workflow-file-upload-a-demo-on-ai-podcast
Perplexity Searchから抽出したテキストをそのまま渡してみます。
二人の男性が見出しパート(Alloy)と本文パート(Echo)に分かれて話してくれていますが、この時点ではほぼ単なるText-to-Speechさせただけです。
このノードに渡すテキストをポッドキャスト風に自分で変換させる必要がありました。こちらはDify公式が出しているポッドキャスト用テキスト作成フローが参考になりそうです。
ポッドキャスト用にテキストを加工
Perplexity Searchで取得したテキストをLLM(gpt-4o-mini)で加工します。
利用したプロンプトはこちら。
[System]
あなたは世界一流のポッドキャスト・プロデューサーで、提供された入力テキストを魅力的で有益なポッドキャスト・スクリプトに変換するのが仕事です。
[User]
以下のテキストを、ホストとゲストによる自然な会話形式のポッドキャスト原稿に変換してください。
【変換ルール】
1. 入力テキストの各行を交互の発言として変換
- 奇数行:ホストの発言
- 偶数行:ゲストの発言
2. 冒頭に追加:
「皆様、こんにちは。本日はテック系ニュースについてお話していきます。」
「よろしくお願いいたします。」
3. 会話の自然な流れを作るため:
- 相手の発言への簡単な相槌を含める
- 専門用語には説明を加える
- 話題の切り替わり時は適切な繋ぎ言葉を入れる
4. 締めくくり:
「本日はありがとうございました。」
「ご清聴ありがとうございました。」
# ターゲットテキスト
[{{#context#}}]
===
出力例:
皆様、こんにちは。本日は最新のテクノロジートレンドについてお話していきます。
よろしくお願いいたします。
hogehoge
たしかに、hogehoge
[以下、入力テキストの行に基づいて会話が続く]
テスト実行
音声ファイルは裏では作られているみたいですが、それを現状送信できないため、手元のDiscodeまでは送れませんでした。
以下はLLMで出力したポッドキャストの原稿です。
{
"text": "皆様、こんにちは。本日はテック系ニュースについてお話していきます。\n\nよろしくお願いいたします。\n\nさて、最初の話題は「おすすめのWeb制作会社を特徴別に紹介」というニュースです。これは2024年11月8日に発表されたものですね。\n\nそうですね、この記事ではWeb制作会社を特定の特徴に基づいて紹介していて、たとえばSEOやデザイン、ブランディング、動画制作などの分野での実績が述べられています。\n\nなるほど、各会社の実績やサービス内容を詳しく紹介しているので、Web担当者が自社の課題を明確にして、どの制作会社に依頼するか迷わずに済むような内容になっているんですね。\n\nその通りです。この情報は特定のニーズに合った会社を見つける手助けにもなりますし、業界全体にとっても非常に役立つと思います。\n\n次に取り上げたいのは「JSON-LDで構造化マークアップの適切な使い方と作り方」というニュースです。これも2024年11月21日に発表されましたね。\n\nはい、JSON-LDは構造化マークアップの一種で、検索エンジンがウェブページの内容を理解しやすくするために使われます。この記事ではその基本と適切な使い方について説明されています。\n\nまた、E-E-A-Tという用語も出てきますが、これはExpertise(専門性)、Authoritativeness(権威性)、Trustworthiness(信頼性)の略ですね。\n\nそうです。このE-E-A-Tを満たすための方法も具体的に解説されていて、構造化マークアップの重要性が強調されています。\n\n確かに、検索エンジン最適化(SEO)において構造化マークアップは非常に重要ですからね。これがSEO戦略に役立つというのは、業界にとっても大きな影響を与えるでしょう。\n\n次は「306 HTTPステータスコード(unused)的意味をわかりやすく解説」というニュースです。これも2024年11月22日に発表されたものですね。\n\nそうですね、306 HTTPステータスコードは「Switch Proxy」という意味でかつて使用されていたのですが、現在は実際の運用上では未使用とされています。\n\nなるほど、HTTP/1.1の仕様更新で正式に「未使用」としてマークされたということですね。これはエラーハンドリングやプロキシ設定において知識不足が問題になる可能性がありますね。\n\nその通りです。HTTPステータスコードに関する具体的な情報を提供しているので、特に開発者やエンジニアにとっては重要な内容だと思います。\n\nさて、これらのニュースを通じて、Web開発とAIの将来的な展開についても期待が寄せられていますね。\n\nそうですね、AIを利用した自動化ツールやデザイン支援ツールの開発が進むことで、より効率的なWeb制作が可能になるでしょう。\n\n本日はありがとうございました。\n\nご清聴ありがとうございました。",
"usage": {
"prompt_tokens": 1503,
"prompt_unit_price": "0.15",
"prompt_price_unit": "0.000001",
"prompt_price": "0.0002255",
"completion_tokens": 721,
"completion_unit_price": "0.60",
"completion_price_unit": "0.000001",
"completion_price": "0.0004326",
"total_tokens": 2224,
"total_price": "0.0006581",
"currency": "USD",
"latency": 9.730616755000028
},
"finish_reason": "stop"
}
ローカルでDifyを実行させてファイルを開いてみたところ、割とイメージ通りのポッドキャストがwavで作成されていました。セルフホストであれば設定ファイルで出力先をクラウドストレージ等に出力できることは確認できたため、s3などに送って無理やり送信することはできます。
最後に出力したポッドキャスト音声を共有します。
まとめ
いかがだったでしょうか。
Notebook LMにポッドキャスト作成機能が付いたときにこのポッドキャスト作成自動化のアイディアが浮かんだのですが、同じようにヒントを得た方が全世界で散見され、一体感を感じられて楽しかったです。
この記事を書いている今日もDifyのバージョンは1日で2回アップデートされ、さらにサーバも落ちている状況で、まだまだ伸びしろがあるサービスです。安定化の課題もありますが、乱立するAIサービスを俯瞰して理解するにはとても良いサービスだと思いました。
良い年末をお過ごしください。それでは。
参考
Dify公式ドキュメント