async def stream_chat(websocket: WebSocket, knowledge_base_id: str): await websocket.accept() turn = 1 while True: input_json = await websocket.receive_json() question, history, knowledge_base_id = input_json[""], input_json["history"], input_json["knowledge_base_id"] vs_path = os.path.join(VS_ROOT_PATH, knowledge_base_id) if not os.path.exists(vs_path): await websocket.send_json({"error": f"Knowledge base {knowledge_base_id} not found"}) await websocket.close() return await websocket.send_json({"question": question, "turn": turn, "flag": "start"}) last_print_len = 0 for resp, history in local_doc_qa.get_knowledge_based_answer( query=question, vs_path=vs_path, chat_history=history, streaming=True ): await websocket.send_text(resp["result"][last_print_len:]) last_print_len = len(resp["result"]) source_documents = [ f"""出处 [{inum + 1}] {os.path.split(doc.metadata['source'])[-1]}:\n\n{doc.page_content}\n\n""" f"""相关度:{doc.metadata['score']}\n\n""" for inum, doc in enumerate(resp["source_documents"]) ] await websocket.send_text( json.dumps( { "question": question, "turn": turn, "flag": "end", "sources_documents": source_documents, }, ensure_ascii=False, ) ) turn += 1
时间: 2024-04-27 10:23:37 浏览: 13
这段代码看起来是一个基于 WebSocket 实现的 AI 对话系统,它会接收客户端发送过来的消息,然后调用本地文档问答系统来提供回答。其中,vs_path 是知识库的路径,local_doc_qa 是本地文档问答系统的实例,chat_history 则是历史对话记录,用于上下文理解。在获取到回答后,它会将回答和相关的文档信息返回给客户端。
相关问题
前端怎么接收 async def websocket_receive(self, message, ):的await self.send(9
在前端中接收`async def websocket_receive(self, message)`的返回值,可以使用`await`关键字和`self.send()`方法。在接收到消息后,可以将其作为参数传递给`self.send()`方法进行处理。以下是一个示例代码:
```javascript
// 假设前端使用JavaScript
async function websocket_receive(message) {
// 处理接收到的消息
// ...
// 发送处理后的消息给服务器
await self.send(message);
}
```
请注意,以上代码只是一个示例,具体实现可能会根据你使用的前端框架或库有所不同。确保根据你的项目需求进行适当的修改。
async def client_message(self, event): message = event['msg'] await self.send(text_data=message)解释
这是一个 Python 中使用异步编程方式定义的 WebSocket 客户端的消息处理函数。函数名为 client_message,接收一个名为 event 的参数,event 是一个包含消息信息的字典对象。函数实现了以下功能:
1. 从 event 字典中获取名为 'msg' 的键所对应的值,赋值给变量 message。
2. 调用 WebSocket 客户端连接对象的 send() 方法,将 message 作为参数传入,实现向服务器发送消息的功能。
3. 使用 await 关键字等待 send() 方法执行完成,因为 send() 方法是异步函数,需要等待其执行完成。
需要注意的是,这段代码应该是 WebSocket 客户端的消息处理函数,而不是普通的 HTTP 请求处理函数。因为 WebSocket 是一种基于 TCP 的双向通信协议,与 HTTP 不同,需要使用专门的 WebSocket 客户端和服务端进行通信。