กลับไปที่บล็อก

การลดต้นทุนคู่มือ

การกำหนดเส้นทางโมเดลเพื่อลดค่าใช้จ่าย API: โมเดลราคาถูกก่อน แล้วยกระดับ

ส่งคำขอที่ง่ายไปยังโมเดลราคาถูกและยกระดับเฉพาะคำขอที่ยาก ดูค่าใช้จ่ายผสมของ 10,000 คำขอที่การยกระดับ 10%, 30% และ 50% พร้อมเราเตอร์ Python สั้นๆ

โดย CheapTokens Teamเผยแพร่เมื่อ ใช้เวลาอ่าน 7 นาที

หน้าปก: คำขอไปยังโมเดลราคาถูกก่อนและถูกยกระดับไปยังโมเดลที่สองเฉพาะเมื่อติดขัด
ในหน้านี้
  1. คำขอใดของคุณที่ง่าย?
  2. 10,000 คำขอมีค่าใช้จ่ายเท่าไร: แบบคาสเคดเทียบกับเราเตอร์
  3. เราเตอร์ใน Python: สองการเรียกและการตรวจหนึ่งครั้ง
  4. ตรวจสอบตัวเอง
  5. ไปที่ไหนต่อ

การกำหนดเส้นทางสามารถลดค่าใช้จ่ายได้เมื่อโมเดลราคาถูกให้ผลลัพธ์รอบแรกถูกกว่ามากเมื่อเทียบกับโมเดลที่สอง และมีคำขอไม่มากที่ต้องยกระดับ: ส่งทุกคำขอไปยังโมเดลราคาถูกก่อน แล้วส่งเฉพาะคำขอที่ยากไปยังโมเดลที่สอง การประหยัดจริงหรือไม่ขึ้นอยู่กับสัดส่วนคำขอที่คุณยกระดับ ด้านล่างคือการคำนวณสำหรับ 10,000 คำขอที่ 10%, 30% และ 50% พร้อมฟังก์ชัน Python ที่คุณคัดลอกไปใช้ในโปรเจกต์ได้

รูปแบบนี้ไม่ใช่เรื่องใหม่ โพสต์วิศวกรรมของ Anthropic "Building effective agents" (19 ธันวาคม 2024) เรียกสิ่งนี้ว่าเวิร์กโฟลว์การกำหนดเส้นทาง: คำถามทั่วไปที่ง่ายจะไปยังโมเดลที่เล็กกว่าและคุ้มต้นทุน ส่วนคำถามที่แปลกและยากจะไปยังโมเดลที่ความสามารถสูงกว่า โพสต์นั้นไม่ได้ให้ราคา ตัวเลขในที่นี้จึงเป็นของเราเอง โดยอิงราคาสดของ CheapTokens

คำขอใดของคุณที่ง่าย?#

การกำหนดเส้นทางจะได้ผลก็ต่อเมื่อคุณบอกได้ด้วยกฎว่า "ยาก" หมายถึงอะไร ไม่ใช่ด้วยความรู้สึก แต่เป็นกฎที่โค้ดตรวจสอบได้ เลือกกรณีที่ใกล้เคียงกับของคุณที่สุด:

เลือกกรณีของคุณ

เลือกกรณีของคุณ

แชทบอทสนับสนุน

ตั๋วส่วนใหญ่เป็นคำถามที่พบบ่อยสั้นๆ: คำสั่งซื้อของฉันอยู่ที่ไหน รีเซ็ตรหัสผ่านอย่างไร มีไม่กี่รายการที่ต้องการคำตอบยาวและละเอียด ง่าย: โมเดลแรกตอบและไม่ตอบกลับ UNSURE ยาก: มันตอบ UNSURE หรือคำตอบถูกตัด (finish_reason เป็น length)

ไปป์ไลน์เอกสาร

ทุกเอกสารผ่านการสกัดก่อน ง่าย: ผลลัพธ์แยกวิเคราะห์เป็น JSON ที่ถูกต้องพร้อมฟิลด์ที่จำเป็นครบถ้วน ยาก: การแยกวิเคราะห์ล้มเหลวหรือฟิลด์ว่าง เฉพาะเอกสารเหล่านั้นเท่านั้นที่รันซ้ำบนโมเดลที่สอง

เอเจนต์เขียนโค้ด

