聊天机器人终端

在前端输入问题时,会向/api/chat端点发送POST 请求。请求正文必须包括用户的问题,格式如下:

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

根据服务器发送事件(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 查询字符串参数,选择提出后续问题。

聊天机器人终端的高级逻辑在文件api/app.py 中 Flask 应用程序的api_chat() 函数中:

@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.py中的ask_question() 函数是一个生成器函数,它使用 Flask 的响应流功能(基于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"

准备好打造最先进的搜索体验了吗?

足够先进的搜索不是一个人的努力就能实现的。Elasticsearch 由数据科学家、ML 操作员、工程师以及更多和您一样对搜索充满热情的人提供支持。让我们联系起来,共同打造神奇的搜索体验,让您获得想要的结果。

亲自试用