聊天机器人端点

当您在前端输入问题时,会向/api/chat端点发送一个POST请求。请求主体必须包含来自用户的疑问,格式如下

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

应用程序的响应是一个事件流,如服务器发送事件 (SSE) 规范中所定义。服务器返回给客户端的事件具有以下顺序

  • data: [SESSION_ID] 分配给此聊天会话的会话 ID
  • data: [SOURCE] json 格式的文档(针对识别到的每个相关文档源重复)
  • data: 响应块(针对 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.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 由数据科学家、机器学习运维工程师、软件工程师等等许多同样热爱搜索的人员提供支持,他们与您一样对搜索充满热情。让我们携手合作,构建出能够为您提供所需结果的奇妙搜索体验。

亲自试一试