การแก้ไขง่ายๆ ไปยังโมเดลราคาถูก ยกระดับขั้นตอนเมื่อขั้นตอนเดิมล้มเหลวสองครั้งติดต่อกัน หรือเมื่อคำตอบถูกตัด (finish_reason เป็น length)

อย่ายกระดับเพียงเพราะ "โมเดลดูไม่มั่นใจ" เว้นแต่คุณบอกวิธีให้มันสื่อออกมา คำสั่งบรรทัดเดียว ("ตอบกลับ UNSURE เป๊ะๆ หากคุณตอบไม่ได้") เปลี่ยนความรู้สึกให้เป็นสิ่งที่ if อ่านได้

10,000 คำขอมีค่าใช้จ่ายเท่าไร: แบบคาสเคดเทียบกับเราเตอร์#

สมมติว่าคุณรันบอทสนับสนุนด้วย 10,000 คำขอต่อเดือน คำขอเฉลี่ย 800 โทเค็นขาเข้าและ 300 โทเค็นขาออก นี่คือสมมติฐาน; เปลี่ยนเป็นของคุณเองจาก usage (บทความการนับโทเค็น ของเราแสดงว่าอ่านได้จากที่ไหน)

มีสองวิธีในการต่อสายการกำหนดเส้นทาง และคิดเงินต่างกัน:

  • คาสเคด ทุกคำขอไปยังโมเดลราคาถูก สัดส่วน p ไม่ผ่านการตรวจและถูกส่งอีกครั้งไปยังโมเดลที่สอง คำขอเหล่านั้นจ่ายสองครั้ง: ค่าใช้จ่าย = N × [ราคาถูก + p × โมเดลที่สอง]
  • เราเตอร์ การเรียกตัวจำแนกขนาดเล็กตัดสินใจล่วงหน้า ง่ายไปยังโมเดลราคาถูก ยากไปยังโมเดลที่สองโดยตรง: ค่าใช้จ่าย = N × [(1 − p) × ราคาถูก + p × โมเดลที่สอง] บวกตัวจำแนกในทุกคำขอ

เราจะใช้คาสเคด เพราะไม่ต้องมีตัวจำแนกและเริ่มต้นได้ง่ายกว่า รอบแรกคือ GLM-5.3-Flash (zai-org/GLM-5.3-Flash, คอนเท็กซ์ 390K, เอาต์พุตสูงสุด 8,192 โทเค็น) รอบที่สองคือ DeepSeek-V4-Flash รีลีส 0731 (deepseek-ai/DeepSeek-V4-Flash-0731, คอนเท็กซ์ 380K, เอาต์พุตสูงสุด 32,768 โทเค็น) ดังนั้นคำตอบที่ไม่พอใน 8,192 โทเค็นจึงมีที่ให้จบ ทั้งคู่ถูกกว่า OpenRouter โดยรวม เมื่อนับอินพุตและเอาต์พุตรวมกัน ตารางสดด้านล่างแสดงคอลัมน์ OpenRouter เทียบกับของเรา

รอบแรกครอบคลุมทั้ง 10,000 คำขอเสมอ: อินพุต 8,000,000 และเอาต์พุต 3,000,000 โทเค็น รอบที่สองครอบคลุมเฉพาะสัดส่วนที่ยกระดับ คอลัมน์สุดท้ายคือทางเลือก: ทั้ง 10,000 คำขอไปยังโมเดลที่สองโดยตรง

สัดส่วนที่ยกระดับ โทเค็นรอบที่สอง (เข้า / ออก) รอบแรก ทั้ง 10,000 รอบที่สอง เฉพาะที่ยกระดับ ทั้งหมดบนโมเดลที่สอง ทั้ง 10,000
10% 800,000 / 300,000 $0.28 $0.042 $0.42
30% 2,400,000 / 900,000 $0.28 $0.126 $0.42
50% 4,000,000 / 1,500,000 $0.28 $0.21 $0.42

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

นี่คือโหลดเดียวกันสำหรับทุกโมเดลพร้อมกัน เพื่อให้คุณเห็นว่าตัวเลือกโมเดลเดียวอยู่ตรงไหน:

