สร้าง 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

ไอลีน กู: ตำนานนักสกีฟรีสไตล์ผู้พลิกโฉมวงการและความหมายของชัยชนะ

ไอลีน กู: ตำนานนักสกีฟรีสไตล์ผู้พลิกโฉมวงการและความหมายของชัยชนะ

เจาะลึกเรื่องราวของ Eileen Gu นักสกีฟรีสไตล์ผู้สร้างประวัติศาสตร์ในโอลิมปิก 2026 สถิติที่ไม่เคยมีมาก่อน ประเด็นถกเถียง และความแข็งแกร่งส่วนตัวที่ทำให้เธอก้าวสู่ระดับโลก

By ทีมงาน devdog
วันพระ: คู่มือฉบับสมบูรณ์สำหรับพุทธศาสนิกชนและผู้สนใจยุคใหม่

วันพระ: คู่มือฉบับสมบูรณ์สำหรับพุทธศาสนิกชนและผู้สนใจยุคใหม่

เจาะลึกวันพระและความสำคัญของวันมาฆบูชา 2569 ทั้งวันหยุดราชการ ธนาคาร กิจกรรมเวียนเทียนต้นไม้ และผลกระทบต่อบริการขนส่ง เตรียมตัววางแผนทำบุญและพักผ่อน

By ทีมงาน devdog
ถอดรหัสรักแท้: "บังมัดคลองตันต้นข้าว" เรื่องราวที่สะท้อนการให้อภัยและการเริ่มต้นใหม่

ถอดรหัสรักแท้: "บังมัดคลองตันต้นข้าว" เรื่องราวที่สะท้อนการให้อภัยและการเริ่มต้นใหม่

เจาะลึกงานวิวาห์ "บังมัดคลองตัน" กับ "ต้นข้าว มิสแกรนด์" พร้อมเหตุผลจากใจเจ้าสาวที่เลือกความรักเหนือกาลเวลาและคำวิจารณ์ สู่การเริ่มต้นชีวิตคู่ที่สะท้อนการให้อภัย

By ทีมงาน devdog
ไฮไลท์บอลไทยลีก 2: มหาสารคาม เอสบีที เอฟซี กับฟอร์มร้อนแรงสู่เส้นทางเพลย์ออฟ

ไฮไลท์บอลไทยลีก 2: มหาสารคาม เอสบีที เอฟซี กับฟอร์มร้อนแรงสู่เส้นทางเพลย์ออฟ

เจาะลึกไฮไลท์บอลไทยลีก 2 ของมหาสารคาม เอสบีที เอฟซี กับฟอร์มร้อนแรง ชัยชนะสำคัญจาก ชิตชนก และบทบาทโค้ชดุสิต สู่เส้นทางเพลย์ออฟที่น่าจับตา!

By ทีมงาน devdog