ChatGPT และ Prompt Engineering คืออะไร? — ทักษะใหม่ที่ทุกคนควรเรียนรู้
ที่ผ่านมาการที่มนุษย์สื่อสารกับคอมพิวเตอร์อย่างการเขียนโปรแกรม (programming) นั้นอาจจะเป็นทักษะเฉพาะของคนบางกลุ่ม แต่วันนี้เมื่อคอมพิวเตอร์สามารถสื่อสารภาษาธรรมชาติ (natural language) กับเราได้แล้ว มันเลยกลายเป็นทักษะของทุกคนไปโดยปริยาย
สวัสดีครับทุกคน 🙏 ผมกำลังเริ่มทำ Facebook Page และ YouTube Channel ซึ่งจะแชร์เรื่อง cloud, infrastructure as code (IaC), automation/DevOps, programming, generative AI และอื่น ๆ ตามอารมณ์ 😅
และตั้งใจจะทำวิดีโอสอนพื้นฐาน(ยัน advanced)ฟรีตั้งแต่ AWS ไล่มา Git, Linux, networking, Terraform, Docker, Kubernetes, Python, Go, etc. ไม่ครบไม่เลิกทำ 😂
รบกวนทุกคนกด Follow/Subscribe ไว้ทุกช่องทางเลยนะครับ 🙏
- 💙 Facebook: Nopnithi Tech
- ❤️ YouTube: Nopnithi Tech
- 💙 LinkedIn: Nopnithi (Game) Khaokaew
ผมเองเป็นคนหนึ่งที่ใช้ ChatGPT มาเยอะพอสมควรก่อนที่มันจะเริ่มบูมในไทย(ขอขิงหน่อย 😂) และได้ศึกษาเรื่อง prompt engineering อย่างจริงจัง ไปจนถึงการพัฒนา web UI มาช่วย interact กับ OpenAI API เพื่อให้ใช้งาน GPT ได้ productivity มากขึ้น
ทั้งหมดทั้งมวลเลยคิดว่าตอนนี้น่าจะถึงเวลาแล้วที่จะเขียนบทความแรกเกี่ยวกับมันบ้าง ขอเริ่มที่ความหมายของ ChatGPT และ prompt engineering เบื้องต้นแล้วกันเพราะคิดว่าเป็นพื้นฐานสำหรับการใช้งาน AI-powered tool อีกมากมายหลังจากนี้
Generative AI หรือ ChatGPT คืออะไร?
อธิบายง่าย ๆ ChatGPT คือ generative AI ที่ใส่ model (LLM) ทางด้านภาษาเข้าไป กลายเป็นโปรแกรมที่สามารถเข้าใจภาษาของมนุษย์ได้ ทั้งการรับข้อความเข้า (input) และส่งข้อความออกมา (output)
ให้คิดว่า ChatGPT เป็นโปรแกรมคอมพิวเตอร์ที่ฉลาดมาก ๆ ตัวหนึ่งที่สามารถคุยกับเราเหมือนเป็นมนุษย์ด้วยกัน เหมือนเราถามคำถามกับเพื่อนและเค้าก็สามารถตอบคำถามเราได้ ทว่าความรู้ของ ChatGPT นั้นครอบจักรวาลกว่า 😂(เรียกว่า generative-AI) เราสามารถที่จะถามหรือสั่งงานให้ ChatGPT ตอบหรือทำอะไรหลายอย่างให้เราแบบคาดไม่ถึง
ซึ่ง ChatGPT จะเก่งได้แค่ไหนส่วนหนึ่งก็ขึ้นอยู่กับผู้ใช้ด้วย (กระบี่ที่ดีก็ควรจะอยู่ในมือของยอดจอมยุทธที่เข้าใจมัน) ดังนั้น prompt engineering จึงเป็นทักษะที่สำคัญมากต่อจากนี้
นอกจาก ChatGPT ปัจจุบันมี generative AI ออกมามากมายภายในเวลาไม่กี่เดือน
Prompt คืออะไร?
Prompt คือข้อความที่ผู้ใช้อย่างเราส่งให้กับ ChatGPT (หรือ generative AI ตัวอื่น ๆ) โดยคาดหวังให้มันตอบกลับหรือทำอะไรบางอย่างตามที่เราต้องการ โดย prompt อาจจะประกอบไปด้วยคำสั่ง, คำถาม หรือแม้แต่การบอกเล่าด้วยข้อมูล
เมื่อ ChatGPT ได้รับ prompt, มันจะนำ prompt ไปประมวลผลด้วย model ที่มันได้รับการ train (สอน) มา จากนั้นจะพยายามตอบกลับ (response) โดยอิงจากข้อมูลที่มันได้รับจากผู้ใช้ผ่าน prompt
Prompt Engineering คืออะไร?
จินตนาการว่าคุณเป็นหัวหน้าและกำลังพยายามสื่อสารกับลูกน้องของคุณให้ช่วยทำงานสักอย่างให้ โดยคาดหวังว่างานที่ได้จะถูกต้องตามที่ต้องการ สิ่งสำคัญไม่ได้ขึ้นอยู่กับว่าลูกน้องของคุณเก่งแค่ไหนเพียงอย่างเดียว แต่มันยังขึ้นอยู่กับว่าตัวคุณเองนั้นสื่อสารได้ดีแค่ไหนด้วย ถูกต้องมั้ยครับ?
ในการสื่อสารกับ generative AI อย่าง ChatGPT หรือตัวอื่น ๆ ก็เช่นกัน กระบวนการออกแบบ, ประดิษฐ์คำ หรือกำหนดโครงสร้าง/รูปแบบของคำสั่งที่จะใช้ในการสื่อสารกับ generative AI เพื่อให้มันทำงานได้ถูกต้องตามที่เราต้องการเรียกว่า “prompt engineering”
Prompt engineering คือกระบวนการสร้างคำสั่งหรือ prompt ที่มีคุณภาพเพื่อส่งให้กับ model ซึ่งมันจะต้องมีการออกแบบว่าข้อความที่ป้อนเข้าไป (input text) ควรจะเป็นอย่างไร ด้วยความที่ model พวกนี้ค่อนข้างอ่อนไหวมาก ๆ กับ input ที่มันได้รับ ดังนั้นการป้อน prompt ที่ดีจะทำให้ผลลัพธ์มีความถูกต้องแม่นยำมากขึ้น
ในทางปฏิบัตินั้น prompt engineering เป็นเรื่องที่ไม่ง่ายและค่อนข้างใช้เวลา เนื่องจากมีปัจจัยต่าง ๆ มากมายที่ต้องพิจารณา เช่น ความยาวของ prompt, ความซับซ้อนของ prompt, การเลือกใช้คำศัพท์, ลักษณะโครงสร้างของประโยค และอื่น ๆ อีกมากมาย
เดี๋ยวถ้ามีโอกาสและเวลาที่เหมาะสม ผมจะเขียนเจาะลึกถึงเทคนิคต่าง ๆ ในเรื่องนี้อีกครั้ง แต่สำหรับบทความนี้ผมขอเขียนถึงพื้นฐานการสร้าง prompt ที่ดีแบบสั้น ๆ ไปก่อนแล้วกัน
หลักการของ Prompt ที่ดี
มีความชัดเจน: Prompt จะต้องมีความชัดเจนและกระชับ หลีกเลี่ยงภาษาที่กำกวม (พูดง่าย ๆ ว่ามี logic ที่ดีด้วย) และต้องระบุหัวข้อหรือเรื่องที่คุณต้องการให้มันทำอย่างชัดเจน
มีบริบทที่ครบถ้วน: อธิบายบริบทหรือเกริ่นนำข้อมูลเป็น background ให้มากพอ เพื่อช่วยให้ generative AI สามารถเข้าใจคำถามหรือคำสั่งของเราได้ดีขึ้น
มีวัตถุประสงค์ชัดเจน: กำหนดเป้าหมายของ prompt ให้ชัดเจนว่าเราต้องการคำอธิบาย(สั้นหรือยาว), การเปรียบเทียบ หรือคำแนะนำ ซึ่งจะช่วยให้ generative AI สามารถ response ตามความต้องการได้ดีขึ้น
มีโครงสร้างที่ดี: หากสิ่งที่เราต้องการมีความซับซ้อนมาก ควรแบ่งเป็นส่วนย่อย ๆ แล้วค่อยสั่งการทีละ prompt หรืออาจจะกำหนดรูปแบบของผลลัพธ์ที่ต้องการก็ได้ เช่น เป็นตาราง, เป็นขั้นตอน หรืออื่น ๆ
วิธีการสร้าง Prompt ที่ผมใช้แบบพื้นฐาน
Instructions (คำสั่ง)
ใส่ instruction ที่ต้องการให้ generative AI ทำไว้ข้างบนสุด และใช้ ###
หรือ """
เพื่อแยก instruction ออกจาก output ที่ต้องการ หรือสามารถใช้ " "
เพื่อเน้น keyword ก็ได้
ตัวอย่าง:
Summarize the article below into bullet points.
{article contents}
ตัวอย่างที่ดีกว่า:
Summarize the article below into bullet points.
###
Article Contents:
"""
{article contents}
"""
รายละเอียด (Details)
ใส่รายละเอียดความต้องการที่ครบถ้วนเพื่อให้ model เข้าใจรูปแบบของ output ที่เราต้องการ
ตัวอย่าง 1:
Why is the climate changing and what can we do?
ตัวอย่างที่ดีกว่า 1:
What are the primary causes of climate change, and what steps can individuals take to mitigate their impact on the environment?
หรือบางครั้งเราสามารถยกตัวอย่าง output ที่ต้องการให้กับ generative AI เพื่อช่วยให้มันเข้าใจว่าสิ่งที่เราต้องการจริง ๆ เป็นแบบไหนกันแน่
ตัวอย่าง 2:
Extract the names and the companies from the email list below:
ray.smith8124@hotmail.com
jennifer.lee3355@gmail.com
maxwell.wilson44@yahoo.com
kate.grant2323@outlook.com
thomas.gordon77@gmail.com
ตัวอย่างที่ดีกว่า 2:
Extract the first names and the companies from the email list below:
"""
ray.smith8124@microsoft.com
jennifer.lee3355@google.com
maxwell.wilson44@apple.com
kate.grant2323@microsoft.com
thomas.gordon77@google.com
"""
Please use this format for extracting:
<firstname>.<something>@<company>.<something>
Desired Format (Capitalize):
Name (Company)
ตรงไปตรงมา (Be Direct)
หนึ่งในวิธีการสร้าง prompt ให้มีความชัดเจนคือการกำหนดจำนวนหรือ scope ลงไปด้วย ซึ่งจะช่วยให้ได้ output ที่ดีและตรงประเด็นมากขึ้น
ตัวอย่าง:
Which programming language is the most popular?
ตัวอย่างที่ดีกว่า:
Provide top 10 most popular programming language for serverless architecture?
คำชี้นำ (Leading Words)
จากตัวอย่างจะเป็นการชี้นำให้ generative AI รู้ว่าสิ่งที่จะต้องทำต่อไปก็คือการเขียน Python code และมันจะรู้ว่าสิ่งที่เราต้องการคือ code จะอยู่ในฟังก์ชั่น และใช้ if __name__ == "__main__":
ในการ call ฟังก์ชั่น
ตัวอย่าง:
Write a simple python function that
1. Ask me for a number in mile
2. It converts miles to kilometers
ตัวอย่างที่ดีกว่า:
Write a simple python function that
1. Ask me for a number in mile
2. It converts miles to kilometers
"""
def convert_distance():
if __name__ == "__main__":
"""
ทดสอบ ประเมิน และปรับปรุง Prompt
เมื่อเราเริ่มต้นส่ง prompt ไป ให้นำผลลัพธ์นั้นมาประเมินว่าเราขาดตกอะไรไป คำตอบมันใช่หรือไม่ อะไรที่ทำให้คำตอบไม่ตรงประเด็นที่ต้องการ
พยายามปรับ prompt ใหม่ ทำแบบนี้ซ้ำไปเรื่อย ๆ จนกว่าจะได้ prompt ที่ดี ซึ่ง prompt ที่ดีจะให้คำตอบที่คงตรงประเด็นและมีความเส้นคงวา (consistency) ไม่ใช่ถามคำถามเดียวกัน 10 ครั้งแต่ได้คำตอบออกมา 10 ประเด็น แบบนั้นแสดงว่า prompt ของเรายังไม่ดีพอ
แถมเทคนิคบางส่วนเพิ่มเติมอีกหน่อย
กำหนดบทบาทสมมุติ (Personas)
การกำหนดบทบาทหรือบุคลิกภาพให้ generative AI ตอบเราในมุมมองของบุคคลนั้น ๆ อาจจะทำให้เราได้ผลลัพธ์ในมุมที่ต้องการมากขึ้น เช่น ผมอยากจะให้มันช่วยเขียน content ระหว่างเกมแมนยูฯ กับ เชลซี ผมก็กำหนดบทบาทให้มันเป็นนักวิเคราะห์ฟุตบอลซะเลย เพราะผมคิดว่าลักษณะวิธีการสื่อสารของนักวิเคราะห์ฟุตบอลเป็นผลลัพธ์ที่ผมต้องการ
ตัวอย่าง:
I want you to act as a football commentator. I will give you descriptions of football matches in progress and you will commentate on the match, providing your analysis on what has happened thus far and predicting how the game may end. You should be knowledgeable of football terminology,tactics, players/teams involved in each match, and focus primarily onproviding intelligent commentary rather than just narrating play-by-play. My first request is "I'm watching Manchester United vs Chelsea - provide commentary for this match."
มีคนรวม persona + prompt เอาไว้มากมาย สามารถดูตัวอย่างอื่น ๆ ได้ที่นี่
Prompt ก่อนหน้าอาจสร้างความสับสน
Generative AI จะมีความทรงจำ (memory) เกี่ยวกับเรื่องที่เราคุยกับมัน ดังนั้นเมื่อคุณเปลี่ยนเรื่องคุยก็ควรจะบอกมันด้วยเพื่อป้องกันความสับสน เช่น คุณอาจจะเคยบอกให้มันตอบคำถามในมุมของ football commentator แต่เมื่อคุณคุยเรื่องเกม คุณก็ควรจะบอกให้มันลืมคำสั่งก่อนหน้าไป
หรือผมอาจจะเคยให้มันตอบคำถามแบบกระชับ “Please refrain from providing long explanations and stick to short, bullet-point style responses. I am an expert in this field, and I value the time.” แต่เมื่อผมคุยเรื่องใหม่ที่อาจจะต้องการรายละเอียดมากขึ้น ผมก็จะบอกให้มันลืมสิ่งที่คุยกันก่อนหน้านี้ไป
ตัวอย่าง:
Ignore/Forget all previous instructions or talks before this one.
เอาหละ ผมขอจบบทความแรกเกี่ยวกับ ChatGPT/Generative AI และ prompt engineering ไว้ตรงนี้แล้วกัน ที่จริงยังมีเทคนิคอีกมาก เช่น zero, one, few shot prompting, reverse prompting และอื่น ๆ ไปจนถึงการพัฒนา app มาทำงานร่วมกับ OpenAI API (มีเรื่อง model หรือ token/pricing อีก) ซึ่งเดี๋ยวมาว่ากันในบทความต่อ ๆ ไปครับ
สุดท้าย ถ้าที่ผ่านมาเราให้ความสำคัญกับ “ทักษะในการสื่อสาร” ซึ่งเป็นทักษะที่ถูกใช้ระหว่างมนุษย์กับมนุษย์ด้วยกัน ดังนั้นในวันนี้เราก็อาจจะต้องให้ความสำคัญกับทักษะใหม่ที่เรียกว่า prompt engineering เพื่อใช้สื่อสารกับ AI ด้วยเช่นกันครับ
อย่าลืมนะครับ รบกวนทุกคนกด Follow/Subscribe ไว้ทุกช่องทางเลยนะครับ 🙏
- 💙 Facebook: Nopnithi Tech
- ❤️ YouTube: Nopnithi Tech
- 💙 LinkedIn: Nopnithi (Game) Khaokaew