Selaa lähdekoodia

解决知识问题不响应问题,解决解析错误问题

zhangqian 1 vuosi sitten
vanhempi
sitoutus
80978b3aec
2 muutettua tiedostoa jossa 20 lisäystä ja 14 poistoa
  1. 17 13
      app/api/chat.py
  2. 3 1
      app/service/ragflow.py

+ 17 - 13
app/api/chat.py

@@ -47,33 +47,37 @@ async def handle_client(websocket: WebSocket,
                     print(f"Received from client {chat_id}: {message}")
                     chat_history = message.get('chatHistory', [])
                     if len(chat_history) == 0:
-                        chat_history = await ragflow_service.get_session_history(token, agent_id)
+                        chat_history = await ragflow_service.get_session_history(token, chat_id)
                         if len(chat_history) == 0:
                             chat_history = await ragflow_service.set_session(token, agent_id,
                                                                              message["message"], chat_id, True)
                             if len(chat_history) == 0:
                                 result = {"message": "内部错误:创建会话失败", "type": "close"}
                                 await websocket.send_json(result)
+                                await websocket.close()
                                 return
                     async for rag_response in ragflow_service.chat(token, chat_id, chat_history):
                         try:
                             print(f"Received from ragflow: {rag_response}")
                             if rag_response[:5] == "data:":
                                 # 如果是,则截取掉前5个字符,并去除首尾空白符
-                                json_str = rag_response[5:].strip()
+                                text = rag_response[5:].strip()
                             else:
                                 # 否则,保持原样
-                                json_str = rag_response
-                            json_data = json.loads(json_str)
-                            data = json_data.get("data")
-                            if data is True:  # 完成输出
-                                result = {"message": "", "type": "close"}
-                            elif data is None:  # 发生错误
-                                answer = json_data.get("retmsg", json_data.get("retcode"))
-                                result = {"message": "内部错误:" + answer, "type": "stream"}
-                            else:  # 正常输出
-                                answer = data.get("answer", "")
-                                result = {"message": answer, "type": "stream"}
+                                text = rag_response
+                            try:
+                                json_data = json.loads(text)
+                                data = json_data.get("data")
+                                if data is True:  # 完成输出
+                                    result = {"message": "", "type": "close"}
+                                elif data is None:  # 发生错误
+                                    answer = json_data.get("retmsg", json_data.get("retcode"))
+                                    result = {"message": "内部错误:" + answer, "type": "stream"}
+                                else:  # 正常输出
+                                    answer = data.get("answer", "")
+                                    result = {"message": answer, "type": "stream"}
+                            except json.JSONDecodeError:
+                                result = {"message": text, "type": "stream"}
                             await websocket.send_json(result)
                             print(f"Forwarded to client {chat_id}: {result}")
                         except Exception as e:

+ 3 - 1
app/service/ragflow.py

@@ -56,8 +56,10 @@ class RagflowService:
             "conversation_id": chat_id,
             "messages": chat_history
         }
+
+        print(data)
         target_url = f"{self.base_url}/v1/conversation/completion"
-        async with httpx.AsyncClient() as client:
+        async with httpx.AsyncClient(timeout=10.0) as client:
             headers = {
                 'Content-Type': 'application/json',
                 'Authorization': token