Skip to content

โทเค็นและการใช้งาน

การเข้าใจวิธีการทำงานของโทเค็นเป็นสิ่งสำคัญสำหรับการใช้งาน OpenTyphoon.ai API อย่างมีประสิทธิภาพ หน้านี้อธิบายเกี่ยวกับโทเค็น หน้าต่างบริบท และให้เคล็ดลับสำหรับการปรับการใช้โทเค็นของคุณให้เหมาะสมที่สุด

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

โทเค็นเป็นหน่วยพื้นฐานของการประมวลผลข้อความในโมเดลภาษา OpenTyphoon.ai API ประมวลผลข้อความโดยแบ่งเป็นโทเค็นก่อนส่งไปยังโมเดล โทเค็นอาจสั้นเพียงอักขระเดียวหรือยาวเท่ากับคำหนึ่งคำ ขึ้นอยู่กับภาษาและข้อความเฉพาะ

ในภาษาไทย:

  • คำหนึ่งคำอาจประกอบด้วย 1-3 โทเค็นโดยเฉลี่ย
  • ช่องว่างนับเป็นโทเค็น
  • เครื่องหมายวรรคตอนเป็นโทเค็นแยกต่างหาก
  • ตัวเลขมักถูกแบ่งเป็นหลักแต่ละหลัก

ตัวอย่างเช่น วลีภาษาไทย “สวัสดีครับ” อาจถูกแบ่งเป็นประมาณ 3-4 โทเค็น

หน้าต่างบริบท

หน้าต่างบริบท หมายถึงจำนวนโทเค็นสูงสุดที่โมเดลสามารถประมวลผลได้ในคำขอเดียว รวมทั้งอินพุต (พรอมต์) และเอาต์พุตที่สร้างขึ้น โมเดล OpenTyphoon.ai แต่ละตัวมีขนาดหน้าต่างบริบทเฉพาะ:

โมเดลหน้าต่างบริบทรวมขีดจำกัดโทเค็นอินพุตขีดจำกัดโทเค็นเอาต์พุต
โมเดล Typhoon ทั้งหมด8K โทเค็นขึ้นอยู่กับเอาต์พุตขึ้นอยู่กับอินพุต

ผลรวมของโทเค็นอินพุต + เอาต์พุตไม่สามารถเกินขนาดหน้าต่างบริบทได้ ตัวอย่างเช่น ด้วยหน้าต่างบริบท 8K หากพรอมต์อินพุตของคุณใช้ 7K โทเค็น โมเดลจะสามารถสร้างได้เพียง 1K โทเค็นเท่านั้นในการตอบกลับ

การนับโทเค็น

ในการประมาณจำนวนโทเค็นในข้อความของคุณ คุณสามารถใช้การประมาณอย่างคร่าวๆ นี้:

  • สำหรับข้อความภาษาไทย: ประมาณ 2-3 โทเค็นต่อคำ
  • สำหรับข้อความภาษาอังกฤษ: ประมาณ 1.3 โทเค็นต่อคำ

สำหรับการนับโทเค็นที่แม่นยำยิ่งขึ้น โดยเฉพาะอย่างยิ่งในแอปพลิเคชันการผลิต คุณควรใช้โทเค็นไนเซอร์ที่เหมาะสม น่าเสียดายที่โทเค็นไนเซอร์ที่แท้จริงที่ใช้โดย OpenTyphoon.ai ไม่มีให้บริการสาธารณะ แต่คุณสามารถใช้โทเค็นไนเซอร์ที่คล้ายกันสำหรับการประมาณการได้

การใช้โทเค็นในการตอบกลับ API

การตอบกลับ API แต่ละครั้งรวมฟิลด์ usage ที่ให้ข้อมูลเกี่ยวกับโทเค็นที่ใช้ในคำขอของคุณ:

{
"id": "cmpl-abc123",
"object": "chat.completion",
"created": 1677858242,
"model": "typhoon-v2-70b-instruct",
"usage": {
"prompt_tokens": 25,
"completion_tokens": 12,
"total_tokens": 37
},
"choices": [...]
}
  • prompt_tokens: จำนวนโทเค็นในข้อความอินพุตของคุณ
  • completion_tokens: จำนวนโทเค็นในการตอบกลับที่สร้างขึ้น
  • total_tokens: จำนวนโทเค็นทั้งหมดที่ใช้ในคำขอ (พรอมต์ + การสร้าง)

แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้โทเค็น

ปรับพรอมต์ให้เหมาะสม

รักษาพรอมต์ของคุณให้กระชับและมีจุดเน้น:

  1. ลบบริบทที่ไม่จำเป็น: รวมเฉพาะข้อมูลที่เกี่ยวข้องโดยตรงกับคำถามของคุณ

  2. ใช้ข้อความระบบอย่างมีประสิทธิภาพ: ข้อความระบบสามารถช่วยกำหนดพฤติกรรมโดยไม่ต้องมีคำอธิบายยาวๆ ในแต่ละข้อความผู้ใช้

    # การใช้ข้อความระบบอย่างมีประสิทธิภาพ
    messages = [
    {"role": "system", "content": "You are a Thai language translator. Always translate English to Thai."},
    {"role": "user", "content": "Hello, how are you?"}
    ]
  3. ตัดทอนประวัติการสนทนา: สำหรับการสนทนาที่ยาว พิจารณาเก็บเฉพาะข้อความล่าสุดและที่เกี่ยวข้องเท่านั้น

การจัดการกับอินพุตยาวๆ

