Laravel10 DifyのチャットボットをAPIでコールする

Difyのチャットボットを作成しAPIキー取得までは以下の記事を参照。
Laravel10 Dify APIコール方法

ワークフローのAPIコールとパラメータの指定方法が微妙に違う点に注意。

        $curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_URL => 'https://api.dify.ai/v1/chat-messages',
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_POSTFIELDS =>'{
                "inputs": {},
                "query": "日本で1番高い山を教えて下さい",          // 質問をセット
                "user": "abc-123"
            }',
            CURLOPT_HTTPHEADER => array(
                'Authorization: Bearer app-xxxxxxxxxx',          // Dify側で作成したAPIキーをセット
                'Content-Type: application/json'
            ),
        ));

        $response = curl_exec($curl);

        curl_close($curl);

        // JSONデコード
        $decodedResponse = json_decode($response, true);
dd($decodedResponse);

以下のようなレスポンスが返ってくる。

array:9 [▼
  "event" => "message"
  "task_id" => "c7107231-ae49-4d97-9316-xxxxxxx"
  "id" => "3e619c61-5f31-4ab0-978b-xxxxxxxxxxxx"
  "message_id" => "3e619c61-5f31-4ab0-978b-xxxxxxxxxxxxx"
  "conversation_id" => "a2ebf4b9-3e42-4ea8-8d5b-xxxxxxxxxx"
  "mode" => "chat"
  "answer" => "日本で最も高い山は富士山(ふじさん)です。高さは3,776メートルで、東京都と山梨県の境に位置しています。富士山は日本の象徴的な存在であり、美しい姿や文化的な意味合いから多くの人に親しまれています。"
  "metadata" => array:1 [▼
    "usage" => array:12 [▼
      "prompt_tokens" => 18
      "prompt_unit_price" => "0.15"
      "prompt_price_unit" => "0.000001"
      "prompt_price" => "0.0000027"
      "completion_tokens" => 73
      "completion_unit_price" => "0.60"
      "completion_price_unit" => "0.000001"
      "completion_price" => "0.0000438"
      "total_tokens" => 91
      "total_price" => "0.0000465"
      "currency" => "USD"
      "latency" => 0.80343801499112
    ]
  ]
  "created_at" => 1725579067

単にChatGPTに回答をして欲しいだけなら直接ChatGPTのAPIをコールすれば良いけど、Difyの何かしらの機能、例えばナレッジ、RAGを経由、使いたい場合や、モデルの切り替えをDify側で手軽にしたい場合には有効そうである。

ナレッジのアップロードはAPIで出来るようになったけど、チャットボットのナレッジ(コンテキスト)の更新までAPIでやらせてもらえると、DifyをAIバックエンドとして使えて便利なんだけどなぁ。

1件のコメント

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です