- Blog
- วิธีแก้ไขปัญหา 'ขีดจำกัดโทเค็น OpenAI API' อย่างรวดเร็ว: คู่มือฉบับสมบูรณ์ 2025
วิธีแก้ไขปัญหา 'ขีดจำกัดโทเค็น OpenAI API' อย่างรวดเร็ว: คู่มือฉบับสมบูรณ์ 2025
UNDRESS HER
🔥 AI CLOTHES REMOVER 🔥
DEEP NUDE
Remove Clothes • Generate Nudes
FREE CREDITS
Try it now • No signup required
\n\n## บทนำ: การควบคุมขีดจำกัดโทเค็น OpenAI API
ยินดีต้อนรับสู่คู่มือฉบับสมบูรณ์เกี่ยวกับวิธีจัดการกับปัญหาที่พบบ่อยที่สุดและน่าหงุดหงิดสำหรับนักพัฒนาที่ใช้ประโยชน์จาก API อันทรงพลังของ OpenAI: ข้อผิดพลาด "ขีดจำกัดโทเค็น" ที่น่าสะพรึงกลัว ไม่ว่าคุณจะกำลังสร้างแอปพลิเคชัน AI ที่ซับซ้อน ทำให้การสร้างเนื้อหาเป็นไปโดยอัตโนมัติ หรือรวมโมเดลภาษาขนาดใหญ่เข้ากับเวิร์กโฟลว์ของคุณ การชนขีดจำกัดโทเค็นสามารถหยุดความคืบหน้า ลดคุณภาพประสบการณ์ผู้ใช้ และแม้แต่ทำให้เกิดค่าใช้จ่ายที่ไม่คาดคิด
คู่มือที่ครอบคลุมนี้ออกแบบมาสำหรับนักพัฒนา นักวิทยาศาสตร์ข้อมูล และผู้ที่ชื่นชอบ AI ที่ต้องการทำความเข้าใจ ป้องกัน และแก้ไขปัญหาขีดจำกัดโทเค็น OpenAI API อย่างรวดเร็ว เราจะเจาะลึกกลยุทธ์เชิงปฏิบัติ การเพิ่มประสิทธิภาพในระดับโค้ด และข้อควรพิจารณาทางสถาปัตยกรรมเพื่อให้แน่ใจว่าแอปพลิเคชันของคุณทำงานได้อย่างราบรื่น มีประสิทธิภาพ และอยู่ในงบประมาณ เมื่อจบคู่มือนี้ คุณจะมีความรู้และเครื่องมือในการจัดการการใช้โทเค็นของคุณอย่างมืออาชีพ เพื่อให้มั่นใจว่าโครงการริเริ่ม AI ของคุณจะประสบความสำเร็จ
โทเค็นลิมิตคืออะไร?
ก่อนที่เราจะดำดิ่งสู่การแก้ไขปัญหา เรามาทำความเข้าใจสั้นๆ ว่า "โทเค็น" คืออะไรในบริบทของโมเดล OpenAI โทเค็นสามารถคิดได้ว่าเป็นส่วนหนึ่งของคำ สำหรับข้อความภาษาอังกฤษ 1 โทเค็นจะเท่ากับประมาณ 4 ตัวอักษร หรือ ¾ ของคำ โมเดล OpenAI ประมวลผลข้อความโดยการแบ่งออกเป็นโทเค็นเหล่านี้ ขีดจำกัดโทเค็นหมายถึงจำนวนโทเค็นสูงสุดที่คุณสามารถส่งในการร้องขอ API ครั้งเดียว (อินพุต + เอาต์พุต) หรืออัตราสูงสุดที่คุณสามารถส่งโทเค็นในช่วงเวลาหนึ่ง (โทเค็นต่อนาที, TPM)
การเกินขีดจำกัดเหล่านี้ส่งผลให้เกิดข้อผิดพลาด API ซึ่งโดยทั่วไปจะระบุว่าคำขอมีขนาดใหญ่เกินไป หรือคุณถึงขีดจำกัดอัตราแล้ว คู่มือนี้จะเน้นทั้งขีดจำกัด "จำนวนโทเค็นทั้งหมดต่อคำขอ" และ "ขีดจำกัดอัตรา" (โทเค็นต่อนาที/คำขอต่อนาที)
ข้อกำหนดเบื้องต้น
เพื่อให้ปฏิบัติตามคู่มือนี้ได้อย่างมีประสิทธิภาพ คุณควรมีสิ่งต่อไปนี้:
- บัญชี OpenAI API: การเข้าถึงแพลตฟอร์ม OpenAI และคีย์ API
- ความรู้พื้นฐานเกี่ยวกับการเขียนโปรแกรม: ความคุ้นเคยกับ Python (หรือภาษาที่คุณต้องการ) เนื่องจากตัวอย่างส่วนใหญ่จะเป็น Python
- ความเข้าใจเกี่ยวกับการเรียก API: ความรู้พื้นฐานเกี่ยวกับวิธีการสร้างคำขอ API
- ติดตั้งไลบรารี OpenAI Python แล้ว:
pip install openai
วิธีแก้ไขปัญหา 'ขีดจำกัดโทเค็น OpenAI API' อย่างรวดเร็ว: คู่มือทีละขั้นตอน 2025
การแก้ไขปัญหาขีดจำกัดโทเค็นเกี่ยวข้องกับแนวทางที่หลากหลาย ซึ่งรวมการออกแบบเชิงรุกเข้ากับการแก้ไขปัญหาเชิงรับ นี่คือการแจกแจงอย่างเป็นระบบ:
ขั้นตอนที่ 1: ทำความเข้าใจการใช้โทเค็นและขีดจำกัดในปัจจุบันของคุณ
ขั้นตอนแรกในการแก้ไขปัญหาคือการทำความเข้าใจขอบเขตของปัญหา คุณต้องรู้ว่าขีดจำกัดปัจจุบันของคุณคืออะไร และคุณเข้าใกล้แค่ไหน
1.1 ระบุระดับ OpenAI และขีดจำกัดอัตราของคุณ
OpenAI กำหนดขีดจำกัดอัตราที่แตกต่างกันตามระดับการใช้งานและประวัติการชำระเงินของคุณ บัญชีใหม่มักจะเริ่มต้นด้วยขีดจำกัดที่ต่ำกว่า
-
ตรวจสอบแดชบอร์ดการใช้งานของคุณ:
- เข้าสู่ระบบบัญชี OpenAI ของคุณ
- ไปที่ส่วน "การใช้งาน" หรือ "ขีดจำกัดอัตรา" (โดยปกติจะอยู่ใต้ "การตั้งค่า" หรือ "คีย์ API" ในแถบด้านข้างซ้าย)
- ที่นี่ คุณจะเห็นขีดจำกัดอัตราปัจจุบันของคุณสำหรับโมเดลต่างๆ (เช่น
gpt-3.5-turbo
,gpt-4
) ในแง่ของคำขอต่อนาที (RPM) และโทเค็นต่อนาที (TPM)
-
ทำความเข้าใจขีดจำกัดที่แตกต่างกัน:
- ขีดจำกัดหน้าต่างบริบท: นี่คือจำนวนโทเค็นสูงสุด (อินพุต + เอาต์พุต) ที่อนุญาตในการเรียก API ครั้งเดียว สำหรับ
gpt-3.5-turbo
มักจะเป็น 4096 หรือ 16385 โทเค็น ในขณะที่gpt-4
สามารถมี 8k, 32k หรือแม้แต่ 128k โทเค็น ขึ้นอยู่กับเวอร์ชัน การชนขีดจำกัดนี้หมายความว่าพรอมต์ของคุณยาวเกินไป - ขีดจำกัดอัตรา (RPM/TPM): สิ่งเหล่านี้ควบคุมจำนวนคำขอหรือโทเค็นที่คุณสามารถส่งได้ภายในหนึ่งนาทีทั่วทั้งการเรียก API ของคุณทั้งหมด การชนขีดจำกัดนี้หมายความว่าคุณกำลังส่งคำขอมากเกินไปเร็วเกินไป
- ขีดจำกัดหน้าต่างบริบท: นี่คือจำนวนโทเค็นสูงสุด (อินพุต + เอาต์พุต) ที่อนุญาตในการเรียก API ครั้งเดียว สำหรับ
1.2 ตรวจสอบจำนวนโทเค็นก่อนส่งคำขอ
คำนวณจำนวนโทเค็นของพรอมต์อินพุตของคุณล่วงหน้า ก่อน ส่งไปยัง API สิ่งนี้ช่วยให้คุณสามารถตัดทอนหรือสรุปได้หากจำเป็น
-
การใช้ไลบรารี
tiktoken
: OpenAI มีไลบรารีtiktoken
สำหรับวัตถุประสงค์นี้โดยเฉพาะimport tiktoken def num_tokens_from_string(string: str, model_name: str) -> int: """Returns the number of tokens in a text string for a given model.""" encoding = tiktoken.encoding_for_model(model_name) num_tokens = len(encoding.encode(string)) return num_tokens # Example Usage: text_to_send = "This is a very long piece of text that we want to send to the OpenAI API." model_id = "gpt-3.5-turbo" # Or "gpt-4", "text-davinci-003", etc. tokens = num_tokens_from_string(text_to_send, model_id) print(f"The text has {tokens} tokens.") # For chat completions, you need to account for system/user/assistant roles def num_tokens_from_messages(messages, model="gpt-3.5-turbo-0613"): """Return the number of tokens used by a list of messages.""" try: encoding = tiktoken.encoding_for_model(model) except KeyError: print("Warning: model not found. Using cl100k_base encoding.") encoding = tiktoken.get_encoding("cl100k_base") if model in { "gpt-3.5-turbo-0613", "gpt-3.5-turbo-16k-0613", "gpt-4-0613", "gpt-4-32k-0613", }: tokens_per_message = 3 tokens_per_name = 1 elif model == "gpt-3.5-turbo-0301": tokens_per_message = 4 # every message follows <|start|>user<|end|> tokens_per_name = -1 # no name is expected elif "gpt-3.5-turbo" in model: print("Warning: gpt-3.5-turbo may update over time. Relying on gpt-3.5-turbo-0613 token counts is recommended.") return num_tokens_from_messages(messages, model="gpt-3.5-turbo-0613") elif "gpt-4" in model: print("Warning: gpt-4 may update over time. Relying on gpt-4-0613 token counts is recommended.") return num_tokens_from_messages(messages, model="gpt-4-0613") else: raise NotImplementedError( f"""num_tokens_from_messages() is not implemented for model {model}. See https://github.com/openai/openai-python/blob/main/chatml.md for information on how messages are converted to tokens.""" ) num_tokens = 0 for message in messages: num_tokens += tokens_per_message for key, value in message.items(): num_tokens += len(encoding.encode(value)) if key == "name": num_tokens += tokens_per_name num_tokens += 3 # every reply is primed with <|start|>assistant<|end|> return num_tokens messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "What is the capital of France?"}, ] tokens_chat = num_tokens_from_messages(messages, model="gpt-3.5-turbo") print(f"The chat messages have {tokens_chat} tokens.")
ขั้นตอนที่ 2: เพิ่มประสิทธิภาพพรอมต์และข้อมูลอินพุตของคุณ
วิธีที่ตรงที่สุดในการหลีกเลี่ยงขีดจำกัดโทเค็นคือการลดจำนวนโทเค็นที่คุณส่ง
2.1 การสรุปและการย่อ
- ประมวลผลข้อความขนาดใหญ่ล่วงหน้า: หากคุณกำลังป้อนเอกสารขนาดยาว ให้พิจารณาสรุปเอกสาร ก่อน ส่งไปยัง API คุณสามารถใช้โมเดลอื่นที่ถูกกว่าหรือเร็วกว่า (เช่น การเรียก
gpt-3.5-turbo
ที่เล็กกว่า หรือแม้แต่โมเดลสรุปในเครื่อง) เพื่อกลั่นกรองข้อมูล - ดึงข้อมูลสำคัญ: แทนที่จะส่งบทความทั้งหมด ให้ดึงเฉพาะย่อหน้าหรือจุดข้อมูลที่เกี่ยวข้องที่จำเป็นสำหรับการสอบถามเฉพาะ
- ลบความซ้ำซ้อน: กำจัดวลีที่ซ้ำซ้อน คำทักทายที่ไม่จำเป็น หรือคำแนะนำที่มากเกินไปจากพรอมต์ของคุณ
2.2 วิศวกรรมพรอมต์ที่มีประสิทธิภาพ
-
กระชับ: ตรงประเด็น ทุกคำมีความสำคัญ
-
ใช้ตัวอย่างอย่างประหยัด: แม้ว่าตัวอย่างจะดีสำหรับการเรียนรู้แบบ few-shot แต่ให้ใช้เฉพาะตัวอย่างที่แสดงให้เห็นได้ดีที่สุดเท่านั้น
-
ระบุรูปแบบเอาต์พุต: การแนะนำโมเดลให้สร้างรูปแบบเอาต์พุตที่เฉพาะเจาะจงและน้อยที่สุด (เช่น JSON, ประโยคเดียว) สามารถลดโทเค็นเอาต์พุตได้
# แย่ (มีแนวโน้มที่จะมีเอาต์พุตที่ละเอียด) response = openai.Completion.create( model="text-davinci-003", prompt="Tell me about the history of the internet.", max_tokens=1000 ) # ดี (คาดว่าจะได้เอาต์พุตที่กระชับ) response = openai.ChatCompletion.create( # เปลี่ยนเป็น ChatCompletion สำหรับ gpt-3.5-turbo model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a concise historical summarizer."}, {"role": "user", "content": "Summarize the key milestones in the history of the internet in 3 bullet points."}, ], max_tokens=200 # กำหนด max_tokens ที่สมเหตุสมผลสำหรับเอาต์พุต )
2.3 จัดการประวัติการสนทนา (โมเดลแชท)
สำหรับ AI เชิงสนทนา อาร์เรย์ messages
สามารถเติบโตได้อย่างรวดเร็ว ซึ่งจะใช้โทเค็น
- หน้าต่างเลื่อน: เก็บเฉพาะการสนทนา N ครั้งล่าสุด เมื่อการสนทนาเกินจำนวนโทเค็นที่กำหนด ให้ลบข้อความที่เก่าที่สุด
- สรุปการสนทนาที่ผ่านมา: สรุปประวัติการสนทนาเป็นระยะๆ และแทรกสรุปนั้นลงในข้อความระบบ ซึ่งจะ "บีบอัด" สิ่งที่ผ่านมาได้อย่างมีประสิทธิภาพ
- แนวทางแบบผสมผสาน: ใช้หน้าต่างเลื่อนแต่สรุปข้อความเก่าที่ถูกลบลงในข้อความ "บริบท"
ขั้นตอนที่ 3: ใช้การจัดการขีดจำกัดอัตราและการลองใหม่
แม้จะมีพรอมต์ที่ปรับให้เหมาะสม คุณอาจถึงขีดจำกัดอัตรา (TPM/RPM) ในช่วงที่มีการใช้งานสูงสุดหรือมีการใช้งานพร้อมกันสูง แอปพลิเคชันที่แข็งแกร่งจำเป็นต้องจัดการสิ่งเหล่านี้อย่างสง่างาม
3.1 การถอยกลับแบบเอ็กซ์โพเนนเชียลและการลองใหม่
เมื่อคุณได้รับ RateLimitError
(HTTP 429) คุณไม่ควรรีบลองใหม่ทันที แต่ควรรอเป็นระยะเวลาที่เพิ่มขึ้นก่อนที่จะลองใหม่
-
การใช้ไลบรารี
tenacity
: นี่คือไลบรารี Python ยอดนิยมสำหรับการเพิ่มตรรกะการลองใหม่import openai import time from tenacity import ( retry, wait_random_exponential, stop_after_attempt, retry_if_exception_type, ) @retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6), retry=retry_if_exception_type(openai.APIRateLimitError)) def completion_with_backoff(**kwargs): return openai.ChatCompletion.create(**kwargs) try: response = completion_with_backoff( model="gpt-3.5-turbo", messages=[ {"role": "user", "content": "Hello, world!"} ] ) print(response.choices[0].message.content) except openai.APIRateLimitError: print("Failed after multiple retries due to rate limit.") except Exception as e: print(f"An unexpected error occurred: {e}")
Decorator นี้จะลองเรียกฟังก์ชัน
completion_with_backoff
ซ้ำโดยอัตโนมัติหากเกิดAPIRateLimitError
โดยจะรอเวลาแบบเอ็กซ์โพเนนเชียลแบบสุ่มระหว่าง 1 ถึง 60 วินาที สูงสุด 6 ครั้ง
3.2 ใช้ระบบคิว (ขั้นสูง)
สำหรับแอปพลิเคชันที่มีปริมาณงานสูง การถอยกลับแบบง่ายอาจไม่เพียงพอ
- คิวข้อความ: ใช้ระบบเช่น RabbitMQ, Kafka หรือ AWS SQS เพื่อจัดคิวคำขอ API กระบวนการทำงานเฉพาะสามารถดึงข้อมูลจากคิวได้ในอัตราที่ควบคุมได้ โดยเคารพขีดจำกัดของ OpenAI
- ไลบรารี/มิดเดิลแวร์จำกัดอัตรา: ใช้ตัวจำกัดอัตราส่วนกลางในแอปพลิเคชันของคุณที่ติดตามการใช้โทเค็น/คำขอ และหยุดคำขอเมื่อใกล้ถึงขีดจำกัด ไลบรารีเช่น
ratelimit
(Python) สามารถช่วยได้
ขั้นตอนที่ 4: เลือกโมเดลที่เหมาะสมและโทเค็นสูงสุด
โมเดล OpenAI ที่แตกต่างกันมีขีดจำกัดโทเค็นและค่าใช้จ่ายที่แตกต่างกัน การเลือกโมเดลที่เหมาะสมเป็นสิ่งสำคัญ
4.1 เลือกโมเดลที่ใช้งานได้ที่เล็กที่สุด
gpt-3.5-turbo
เทียบกับgpt-4
:gpt-4
มีความสามารถมากกว่าแต่มีราคาแพงกว่ามากและมีขีดจำกัดอัตราที่ต่ำกว่า สำหรับงานหลายอย่าง (เช่น การสรุปง่ายๆ การจัดหมวดหมู่)gpt-3.5-turbo
ก็เพียงพอและคุ้มค่ากว่ามาก- โมเดลเฉพาะทาง: หากมีสำหรับงานของคุณ (เช่น โมเดลการฝังสำหรับการค้นหาเวกเตอร์) ให้ใช้โมเดลเหล่านั้นแทนโมเดลแชททั่วไป
4.2 ตั้งค่าพารามิเตอร์ max_tokens
ตั้งค่าพารามิเตอร์ max_tokens
เสมอในการเรียก API ของคุณ โดยเฉพาะอย่างยิ่งสำหรับการเติมข้อความแชท สิ่งนี้จำกัดความยาวของการตอบสนองของโมเดล ป้องกันไม่ให้สร้างเอาต์พุตที่ยาวเกินไป (และมีราคาแพง)