AI Engineering Academy · บทเรียน

โทเคนคืออะไร

ใช้ไลบรารี tiktoken แบ่งข้อความจริงออกเป็นโทเคน และค้นพบว่าคำ เครื่องหมายวรรคตอน และช่องว่างถูกแมปเป็นลำดับโทเคนในโมเดลต่าง ๆ อย่างไร

บทเรียน 1 จาก 413 ขั้นตอน

โทเคนคืออะไร เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. โทเคนคืออะไร
  2. หน้าต่างบริบท: ขนาดและนัยสำคัญ
  3. การคำนวณและคาดการณ์ค่าใช้จ่าย API
  4. กลยุทธ์การอยู่ภายในขอบเขตบริบท
← กลับไปที่ AI Engineering Academy