โมเดล ต่อคำขอ 10,000 คำขอ OpenRouter, 10,000 คำขอ
GLM-5.3-Flash $0.000028 $0.28 $0.517
DeepSeek-V4-Flash $0.000042 $0.42 $0.98
MiniMax-M2.7 $0.000085 $0.85 $10.20

800 โทเค็นอินพุตและ 300 โทเค็นเอาต์พุตต่อคำขอ ราคาต่อ 1M โทเค็นเป็นราคาปัจจุบันและเปลี่ยนแปลงไปพร้อมกับอัตราค่าบริการของเรา คอลัมน์ OpenRouter แสดงราคาอ้างอิงสำหรับปริมาณงานเดียวกัน

เมื่อใดที่คาสเคดไม่คุ้ม? เมื่อรอบแรกบวกสัดส่วนที่ยกระดับมีค่าใช้จ่ายมากกว่าการส่งทุกอย่างไปยังโมเดลที่สอง ในสัญลักษณ์: ราคาถูก + p × โมเดลที่สอง < โมเดลที่สอง ซึ่งหมายถึง p < 1 − ราคาถูก/โมเดลที่สอง สำหรับคู่นี้ รอบแรกมีค่าใช้จ่ายเป็นสัดส่วนที่เห็นได้ชัดของราคาโมเดลที่สองบนโหลดนี้ ดังนั้นกำไรจากคาสเคดจึงหดลง และที่สัดส่วนการยกระดับสูงมันก็หายไป ที่ 50% คาสเคดอาจแพ้การส่งทั้ง 10,000 คำขอไปยังโมเดลที่สองโดยตรง ดังนั้นตรวจสอบผลรวมของสองรอบเทียบกับคอลัมน์สุดท้ายก่อนตัดสินใจ อัตราส่วนขึ้นอยู่กับส่วนผสมอินพุต/เอาต์พุตของคุณ เพราะสองโมเดลคิดราคาสองด้านต่างกัน ดังนั้นอ่านจากแถวของคุณเอง

ตัวแปรเราเตอร์เพิ่มสิ่งหนึ่ง: ตัวจำแนก สมมติว่ามันอ่านอินพุต 300 โทเค็นและตอบใน 5 โทเค็นบนโมเดลราคาถูก ต่อคำขอ สำหรับ 10,000 คำขอ นั่นคืออินพุต 3,000,000 และเอาต์พุต 50,000 โทเค็น หรือ $0.062 ต่อเดือนเพิ่มเติม เปรียบเทียบบรรทัดนี้กับสัดส่วน p ของคอลัมน์รอบแรก (10%, 30% หรือ 50% ของมัน): นั่นคือสิ่งที่คาสเคดเสียเปล่าโดยการรันรอบแรกบนคำขอที่แล้วยกระดับ หากบรรทัดตัวจำแนกใหญ่กว่า คาสเคดคือจุดเริ่มต้นที่ถูกกว่า; หากเล็กกว่า เราเตอร์ประหยัดกว่า

ลองตัวเลขของคุณเองก่อนสร้างอะไร:

เครื่องคำนวณค่าใช้จ่าย

หนึ่งเดือนของบอทสนับสนุน ทั้งหมดบนโมเดลเดียว

โทเค็นอินพุตต่อคำขอ: 800 · โทเค็นเอาต์พุตต่อคำขอ: 300 · คำขอต่อวัน: 10,000

โมเดลต่อวันต่อเดือน
GLM-5.3-Flash$0.28$8.40
DeepSeek-V4-Flash$0.42$12.60
MiniMax-M2.7$0.85$25.50

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

เราเตอร์ใน Python: สองการเรียกและการตรวจหนึ่งครั้ง#

ทั้งสองโมเดลอยู่หลัง base URL เดียวที่เข้ากันได้กับ OpenAI และยอดเงินเดียว ดังนั้นการกำหนดเส้นทางไม่ต้องมีบัญชีหรือคีย์ที่สอง โค้ดด้านล่างเป็นตัวอย่าง: ตัวเลขในนั้น (max_tokens, กฎ UNSURE) เป็นของคุณที่จะปรับแต่ง การเรียกครั้งที่สองได้ max_tokens สูงกว่า ดังนั้นคำตอบที่ถูกตัดที่ 600 โทเค็นจึงจบได้ Base URL, model ids และอื่นๆ อยู่ใน เอกสาร CheapTokens

