From a6518bff039bbf7c1235506b8713d53cb249a005 Mon Sep 17 00:00:00 2001 From: Simon Date: Sat, 18 Jul 2026 00:28:15 +0800 Subject: [PATCH] =?UTF-8?q?P0-6:=20Dify=E8=B6=85=E6=97=B6=E9=A2=84?= =?UTF-8?q?=E7=AE=97=E5=88=87=E5=88=86=20native/proxy=20=E5=90=8412s?= =?UTF-8?q?=EF=BC=88=E4=BF=AE=E5=A4=8Dproxy=E5=85=9C=E5=BA=95=E4=B8=8D?= =?UTF-8?q?=E5=8F=AF=E8=BE=BE=EF=BC=8C=E5=8F=98=E9=87=8F=E5=B7=B2=E6=B3=A8?= =?UTF-8?q?=E5=85=A5=E5=AE=B9=E5=99=A8=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/config.py | 7 +++++++ backend/app/services/ai_service.py | 6 ++++-- docker-compose.yml | 3 +++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/backend/app/config.py b/backend/app/config.py index d0d116d..12da851 100644 --- a/backend/app/config.py +++ b/backend/app/config.py @@ -114,6 +114,13 @@ class Settings(BaseSettings): # Dify API 请求超时(秒),在网络慢时可调大 dify_timeout: int = 30 + # v4.0 P0-6: Dify 双路径超时预算切分(修复 proxy 兜底不可达) + # 为什么:httpx 30s = wait_for 30s,native→proxy 串行最坏 60s, + # wait_for 必先触发,proxy 兜底数学上不可达。 + # 预算:native 12s + proxy 12s + 开销 < 30s,wait_for 保持为最后防线。 + dify_native_timeout: int = 12 # Dify 原生直连超时(秒) + dify_proxy_timeout: int = 12 # Dify 代理路径超时(秒) + # Dify 原生 API 配置(绕过 dify2openai 代理,直连 Dify /v1/chat-messages) # 为什么:dify2openai 代理存在 [object Object] 序列化 bug, # 直连 Dify 原生 API 可绕过此问题,且响应格式更简单(answer 字段直接返回内容) diff --git a/backend/app/services/ai_service.py b/backend/app/services/ai_service.py index e2334bd..7814b09 100644 --- a/backend/app/services/ai_service.py +++ b/backend/app/services/ai_service.py @@ -72,7 +72,8 @@ class AIService: """ if self._client is None or self._client.is_closed: self._client = httpx.AsyncClient( - timeout=httpx.Timeout(self.timeout), + # v4.0 P0-6: proxy 路径用独立超时(12s),避免与 native 串行叠加超 wait_for(30s) + timeout=httpx.Timeout(settings.dify_proxy_timeout), headers={ "Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json", @@ -89,7 +90,8 @@ class AIService: """ if self._native_client is None or self._native_client.is_closed: self._native_client = httpx.AsyncClient( - timeout=httpx.Timeout(self.timeout), + # v4.0 P0-6: native 路径用独立超时(12s),预算 12+12+开销 < wait_for(30s) + timeout=httpx.Timeout(settings.dify_native_timeout), headers={ "Authorization": f"Bearer {self.native_api_key}", "Content-Type": "application/json", diff --git a/docker-compose.yml b/docker-compose.yml index 2e79c5e..b0eceef 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -127,6 +127,9 @@ services: # Dify 原生直连(优先于 dify2openai 代理,修复 [object Object] bug) - DIFY_NATIVE_BASE_URL=${DIFY_NATIVE_BASE_URL:-} - DIFY_NATIVE_API_KEY=${DIFY_NATIVE_API_KEY:-} + # Dify 双路径超时预算切分(v4.0 P0-6,12+12 < wait_for 30s) + - DIFY_NATIVE_TIMEOUT=${DIFY_NATIVE_TIMEOUT:-12} + - DIFY_PROXY_TIMEOUT=${DIFY_PROXY_TIMEOUT:-12} # AI Wingman(留空禁用) - DIFY_WINGMAN_API_URL=${DIFY_WINGMAN_API_URL:-} - DIFY_WINGMAN_API_KEY=${DIFY_WINGMAN_API_KEY:-}