AI สำหรับผู้เริ่มต้นคู่มือ
วิธีเขียนพรอมป์ที่ดี: 5 ส่วนและตัวอย่างก่อน/หลัง
เปลี่ยนคำขอแบบบรรทัดเดียวที่คลุมเครือให้เป็นพรอมป์ที่มี task, context, format, example และ rules แล้วส่งผ่าน API ที่เข้ากันได้กับ OpenAI

ในหน้านี้
โมเดลของคุณสรุปอีเมลลูกค้าเป็นสามย่อหน้าในวันจันทร์ และเป็นสองหัวข้อย่อยในวันอังคาร พรอมป์เดียวกัน โมเดลเดียวกัน นั่นคือสิ่งที่คำขอแบบบรรทัดเดียวทำ: มันปล่อยให้ทุกการตัดสินใจเป็นของโมเดล และโมเดลก็ตัดสินใจต่างกันในแต่ละครั้ง
พรอมป์ที่ดีตอบคำถามห้าข้อ: ทำอะไร (task), ทำงานกับอะไร (context), คำตอบควรมีหน้าตาอย่างไร (format), คำตอบที่ดีมีหน้าตาอย่างไร (example) และอะไรที่ควรหลีกเลี่ยง (constraints) ด้านล่าง คำขอที่คลุมเครือหนึ่งอันจะกลายเป็นคำขอที่มีโครงสร้าง ผ่าน CheapTokens API ที่เข้ากันได้กับ OpenAI และคุณจะเห็นว่าพรอมป์ที่ยาวขึ้นเพิ่มอะไรให้บิล
ทำไม "Summarize this email" ถึงเป็นการเสี่ยงโชค#
เมื่อคุณพิมพ์ "Summarize this email" คุณมีคำตอบในใจอยู่แล้ว: หนึ่งประโยค, ความเร่งด่วนแค่ไหน, ต้องทำอะไรต่อไป โมเดลมองไม่เห็นภาพนั้น มันจึงเดา และทุกการเดาล้วนสมเหตุสมผล รวมกันแล้วคุณได้คำตอบที่ต่างกันในแต่ละครั้ง และสคริปต์ที่อ่านคำตอบก็ไม่มีอะไรที่แน่นอนให้แยกวิเคราะห์
คู่มือ prompt engineering ของ OpenAI (อ่านเมื่อ 27 ตุลาคม 2026) วางแนวคิดไว้ตรง ๆ: prompt engineering คือการเขียนคำสั่งที่มีประสิทธิภาพ และโมเดล GPT ทำได้ดีขึ้นเมื่อคุณบอกมันอย่างชัดเจนว่าจะทำงานให้สำเร็จได้อย่างไร นิสัยนี้ไม่ได้จำกัดอยู่แค่ข้อความ เมื่อวันที่ 26 ตุลาคม 2026 ช่อง Telegram หนึ่ง แชร์พรอมป์สำหรับวิดีโอที่สร้างขึ้น 30 วินาที ซึ่งแบ่งเป็นบล็อก: ฉาก, สไตล์ภาพ, บทสนทนา, เสียง และสิ่งที่ยกเว้น, ข้อมูลจำเพาะทางเทคนิค งานต่างกัน แต่ท่าเดียวกัน ผู้เขียนระบุทุกการตัดสินใจไว้ล่วงหน้าแทนที่จะปล่อยให้โมเดล
ลองด้วยตัวเองลองดู: โมเดลต้องเดาอะไรจาก "Summarize this email"?แสดงคำตอบ
ความยาว (หนึ่งบรรทัดหรือหนึ่งหน้า), ผู้อ่าน (คุณหรือลูกค้า), รูปแบบคำตอบ (ความเรียง, หัวข้อย่อย, JSON), อะไรนับว่าสำคัญ และทำอย่างไรเมื่ออีเมลไม่ได้บอก ทุกข้อเหล่านี้เป็นสิ่งที่พรอมป์กำหนดได้
ห้าส่วน พูดง่าย ๆ#
ลองนึกถึงการบรีฟเพื่อนร่วมงานใหม่ในวันแรก "จัดการอันนี้หน่อย" ได้แค่การเดา โพสต์อิทที่บอกงาน, วัสดุ, รูปแบบที่ต้องการ, ตัวอย่าง และ "ข้อห้าม" จะได้สิ่งที่คุณหมายถึง
Task คือกริยาหนึ่งคำและกรรมหนึ่งอย่าง: "สรุปอีเมลและให้คะแนนความเร่งด่วน" พูดตรง ๆ "ช่วยเรื่องอีเมลนี้หน่อย" ไม่ใช่ task
Context คือวัสดุที่โมเดลทำงานด้วย: อีเมล, คำอธิบายผลิตภัณฑ์, นโยบาย โมเดลรู้เพียงสิ่งที่เรียนรู้จากการฝึกบวกกับสิ่งที่คุณวางเข้าไป ห่อข้อความที่วางด้วยตัวคั่น เช่น แท็กสไตล์ XML อย่าง <email>…</email> หรือหัวข้อ markdown เพื่อให้คำสั่งของคุณปนกับข้อความไม่ได้ คู่มือของ OpenAI แนะนำทั้งสองแบบ
Format คือหน้าตาของคำตอบ: "JSON ที่มีคีย์ summary, urgency, next_step" หรือ "สามหัวข้อย่อย หัวละไม่เกิน 12 คำ" สำคัญที่สุดเมื่อโค้ดอ่านคำตอบ
Example คืออินพุตหนึ่งอันพร้อมเอาต์พุตที่คุณต้องการ คู่มือแนะนำตัวอย่าง few-shot ที่ครอบคลุมอินพุตหลากหลายพร้อมเอาต์พุตที่ต้องการ ตัวอย่างเดียวก็เริ่มได้ดี เพิ่มอันที่สองเมื่ออินพุตของคุณต่างกันมาก
Constraints คือ "ข้อห้าม": ใช้เฉพาะข้อเท็จจริงจากอีเมล, เขียน "unknown" เมื่อมีอะไรขาด, ห้ามคืนเงินหรือส่วนลด