เมื่อทำงานกับเอกสารหรือการสนทนาที่ยาวซึ่งอาจเกินขีดจำกัดโทเค็น:

  1. แบ่งข้อความเป็นชิ้นๆ: แบ่งข้อความยาวเป็นชิ้นเล็กๆ และประมวลผลแยกกัน

    def process_long_document(document, chunk_size=1000, overlap=100):
    # นี่เป็นตัวอย่างที่ถูกทำให้ง่ายขึ้น - ในทางปฏิบัติ คุณอาจต้องการแบ่งตามขอบเขตของประโยค
    words = document.split()
    chunks = []
    for i in range(0, len(words), chunk_size - overlap):
    chunk = ' '.join(words[i:i + chunk_size])
    chunks.append(chunk)
    return chunks
  2. สรุปบริบทก่อนหน้า: แทนที่จะส่งประวัติการสนทนาทั้งหมด ให้สรุปรอบการสนทนาก่อนหน้า

    # ตัวอย่างวิธีการสรุป
    summary_messages = [
    {"role": "system", "content": "Summarize the following conversation in 2-3 sentences."},
    {"role": "user", "content": full_conversation_history}
    ]
    summary_response = client.chat.completions.create(
    model="typhoon-v2-70b-instruct",
    messages=summary_messages,
    max_tokens=100
    )
    summary = summary_response.choices[0].message.content
    # ตอนนี้ใช้สรุป + ข้อความล่าสุด
    new_conversation = [
    {"role": "system", "content": "Previous conversation summary: " + summary},
    # เพิ่มการแลกเปลี่ยนข้อความล่าสุด...
    ]
  3. ใช้วิธีการค้นคืน: สำหรับการตอบคำถามด้วยเอกสารขนาดใหญ่ ใช้การค้นคืนเพื่อดึงเฉพาะส่วนที่เกี่ยวข้องมากที่สุด

การจัดการขีดจำกัดโทเค็น

เมื่อทำงานภายในขีดจำกัดโทเค็น:

  1. ตั้งค่า max_tokens ที่เหมาะสม: กำหนดค่าที่สมเหตุสมผลสำหรับพารามิเตอร์ max_tokens ตามความยาวของการตอบสนองที่คุณคาดหวัง

  2. ตรวจสอบการใช้โทเค็น: ติดตามการใช้โทเค็นเพื่อให้แน่ใจว่าคุณอยู่ภายในขีดจำกัดและปรับให้เหมาะสมตามความจำเป็น

  3. ใช้กลยุทธ์การตัดทอน: มีแผนสำหรับการจัดการกรณีที่เนื้อหาเกินขีดจำกัดโทเค็น

ตัวอย่าง: ตัวประมาณการใช้โทเค็น

def estimate_tokens(text, lang="thai"):
# การประมาณอย่างคร่าวๆ มาก - ใช้โทเค็นไนเซอร์ที่เหมาะสมสำหรับการผลิต
if lang.lower() == "thai":
# ข้อความภาษาไทย: ประมาณ 2.5 โทเค็นต่อคำ (ค่าเฉลี่ยคร่าวๆ)
# นับอักขระภาษาไทยและช่องว่าง
words = len(text.split())
return int(words * 2.5)
else:
# ข้อความภาษาอังกฤษ: ประมาณ 1.3 โทเค็นต่อคำ
words = len(text.split())
return int(words * 1.3)
def check_token_limits(messages, model="typhoon-v2-70b-instruct", max_output_tokens=500):
# ประมาณโทเค็นอินพุตทั้งหมด
input_tokens = 0
for message in messages:
# เพิ่ม 4 โทเค็นสำหรับการจัดรูปแบบข้อความ
content = message.get("content", "")
lang = "english" if all(ord(c) < 128 for c in content) else "thai"
input_tokens += estimate_tokens(content, lang) + 4
# ตรวจสอบกับขีดจำกัดบริบทของโมเดล
context_limit = 8192 # 8K โทเค็นสำหรับโมเดล Typhoon ทั้งหมด
remaining_tokens = context_limit - input_tokens
if remaining_tokens <= 0:
print(f"คำเตือน: อินพุตเกินหน้าต่างบริบทของ {context_limit} โทเค็น")
return False
if remaining_tokens < max_output_tokens:
print(f"คำเตือน: เหลือโทเค็นสำหรับเอาต์พุตเพียง {remaining_tokens} โทเค็น " +
f"(ขอ {max_output_tokens})")
print("พิจารณาลดความยาวอินพุตหรือโทเค็นเอาต์พุตที่ขอ")
return False
print(f"ประมาณโทเค็นอินพุต: {input_tokens}")
print(f"โทเค็นที่เหลือสำหรับเอาต์พุต: {remaining_tokens}")
return True

ข้อควรพิจารณาเกี่ยวกับภาษาไทย

ภาษาไทยมีลักษณะเฉพาะบางประการที่ส่งผลต่อการแบ่งเป็นโทเค็น:

  1. ไม่มีช่องว่างระหว่างคำ: ภาษาไทยไม่ใช้ช่องว่างระหว่างคำ ซึ่งส่งผลต่อการแบ่งเป็นโทเค็นแตกต่างจากภาษาที่แบ่งด้วยช่องว่างเช่นภาษาอังกฤษ

  2. โทเค็นระดับอักขระ: อักขระไทยหรือการรวมกันของอักขระหลายตัวกลายเป็นโทเค็นแต่ละตัว

  3. วรรณยุกต์และสระ: สิ่งเหล่านี้มักเป็นโทเค็นแยกต่างหากจากพยัญชนะที่มันขยาย

ลักษณะเหล่านี้หมายความว่าข้อความภาษาไทยอาจใช้โทเค็นมากกว่าที่คุณคาดไว้เมื่อเทียบกับข้อความภาษาอังกฤษที่มีความหมายคล้ายกัน โปรดคำนึงถึงสิ่งนี้เมื่อออกแบบพรอมต์และประมาณการใช้โทเค็น