สร้าง CLI คุย Gemini API ง่ายๆ พร้อมรับมือความไม่แน่นอน

สวัสดีครับ วันนี้ผม cii3.net นะครับ มาลองสร้าง CLI ง่ายๆ เพื่อคุยกับ Google Gemini API กันครับ

ปกติเราอาจจะใช้ผ่านเว็บ หรือ Notebook บางทีเราก็อยากแค่พิมพ์คำสั่งใน Terminal แล้วได้ผลเลยนะครับ

เราจะใช้ Python แล้วก็ไลบรารี google-generativeai นะครับ

ขั้นตอนแรกเลยนะครับ เตรียม API Key กันก่อน

ไปที่ Google AI Studio หรือ Google Cloud Console เพื่อสร้าง API Key นะครับ จากนั้นก็เอามาเก็บไว้ใน Environment Variable เช่น `GEMINI_API_KEY` แบบนี้นะครับ เพื่อความปลอดภัย
<pre><code>export GEMINI_API_KEY='YOUR_API_KEY_ตรงนี้'
</code></pre>

ถ้าเพื่อนๆ ใช้ Windows ก็ตั้งใน System Properties ได้เลยนะครับ

จากนั้น เรามาติดตั้งไลบรารีกันนะครับ

pip install google-generativeai
    

ตัวอย่างแรก ลองเรียก Gemini ง่ายๆ ก่อนนะครับ

ไฟล์ `simple_gemini.py`:
    import os
    import google.generativeai as genai

    # ต้องมี API Key ใน environment variable นะครับ
    api_key = os.getenv("GEMINI_API_KEY")
    if not api_key:
        print("ไม่พบ GEMINI_API_KEY ใน environment variable ครับ")
        exit(1)

    genai.configure(api_key=api_key)

    model = genai.GenerativeModel('gemini-pro')

    prompt = "แนะนำอาหารเย็นที่ทำง่ายๆ สัก 3 อย่างหน่อยครับ"
    print(f"กำลังถาม Gemini: {prompt}")

    try:
        response = model.generate_content(prompt)
        print("\
คำแนะนำจาก Gemini:")
        print(response.text)
    except Exception as e:
        print(f"เกิดข้อผิดพลาดในการเรียก API ครับ: {e}")
ลองรันดูนะครับ
<pre><code>python simple_gemini.py
</code></pre>

แล้วก็มาทำเป็น CLI แบบรับข้อความจาก Terminal กันนะครับ

เราจะใช้ `argparse` มาช่วยรับค่าจาก Command Line นะครับ ไฟล์ `gemini_cli.py`:
    import os
    import argparse
    import google.generativeai as genai

    def main():
        parser = argparse.ArgumentParser(description="คุยกับ Gemini API ผ่าน CLI ง่ายๆ ครับ")
        parser.add_argument("prompt", type=str, help="ข้อความที่คุณต้องการถาม Gemini")
        args = parser.parse_args()

        api_key = os.getenv("GEMINI_API_KEY")
        if not api_key:
            print("ไม่พบ GEMINI_API_KEY ใน environment variable ครับ")
            exit(1)

        genai.configure(api_key=api_key)
        model = genai.GenerativeModel('gemini-pro')

        print(f"กำลังถาม Gemini: {args.prompt}")

        try:
            response = model.generate_content(args.prompt)
            print("\
คำแนะนำจาก Gemini:")
            print(response.text)
        except Exception as e:
            print(f"เกิดข้อผิดพลาดในการเรียก API ครับ: {e}")

    if __name__ == "__main__":
        main()
วิธีการรันนะครับ
<pre><code>python gemini_cli.py "เขียนโค้ด Python หาเลขคู่ 1-100 ให้หน่อย"
</code></pre>

เพิ่มความแข็งแกร่ง (Resilience) ให้กับ CLI ของเรานะครับ

บางที API อาจจะมีปัญหาชั่วคราว หรือรันไม่ผ่าน เราควรจะเพิ่มการลองใหม่ (Retry) เข้าไปนะครับ แบบง่ายๆ เลยนะ