ลำดับก็สำคัญเล็กน้อยเช่นกัน คู่มือเดียวกันบอกว่าข้อความ developer หรือ system มักเรียงเป็น identity, instructions, examples, context และ context ควรอยู่ใกล้ท้ายเพราะมันเปลี่ยนระหว่างคำขอ กฎอยู่ในข้อความ system; อินพุตอยู่ในข้อความ user
จับคู่
จับคู่แต่ละส่วนของพรอมป์กับคำถามที่มันตอบ
แตะรายการทางซ้าย แล้วแตะคู่ของมัน
- Taskโมเดลควรทำอะไร?
- Contextมันทำงานกับวัสดุอะไร?
- Formatคำตอบควรมีหน้าตาอย่างไร?
- Exampleคำตอบที่ดีมีหน้าตาอย่างไร?
- Constraintsมันต้องไม่ทำอะไร?
ก่อนและหลัง: อีเมลลูกค้า#
นี่คือแบบบรรทัดเดียวเทียบกับคำขอเดียวกันที่มีทั้งห้าส่วน ตัวอีเมลคือ context และมันอยู่ในข้อความ user ห่อด้วยแท็ก <email>
เปรียบเทียบ
หนึ่งคำขอ สองพรอมป์
Before
Summarize this email.After
You summarize customer emails for a support team.
Task: Summarize the email in the <email> tags and rate how urgent it is.
Format: Reply with JSON only, using the keys "summary" (one sentence), "urgency" ("low", "medium" or "high") and "next_step" (one short sentence).
Example:
<email>Hi, order 1042 was due Monday and it's Thursday. Where is it?</email>
{"summary": "Order 1042 is three days late and the customer asks where it is.", "urgency": "medium", "next_step": "Check the carrier tracking for order 1042 and reply with the status."}
Rules:
- Use only what the email says. If something is missing, write "unknown".
- Don't offer refunds or discounts.
- Output nothing outside the JSON.อ่าน "after" จากบนลงล่างแล้วคุณชี้แต่ละส่วนได้: บรรทัดเปิดและ task, บรรทัด format, example, กฎ อีเมลหายไปจากข้อความโดยตั้งใจ มันเปลี่ยนทุกคำขอ จึงเดินทางแยก

