Programming
น้องๆ หลายคนอาจจะเคยได้ยินคำว่า ChatGPT API กันมาบ้างแล้ว แต่เอ๊ะ! มันคืออะไร แล้วทำไมพี่บอมถึงบอกว่ามันสำคัญ? สมัยพี่ทำร้านเน็ต SiamCafe เนี่ย การมีระบบตอบคำถามลูกค้าแบบอัตโนมัติมันคือฝันเลยนะ เพราะบางทีตอบคำถามเดิมๆ ซ้ำๆ จนเบื่อ (ฮา) ChatGPT API นี่แหละคือตัวช่วยให้เราสร้างระบบตอบคำถามฉลาดๆ แบบนั้นได้
ChatGPT API คือช่องทางที่เราสามารถเชื่อมต่อโปรแกรมของเรา (ไม่ว่าจะเป็นเว็บไซต์ แอปพลิเคชัน หรืออะไรก็ตาม) เข้ากับโมเดลภาษาขนาดใหญ่ของ OpenAI อย่าง ChatGPT ได้โดยตรง พูดง่ายๆ คือเราสามารถเอากึ๋นของ ChatGPT มาใส่ในโปรแกรมของเราได้เลย
แล้วทำไมมันถึงสำคัญ? ลองนึกภาพว่าเรามีเว็บไซต์ขายของ แล้วลูกค้าถามคำถามเดิมๆ ซ้ำๆ เช่น "สินค้าชิ้นนี้มีสีอะไรบ้าง?" หรือ "ส่งของนานไหม?" แทนที่จะต้องมีคนมานั่งตอบตลอด 24 ชั่วโมง เราสามารถใช้ ChatGPT API มาสร้างระบบตอบคำถามอัตโนมัติได้เลย ประหยัดเวลา ประหยัดแรงงาน แถมยังช่วยเพิ่มประสบการณ์ที่ดีให้กับลูกค้าอีกด้วย
API Key เปรียบเสมือนกุญแจที่เราใช้ไขเข้าไปใช้งาน ChatGPT API ของ OpenAI สมัยก่อนตอนพี่ทำร้านเกม ถ้าไม่มีคีย์ ก็เข้าเล่นเกมไม่ได้ใช่มั้ย? อันนี้ก็เหมือนกัน ถ้าไม่มี API Key เราก็ไม่สามารถเรียกใช้งาน ChatGPT API ได้
วิธีการขอ API Key ก็ไม่ยาก แค่เข้าไปสมัครสมาชิกที่เว็บไซต์ของ OpenAI แล้วก็สร้าง API Key ขึ้นมา แต่ต้องระวังนะ API Key นี่สำคัญมาก ห้ามเปิดเผยให้ใครรู้เด็ดขาด ไม่งั้นคนอื่นจะแอบเอาไปใช้ แล้วเราอาจจะโดนเรียกเก็บเงินบานตะไทได้
HTTP Request คือวิธีการที่โปรแกรมของเราใช้ในการสื่อสารกับ ChatGPT API ลองนึกภาพว่าเราเป็นลูกค้าที่สั่งอาหารในร้านอาหาร HTTP Request ก็คือใบสั่งอาหารที่เราเขียนแล้วส่งให้พนักงานเสิร์ฟ
HTTP Request จะประกอบไปด้วยข้อมูลหลายอย่าง เช่น URL ของ API ที่เราต้องการเรียกใช้ (เหมือนชื่อเมนูอาหารที่เราสั่ง) และข้อมูลที่เราต้องการส่งไปให้ API ประมวลผล (เหมือนรายละเอียดเพิ่มเติมที่เราใส่ในใบสั่งอาหาร เช่น "เอาเผ็ดน้อย")
JSON (JavaScript Object Notation) เป็นรูปแบบข้อมูลที่นิยมใช้ในการแลกเปลี่ยนข้อมูลระหว่างโปรแกรมต่างๆ ลองนึกภาพว่ามันเป็นภาษาที่โปรแกรมคุยกัน
ข้อมูลที่เราส่งไปให้ ChatGPT API และข้อมูลที่เราได้รับกลับมา จะอยู่ในรูปแบบ JSON ทั้งหมด ดังนั้นเราจึงจำเป็นต้องรู้จักรูปแบบ JSON เพื่อที่จะสามารถอ่านและจัดการกับข้อมูลเหล่านั้นได้
ตัวอย่าง JSON:
{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "สวัสดีครับ"
}
]
}
ในตัวอย่างนี้ เรากำลังบอก ChatGPT ว่าให้ใช้โมเดล "gpt-3.5-turbo" และให้ตอบคำถามที่ผู้ใช้ถามว่า "สวัสดีครับ" SiamCafe Blog มีบทความเกี่ยวกับ JSON ด้วยนะ ลองไปอ่านดูได้
เอาล่ะ! หลังจากที่เราเข้าใจพื้นฐานกันไปแล้ว คราวนี้เรามาดูวิธีการใช้งาน ChatGPT API กันบ้าง พี่จะสอนน้องๆ แบบ step-by-step เลยนะ
ก่อนที่เราจะเริ่มเขียนโค้ด เราต้องติดตั้ง library ที่จำเป็นก่อน Library คือชุดคำสั่งสำเร็จรูปที่เราสามารถนำมาใช้ได้เลย โดยที่ไม่ต้องเขียนเองทั้งหมด
ถ้าเราใช้ภาษา Python เราสามารถติดตั้ง library ที่จำเป็นได้โดยใช้คำสั่ง:
pip install openai requests
คำสั่งนี้จะติดตั้ง library `openai` ซึ่งเป็น library ที่ OpenAI เตรียมไว้ให้เราใช้ในการเรียกใช้งาน ChatGPT API และ library `requests` ซึ่งเป็น library ที่ใช้ในการส่ง HTTP Request
หลังจากที่เราติดตั้ง library ที่จำเป็นแล้ว เราก็มาเริ่มเขียนโค้ดกันเลย พี่จะยกตัวอย่างโค้ด Python ให้ดู:
import openai
import os
openai.api_key = os.getenv("OPENAI_API_KEY") # ใส่ API Key ของเราตรงนี้
def chat_with_gpt(prompt):
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]
)
return completion.choices[0].message.content
if __name__ == "__main__":
user_input = input("What do you want to ask ChatGPT? ")
response = chat_with_gpt(user_input)
print(response)
โค้ดนี้จะทำการเรียกใช้งาน ChatGPT API เพื่อตอบคำถามที่เราป้อนเข้าไป โดยเราจะต้องใส่ API Key ของเราเข้าไปในตัวแปร `openai.api_key` ก่อน
อธิบายโค้ด:
ในการใช้งาน API เราอาจจะเจอปัญหาต่างๆ ได้ เช่น API ไม่พร้อมใช้งาน, API Key ไม่ถูกต้อง, หรือข้อมูลที่เราส่งไปไม่ถูกต้อง ดังนั้นเราจึงต้องเขียนโค้ดเพื่อจัดการกับ Error เหล่านี้ด้วย
ตัวอย่างการจัดการ Error:
import openai
import os
openai.api_key = os.getenv("OPENAI_API_KEY")
def chat_with_gpt(prompt):
try:
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]
)
return completion.choices[0].message.content
except openai.error.OpenAIError as e:
print(f"Error: {e}")
return "เกิดข้อผิดพลาดในการเรียกใช้งาน API"
if __name__ == "__main__":
user_input = input("What do you want to ask ChatGPT? ")
response = chat_with_gpt(user_input)
print(response)
ในโค้ดนี้ เราใช้ `try...except` เพื่อดักจับ Error ที่อาจจะเกิดขึ้นจากการเรียกใช้งาน ChatGPT API ถ้าเกิด Error ขึ้น เราจะแสดงข้อความ Error และคืนค่า "เกิดข้อผิดพลาดในการเรียกใช้งาน API"
ดูวิดีโอเพิ่มเติมเกี่ยวกับChatgpt Api Integration Guide:
นอกจาก ChatGPT API แล้ว ยังมี API อื่นๆ ที่เราสามารถใช้ในการสร้างระบบตอบคำถามอัตโนมัติได้ เช่น Google Cloud Dialogflow และ Microsoft Bot Framework
แต่ละ API ก็มีข้อดีข้อเสียแตกต่างกันไป เราจึงต้องเลือก API ที่เหมาะสมกับความต้องการของเรา
| API | ข้อดี | ข้อเสีย |
|---|---|---|
| ChatGPT API |
|
|
| Google Cloud Dialogflow |
|
|
| Microsoft Bot Framework |
|
|
สรุปคือ ถ้าเน้นความสามารถในการตอบคำถามที่หลากหลาย และมีงบประมาณ ChatGPT API คือตัวเลือกที่ดี แต่ถ้าเน้นใช้งานง่าย และมีเครื่องมือให้ใช้งานหลากหลาย Google Cloud Dialogflow อาจจะเหมาะสมกว่า ส่วน Microsoft Bot Framework เหมาะสำหรับคนที่ต้องการสร้าง Bot ที่รองรับหลายช่องทาง และมีความรู้ความสามารถด้าน Programming และ Cloud Computing SiamCafe Blog ยังมีบทความเปรียบเทียบ API อื่นๆ อีกนะ ลองไปอ่านดูได้เลย
เอาล่ะน้องๆ หลังจากที่เราลองเขียนโค้ดเรียก ChatGPT API กันไปแล้ว คราวนี้มาดูเคล็ดลับที่พี่เจอมากับตัว สมัยทำร้านเน็ต SiamCafe สมัยก่อน เน็ตหลุดทีลูกค้าโวยวายกันทั้งร้าน เรื่อง API ก็เหมือนกัน ถ้าใช้ไม่ดี มีปัญหาแน่นอน
ChatGPT API เค้ามีจำกัดการเรียกใช้งานนะน้อง สมัยก่อนพี่เคยโดนแบน IP เพราะเขียนโปรแกรมดึงข้อมูลจากเว็บอื่นแบบไม่พักเลย (สมัยนั้นยังไม่มี API ให้ใช้สะดวกแบบนี้) ChatGPT ก็เหมือนกัน ถ้าเรียกถี่เกินไป เค้าจะบล็อกเราได้ วิธีแก้คือทำ Rate Limiting ซะ
import time
class RateLimiter:
def __init__(self, calls_per_second):
self.calls_per_second = calls_per_second
self.last_called = 0
def wait(self):
elapsed = time.time() - self.last_called
if elapsed < (1 / self.calls_per_second):
time.sleep((1 / self.calls_per_second) - elapsed)
self.last_called = time.time()
rate_limiter = RateLimiter(calls_per_second=0.5) # จำกัด 0.5 ครั้งต่อวินาที
for i in range(5):
rate_limiter.wait()
print(f"Calling API {i+1}")
Code นี้เป็นตัวอย่างง่ายๆ น้องเอาไปปรับใช้ให้เข้ากับโปรเจกต์ตัวเองได้เลย อย่าลืมดู documentation ของ OpenAI ด้วยนะ เค้าจะมีบอก limit ชัดเจน
API มันก็เหมือนคนแหละน้อง บางทีก็งอแง error ขึ้นมาได้ วิธีรับมือคือต้องดัก error ให้เป็น สมัยพี่ทำร้านเน็ต server ล่มที ก็ต้องรีบแก้ให้ไวที่สุด ไม่งั้นลูกค้าหายหมด
import openai
try:
response = openai.Completion.create(
engine="davinci",
prompt="Hello, world!",
max_tokens=5
)
print(response)
except openai.error.APIError as e:
print(f"API Error: {e}")
except openai.error.RateLimitError as e:
print(f"Rate Limit Error: {e}")
except Exception as e:
print(f"Unexpected Error: {e}")
อันนี้เป็นตัวอย่างการดัก error ที่อาจจะเกิดขึ้นได้ อย่าลืม logging ด้วยนะน้อง จะได้รู้ว่าเกิดอะไรขึ้นบ้าง
Prompt คือหัวใจสำคัญของการใช้ ChatGPT เลยน้อง ถ้า prompt ไม่ดี คำตอบที่ได้ก็จะไม่ดีตามไปด้วย เหมือนสมัยก่อนที่พี่ต้องสอนลูกค้า Search Google ยังไงให้ได้ข้อมูลที่ต้องการ prompt ก็เหมือนกัน ต้องชัดเจน กระชับ และตรงประเด็น
ลองศึกษา Prompt Engineering ดูนะน้อง มีเทคนิคเยอะแยะมากมายที่จะช่วยให้เราได้ผลลัพธ์ที่ดีที่สุด
ถ้าเราต้องเรียก API ซ้ำๆ เพื่อเอาข้อมูลเดิมๆ มาใช้ การ caching จะช่วยลดภาระของ API และทำให้โปรแกรมเราทำงานได้เร็วขึ้น สมัยก่อนพี่ใช้ caching ในการเก็บข้อมูลเกมออนไลน์ เพื่อลดโหลดของ database
มี library caching ให้ใช้เยอะแยะ ลองเลือกที่เหมาะกับโปรเจกต์เราดูนะ
API Error เกิดได้จากหลายสาเหตุ น้องต้องดู log error ให้ดีๆ ว่าเกิดจากอะไร อาจจะเป็น Rate Limit, Server Error, หรือ Request Error ก็ได้
Prompt ที่ดีต้องชัดเจน กระชับ และตรงประเด็น ลองคิดดูว่าเราจะถามอะไร ChatGPT เหมือนเราคุยกับเพื่อน ถ้าเราถามวกวน เพื่อนก็ไม่รู้เรื่อง
ราคาขึ้นอยู่กับการใช้งานน้อง OpenAI เค้ามี pricing ให้ดู ลองเข้าไปศึกษาดูนะ OpenAI Pricing
ใช้ได้น้อง แต่ผลลัพธ์อาจจะไม่ดีเท่าภาษาอังกฤษ ต้องลองปรับ prompt ดู
การใช้ ChatGPT API ไม่ยากอย่างที่คิดน้อง แต่ต้องระวังเรื่อง Rate Limiting, Error Handling, Prompt Engineering, และ Caching ถ้าทำได้ตามนี้ โปรแกรมเราก็จะทำงานได้อย่างมีประสิทธิภาพแน่นอน
อย่าลืมไปลองเล่น iCafeForex นะน้อง เผื่อจะได้ไอเดียอะไรใหม่ๆ
และติดตาม SiamCafe Blog ไว้ด้วย พี่จะเอาประสบการณ์ IT มาเล่าให้ฟังเรื่อยๆ