เราจะปรับส่วน `try-except` ใน `gemini_cli.py` ให้มี `retry` เข้าไปแบบนี้ครับ
    # ... (ส่วนบนเหมือนเดิม)

    MAX_RETRIES = 3 # ลองใหม่ 3 ครั้งนะครับ
    for attempt in range(MAX_RETRIES):
        try:
            print(f"ลองเรียก Gemini (ครั้งที่ {attempt + 1}/{MAX_RETRIES})...")
            response = model.generate_content(args.prompt)
            print("\
คำแนะนำจาก Gemini:")
            print(response.text)
            break # ถ้าสำเร็จก็ออกจาก loop
        except Exception as e:
            print(f"เกิดข้อผิดพลาดในการเรียก API (ครั้งที่ {attempt + 1}): {e}")
            if attempt < MAX_RETRIES - 1:
                import time
                time.sleep(2) # รอ 2 วินาทีแล้วลองใหม่นะครับ
            else:
                print("ลองเรียกหลายครั้งแล้วยังไม่สำเร็จครับ กรุณาลองใหม่อีกครั้ง")

    # ... (ส่วนล่างเหมือนเดิม)

สรุปแล้วก็ เพื่อนๆ ก็ลองเอาไปปรับใช้กับงานของเพื่อนๆ ได้เลยนะครับ ไม่ว่าจะเป็นการสร้างเครื่องมือช่วยทำงาน หรือเอาไปต่อยอดกับโปรเจกต์อื่นๆ ครับ

แหล่งที่มานะครับ: - Google AI Studio - Python google-generativeai Library

Read more

รมว.พลังงาน ปรับส่วนต่าง E20 ห่างโซฮอล์ 95 ลิตรละ 3 บาท กระตุ้นคนไทยใช้พลังงานสะอาด พร้อมขอความร่วมมือประหยัดไฟ

รมว.พลังงาน ปรับส่วนต่าง E20 ห่างโซฮอล์ 95 ลิตรละ 3 บาท กระตุ้นคนไทยใช้พลังงานสะอาด พร้อมขอความร่วมมือประหยัดไฟ

รมว.พลังงาน ประกาศปรับส่วนต่าง E20 ห่างโซฮอล์ 95 เป็น 3 บาท กระตุ้นใช้เชื้อเพลิงชีวภาพ พร้อมรณรงค์คนไทยประหยัดพลังงาน สร้างความมั่นคงพลังงานของชาติ

By ทีมงาน devdog
DMC: จากปรากฏการณ์ดนตรีระดับโลกสู่แสงธรรมนำทางชีวิต

DMC: จากปรากฏการณ์ดนตรีระดับโลกสู่แสงธรรมนำทางชีวิต

สำรวจสองความหมายสำคัญของ DMC! จาก Run-DMC ผู้บุกเบิกการร่วมงานฮิปฮอป-ร็อกที่พลิกโฉมวงการ สู่ dmc.tv ช่องธรรมะนำทางจิตใจเพื่อสันติสุขภายใน.

By ทีมงาน devdog
PM 2.5 กลับมาคลุ้ง! เปิด 12 อันดับค่าฝุ่นสูงสุดในกรุงเทพมหานคร

PM 2.5 กลับมาคลุ้ง! เปิด 12 อันดับค่าฝุ่นสูงสุดในกรุงเทพมหานคร

อัปเดตสถานการณ์ PM 2.5 ในกรุงเทพฯ ประจำวันที่ 10 มี.ค. 2569 พร้อมเปิด 12 เขตค่าฝุ่นสูงสุด และคำแนะนำป้องกันผลกระทบต่อสุขภาพ

By ทีมงาน devdog
One Piece Netflix ภาค 2: การผจญภัยสู่แกรนด์ไลน์ พร้อมกิจกรรมสุดอลังการที่สวนลุมฯ!

One Piece Netflix ภาค 2: การผจญภัยสู่แกรนด์ไลน์ พร้อมกิจกรรมสุดอลังการที่สวนลุมฯ!

One Piece Netflix ซีซัน 2 "มุ่งหน้าสู่แกรนด์ไลน์" เตรียมลงจอ 10 มี.ค. 2569 พร้อมกิจกรรม "GRAND LINE IN THAILAND" ที่สวนลุมพินี ห้ามพลาด!

By ทีมงาน devdog