ส่งผ่าน API#
คำสั่งไม่เคยเปลี่ยน จึงอยู่ในค่าคงที่และอยู่ก่อน อีเมลเปลี่ยน จึงอยู่ท้าย นี่คือสคริปต์ทั้งหมด ใช้ OpenAI Python SDK ชี้ไปที่ CheapTokens โมเดลคือ DeepSeek-V4-Flash: context 380K, เอาต์พุตสูงสุด 32,768 โทเคนต่อคำตอบ, ราคาเดียวทุกชั่วโมง เอา base URL และ model id จาก เอกสาร CheapTokens; ถ้ายังไม่มีคีย์ คำขอ API แรกของคุณ อธิบายไว้แล้ว
import json
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.cheaptokens.dev/v1",
api_key=os.environ["CHEAPTOKENS_API_KEY"],
)
SYSTEM_PROMPT = """You summarize customer emails for a support team.
Task: Summarize the email in the <email> tags and rate how urgent it is.
Format: Reply with JSON only, using the keys "summary" (one sentence), "urgency" ("low", "medium" or "high") and "next_step" (one short sentence).
Example:
<email>Hi, order 1042 was due Monday and it's Thursday. Where is it?</email>
{"summary": "Order 1042 is three days late and the customer asks where it is.", "urgency": "medium", "next_step": "Check the carrier tracking for order 1042 and reply with the status."}
Rules:
- Use only what the email says. If something is missing, write "unknown".
- Don't offer refunds or discounts.
- Output nothing outside the JSON.
"""
email = "Hello, I was charged twice for my subscription this month. Please fix it before Friday, my card is almost at its limit."
response = client.chat.completions.create(
model="deepseek-ai/DeepSeek-V4-Flash-0731",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": f"<email>\n{email}\n</email>"},
],
)
reply = response.choices[0].message.content
print(json.loads(reply))
print(response.usage.prompt_tokens, response.usage.completion_tokens)ถ้าบรรทัด format ทำหน้าที่ คำตอบคือออบเจ็กต์ JSON หนึ่งอันที่มี summary, urgency และ next_step และ json.loads เปลี่ยนมันเป็นดิกชันนารี ถ้ามันเกิดข้อผิดพลาด แสดงว่าโมเดลห่อ JSON ด้วยข้อความเพิ่ม: เข้มกฎข้อสุดท้ายหรือเพิ่มตัวอย่างที่สอง บรรทัดสุดท้ายพิมพ์จำนวนโทเคนที่เข้าและออก ซึ่งเป็นตัวเลขที่ส่วนถัดไปพูดถึง
คำเพิ่มเติมมีค่าใช้จ่ายเท่าไร#
โทเคนคือชิ้นส่วนของคำ คุณจ่ายต่อโทเคนสำหรับสิ่งที่ส่ง (input) และสำหรับสิ่งที่โมเดลเขียน (output) และ output แพงกว่า อ่านเพิ่มใน input vs output tokens
สมมติคุณรันบอทซัพพอร์ตที่มีอีเมล 1,000 ฉบับต่อวัน และอีเมลมีประมาณ 300 โทเคน แบบบรรทัดเดียวเพิ่มคำสั่งประมาณ 10 โทเคน ดังนั้น input ประมาณ 310; สมมติได้สรุปรูปแบบอิสระประมาณ 250 โทเคน system prompt ข้างบนประมาณ 200 โทเคน บวกประมาณ 10 สำหรับแท็ก <email> ดังนั้น input ประมาณ 500; สมมติบรรทัด format ทำให้คำตอบเป็น JSON ประมาณ 80 โทเคน บน DeepSeek-V4-Flash นั่นคือ $0.00003 ต่ออีเมลสำหรับแบบบรรทัดเดียว และ $0.000016 สำหรับพรอมป์ที่มีโครงสร้าง พรอมป์ยาวขึ้น แต่คำขอถูกลง เพราะส่วนที่ยาวคือ input และส่วนที่คุณย่อคือ output รันสคริปต์และเปลี่ยนสมมติฐานเหล่านี้เป็น prompt_tokens และ completion_ ของคุณเอง
นี่คือพรอมป์ที่มีโครงสร้างที่อีเมล 1,000 ฉบับต่อวันเทียบข้ามโมเดล โดยรวมเมื่อนับ input และ output ด้วยกัน CheapTokens ออกมา cheaper กว่าราคาอ้างอิงของ OpenRouter ในงานนี้; ราคาปัจจุบันอยู่ที่ หน้าราคา
| โมเดล | Input $/1M | Output $/1M | ต่อคำขอ | 1,000 คำขอ | OpenRouter, 1,000 คำขอ |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000013 | $0.0132 | $0.0234 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000016 | $0.0155 | $0.0462 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.000037 | $0.037 | $0.444 |
500 โทเค็นอินพุตและ 80 โทเค็นเอาต์พุตต่อคำขอ ราคาต่อ 1M โทเค็นเป็นราคาปัจจุบันและเปลี่ยนแปลงไปพร้อมกับอัตราค่าบริการของเรา คอลัมน์ OpenRouter แสดงราคาอ้างอิงสำหรับปริมาณงานเดียวกัน
ตรวจสอบตัวเอง#
คำถามหนึ่งข้อเกี่ยวกับนิสัยที่ให้ผลตอบแทนมากที่สุดเมื่อสคริปต์ใช้พรอมป์ซ้ำ เมื่อโครงสร้างทำงานได้แล้ว ปุ่มปรับถัดไปคือ system message และ temperature อยู่ใน System prompt and temperature
เช็กด่วน
สคริปต์ของคุณส่งคำสั่งเดิมพร้อมอีเมลใหม่ทุกครั้ง อีเมลควรอยู่ตรงไหน?
แสดงคำตอบ
คำตอบ: ที่ท้าย หลังคำสั่งและตัวอย่าง
คำสั่งคงเดิมระหว่างคำขอ แต่อีเมลเปลี่ยน คู่มือของ OpenAI แนะนำให้วาง context ที่แปรผันไว้ใกล้ท้ายพรอมป์



