async def local_doc_chat( knowledge_base_id: str = Body(..., description="Knowledge Base Name", example="kb1"), question: str = Body(..., description="Question", example="工伤保险是什么?"), history: List[List[str]] = Body( [], description="History of previous questions and answers", example=[ ], ), ): vs_path = os.path.join(VS_ROOT_PATH, knowledge_base_id) if not os.path.exists(vs_path): # return BaseResponse(code=1, msg=f"Knowledge base {knowledge_base_id} not found") return ChatMessage( question=question, response=f"Knowledge base {knowledge_base_id} not found", history=history, ) else: start = time.time() for resp, history in local_doc_qa.get_knowledge_based_answer( query=question, vs_path=vs_path, chat_history=history, streaming=True ): pass end = time.time() print(f'总共用时{end-start}') return ChatMessage( question=question, response=resp["result"], history=history )
时间: 2024-02-15 07:27:42 浏览: 135
asio_chat_client.rar_ASIO_Boost_asio chat_boost.asio
这段代码定义了一个名为 `local_doc_chat` 的异步函数,它接受三个参数:`knowledge_base_id`、`question` 和 `history`,其中 `knowledge_base_id` 和 `question` 都是必填参数,而 `history` 是一个可选参数,默认值为一个空列表。
在函数体内,首先检查指定的知识库是否存在。如果不存在,则返回一个 `ChatMessage` 实例,它的 `question` 属性为用户提出的问题,`response` 属性为提示信息,`history` 属性为之前的聊天历史记录。
如果知识库存在,则调用 `local_doc_qa.get_knowledge_based_answer` 方法来获取答案。这个方法接受四个参数:`query`、`vs_path`、`chat_history` 和 `streaming`。其中,`query` 是用户提出的问题,`vs_path` 是知识库的本地路径,`chat_history` 是之前的聊天历史记录,`streaming` 参数表示是否使用流式处理。
最后,函数返回一个 `ChatMessage` 实例,它的 `question` 属性为用户提出的问题,`response` 属性为获取到的答案,`history` 属性为更新后的聊天历史记录。
阅读全文