בעיה | סקריפט שלא מתחבר לג'מיני
-
בניתי באמצעות בינה מלאכותית סקריפט חמוד לתמלול קבצים. הסקריפט עובד, עד שהוא מגיע לחיבור עם ג'מיני ושם הוא נתקע ולא מתמלל.
זו השגיאה שמופיעה בשורת הפקודה:פניתי לנטפרי, והם ביקשו תחילה להתקין תעודת אבטחה לפייתון, וכשהבעיה המשיכה, כתבו כך: זה לא סומך על התעודה בנטפרי,
הפיתרון הוא לפנות ישירות ל-REST API של Gemini.ניסיתי גם את זה , וזה לא עובד.
מה אפשר לעשות?
-
בניתי באמצעות בינה מלאכותית סקריפט חמוד לתמלול קבצים. הסקריפט עובד, עד שהוא מגיע לחיבור עם ג'מיני ושם הוא נתקע ולא מתמלל.
זו השגיאה שמופיעה בשורת הפקודה:פניתי לנטפרי, והם ביקשו תחילה להתקין תעודת אבטחה לפייתון, וכשהבעיה המשיכה, כתבו כך: זה לא סומך על התעודה בנטפרי,
הפיתרון הוא לפנות ישירות ל-REST API של Gemini.ניסיתי גם את זה , וזה לא עובד.
מה אפשר לעשות?
-
זו הספרייה: "google-generativeai"
0.8.5וזו ההודעת שגיאה:
✗ Transcription error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)@להלהלנד
דבר ראשון אני מקווה שאתה מודע לכך שזו ספריה ישנה שכבר הוצאה משימוש.דבר שני אני חושב שאפשר להגדיר שם SSL מותאם אישית, אבל זה קצת מסובך להסביר באויר, תוכל אולי להעלות את קטע הקוד שבו אתה מגדיר את המשנים של הגישה לגוגל? משהו כמו זה נניח לדוגמה:
client = genai.Client( api_key='GEMINI_API_KEY', http_options=types.HttpOptions(api_version='v1alpha') )
-
@להלהלנד
הצורה של הקוד שונה ממה שחשבתי.בעיקרון עדיף לך לעבור לגירסה החדשה של הסיפריה, לא בטוח שאיתה לא יהיו בעיות, אבל חבל אולי לעבוד קשה על משהו שעומדים להפסיק לו את התמיכה.
אם בכל זאת אתה מעוניין כנראה שהבעיה היא רק בהעלאת קבצים, כיון שלפי מחקר קטן שעשיתי זה נראה שלבקשות רשת רגילות הספריה משתמשת בREQUESTS שזו הספריה הרגילה של בקשות רשת בפייתון ואם התקנת בה תעודת אבטחה זה היה אמור לעבוד, אבל להעלאת קבצים הספריה משתמשת בhttplib2 ובשביל להגדיר לספריה הזו לסמוך על התעודות אבטחה של המשתמש כנראה צריך לפנות אליה בצורה שנקראת monkey-patching שזה אומר עקיפה של פונקציות בספריות המיובאות.
ביקשתי מAI לכתוב קוד לדוגמה לעקיפה של הפונקציה init של הספריה כדי להוסיף שם ארגומנט של התעודת אבטחה, לא מתחייב שזה עובד כמו שהוא, אבל זה הרעיון, ותוכל לבקש מAI שישפר לך את זה אם יהיו באגים.
שים לב שאת כל העקיפה צריך לעשות עוד לפני הייבוא של google-generativeai
import httplib2 import functools import os # ============== MONKEY PATCHING SECTION - START ============== # שים לב: יש להפעיל קוד זה לפני כל שימוש בספריית google.generativeai # 1. הגדר את הנתיב המלא לקובץ תעודות האבטחה שלך (קובץ .pem או .crt) # ודא שהמשתמש שמריץ את התהליך יכול לקרוא את הקובץ הזה. # מומלץ להשתמש בנתיב אבסולוטי כדי למנוע בעיות. CUSTOM_CA_FILE = "/path/to/your/custom_ca_bundle.pem" # בדוק אם הקובץ אכן קיים בנתיב שצוין if not os.path.exists(CUSTOM_CA_FILE): # אם הקובץ לא קיים, אפשר להחליט מה לעשות: # 1. לעורר שגיאה ולעצור את ריצת התוכנית (מומלץ) raise FileNotFoundError(f"קובץ תעודות האבטחה לא נמצא בנתיב: {CUSTOM_CA_FILE}") # 2. להדפיס אזהרה ולהמשיך בלי הטלאי (פחות מומלץ) # print(f"Warning: CA bundle file not found at {CUSTOM_CA_FILE}. SSL verification might fail.") print(f"--- Monkey-patching httplib2.Http to use CA file: {CUSTOM_CA_FILE} ---") # 2. שמור הפניה לפונקציית ה-__init__ המקורית של httplib2.Http original_init = httplib2.Http.__init__ # 3. השתמש ב-functools.wraps כדי שהפונקציה החדשה תשמור על המאפיינים של המקורית @functools.wraps(original_init) def new_init_with_custom_ca(self, *args, **kwargs): """ פונקציית __init__ חדשה שמחליפה את המקורית. היא בודקת אם הפרמטר 'ca_certs' כבר סופק. אם לא, היא מוסיפה את הנתיב לקובץ תעודות האבטחה המותאם אישית שלנו. """ # אם ca_certs לא נשלח באופן מפורש לקונסטרקטור, הוסף את שלנו if 'ca_certs' not in kwargs: kwargs['ca_certs'] = CUSTOM_CA_FILE # בסיום, קרא לפונקציית ה-__init__ המקורית עם הפרמטרים החדשים original_init(self, *args, **kwargs) # 4. החלף את הפונקציה המקורית בפונקציה החדשה שלנו - זהו רגע ה-Monkey Patch! httplib2.Http.__init__ = new_init_with_custom_ca print("--- Patching complete. ---") # =============== MONKEY PATCHING SECTION - END =============== # כעת ניתן לייבא ולהשתמש בספרייה כרגיל import google.generativeai as genai # הגדר את מפתח ה-API שלך # genai.configure(api_key="YOUR_API_KEY") # המשך הקוד שלך... # כל קריאת רשת שתבוצע על ידי הספרייה מעתה ואילך # תשתמש באופן אוטומטי בתעודות האבטחה שהגדרת. # לדוגמה: # model = genai.GenerativeModel('gemini-pro') # response = model.generate_content("Hello, world!") # print(response.text)