From a4a39eac8d403d8ba6e4feebbd492ca03f2cd848 Mon Sep 17 00:00:00 2001 From: Arcelibs Date: Thu, 28 Dec 2023 16:05:58 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=B2=E6=AD=A2=E9=81=9E=E8=BF=B4=E8=AA=BF?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 從您提供的 save_debug_data 函數輸出和 call_gemini_api 函數的實現來看,原因可能是在處理 Gemini API 回應時的邏輯有些問題。根據您提供的信息,當 Gemini API 回應包含 blockReason: SAFETY 時,您的代碼應該直接返回 DeepL API 的翻譯結果,而不進行進一步的 Gemini API 調用。 問題可能出在 call_gemini_api 函數中對 blockReason 的處理。當 blockReason: SAFETY 出現時,您的代碼確實返回了 DeepL 的翻譯結果,但這可能只是在第一次呼叫 call_gemini_api 時有效。如果在處理 blockReason: SAFETY 時再次調用了 call_gemini_api(例如,透過遞迴調用),那麼它可能又一次試圖從 Gemini API 獲取翻譯結果,而此時仍可能遇到相同的 blockReason。 --- Local-Windows/main.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Local-Windows/main.py b/Local-Windows/main.py index efdb86f..dc59156 100644 --- a/Local-Windows/main.py +++ b/Local-Windows/main.py @@ -89,15 +89,17 @@ def call_gemini_api(input_text): if response.status_code == 200: if 'blockReason' in response_data and response_data['blockReason'] == 'SAFETY': # 如果 Gemini API 返回 blockReason 为 SAFETY,直接使用 DeepL 翻译结果 - return simplified_chinese_text + # 防止遞迴調用 + if not is_retry: + return call_gemini_api(simplified_chinese_text, is_retry=True) + else: + return simplified_chinese_text elif 'candidates' in response_data: + # 正常处理逻辑 return response_data['candidates'][0]['content']['parts'][0]['text'] else: print("KeyError: 'candidates' not found in response.") - # 保存完整回應 - save_debug_data("gemini_response", response_data) - # 可以选择直接使用 DeepL API 的翻译结果 - return simplified_chinese_text + return None else: print(f"错误: {response.status_code}") return None