import requests import json import os from dotenv import load_dotenv load_dotenv() API_KEY = os.environ.get("DIFY_API_KEY") APP_ID = os.environ.get("APP_ID") BASE_URL = "https://api.dify.ai/v1" CHAT_ENDPOINT = f"{BASE_URL}/chat-messages" user_input = "おはようございます。" payload = { # ユーザーからのメインの質問(ワークフローの {{query}} に対応) "query": user_input, # ワークフロー内の他の入力ノードに渡す変数(オプション) "inputs": { # 例: ワークフロー内の変数名が 'context' の場合、ここで値を渡せる "context": "Null" }, # ユーザーIDは必須(セッション管理用)。適当なUUIDなどを指定 "user": "user_python_script_001", # ストリーミングを無効にする "response_mode": "blocking", } headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } try: # --- API呼び出し --- response = requests.post( CHAT_ENDPOINT, headers=headers, data=json.dumps(payload) ) response.raise_for_status() # HTTPエラーが発生した場合に例外を発生させる data = response.json() # --- 出力の取得 --- if data and 'answer' in data: print("✅ ワークフローの出力 (回答):") print(data['answer']) else: print("⚠️ ワークフローからの回答が見つかりません。") print(data) except requests.exceptions.HTTPError as errh: print(f"HTTP エラーが発生しました: {errh}") print(response.text) except requests.exceptions.RequestException as err: print(f"リクエスト中にエラーが発生しました: {err}")
$ python3 dify-llm.py
✅ ワークフローの出力 (回答):
おはようございます。今日は何のお手伝いができますか?
アプリ(iOS/Android)から直接Difyを呼び出すのではなく、バックエンドサーバー(Python)を経由させて、そのサーバーでTTS(Text-to-Speech、音声合成)処理を行ってからアプリに返す構成の方が、より一般的で推奨されている。
なるほど、Dify APIの理解度が一気に高まった。