DifyのAPIのstreamのレスポンスが途中で途切れて返ってくる

はい、今回はDifyのAPIを使ってサービスを作っていて少し困ったことがありました。

それはstreamモードにした時に、レスポンスが途切れて返ってくるという謎の現象があったのでそれの解決策を残します。

Table of Contents

事象

streamモードにした時、フロントエンド側で受け取るデータが以下のような形で渡ってきました。

log
{"event": "message", "conv

ただ、本来は以下のような形で返ってきて欲しいわけですね

log
data: {"event": "message", "conversation_id": "d7c434f6-e3c9-498c-a730-dd26c9729ffe", "message_id": "5929900f-7755-4e47-ac26-2fbaa0e3ed40", "created_at": 1723361270, "task_id": "19528e47-14d5-430a-8948-fbe8961f7453", "id": "5929900f-7755-4e47-ac26-2fbaa0e3ed40", "answer": "\u3057\u307e\u3059"}

なぜ途切れているんだー!ということで調査する。

原因

そもそもは以下のような環境で今回のサービスが存在しました。

Client→Nginx→FE→BE→Dify

で、このNginx(リバプロとして利用)が悪さをしていたんですね。

今回のケースでいうとtext/event-streamをnginx挟んでやりとりをする時には特定の設定をnginx側に記載する必要があったようです。

解決策

nginxのhttpd.confのlocation部分に以下記載を追加してあげることにしました。

httpd.conf
                proxy_set_header Connection '';
                proxy_http_version 1.1;
                chunked_transfer_encoding off;
                proxy_buffering off;
                proxy_cache off;

これでいい感じに設定することができました。

https://stackoverflow.com/questions/13672743/eventsource-server-sent-events-through-nginx

こんな感じで参考にしました。

結論

text/event-streamを利用する時にはnginxに設定をいい感じに入れてあげないと、レスポンスがおかしくなるケースがある。

ということでした!!

FE,BEとかの問題だと思って一生懸命調べていたらまさかのnginx!!!!

ちゃんと切り分けて調べる必要がありますね…

コメントを残す

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

CAPTCHA