โทเคนคืออะไร
ใช้ไลบรารี tiktoken แบ่งข้อความจริงออกเป็นโทเคน และค้นพบว่าคำ เครื่องหมายวรรคตอน และช่องว่างถูกแมปเป็นลำดับโทเคนในโมเดลต่าง ๆ อย่างไร
โทเคนคืออะไร เป็นบทเรียน AI Engineering Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Engineering Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Engineering Academy มีบทเรียนทั้งหมด 4 บทเรียน
LLM ประมวลผลโทเค็น ไม่ใช่คำ
เมื่อคุณส่งข้อความไปยัง LLM โมเดลไม่ได้มองเห็นอักขระหรือคำ — แต่มองเห็น โทเค็น โทเค็นคือส่วนหนึ่งของข้อความที่คลังคำศัพท์ของโมเดลจับคู่กับ ID จำนวนเต็มหนึ่งค่า โทเค็นอาจเป็นทั้งคำ ส่วนของคำ เครื่องหมายวรรคตอน หรือช่องว่าง ทั้งนี้ขึ้นอยู่กับตัวตัดโทเค็น
การทำความเข้าใจโทเค็นมีความสำคัญในทางปฏิบัติ เพราะ OpenAI คิดค่าบริการตามจำนวนโทเค็น หน้าต่างบริบทวัดเป็นโทเค็น และความยาวสูงสุดของผลลัพธ์ควบคุมด้วย max_tokens ความประหลาดใจด้านต้นทุนและพฤติกรรมแทบทั้งหมดมีสาเหตุมาจากความเข้าใจผิดเกี่ยวกับวิธีตัดข้อความของคุณเป็นโทเค็น
การทำงานของการตัดโทเค็น: BPE
โมเดล GPT ใช้การตัดโทเค็นแบบ การเข้ารหัสคู่ไบต์ (BPE) BPE เริ่มจากคลังคำศัพท์ของไบต์แต่ละตัว แล้วรวมคู่ที่อยู่ติดกันและพบบ่อยที่สุดซ้ำไปเรื่อย ๆ จนได้ขนาดคลังคำศัพท์ตามต้องการ โมเดล GPT ของ OpenAI ใช้คลังคำศัพท์ประมาณ 100,000 โทเค็น
ผลลัพธ์คือคำที่พบบ่อยมักกลายเป็นโทเค็นเดียว (hello เป็นหนึ่งโทเค็น) ขณะที่คำที่พบได้น้อยหรือคำที่สร้างขึ้นเองจะถูกแบ่งเป็นโทเค็นย่อยหลายตัว (subaqueous อาจกลายเป็นสามโทเค็น ได้แก่ sub, aque, ous) วิธีนี้ทำให้โมเดลจัดการกับข้อความใด ๆ ได้ แม้แต่คำที่ไม่เคยพบมาก่อน โดยประกอบคำเหล่านั้นจากส่วนย่อยที่คุ้นเคย
การใช้ tiktoken เพื่อนับโทเค็น
OpenAI มีไลบรารี tiktoken สำหรับตัดข้อความเป็นโทเค็นภายในเครื่องโดยไม่ต้องเรียก API วิธีนี้จำเป็นอย่างยิ่งสำหรับการนับโทเค็นก่อนส่งคำขอ เพื่อประเมินต้นทุนและตรวจสอบว่าอยู่ภายในหน้าต่างบริบท
import tiktoken
# Get the encoding for a specific model
enc = tiktoken.encoding_for_model('gpt-4o')
text = 'Hello! How many tokens does this sentence use?'
tokens = enc.encode(text)
print(f'Text: {text}')
print(f'Token count: {len(tokens)}')
print(f'Token IDs: {tokens}')
# You can also decode tokens back to text
decoded = enc.decode(tokens)
print(f'Decoded: {decoded}')
# Inspect individual token strings
for token_id in tokens:
token_str = enc.decode([token_id])
print(f' Token {token_id}: "{token_str}"')จำนวนโทเค็นในทางปฏิบัติ
กฎโดยประมาณที่มีประโยชน์คือ 1 โทเค็น ≈ อักขระภาษาอังกฤษ 4 ตัว หรือประมาณ 0.75 คำ ดังนั้น 1,000 โทเค็นจึงเทียบได้คร่าว ๆ กับ 750 คำ หรือข้อความ 3–4 หน้า อย่างไรก็ตาม อัตราส่วนนี้แตกต่างกันมาก:
- คำภาษาอังกฤษที่พบบ่อย: ประมาณ 1 โทเค็นต่อคำ
- ศัพท์เทคนิคที่ไม่ค่อยพบ: คำละ 2–4 โทเค็น
- ตัวเลข: มักเป็น 1 หลักต่อ 1 โทเค็น (ดังนั้น '12345' จึงมี 5 โทเค็น)
- โค้ด: แตกต่างกันมาก แต่โดยทั่วไป Python มีประสิทธิภาพที่ประมาณ 1–2 โทเค็นต่อสัญลักษณ์
- อักษรที่ไม่ใช่ละติน (จีน อาหรับ): มักเป็น 1 โทเค็นต่ออักขระ ทำให้มีต้นทุนต่อคำสูงกว่าภาษาอังกฤษมาก
การตัดโทเค็นของเนื้อหาประเภทต่าง ๆ
มาสำรวจว่าจำนวนโทเค็นแตกต่างกันอย่างมากระหว่างเนื้อหาแต่ละประเภทได้อย่างไรโดยใช้ tiktoken
import tiktoken
enc = tiktoken.encoding_for_model('gpt-4o')
examples = {
'English sentence': 'The quick brown fox jumps over the lazy dog.',
'Number sequence': '1234567890',
'Python code': 'def fibonacci(n):\n if n <= 1:\n return n\n return fibonacci(n-1) + fibonacci(n-2)',
'Technical jargon': 'autoregressive transformers tokenization subword BPE',
'URL': 'https://api.openai.com/v1/chat/completions',
'Chinese text': '大型语言模型使用令牌处理文本',
}
for label, text in examples.items():
count = len(enc.encode(text))
ratio = len(text) / count
print(f'{label}: {count} tokens ({ratio:.1f} chars/token)')ข้อความสนทนาถูกตัดเป็นโทเค็นอย่างไร
โทเค็นทั้งหมดในการเรียกใช้แชต API ไม่ได้มีเพียงเนื้อหาข้อความของคุณเท่านั้น แต่ยังรวมส่วนเกินด้านรูปแบบที่เทมเพลตแชตเพิ่มเข้ามาด้วย ทุกข้อความมีโทเค็นเพิ่มเติมเล็กน้อยสำหรับป้ายกำกับบทบาทและตัวคั่น เอกสารของ OpenAI ระบุสูตรไว้ดังนี้:
- แต่ละข้อความเพิ่มโทเค็นประมาณ 4 ตัวสำหรับส่วนเกินด้านรูปแบบ
- ทุกคำตอบเริ่มต้นด้วยโทเค็นเพิ่มเติม 3 ตัวสำหรับการเตรียมบทบาทผู้ช่วย
สำหรับการสนทนาสั้น ๆ ส่วนเกินนี้แทบไม่มีผล แต่สำหรับระบบที่จัดการการสนทนายาว ๆ จำนวนดังกล่าวจะสะสมเพิ่มขึ้น ไลบรารี tiktoken มีฟังก์ชันช่วยสำหรับนับโทเค็นของอาร์เรย์ข้อความทั้งหมดอย่างถูกต้อง
import tiktoken
def count_messages_tokens(messages, model='gpt-4o'):
enc = tiktoken.encoding_for_model(model)
# 4 tokens per message (role + content structure), 3 for reply priming
total = 3
for msg in messages:
total += 4
for key, value in msg.items():
total += len(enc.encode(str(value)))
return total
messages = [
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': 'What is the capital of France?'},
{'role': 'assistant', 'content': 'The capital of France is Paris.'},
{'role': 'user', 'content': 'And what is the population?'},
]
print(f'Total tokens: {count_messages_tokens(messages)}')ขีดจำกัดโทเค็นของแต่ละโมเดล
แต่ละโมเดลมีหน้าต่างบริบทสูงสุดที่วัดเป็นโทเค็น ณ ปี 2025 ขีดจำกัดตัวอย่างมีดังนี้:
- gpt-4o: บริบท 128,000 โทเค็น ผลลัพธ์สูงสุด 16,384 โทเค็น
- gpt-4o-mini: บริบท 128,000 โทเค็น ผลลัพธ์สูงสุด 16,384 โทเค็น
- Claude 3.5 Sonnet: บริบท 200,000 โทเค็น
- Gemini 1.5 Pro: บริบท 1,000,000 โทเค็น
ผลรวมของโทเค็นอินพุตและโทเค็นเอาต์พุตต้องไม่เกินหน้าต่างบริบท หากเกิน จะเกิดข้อผิดพลาด context_length_exceeded ตรวจสอบจำนวนโทเค็นก่อนส่งคำขอสำหรับเอกสารยาวเสมอ
โทเค็นและราคา
OpenAI คิดค่าบริการแยกกันระหว่าง โทเค็นอินพุต (พรอมต์ที่คุณส่ง) และ โทเค็นเอาต์พุต (คำตอบที่คุณได้รับ) โดยทั่วไปโทเค็นเอาต์พุตมีราคาแพงกว่าโทเค็นอินพุต 3–4 เท่า เพราะต้องสร้างผลลัพธ์ตามลำดับ ณ ต้นปี 2025 ราคาตัวอย่างของ gpt-4o-mini อยู่ที่ประมาณ 0.15 ดอลลาร์ต่อโทเค็นอินพุตหนึ่งล้านโทเค็น และ 0.60 ดอลลาร์ต่อโทเค็นเอาต์พุตหนึ่งล้านโทเค็น
หมายความว่า พรอมต์ 2,000 โทเค็นกับคำตอบ 500 โทเค็นมีค่าใช้จ่ายประมาณ ($0.15 × 2/1000 + $0.60 × 0.5/1000) = $0.00060 ต่อคำขอ หากมีคำขอ 10,000 รายการต่อวัน จะเท่ากับ 6 ดอลลาร์ต่อวัน ซึ่งจัดการได้ แต่จะเพิ่มขึ้นตามการใช้งาน การแคช การเลือกเส้นทางโมเดล และการลดจำนวนโทเค็นล้วนมีความสำคัญเมื่อใช้งานในระดับระบบจริง
การลดจำนวนโทเค็นโดยไม่สูญเสียความหมาย
พรอมต์ที่สั้นกว่าจะมีค่าใช้จ่ายน้อยลงและเหลือพื้นที่ให้ผลลัพธ์ของโมเดลมากขึ้น เทคนิคทั่วไปในการลดจำนวนโทเค็น ได้แก่:
- ลบคำสั่งที่ซ้ำซ้อน: 'กรุณาโปรดช่วย...' → 'กรุณา...'
- ย่อตัวอย่าง: ใช้จำนวนคำให้น้อยที่สุดในแต่ละตัวอย่างแบบไม่กี่ช็อต
- ย่อชื่อฟิลด์ในพรอมต์แบบมีโครงสร้าง: ใช้ 'Q:' และ 'A:' แทน 'Question:' และ 'Answer:'
- ใช้ JSON แทนร้อยแก้ว สำหรับบริบทแบบมีโครงสร้าง: JSON ใช้โทเค็นมีประสิทธิภาพกว่าคำอธิบายข้อมูลเดียวกันในรูปแบบร้อยแก้ว
เรียกใช้ tiktoken ก่อนและหลังการบีบอัดทุกครั้ง เพื่อตรวจสอบว่าคุณประหยัดโทเค็นได้จริง — การ 'บีบอัด' บางอย่างกลับเพิ่มจำนวนโทเค็นอย่างคาดไม่ถึง
โทเค็นพิเศษและโทเค็นควบคุม
นอกจากโทเค็นข้อความแล้ว คลังคำศัพท์ของโมเดลยังมี โทเค็นพิเศษ ที่ใช้จัดโครงสร้างอินพุต ตัวอย่างที่พบบ่อย ได้แก่ <|endoftext|> (ระบุจุดสิ้นสุดของเอกสาร) <|im_start|> และ <|im_end|> (ตัวคั่นข้อความสนทนาในรูปแบบ ChatML ที่ใช้ภายใน)
คุณไม่จำเป็นต้องจัดการสิ่งเหล่านี้โดยตรงเมื่อใช้ OpenAI API — SDK จะจัดการให้ แต่การตระหนักถึงการมีอยู่ของโทเค็นเหล่านี้ช่วยอธิบายว่าเหตุใดบางครั้งคำขอที่มีข้อความ 'ว่างเปล่า' จึงยังใช้โทเค็นไปเล็กน้อย โทเค็นพิเศษยังเป็นเหตุผลที่คุณไม่ควรสร้างสตริงดิบที่มีรูปแบบ <|...|> จากอินพุตของผู้ใช้โดยไม่ทำความสะอาดข้อมูล เพราะอาจรบกวนการจัดรูปแบบอินพุตของโมเดล
นับโทเค็นก่อนส่งเสมอ
ข้อสรุปเชิงปฏิบัติจากบทเรียนนี้คือ ให้นับโทเค็นก่อนส่งคำขอใด ๆ ที่มีการประกอบพรอมต์แบบไดนามิกเสมอ เขียนฟังก์ชันช่วยขนาดเล็กที่ครอบการทำงานของ tiktoken แล้วเรียกใช้ตรงจุดที่คุณประกอบอาร์เรย์ข้อความ บันทึกจำนวนโทเค็นไว้เพื่อให้ติดตามได้ในระยะยาว
สำหรับระบบ RAG เรื่องนี้สำคัญเป็นพิเศษ เพราะส่วนข้อความที่เรียกค้นมาแทรกในพรอมต์อาจมีขนาดแตกต่างกันมาก และคุณต้องตรวจสอบให้แน่ใจว่าผลรวมยังอยู่ภายในหน้าต่างบริบทของโมเดล เราจะสร้างการประกอบบริบทที่คำนึงถึงโทเค็นในลักษณะนี้โดยเฉพาะในบทเรียนไปป์ไลน์ RAG
import tiktoken
def token_count(text, model='gpt-4o'):
enc = tiktoken.encoding_for_model(model)
return len(enc.encode(text))
def safe_assemble_prompt(system, user_content, max_tokens=120000):
combined = system + user_content
count = token_count(combined)
if count > max_tokens:
raise ValueError(
f'Prompt too long: {count} tokens (limit {max_tokens})'
)
return [{'role': 'system', 'content': system},
{'role': 'user', 'content': user_content}]ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจแนวคิดวิศวกรรม AI จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า LLM ประมวลผลข้อความเป็นโทเค็น ไม่ใช่คำ โดยใช้การตัดโทเค็นแบบ BPE กับคลังคำศัพท์ประมาณ 100,000 รายการ ไลบรารี tiktoken ช่วยให้คุณนับโทเค็นภายในเครื่องก่อนเรียก API เพื่อประเมินต้นทุนและตรวจสอบขีดจำกัดบริบท และ ราคาคิดตามจำนวนโทเค็น โดยโทเค็นเอาต์พุตมีราคาสูงกว่าโทเค็นอินพุตอย่างมาก บทถัดไปเราจะสำรวจหน้าต่างบริบทว่าคืออะไร จำกัดแอปพลิเคชันของคุณอย่างไร และโมเดลต่าง ๆ เปรียบเทียบกันอย่างไร
เรียนรู้ Python ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “โทเคนคืออะไร” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “โทเคนคืออะไร” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Engineering Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Engineering Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “โทเคนคืออะไร”
ใช้ไลบรารี tiktoken แบ่งข้อความจริงออกเป็นโทเคน และค้นพบว่าคำ เครื่องหมายวรรคตอน และช่องว่างถูกแมปเป็นลำดับโทเคนในโมเดลต่าง ๆ อย่างไร คุณปฏิบัติ AI Engineering Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Engineering Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Engineering Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “โทเคนคืออะไร” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Engineering Academy นี้ได้ไหม
ได้ บทเรียน AI Engineering Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- โทเคนคืออะไร
- หน้าต่างบริบท: ขนาดและนัยสำคัญ
- การคำนวณและคาดการณ์ค่าใช้จ่าย API
- กลยุทธ์การอยู่ภายในขอบเขตบริบท