はい、今回は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!!!!
ちゃんと切り分けて調べる必要がありますね…