From bdc84ec75c268146dedd5920eefbbcaf0f355569 Mon Sep 17 00:00:00 2001 From: starmen1265 Date: Fri, 13 Feb 2026 13:58:46 +0800 Subject: [PATCH] =?UTF-8?q?fix(kb-deep-analyzer):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F=E4=BC=A0=E9=80=92=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - generate() 每次调用时重新读取环境变量 - AI 调用方法接受 api_key, model, base_url 参数 - 解决 exec 工具中环境变量未传递的问题 --- skills/kb-deep-analyzer/deep_analyzer.py | 31 +++++++++++++++--------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/skills/kb-deep-analyzer/deep_analyzer.py b/skills/kb-deep-analyzer/deep_analyzer.py index 926b54a..995e285 100644 --- a/skills/kb-deep-analyzer/deep_analyzer.py +++ b/skills/kb-deep-analyzer/deep_analyzer.py @@ -63,20 +63,26 @@ class SimpleAIClient: def generate(self, prompt: str, max_tokens: int = 1000) -> str: """生成文本,支持重试""" - if not self.api_key: + # 每次调用时重新读取环境变量,解决 exec 传递问题 + api_key = os.environ.get("AI_API_KEY", self.api_key) + provider = os.environ.get("AI_PROVIDER", self.provider) + model = os.environ.get("AI_MODEL", self.model) + base_url = os.environ.get("AI_BASE_URL", self.base_url) + + if not api_key: raise ValueError("AI_API_KEY 未设置,请配置环境变量") 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) + if provider == "openai": + return self._call_openai(prompt, max_tokens, api_key, model, base_url) + elif provider == "zhipu": + return self._call_zhipu(prompt, max_tokens, api_key, model, base_url) + elif provider == "minimax": + return self._call_minimax(prompt, max_tokens, api_key, model, base_url) else: - raise ValueError(f"不支持的 AI 提供商: {self.provider}") + raise ValueError(f"不支持的 AI 提供商: {provider}") except Exception as e: last_error = e if attempt < self.max_retries - 1: @@ -95,7 +101,7 @@ class SimpleAIClient: # 尝试从文本中提取 JSON return self._parse_json_from_text(response) - def _call_openai(self, prompt: str, max_tokens: int) -> str: + def _call_openai(self, prompt: str, max_tokens: int, api_key: str = None, model: str = None, base_url: str = None) -> str: """调用 OpenAI API""" import requests url = f"{self.base_url}/chat/completions" if self.base_url else "https://api.openai.com/v1/chat/completions" @@ -113,9 +119,10 @@ class SimpleAIClient: response = requests.post(url, headers=headers, json=payload, timeout=120) response.raise_for_status() + response.raise_for_status() return response.json()['choices'][0]['message']['content'] - def _call_zhipu(self, prompt: str, max_tokens: int) -> str: + def _call_zhipu(self, prompt: str, max_tokens: int, api_key: str = None, model: str = None, base_url: str = None) -> str: """调用智谱 AI API - 返回 reasoning_content""" import requests base_url = self.base_url or "https://open.bigmodel.cn/api/coding/paas/v4" @@ -130,6 +137,7 @@ class SimpleAIClient: response = requests.post(url, headers=headers, json=payload, timeout=120) response.raise_for_status() + response.raise_for_status() data = response.json() message = data.get('choices', [{}])[0].get('message', {}) @@ -173,7 +181,7 @@ class SimpleAIClient: return {'raw_response': text} - def _call_minimax(self, prompt: str, max_tokens: int) -> str: + def _call_minimax(self, prompt: str, max_tokens: int, api_key: str = None, model: str = None, base_url: str = None) -> str: """调用 MiniMax API""" import requests url = self.base_url or "https://api.minimaxi.com/anthropic/v1/messages" @@ -191,6 +199,7 @@ class SimpleAIClient: response = requests.post(url, headers=headers, json=payload, timeout=120) response.raise_for_status() + response.raise_for_status() data = response.json() for item in data.get('content', []): if item.get('type') == 'text':