フロントエンドで質問を入力すると、 /api/chatエンドポイントにPOSTリクエストが送信されます。リクエストの本文には、ユーザーからの質問が次の形式で含まれている必要があります。
アプリケーションからの応答は、 Server-Sent Events (SSE) 仕様で定義されているイベント ストリームです。サーバーがクライアントに返すイベントの順序は次のとおりです。
data: [SESSION_ID] session-id-assigned-to-this-chat-sessiondata: [SOURCE] json-formatted-document(特定された関連文書ソースごとに繰り返されます)data: response chunk(LLMによって返される応答チャンクごとに繰り返されます)data: [DONE]
クライアントは、リクエスト URL にsession_idクエリ文字列引数を追加することで、フォローアップの質問をすることができます。
チャットボット エンドポイントの高レベル ロジックは、Flask アプリケーションのapi_chat()関数のファイルapi/app.pyにあります。
ファイルapi/chat.pyのask_question()関数は、 yieldキーワードに基づく Flask の応答ストリーミング機能を使用して、上記のイベントをストリーミングするジェネレーター関数です。