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

HUAWEI Pura 90 Pro Max: เผยทีเซอร์กล้องเพอริสโคป 200MP ซูม 20 เท่า ก่อนเปิดตัว 20 เมษายน

HUAWEI Pura 90 Pro Max: เผยทีเซอร์กล้องเพอริสโคป 200MP ซูม 20 เท่า ก่อนเปิดตัว 20 เมษายน

HUAWEI Pura 90 Pro Max ปล่อยทีเซอร์ฟีเจอร์กล้องเทพ! เตรียมพบกับกล้องเพอริสโคป 200MP ซูม 20 เท่า และ AI Photo Pose ในงานเปิดตัว 20 เมษายนนี้ ห้ามพลาด!

By ทีมงาน devdog
เจาะลึกกลยุทธ์ LiveScore: ถอนทัพ, เติบโต, และปรับตัวในตลาดเดิมพันระดับโลก

เจาะลึกกลยุทธ์ LiveScore: ถอนทัพ, เติบโต, และปรับตัวในตลาดเดิมพันระดับโลก

LiveScore Group ปรับกลยุทธ์ธุรกิจ ถอนทัพจากเนเธอร์แลนด์ สู่การเติบโตใน UK พร้อมรับมือภาษีใหม่ และขยายสู่แอฟริกาใต้ อนาคตธุรกิจ Livescore เป็นอย่างไร?

By ทีมงาน devdog
บทบาทของเครื่องบินขับไล่ F-Series ในสมรภูมิกลางอากาศ: การปิดล้อม, กู้ภัย, และการอัปเกรด

บทบาทของเครื่องบินขับไล่ F-Series ในสมรภูมิกลางอากาศ: การปิดล้อม, กู้ภัย, และการอัปเกรด

เจาะลึกปฏิบัติการปิดล้อมอิหร่าน การช่วยเหลือ F-15E และการอัปเกรด F-35 ของอิสราเอล ท่ามกลางความตึงเครียดในตะวันออกกลาง.

By ทีมงาน devdog
งบประมาณปี 2570: ยุทธศาสตร์ใหม่เพื่อคนไทย รับมือเศรษฐกิจผันผวน

งบประมาณปี 2570: ยุทธศาสตร์ใหม่เพื่อคนไทย รับมือเศรษฐกิจผันผวน

เจาะลึกงบประมาณปี 2570 รัฐบาลมุ่งแก้ปัญหาประชาชน ใช้แนวคิด Zero-Based Budgeting พร้อมไทม์ไลน์และ 9 แผนงานบูรณาการเพื่อขับเคลื่อนเศรษฐกิจอย่างยั่งยืน.

By ทีมงาน devdog