チャットボットエンドポイント

フロントエンドで質問を入力すると、 /api/chatエンドポイントにPOSTリクエストが送信されます。リクエストの本文には、ユーザーからの質問が次の形式で含まれている必要があります。

{
    "question": "the question goes here"
}

アプリケーションからの応答は、 Server-Sent Events (SSE) 仕様で定義されているイベント ストリームです。サーバーがクライアントに返すイベントの順序は次のとおりです。

  • data: [SESSION_ID] session-id-assigned-to-this-chat-session

  • data: [SOURCE] json-formatted-document (特定された関連文書ソースごとに繰り返されます)

  • data: response chunk (LLMによって返される応答チャンクごとに繰り返されます)

  • data: [DONE]

クライアントは、リクエスト URL にsession_idクエリ文字列引数を追加することで、フォローアップの質問をすることができます。

チャットボット エンドポイントの高レベル ロジックは、Flask アプリケーションのapi_chat()関数のファイルapi/app.pyにあります。

@app.route("/api/chat", methods=["POST"])
def api_chat():
    request_json = request.get_json()
    question = request_json.get("question")
    if question is None:
        return jsonify({"msg": "Missing question from request JSON"}), 400

    session_id = request.args.get("session_id", str(uuid4()))
    return Response(ask_question(question, session_id), mimetype="text/event-stream")

ファイルapi/chat.pyask_question()関数は、 yieldキーワードに基づく Flask の応答ストリーミング機能を使用して、上記のイベントをストリーミングするジェネレーター関数です。

@stream_with_context
def ask_question(question, session_id):
    yield f"data: {SESSION_ID_TAG} {session_id}\n\n"
    # ...
    yield f"data: {DONE_TAG}\n\n"

最先端の検索体験を構築する準備はできましたか?

十分に高度な検索は 1 人の努力だけでは実現できません。Elasticsearch は、データ サイエンティスト、ML オペレーター、エンジニアなど、あなたと同じように検索に情熱を傾ける多くの人々によって支えられています。ぜひつながり、協力して、希望する結果が得られる魔法の検索エクスペリエンスを構築しましょう。

はじめましょう