From 25925f6ee5fa9026d4030f6018b745cb1f7ac346 Mon Sep 17 00:00:00 2001 From: Tian jianyong <11429339@qq.com> Date: Tue, 16 Dec 2025 14:02:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=20SSE=20=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 19 ++++++++++++++++++- .../utils/ragflow_asy_util.py | 18 +++++++++++++++--- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ec11d87..b4e9807 100644 --- a/README.md +++ b/README.md @@ -210,4 +210,21 @@ COMPREFACE_API_KEY=your-api-key ## 许可证 -本项目基于Apache License 2.0开源协议。 \ No newline at end of file +本项目基于Apache License 2.0开源协议。 + +RAGFlow服务使用固定的chat-id,该id在RAGFlow服务端配置,用于标识聊天助手会话: +{ + "chatId": "db4bb966895b11f08cda0242ac130006", + "question": "你好,请用简洁的语言介绍你自己", + "stream": true, + "sessionId": "38d765e48a3811f0be310242ac130006" +} + +测试 Token: +{ + "code": 200, + "msg": "登录成功", + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMSIsInVzZXJfbmFtZSI6ImFkbWluIiwiZGVwdF9uYW1lIjoiXHU3ODE0XHU1M2QxXHU5MGU4XHU5NWU4Iiwic2Vzc2lvbl9pZCI6IjQ3OTBlZmFmLTU2OTktNDE4Zi04MTQ0LWJmMGI3Y2UwNmRhNCIsImxvZ2luX2luZm8iOnsiaXBhZGRyIjpudWxsLCJsb2dpbkxvY2F0aW9uIjoiXHU2NzJhXHU3N2U1IiwiYnJvd3NlciI6Ik90aGVyIiwib3MiOiJPdGhlciIsImxvZ2luVGltZSI6IjIwMjUtMTItMTYgMTM6MDY6MjQifSwiZXhwIjoxNzY4NDUzNTg0fQ.ijL1R8b-6s-OGL1f0uxcD3-b0Na6N3SnxygIvlM3EgM", + "success": true, + "time": "2025-12-16T13:06:24.888622" +} \ No newline at end of file diff --git a/ruoyi-fastapi-backend/utils/ragflow_asy_util.py b/ruoyi-fastapi-backend/utils/ragflow_asy_util.py index 89037ef..2182d91 100644 --- a/ruoyi-fastapi-backend/utils/ragflow_asy_util.py +++ b/ruoyi-fastapi-backend/utils/ragflow_asy_util.py @@ -93,7 +93,7 @@ class AsyncRAGFlowClient: return result async def _stream_request(self, method: str, endpoint: str, **kwargs) -> AsyncGenerator[Dict[str, Any], None]: - """发送流式HTTP请求""" + """发送流式HTTP请求 - 处理SSE协议""" if not self._session: await self.create_session() @@ -104,12 +104,24 @@ class AsyncRAGFlowClient: async for line in response.content: if line: line_str = line.decode('utf-8').strip() + + # 处理SSE数据行 if line_str.startswith('data:'): + # 提取数据部分(去掉 "data: " 前缀) + data_part = line_str[5:].strip() + + # 检查是否为结束标记 + if data_part == '[DONE]': + break + + # 尝试解析JSON try: - data = json.loads(line_str[5:].strip()) + data = json.loads(data_part) yield data except json.JSONDecodeError: - continue + # 如果不是有效JSON,作为文本返回 + if data_part: + yield {'content': data_part, 'text': data_part} # ==================== # OpenAI兼容API