From 6c72034b7507e1d21d5e57a46e5e87da26e8e9f1 Mon Sep 17 00:00:00 2001 From: SXP-Simon Date: Tue, 16 Sep 2025 11:41:11 +0800 Subject: [PATCH] =?UTF-8?q?[fix]=20(llm=5Fanalyer)=20=E7=BA=A0=E6=AD=A3?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E6=AD=A3=E7=A1=AE=E8=8E=B7=E5=8F=96=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E4=BD=BF=E7=94=A8=E7=9A=84=E6=A8=A1=E5=9E=8B=E6=83=85?= =?UTF-8?q?=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/analysis/llm_analyzer.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/analysis/llm_analyzer.py b/src/analysis/llm_analyzer.py index 8e17742..a3f9cf7 100644 --- a/src/analysis/llm_analyzer.py +++ b/src/analysis/llm_analyzer.py @@ -19,7 +19,7 @@ class LLMAnalyzer: self.context = context self.config_manager = config_manager - async def _call_provider_with_retry(self, provider, prompt: str, max_tokens: int, temperature: float): + async def _call_provider_with_retry(self, provider, prompt: str, max_tokens: int, temperature: float, umo: str = None): """调用LLM提供者,带超时、重试与退避。支持自定义服务商。""" timeout = self.config_manager.get_llm_timeout() retries = self.config_manager.get_llm_retries() @@ -80,9 +80,28 @@ class LLMAnalyzer: else: # 确保使用当前指定的模型 if provider is None: - provider = self.context.get_using_provider() + provider = self.context.get_using_provider(umo=umo) + + # 安全地获取 provider ID + provider_id = 'unknown' + if provider: + try: + meta = provider.meta() + provider_id = meta.id + except Exception as e: + logger.debug(f"获取提供商ID失败: {e}") + + logger.info(f"获取到的 provider ID: {provider_id}") + + # 如果获取失败,尝试使用全局默认提供商或者回退方案 + if not provider or provider_id == 'unknown': + logger.warning(f"获取的提供商不正确 (Provider ID: {provider_id})") + logger.info(f"使用LLM provider: {provider}") + if not provider: + logger.error("provider 为空,无法调用 text_chat,直接返回 None") + return None coro = provider.text_chat(prompt=prompt, max_tokens=max_tokens, temperature=temperature) return await asyncio.wait_for(coro, timeout=timeout) except asyncio.TimeoutError as e: