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 ก็ทำให้เรามั่นใจได้ว่างานเราจะไม่ล่มกลางคันง่ายๆ นะครับ
ลองเอาไปปรับใช้กันดูนะครับ