Punto final de chatbot
Cuando introduces una pregunta en el frontend, se envía una petición POST al endpoint /api/chat . El cuerpo de la solicitud debe incluir la pregunta del usuario, en el siguiente formato:
{
"question": "the question goes here"
}La respuesta de la aplicación es un flujo de eventos, tal y como se define en la especificación de Eventos Enviados por el Servidor (SSE). Los eventos que el servidor devuelve al cliente tienen la siguiente secuencia:
data: [SESSION_ID] session-id-assigned-to-this-chat-sessiondata: [SOURCE] json-formatted-document(repetido para cada fuente relevante del documento identificada)data: response chunk(repetido para cada fragmento de respuesta devuelto por el LLM)data: [DONE]
El cliente puede elegir hacer una pregunta de seguimiento agregando un argumento de session_id cadena de consulta a la URL de la solicitud.
La lógica de alto nivel para el endpoint del chatbot está en la función api_chat() de la aplicación Flask, en la API de archivo/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")La función ask_question() en la API/chat.py de archivos es una función generadora que transmite los eventos descritos anteriormente empleando la función de streaming de respuesta de Flask, que se basa en la palabra clave yield :
@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"