0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クライアントのPythonプログラミングからFastAPIサーバーを経由してDifyのワークフローを呼び出す

Posted at

以下に、UV仮想環境を使用して、クライアントのPythonプログラミングからFastAPIサーバーを経由してDifyのワークフローを呼び出すプロジェクトを一から構築する手順を詳細に説明します。初心者にも分かりやすいように、ステップごとに丁寧に進めていきます。


目標

  • クライアント側: Pythonスクリプトを作成し、FastAPIサーバーにリクエストを送信する。
  • サーバー側: FastAPIを使ってAPIエンドポイントを構築し、Difyのワークフローを呼び出す。
  • 環境: UVを使って仮想環境を管理し、依存関係を整理する。

前提条件

  1. Pythonがインストール済み: Python 3.10以上が推奨されます。確認するには、ターミナルでpython --versionを実行してください。
  2. UVがインストール済み: UVは高速なPythonパッケージ管理ツールです。未インストールの場合は、以下のコマンドでインストールしてください:
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
    インストール後、uv --versionで確認してください。
  3. DifyのAPIキー: Difyのワークフローを呼び出すには、DifyのAPIキーが必要です。Difyのダッシュボードから取得してください。

手順

ステップ1: プロジェクトディレクトリの作成

プロジェクト用のディレクトリを作成し、そこに移動します。

mkdir fastapi-dify-project
cd fastapi-dify-project

ステップ2: UV仮想環境の作成

UVを使って仮想環境を初期化します。Python 3.12を使用する例を示します(お使いのPythonバージョンに合わせて調整可能)。

uv init --python 3.12

これにより、以下が作成されます:

  • pyproject.toml: プロジェクトの設定ファイル。
  • 仮想環境(デフォルトで.venvディレクトリに作成)。

仮想環境を有効化します:

source .venv/bin/activate  # macOS/Linux
.venv\Scripts\activate     # Windows

ステップ3: 必要な依存関係の追加

FastAPIサーバーとHTTPリクエストのために必要なパッケージをインストールします。

uv add fastapi "uvicorn[standard]" requests
  • fastapi: FastAPIフレームワーク。
  • uvicorn[standard]: FastAPIを動作させるためのASGIサーバー。
  • requests: クライアント側でHTTPリクエストを送信するために使用。

依存関係はpyproject.tomlに記録され、uv.lockファイルが生成されます。

ステップ4: FastAPIサーバーの実装

プロジェクトディレクトリ内にmain.pyを作成し、以下のコードを記述します。このコードは、クライアントからのリクエストを受け取り、Difyのワークフローを呼び出すエンドポイントを定義します。

from fastapi import FastAPI
import requests

app = FastAPI()

# Difyの設定(APIキーとエンドポイントURLを実際の値に置き換えてください)
DIFY_API_KEY = "your-dify-api-key"
DIFY_WORKFLOW_URL = "https://api.dify.ai/v1/workflows/run"  # 実際のURLに変更

@app.post("/run-dify-workflow")
async def run_dify_workflow(data: dict):
    """
    クライアントから受け取ったデータをDifyのワークフローに送信
    """
    headers = {
        "Authorization": f"Bearer {DIFY_API_KEY}",
        "Content-Type": "application/json"
    }
    
    try:
        # Difyのワークフローを呼び出す
        response = requests.post(DIFY_WORKFLOW_URL, json=data, headers=headers)
        response.raise_for_status()  # エラーがあれば例外を発生
        return response.json()  # Difyからのレスポンスを返す
    except requests.exceptions.RequestException as e:
        return {"error": str(e)}

# サーバーを起動するためのエントリーポイント(デバッグ用)
if __name__ == "__main__":
    import uvicorn
    uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)
  • 説明:
    • /run-dify-workflowエンドポイントは、POSTリクエストを受け取り、dataをDifyに送信します。
    • DIFY_API_KEYDIFY_WORKFLOW_URLは、Difyのダッシュボードから取得した値に置き換えてください。

ステップ5: クライアントスクリプトの実装

プロジェクトディレクトリ内にclient.pyを作成し、以下のコードを記述します。このスクリプトはFastAPIサーバーにリクエストを送信します。

import requests

# FastAPIサーバーのURL
SERVER_URL = "http://localhost:8000/run-dify-workflow"

# サンプルデータ(Difyのワークフローに渡すデータ)
payload = {
    "key1": "value1",
    "key2": "value2"
}

def call_dify_workflow():
    try:
        response = requests.post(SERVER_URL, json=payload)
        response.raise_for_status()
        print("Difyからのレスポンス:", response.json())
    except requests.exceptions.RequestException as e:
        print("エラー:", str(e))

if __name__ == "__main__":
    call_dify_workflow()
  • 説明:
    • payloadはDifyのワークフローが期待するデータ形式に合わせて調整してください。
    • FastAPIサーバーがlocalhost:8000で動作していると仮定しています。

ステップ6: FastAPIサーバーの起動

仮想環境が有効化された状態で、以下のコマンドでサーバーを起動します。

uv run python main.py
  • サーバーが起動すると、http://localhost:8000でアクセス可能になります。
  • 開発モードではreload=Trueが有効なので、コード変更時に自動で再起動します。

ステップ7: クライアントの実行

別のターミナルを開き、仮想環境を有効化してからクライアントスクリプトを実行します。

source .venv/bin/activate  # macOS/Linux
.venv\Scripts\activate     # Windows
uv run python client.py
  • クライアントがFastAPIサーバーにリクエストを送信し、Difyのワークフローからのレスポンスが表示されます。

ステップ8: 動作確認

  1. サーバーが起動していることを確認(http://localhost:8000/docsでSwagger UIが見られる)。
  2. クライアントを実行し、期待通りのレスポンスが得られるか確認。
  3. Dify側でワークフローが正しく動作しているか、Difyダッシュボードでログを確認。

プロジェクト構造

最終的なディレクトリ構造は以下のようになります:

fastapi-dify-project/
├── .venv/           # UV仮想環境
├── main.py          # FastAPIサーバー
├── client.py        # クライアントスクリプト
├── pyproject.toml   # プロジェクト設定
└── uv.lock          # 依存関係ロックファイル

追加のTips

  1. エラーハンドリングの強化: 本番環境では、例外処理をさらに詳細に記述することを推奨します。
  2. 環境変数の使用: DIFY_API_KEYなどの機密情報は、.envファイルに保存し、python-dotenvを使って読み込むのが安全です。
    • uv add python-dotenvでインストール。
    • .envファイルを作成し、main.pyで以下のように読み込み:
      from dotenv import load_dotenv
      import os
      load_dotenv()
      DIFY_API_KEY = os.getenv("DIFY_API_KEY")
      
  3. 本番環境へのデプロイ: 本番ではuvicornを直接使うのではなく、Gunicornと組み合わせて使うことを検討してください。

まとめ

これで、UV仮想環境内でFastAPIサーバーを介してDifyのワークフローを呼び出すプロジェクトが完成しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?