見出し画像

Difyで技術情報収集を簡潔に

こんにちは、CTOの永井(shnagai)です!

この記事は、コネヒト生成AIアドベントカレンダー 21日目の記事です。

日々の技術情報収集、私はこれまでXのフィードを頼りにしてきたんですが、最近アルゴリズムが崩壊してきて全然お目当ての技術情報にたどりつけなくなったという悩みを抱えていました。
今回Difyを使って自分だけの最強の技術情報収集ツールが簡単に作れることがわかったので、内容をDSLベースで紹介できればと思います。

ワークフロー

やることはざっくり、技術系のフィードをスクレイピングし、AIモデルで分析した情報をSlackに通知するという流れです。

DSLベースでノードを解説

Difyでどのような定義をしているのかをDSLベースで解説します。
ノーコードツールですが、処理を理解するにはDSLエクスポートでDSLを追うほうが捗ります。

DSLを活用した技術情報収集の流れ
1. ユーザーがRSSフィードのURLを選択
2. 指定されたURLから記事をスクレイピング
3. GPT-4が記事を分析し、重要な記事を選定
4. 選定結果をSlackに通知
5. ワークフロー終了

(1) START

ユーザーがRSSフィードURLを選択するステップです。

- data:
    title: 開始
    type: start
    variables:
    - label: url
      max_length: 48
      options:
      - https://techcrunch.com/feed/
      - フィードのURL
      required: true
      type: select
      variable: url

type: startでワークフローの開始地点を指定
variables: ユーザーが選択可能なRSSフィードのURLを変数として定義。変数名はurl


(2) SCRAPE

Firecrawlというツールを利用して、指定されたURLから記事をスクレイピングします。

- data:
    provider_name: firecrawl
    title: Scrape
    tool_name: scrape
    tool_parameters:
      url:
        type: mixed
        value: '{{#1734420255657.url#}}'
    type: tool

tool_parameters: スクレイピング対象のURLはstartノードで指定したurl変数


(3) LLM

スクレイピングしたデータをAIモデル(GPT-4o)で分析し、重要な記事を抽出します。

- data:
    model:
      name: gpt-4o
      provider: openai
    prompt_template:
    - id: unique-id
      role: system
      text: '以下の{{#context#}}には多数の記事情報が含まれています。あなたは熟練エンジニアとして、この中から「読むべき価値が高い」10件の記事を厳選してください。選定時の判断基準は下記の通りです:
        1. 最新技術動向やイノベーション:新規性や市場で注目されている技術を解説している記事
        2. ソフトウェア開発・アーキテクチャ・デプロイメント:設計手法、技術スタック、CI/CDパイプラインなど、開発実務に役立つ記事
        3. リーダーシップ・マネジメント:チームビルディング、プロジェクト管理、エンジニア組織のスケールに関する記事
        4. サイバーセキュリティ・データ保護:セキュリティ上のベストプラクティス、脅威分析、プライバシー保護手法を扱う記事
        5. 業界トレンド・市場分析:特定分野の動向、市場規模、ビジネス機会に関する洞察を与える記事

        もし、これらの基準を満たす記事が10件見つからない場合は、見つかった範囲で最大限の記事を提示してください。

        出力フォーマット:
        それぞれの記事について、以下の情報を箇条書きで示してください。
        • タイトル
        • 記事URL
        • 要約(2~3文程度で記事の中核的内容を説明)
        • 短い見解(記事内容を受けた有用性や参考価値をコメント)'
    type: llm

model: GPT-4o
prompt_template: モデルに渡すプロンプト。ここでは記事選定の基準を具体的に記載しています。尚、このプロンプト自体はGPTで作ったものをそのまま貼っているので、少しずつ運用しながら改善していく予定です。


(4) SLACK-SEND-MESSAGE

結果をSlackに通知します。

- data:
    provider_name: slack
    title: Incoming Webhook to send message
    tool_parameters:
      content:
        type: mixed
        value: '{{#1734479455928.text#}}'
    type: tool

provider_name: SlackのIncoming Webhookを使用。
tool_parameters: 通知内容は、LLMノードでの出力をそのまま利用


(5) FIN

ワークフローを終了します。

- data:
    title: fin
    type: end

type: endでワークフローの終端を定義。


出力として下記のような形式で10記事ピックアップされます。

  1. 【C#】文字列の最適化手法について - Annulus Games

    • 記事URL: https://annulusgames.com/blog/cs-string-optimization/

    • 要約: C#の文字列処理における最適化手法について解説。文字列のヒープアロケーションがパフォーマンスに与える影響について考察し、最適化のための具体的な手法を紹介。

    • 見解: パフォーマンスの最適化は開発において重要な課題です。C#を使用するプロジェクトにおいて、効率的なメモリ管理を実現するための有用な知識を得られる記事です。

まとめ

シンプルな処理の組み合わせでこれまで時間のかかっていた技術情報収集に個人的にはブレークスルーを起こせました。(もっとよく出来る余地はもちろんありますが、及第点はこれぐらい簡単に出せるというところに価値があると感じてます)

どんな内容もいい感じにまとめてくれるLLMと便利ツールを簡単にワークフローに組み込めるDifyは改めてめちゃくちゃ便利なので、日々の業務や情報収集に取り込んでいきたいと思っています。



いいなと思ったら応援しよう!