From b02cd969b80a29c94ff2233702ace43fdbc8a290 Mon Sep 17 00:00:00 2001 From: starmen1265 Date: Fri, 13 Feb 2026 13:17:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(kb-deep-analyzer):=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=B6=85=E6=97=B6=E6=97=B6=E9=97=B4=E5=92=8C=E9=87=8D=E8=AF=95?= =?UTF-8?q?=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - timeout 从 30s 增加到 120s - 添加重试逻辑,最多重试 3 次 - 避免因网络波动导致的 token 浪费 --- skills/kb-deep-analyzer/deep_analyzer.py | 40 ++++++++++++++---------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/skills/kb-deep-analyzer/deep_analyzer.py b/skills/kb-deep-analyzer/deep_analyzer.py index a3b4339..926b54a 100644 --- a/skills/kb-deep-analyzer/deep_analyzer.py +++ b/skills/kb-deep-analyzer/deep_analyzer.py @@ -59,24 +59,32 @@ class SimpleAIClient: self.provider = provider or os.environ.get("AI_PROVIDER", "") self.model = model or os.environ.get("AI_MODEL", "gpt-4") self.base_url = base_url or os.environ.get("AI_BASE_URL", "") + self.max_retries = 3 # 最大重试次数 def generate(self, prompt: str, max_tokens: int = 1000) -> str: - """生成文本""" + """生成文本,支持重试""" if not self.api_key: raise ValueError("AI_API_KEY 未设置,请配置环境变量") - try: - if self.provider == "openai": - return self._call_openai(prompt, max_tokens) - elif self.provider == "zhipu": - return self._call_zhipu(prompt, max_tokens) - elif self.provider == "minimax": - return self._call_minimax(prompt, max_tokens) - else: - raise ValueError(f"不支持的 AI 提供商: {self.provider}") - except Exception as e: - print(f"[AI Client] 调用失败: {e}") - raise + last_error = None + for attempt in range(self.max_retries): + try: + if self.provider == "openai": + return self._call_openai(prompt, max_tokens) + elif self.provider == "zhipu": + return self._call_zhipu(prompt, max_tokens) + elif self.provider == "minimax": + return self._call_minimax(prompt, max_tokens) + else: + raise ValueError(f"不支持的 AI 提供商: {self.provider}") + except Exception as e: + last_error = e + if attempt < self.max_retries - 1: + print(f"[AI Client] 第 {attempt + 1} 次调用失败,{self.max_retries - attempt - 1} 次重试剩余: {e}") + continue + else: + print(f"[AI Client] 调用失败,已重试 {self.max_retries} 次: {e}") + raise def generate_json(self, prompt: str) -> Dict[str, Any]: """生成 JSON 格式响应""" @@ -103,7 +111,7 @@ class SimpleAIClient: "messages": [{"role": "user", "content": prompt}] } - response = requests.post(url, headers=headers, json=payload, timeout=30) + response = requests.post(url, headers=headers, json=payload, timeout=120) response.raise_for_status() return response.json()['choices'][0]['message']['content'] @@ -120,7 +128,7 @@ class SimpleAIClient: "max_tokens": max_tokens } - response = requests.post(url, headers=headers, json=payload, timeout=30) + response = requests.post(url, headers=headers, json=payload, timeout=120) response.raise_for_status() data = response.json() @@ -181,7 +189,7 @@ class SimpleAIClient: "messages": [{"role": "user", "content": prompt}] } - response = requests.post(url, headers=headers, json=payload, timeout=30) + response = requests.post(url, headers=headers, json=payload, timeout=120) response.raise_for_status() data = response.json() for item in data.get('content', []):