Difyエージェントとワークフローの連携方法について調べてみた

本記事では、Difyで作成したワークフローをDifyのエージェントと連携させる方法を解説します。

具体例として、Anthropicが公開しているプロンプトテンプレートを使用したシナリオを紹介し、実際の設定手順を詳しく説明します。

Difyのワークフローとは?

Difyのワークフローは、AIを使ってアプリを簡単に作る事が出来るツールです。

ブロックを並べるようにして作業を組み立てられます。

たとえば、「質問に答える」「情報を探す」「条件に応じて動作を変える」などのブロックがあり、これを使って複雑なプログラムを見やすく簡単に作る事が出来ます。

また、Difyは他のアプリやツールとも連携できるため、APIを使って自分のアプリに組み込むことも可能です。

初心者でも使いやすく、エラーを見つけやすいデバッグ機能もあります。

dify.ai

Difyのエージェントとは?

Difyのエージェントは、AIを活用して複雑なタスクを自動的に処理するためのツールです。

エージェントは、以下のような機能を持っています。

  • ツールの利用
    • Google検索やWikipedia検索などのツールを使って情報を収集し、ユーザーの質問に答えることができます
  • カスタムエージェントの作成
    • 簡単にカスタマイズでき、特定の業務やニーズに合わせて調整可能です
  • モデルの選択
    • Difyでは、GPT-4などの大規模言語モデル(LLM)を使ってエージェントを動かすことができます

エージェントを使うことで、AIを活用した自動化と効率化が可能になり、特に繰り返しの多いタスクや情報検索に強力な力を発揮します。

dify.ai

作業手順

Difyで作成したワークフローは、下記の手順でDifyのエージェントに連携できます。

  1. Difyでワークフローを作成する
  2. Curlでワークフローにテスト接続する
  3. 大規模言語モデルを使用して、OpenAPIのSwagger定義を作成する
  4. Difyのエージェントにカスタムスキルを追加する

作業詳細

Difyでワークフローを作成する

今回は下記のようなワークフローを作成しました。

ユーザーが入力した文章を質問分類器を使用してクラス分けし、該当するプロンプトテンプレートを回答する仕組みです。

プロンプトテンプレートは、Anthropicが公開しているプロンプトライブラリを参考にしました。

docs.anthropic.com

質問分類器で質問の種類を判断し、該当するプロンプトテンプレートをJinaReaderで取得します。

質問の種類毎に取得するプロンプトテンプレートは下記の通りです。

Curlでワークフローにテスト接続する

ワークフロー作成画面の左側にあるAPIアクセスを選択します。

ワークフローにcurlでアクセスする為のコマンドを確認します。

画面右上にあるAPIキーを選択します。

シークレットキーを確認します。

作成していない場合は新しいシークレットキーを作成します。

Git Bash等を使用して、テスト接続します。

Bearerの箇所にシークレットキーを入力します。

上記のワークフローでは、開始の箇所でquestion変数を定義しています。

その為、curlコマンド実行時にquestion変数と任意の文字”hello”をinputsの項目に設定しています。

テスト接続が問題なければ、APIは稼働しています。

※接続に問題がなければ、下記のような結果が出力されます。

大規模言語モデルを使用して、OpenAPIのSwagger定義を作成する

ChatGPTやCopilotを使用して、OpenAPIのSwagger定義を作成します。

ワークフローに接続するテストで使用したCurlコマンドの内容を、Swagger定義に変換するように依頼します。

※下記はGPT-4oを使用して作成しました。

クリックすると作成されたSwagger定義が表示されます。

openapi: 3.0.1
info:
  title: Dify API
  description: API for running Dify workflows
  version: 1.0.0
servers:
  - url: https://api.dify.ai/v1
paths:
  /workflows/run:
    post:
      summary: Run a Dify workflow
      description: Executes a Dify workflow with the given inputs and response mode.
      operationId: runWorkflow
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                inputs:
                  type: object
                  properties:
                    question:
                      type: string
                      example: "hello"
                response_mode:
                  type: string
                  example: "streaming"
                user:
                  type: string
                  example: "abc-123"
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  # Define the expected response properties here
        '401':
          description: Unauthorized
        '400':
          description: Bad Request
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

Difyのエージェントにカスタムスキルを追加する

作成したSwagger定義をカスタムスキルに登録します。

※serversのurlは、DifyをデプロイしたURL

APIキーを設定します。

値には、Curlでテスト接続した時に確認したワークフローのシークレットキーを設定してください。

テスト接続します。

利用可能なツールの項目に記載されているテストを選択します。

下記のようにパラメーターの値を設定し、テストボタンを押します。

テスト結果が表示されれば、正常にワークフローに接続できています。

実行結果

エージェントとワークフローを連携して実行した結果です。

個人情報が含まれるテキストをマスク処理したいという質問に対し、適切なプロンプトテンプレートを取得することが出来ています。

テスト用としてGPTに作成させた個人情報を含むテキストをマスク処理させた結果です。

プロンプトテンプレートを参考にして、個人情報がマスク処理されました。

まとめ

本記事では、Difyで作成したワークフローをDifyのエージェントと連携させて動作させる方法について解説しました。

Difyのワークフローが、APIを介してエージェントと連携して使用できることを確認しました。

しかし、今回ご紹介した方法ではDifyのクラウドサービスで401の認証エラーが発生し、利用が制限される場合があります。

https://cloud.dify.ai/

その場合は、DifyのソースコードをAzureなどのクラウド環境に構築すれば使用可能です。

ワークフローとエージェントの連携機能は、今後のDifyのアップデートで正式に実装されるかもしれません。

それまでの間、この記事で紹介した方法をお試しいただければ幸いです。

執筆担当者プロフィール
株木 誠

株木 誠

先端技術部の株木です。 Azure OpenAI Service を活用するアプリ開発を担当しています。

担当記事一覧