python
import os
from openai import OpenAI

client = OpenAI(
    base_url='https://api.cheaptokens.dev/v1',
    api_key=os.environ['CHEAPTOKENS_API_KEY'],
)

CHEAP = 'zai-org/GLM-5.3-Flash'
SECOND = 'deepseek-ai/DeepSeek-V4-Flash-0731'
SYSTEM = 'Answer briefly. If you cannot answer well, reply exactly UNSURE.'


def ask(model, question, max_tokens):
    r = client.chat.completions.create(
        model=model,
        max_tokens=max_tokens,
        messages=[
            {'role': 'system', 'content': SYSTEM},
            {'role': 'user', 'content': question},
        ],
    )
    choice = r.choices[0]
    return choice.message.content or '', choice.finish_reason


def needs_escalation(text, finish_reason):
    return finish_reason == 'length' or not text.strip() or 'UNSURE' in text


def answer(question):
    text, why = ask(CHEAP, question, 600)
    if needs_escalation(text, why):
        text, why = ask(SECOND, question, 4000)
        if 'UNSURE' in text:
            text = 'Sorry, I could not answer this one.'
    return text
โฟลว์การกำหนดเส้นทาง: คำขอ, โมเดลราคาถูก, ตรวจสอบ, โมเดลที่สอง, ตอบกลับ
คาสเคด: โมเดลที่สองเห็นเฉพาะคำขอที่ไม่ผ่านการตรวจ

สามนิสัยทำให้สิ่งนี้ซื่อสัตย์ไม่ใช่แค่ถูก:

  • นับการยกระดับ บันทึกว่า needs_escalation ทำงานบ่อยแค่ไหน นั่นคือ p ของคุณ และเป็นตัวเลขที่ตัดสินว่าคาสเคดคุ้มหรือไม่
  • เลือกโมเดลที่สองจากชุดทดสอบของคุณเอง นำ 50 คำขอยากจากบันทึกของคุณ รันผ่านทั้งสองโมเดล และเก็บโมเดลที่สองไว้เฉพาะเมื่อมันแก้สิ่งที่โมเดลแรกพลาดไป จุดเด่นที่เอกสารระบุคือขีดจำกัดคำตอบ 32,768 โทเค็น และชุดของคุณเองแสดงว่านั่นคือจุดเด่นที่คุณต้องการหรือไม่
  • ส่งคำขอเดิม ไม่ใช่คำขอที่ยาวขึ้น หากคุณวางคำตอบที่ล้มเหลวลงในการเรียกครั้งที่สอง คุณจ่ายมันเป็นอินพุต เริ่มรอบที่สองใหม่สะอาด เว้นแต่คำตอบแรกจะเป็นบริบทที่มีประโยชน์จริงๆ
หนึ่งคำขอที่ยกระดับ: โมเดลแรกตอบ UNSURE การเรียกครั้งที่สองคืนคำตอบ
หนึ่งคำขอผ่านเราเตอร์: ก่อนและหลังการตรวจ

ตรวจสอบตัวเอง#

เช็กด่วน

ในคาสเคด 30% ของคำขอล้มเหลวการตรวจบนโมเดลแรก คำขอเหล่านั้นมีค่าใช้จ่ายเท่าไร?

แสดงคำตอบ

คำตอบ: ราคาโมเดลแรกบวกราคาโมเดลที่สอง

การเรียกครั้งแรกถูกคิดเงินแล้วเมื่อคุณทิ้งคำตอบ คำขอที่ยกระดับจ่ายสองครั้ง ซึ่งเป็นเหตุผลที่สัดส่วน p ตัดสินทุกอย่าง

ไปที่ไหนต่อ#

หากคุณไม่แน่ใจว่าโมเดลใดควรรับรอบแรก MiniMax-M2.7 vs DeepSeek-V4-Flash เปรียบเทียบตามงาน สำหรับมุมมองต่องานแทนที่จะต่อโทเค็น ดู ราคาต่อ 1M โทเค็นเทียบกับค่าใช้จ่ายต่องาน และสำหรับลูปที่มีหลายขั้นตอน วิธีประมาณค่าใช้จ่ายของเอเจนต์ AI ราคาสดของทุกโมเดลอยู่ที่ หน้าราคา และหน้าโมเดลคือ DeepSeek และ GLM