โทเค็นและการใช้งาน
การเข้าใจวิธีการทำงานของโทเค็นเป็นสิ่งสำคัญสำหรับการใช้งาน 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
: จำนวนโทเค็นทั้งหมดที่ใช้ในคำขอ (พรอมต์ + การสร้าง)
แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้โทเค็น
ปรับพรอมต์ให้เหมาะสม
รักษาพรอมต์ของคุณให้กระชับและมีจุดเน้น:
-
ลบบริบทที่ไม่จำเป็น: รวมเฉพาะข้อมูลที่เกี่ยวข้องโดยตรงกับคำถามของคุณ
-
ใช้ข้อความระบบอย่างมีประสิทธิภาพ: ข้อความระบบสามารถช่วยกำหนดพฤติกรรมโดยไม่ต้องมีคำอธิบายยาวๆ ในแต่ละข้อความผู้ใช้
# การใช้ข้อความระบบอย่างมีประสิทธิภาพmessages = [{"role": "system", "content": "You are a Thai language translator. Always translate English to Thai."},{"role": "user", "content": "Hello, how are you?"}] -
ตัดทอนประวัติการสนทนา: สำหรับการสนทนาที่ยาว พิจารณาเก็บเฉพาะข้อความล่าสุดและที่เกี่ยวข้องเท่านั้น
การจัดการกับอินพุตยาวๆ
เมื่อทำงานกับเอกสารหรือการสนทนาที่ยาวซึ่งอาจเกินขีดจำกัดโทเค็น:
-
แบ่งข้อความเป็นชิ้นๆ: แบ่งข้อความยาวเป็นชิ้นเล็กๆ และประมวลผลแยกกัน
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 -
สรุปบริบทก่อนหน้า: แทนที่จะส่งประวัติการสนทนาทั้งหมด ให้สรุปรอบการสนทนาก่อนหน้า
# ตัวอย่างวิธีการสรุป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},# เพิ่มการแลกเปลี่ยนข้อความล่าสุด...] -
ใช้วิธีการค้นคืน: สำหรับการตอบคำถามด้วยเอกสารขนาดใหญ่ ใช้การค้นคืนเพื่อดึงเฉพาะส่วนที่เกี่ยวข้องมากที่สุด
การจัดการขีดจำกัดโทเค็น
เมื่อทำงานภายในขีดจำกัดโทเค็น:
-
ตั้งค่า
max_tokens
ที่เหมาะสม: กำหนดค่าที่สมเหตุสมผลสำหรับพารามิเตอร์max_tokens
ตามความยาวของการตอบสนองที่คุณคาดหวัง -
ตรวจสอบการใช้โทเค็น: ติดตามการใช้โทเค็นเพื่อให้แน่ใจว่าคุณอยู่ภายในขีดจำกัดและปรับให้เหมาะสมตามความจำเป็น
-
ใช้กลยุทธ์การตัดทอน: มีแผนสำหรับการจัดการกรณีที่เนื้อหาเกินขีดจำกัดโทเค็น
ตัวอย่าง: ตัวประมาณการใช้โทเค็น
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
ข้อควรพิจารณาเกี่ยวกับภาษาไทย
ภาษาไทยมีลักษณะเฉพาะบางประการที่ส่งผลต่อการแบ่งเป็นโทเค็น:
-
ไม่มีช่องว่างระหว่างคำ: ภาษาไทยไม่ใช้ช่องว่างระหว่างคำ ซึ่งส่งผลต่อการแบ่งเป็นโทเค็นแตกต่างจากภาษาที่แบ่งด้วยช่องว่างเช่นภาษาอังกฤษ
-
โทเค็นระดับอักขระ: อักขระไทยหรือการรวมกันของอักขระหลายตัวกลายเป็นโทเค็นแต่ละตัว
-
วรรณยุกต์และสระ: สิ่งเหล่านี้มักเป็นโทเค็นแยกต่างหากจากพยัญชนะที่มันขยาย
ลักษณะเหล่านี้หมายความว่าข้อความภาษาไทยอาจใช้โทเค็นมากกว่าที่คุณคาดไว้เมื่อเทียบกับข้อความภาษาอังกฤษที่มีความหมายคล้ายกัน โปรดคำนึงถึงสิ่งนี้เมื่อออกแบบพรอมต์และประมาณการใช้โทเค็น