Python CLI สร้างเนื้อหาด้วย Gemini แบบทนทาน ไม่กลัว API ล่ม

สวัสดีครับ

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

ปัญหาคือ เวลาเราต้องสร้างคอนเทนต์เยอะๆ แบบพวกคำอธิบายสินค้า หรือหัวข้อบล็อก มันก็เหนื่อยเนอะ ถ้าจะมานั่งพิมพ์เองทุกวัน แล้วถ้า API ที่เราเรียกใช้มันเกิดคอขวด หรือมีปัญหาขึ้นมา ก็แย่เลยงานเราพังหมด

งั้นเรามาดูกันครับ ว่าจะทำยังไงให้งานพวกนี้มันง่ายขึ้น แล้วก็ปลอดภัยด้วย

1. เริ่มต้นสร้างเนื้อหาเบื้องต้นด้วย Gemini API

ก่อนอื่นเลย ต้องมี google-generativeai ติดตั้งก่อนนะครับ

pip install google-generativeai

จากนั้น ลองใช้ Gemini สร้างอะไรซักอย่างดูครับ ตัวอย่างนี้ผมจะให้มันช่วยคิดหัวข้อบทความง่ายๆ นะครับ

import google.generativeai as genai
import os

genai.configure(api_key=os.environ.get("GEMINI_API_KEY"))

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

def generate_simple_content(prompt):
    try:
        response = model.generate_content(prompt)
        return response.text
    except Exception as e:
        return f"เกิดข้อผิดพลาด: {e}"

if __name__ == "__main__":
    my_prompt = "ช่วยคิดหัวข้อบทความเกี่ยวกับเทคนิคการเขียนโค้ดที่รวดเร็วให้หน่อยครับ"
    content = generate_simple_content(my_prompt)
    print(f"หัวข้อที่ Gemini แนะนำ:
{content}")

อันนี้ก็ง่ายๆ นะครับ พอรันแล้วจะได้หัวข้อบทความมาให้เลย สะดวกดีใช่ไหมครับ

2. เสริมความทนทาน (Resilience) ให้กับการเรียก API

ทีนี้ ถ้า API มันล่ม หรือมีปัญหาชั่วคราว เราจะทำยังไงดีครับ ไม่ให้โปรแกรมเราพังไปเลยเนอะ เราก็ใช้เทคนิค Retry หรือลองใหม่นั่นแหละครับ ผมจะใช้ไลบรารี tenacity มาช่วยตรงนี้นะครับ

pip install tenacity

ดูตัวอย่างโค้ดนี้เลยครับ ผมจะเพิ่ม retry เข้าไปในการเรียก model.generate_content นะครับ

import google.generativeai as genai
import os
from tenacity import retry, wait_fixed, stop_after_attempt, before_log
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

genai.configure(api_key=os.environ.get("GEMINI_API_KEY"))

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

@retry(
    wait=wait_fixed(2), # รอ 2 วินาทีก่อนลองใหม่
    stop=stop_after_attempt(3), # ลองใหม่ได้มากสุด 3 ครั้ง
    before_sleep=before_log(logger, logging.INFO) # ก่อนลองใหม่จะ log บอกหน่อย
)
def generate_resilient_content(prompt):
    logger.info(f"กำลังเรียก Gemini API ด้วย prompt: {prompt}")
    response = model.generate_content(prompt)
    return response.text

if __name__ == "__main__":
    my_prompt = "ช่วยเขียนคำอธิบายสั้นๆ สำหรับโปรแกรมช่วยจัดการไฟล์ใน Python ที่รวดเร็วและปลอดภัยครับ"
    try:
        content = generate_resilient_content(my_prompt)
        print(f"คำอธิบายที่ได้จาก Gemini:
{content}")
    except Exception as e:
        print(f"เกิดข้อผิดพลาดหลังจากลองหลายครั้ง: {e}")

เห็นไหมครับ ตรง @retry เนี่ยแหละครับที่ช่วยให้เราไม่ต้องมานั่งเขียน try-except วนลูปเอง ช่วยได้เยอะเลยนะครับ

3. จัดเก็บเนื้อหาที่สร้างได้ลงไฟล์

พอได้เนื้อหาที่ต้องการแล้ว เราก็อยากจะ Save ลงไฟล์ไว้ใช้ต่อใช่ไหมครับ อันนี้ก็ง่ายๆ เลย ใช้ open() ใน Python นี่แหละครับ

import google.generativeai as genai
import os
from tenacity import retry, wait_fixed, stop_after_attempt, before_log
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

genai.configure(api_key=os.environ.get("GEMINI_API_KEY"))

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

@retry(
    wait=wait_fixed(2),
    stop=stop_after_attempt(3),
    before_sleep=before_log(logger, logging.INFO)
)
def generate_and_save_content(prompt, filename):
    logger.info(f"กำลังเรียก Gemini API เพื่อสร้างเนื้อหาสำหรับไฟล์: {filename}")
    response = model.generate_content(prompt)
    generated_text = response.text

    with open(filename, 'w', encoding='utf-8') as f:
        f.write(generated_text)
    logger.info(f"บันทึกเนื้อหาลงไฟล์ {filename} เรียบร้อยแล้วครับ")
    return generated_text

if __name__ == "__main__":
    my_prompt = "เขียนรีวิวสั้นๆ เกี่ยวกับประโยชน์ของ Cloud Computing สำหรับ SMEs ครับ"
    output_filename = "cloud_smes_review.txt"
    try:
        content = generate_and_save_content(my_prompt, output_filename)
        print(f"เนื้อหาถูกบันทึกลง {output_filename} แล้วครับ:
{content}")
    except Exception as e:
        print(f"เกิดข้อผิดพลาดในการสร้างและบันทึกเนื้อหา: {e}")

จากตัวอย่างนี้ เนื้อหาก็จะถูก Save ลงไฟล์ cloud_smes_review.txt ให้นะครับ สะดวกมากๆ เลยใช่ไหมครับ

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

ลองเอาไปปรับใช้กันดูนะครับ


Read more

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

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

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

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

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

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

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

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

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

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

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

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

By ทีมงาน devdog