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

RAG และข้อมูลคู่มือ

คำถาม RAG มีค่าใช้จ่ายเท่าไร: ควรส่งกี่ชิ้นส่วน

ประมาณการโทเคนในหนึ่งคำถาม RAG ดูค่าใช้จ่ายของ 1,000 และ 100,000 คำถามตามราคาจริง และเลือกจำนวนชิ้นส่วนที่พอดีงบประมาณของคุณ

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

แผนภาพ: คำถามและชิ้นส่วนที่ดึงมาไหลเข้าสู่โมเดล ค่าใช้จ่ายขึ้นอยู่กับจำนวนชิ้นส่วน
ในหน้านี้
  1. อะไรบ้างที่อยู่ในหนึ่งคำขอ RAG
  2. 1,000 คำถามมีค่าใช้จ่ายเท่าไร
  3. Top-k: ทุกชิ้นส่วนเพิ่มจำนวนเท่ากัน
  4. เอกสารทั้งฉบับในพรอมต์ หรือสี่ชิ้นส่วน
  5. ส่งคำขอ
  6. สี่วิธีลดอินพุต

แชทบอทเอกสารของคุณทำงานได้ ใบแจ้งหนี้ใบแรกมาถึง และมันใหญ่กว่าที่คำถามควรจะเป็น ในเกือบทุกการตั้งค่า RAG เงินจะไปที่จุดเดียว: ชิ้นส่วนที่ดึงมา (retrieved chunks) ที่คุณวางไว้หน้าทุกคำถาม หนึ่งคำถาม RAG มีค่าใช้จ่ายเป็นโทเคนของคำถาม คำแนะนำของคุณ และ N ชิ้นส่วนทางฝั่งอินพุต บวกคำตอบสั้น ๆ ทางฝั่งเอาต์พุต ชิ้นส่วนคือส่วนที่คุณควบคุมได้ และแต่ละชิ้นจะเพิ่มจำนวนโทเคนเท่ากันในทุก ๆ คำขอ

คู่มือนี้จะนับหนึ่งคำขอ ราคา 1,000 และ 100,000 คำขอตามราคาจริง และแสดงสิ่งที่เปลี่ยนไปเมื่อคุณย้าย top-k จาก 3 เป็น 10 การดึงข้อมูลเอง (vector store, การแบ่งชิ้นส่วนของคุณ) ยังอยู่ฝั่งคุณ มีเพียงการเรียกสร้างคำตอบครั้งสุดท้ายเท่านั้นที่ไปยัง API ของโมเดล หากการคิดค่าบริการอินพุตและเอาต์พุตเป็นเรื่องใหม่สำหรับคุณ เริ่มจาก โทเคนอินพุตกับเอาต์พุต

อะไรบ้างที่อยู่ในหนึ่งคำขอ RAG#

สมมติว่าคุณรันบอทสนับสนุนบนเอกสารบริษัท ลูกค้าถามว่า "ฉันจะรีเซ็ตล็อกอินสองขั้นตอนได้อย่างไร?" ตัวดึงข้อมูลของคุณคืนข้อความที่ดีที่สุดห้าท่อน และคุณส่งสิ่งนี้ไปยังโมเดล:

  • system prompt: "ตอบจากบริบทเท่านั้น หากไม่มีให้บอกว่าไม่มี" — ประมาณ 300 โทเคนเมื่อคุณเพิ่มกฎการจัดรูปแบบ;
  • คำถามพร้อมบริบทแชทเล็กน้อย — ประมาณ 200 โทเคน;
  • 5 ชิ้นส่วน ชิ้นละประมาณ 500 โทเคน — 5 × 500 = 2,500 โทเคน;
  • คำตอบ: สองหรือสามย่อหน้าสั้น ๆ — ประมาณ 300 โทเคนออก

ฝั่งอินพุตคือ 2,500 + 300 + 200 = 3,000 โทเคน ฝั่งเอาต์พุตประมาณ 300 นี่คือสมมติฐานของผู้เขียนสำหรับบอทสนับสนุนทั่วไป เปลี่ยนเป็นตัวเลขของคุณเอง ทุกอย่างด้านล่างใช้คำขอนี้เป็นหน่วย

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

ทายตัวเลข

คำขอข้างต้นส่งโทเคนอินพุตกี่โทเคน?

แสดงคำตอบ

คำตอบ: 3,000

3,000: 5 ชิ้นส่วน × 500 = 2,500 บวก 300 สำหรับ system prompt และ 200 สำหรับคำถาม ชิ้นส่วนครองสัดส่วนหลัก

1,000 คำถามมีค่าใช้จ่ายเท่าไร#

หนึ่งคำขอเล็กเกินกว่าจะรู้สึกได้ ดังนั้นขยายขนาด ด้วย 3,000 โทเคนเข้าและ 300 ออก 1,000 คำถามส่ง 3,000,000 โทเคนอินพุตและสร้าง 300,000 โทเคนเอาต์พุต ลากแถบเลื่อนด้านล่างให้ตรงกับบอทของคุณ เว็บไซต์จะคำนวณใหม่ตามราคาจริงสำหรับทุกโมเดล

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

หนึ่งวันของบอทสนับสนุน

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

โมเดลต่อวันต่อเดือน
GLM-5.3-Flash$0.072$2.16
DeepSeek-V4-Flash$0.075$2.25
MiniMax-M2.7$0.195$5.85

ตารางแสดงภาระงานเดียวกันสำหรับทั้งสามโมเดล พร้อมข้อมูลอ้างอิง OpenRouter อยู่ข้าง ๆ เมื่อนับรวมทั้งหมด ทั้งอินพุตและเอาต์พุตรวมกัน แต่ละตัวถูกกว่า OpenRouter ในที่นี้

โมเดล ต่อคำขอ 1,000 คำขอ OpenRouter, 1,000 คำขอ
GLM-5.3-Flash $0.000072 $0.072 $0.147
DeepSeek-V4-Flash $0.000075 $0.075 $0.19
MiniMax-M2.7 $0.0002 $0.195 $1.26

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

แล้วที่ 100,000 คำถามล่ะ? นั่นคือ 300,000,000 โทเคนเข้าและ 30,000,000 ออก บน DeepSeek-V4-Flash นั่นคือ $7.50 บน GLM-5.3-Flash $7.20 บน MiniMax-M2.7 $19.50 ราคาคงที่ต่อโมเดล ไม่มีช่วงเวลาเร่งด่วน ดังนั้นแบตช์กลางคืนและแชทกลางวันมีค่าใช้จ่ายต่อโทเคนเท่ากัน ดูรายการราคาเต็มได้ที่ หน้าราคา

Top-k: ทุกชิ้นส่วนเพิ่มจำนวนเท่ากัน#

นี่คือสถานการณ์ที่สอง: ผู้ช่วยวิกิภายในองค์กร มีคนแนะนำว่า "ส่ง 10 ชิ้นส่วนแทน 3 ชิ้น เผื่อไว้" อินพุตเติบโตเป็นเส้นตรง: แต่ละชิ้นส่วนคืออีก 500 โทเคนในทุกคำขอ

สามชิ้นส่วนเทียบกับสิบ: คำถามเดียวกัน ขนาดอินพุตต่างกัน
โทเคนอินพุตต่อคำขอที่ top-k 3 และ top-k 10 ภายใต้สมมติฐาน 500 โทเคนต่อชิ้นส่วน

2,000 เทียบกับ 5,500 โทเคน: คำตอบมีความยาวเท่ากัน ดังนั้นความแตกต่างทั้งหมดในบิลของผู้ช่วยวิกิคืออินพุต ไม่ว่ามันจะให้คำตอบที่ดีกว่าหรือไม่เป็นคำถามด้านคุณภาพ: เมื่อเลยจุดที่ข้อความที่ถูกต้องอยู่ในบริบทแล้ว ชิ้นส่วนเพิ่มเติมส่วนใหญ่เพิ่มสัญญาณรบกวนและค่าใช้จ่าย วิธีปฏิบัติในการเลือก k คือนำชุดคำถามจริงมาตรวจสอบว่า k ใดที่ข้อความที่ถูกต้องปรากฏ แล้วหยุดที่ค่าเหนือกว่านั้นเล็กน้อย

หน้าต่างบริบทคือขีดจำกัดอีกอย่าง ทั้งสามโมเดลที่นี่มีที่ว่างเพียงพอสำหรับ top-k ทั่วไป: 180K โทเคนสำหรับ MiniMax-M2.7, 380K สำหรับ DeepSeek-V4-Flash และ 390K สำหรับ GLM-5.3-Flash ขีดจำกัดเอาต์พุตแตกต่างกัน: สูงสุด 8,192 โทเคนต่อคำตอบสำหรับ GLM-5.3-Flash และ MiniMax-M2.7 สูงสุด 32,768 สำหรับ DeepSeek-V4-Flash ซึ่งสำคัญหากคำตอบของคุณเป็นรายงานยาวแทนการตอบสั้น

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

กรณี RAG ของคุณคืออะไร?

คำตอบสั้นจากชิ้นส่วนไม่กี่ชิ้น

บอทสนับสนุนหรือ FAQ ที่มี top-k 3–6 และคำตอบไม่กี่ร้อยโทเคนเข้ากับทั้งสามโมเดล เลือกตามคุณภาพบนคำถามของคุณเอง แล้วให้ตารางค่าใช้จ่ายด้านบนตัดสิน

คำตอบยาวและสรุป

หากคำตอบยาวถึงหลายพันโทเคน DeepSeek-V4-Flash อนุญาตสูงสุด 32,768 โทเคนเอาต์พุตต่อคำตอบและบริบท 380K

เอกสารหลายฉบับต่อคำขอ

หากคุณต้องการรวมหลายท่อนหรือทั้งส่วน GLM-5.3-Flash มีบริบทใหญ่ที่สุดในสามตัวที่ 390K

เอกสารทั้งฉบับในพรอมต์ หรือสี่ชิ้นส่วน#

สถานการณ์ที่สาม: ถามตอบสัญญา เวอร์ชันขี้เกียจวาง PDF ทั้ง 30,000 โทเคนลงในทุกคำถาม เวอร์ชันดึงข้อมูลส่งคำถาม คำแนะนำ และสี่ชิ้นส่วนที่เกี่ยวข้องชิ้นละประมาณ 650 โทเคน รวมประมาณ 3,000 โทเคน 1,000 คำถามเดียวกัน คำตอบ 300 โทเคนเดียวกัน:

ค่าใช้จ่ายของ 1,000 คำถามสัญญาบน DeepSeek-V4-Flash
  • เอกสาร 30,000 โทเคนทั้งฉบับในทุกคำขอ$0.48
  • คำถาม คำแนะนำ และ 4 ชิ้นส่วนที่ดึงมา ประมาณ 3,000 โทเคน$0.075

เอกสารเต็มส่งอินพุตสิบเท่า 30,000 ÷ 3,000 = 10 สำหรับคำถามเดียวกัน ยังสมเหตุสมผลสำหรับคำถามครั้งเดียวเกี่ยวกับเอกสารที่พอดีในบริบท สำหรับบอทที่ตอบทั้งวัน มันคือค่าเริ่มต้นที่แพง หากอินพุตจำนวนมากเป็นข้อความเดิมทุกครั้ง อ่านเกี่ยวกับ prompt caching

ส่งคำขอ#

ด้านล่างคือขั้นตอนการสร้างคำตอบ ส่วนการดึงข้อมูลเป็นของคุณ: chunks คือสิ่งที่ vector store ของคุณคืนมา โค้ดเดียวกันใช้ได้กับ OpenAI SDK หรือ curl ธรรมดา

ถามคำถามพร้อมชิ้นส่วนที่ดึงมา

Python

python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key="YOUR_CHEAPTOKENS_KEY",
)

chunks = ["Chunk 1 text...", "Chunk 2 text...", "Chunk 3 text..."]
context = "\n\n---\n\n".join(chunks)

resp = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    max_tokens=400,
    messages=[
        {"role": "system", "content": "Answer only from the context. If the answer is not there, say so."},
        {"role": "user", "content": f"Context:\n{context}\n\nQuestion: How do I reset two-factor login?"},
    ],
)
print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)

curl

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer YOUR_CHEAPTOKENS_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-ai/DeepSeek-V4-Flash-0731",
    "max_tokens": 400,
    "messages": [
      {"role": "system", "content": "Answer only from the context. If the answer is not there, say so."},
      {"role": "user", "content": "Context:\nChunk 1...\n\nQuestion: How do I reset two-factor login?"}
    ]
  }'

บรรทัดสุดท้ายของตัวอย่าง Python คือบรรทัดที่มีประโยชน์ usage.prompt_tokens คืออินพุตจริงของคุณต่อคำถาม เปรียบเทียบกับค่าประมาณ 3,000 และแทนที่สมมติฐานของผมด้วยตัวเลขของคุณ ใช้ id โมเดลเต็มดังในตัวอย่าง: deepseek-ai/DeepSeek-V4-Flash-0731 id ต่าง ๆ ระบุไว้ในเอกสาร การตั้งค่าเต็มอยู่ใน เอกสาร และหากคุณต้องการดูว่าโทเคนของบอทสะสมอย่างไรตลอดบทสนทนา ทำไมแชทยาวจึงมีค่าใช้จ่ายมากกว่า ครอบคลุมส่วนประวัติ

สี่วิธีลดอินพุต#

เริ่มจาก max_tokens ซึ่งจำกัดคำตอบและปกป้องคุณจากคำตอบที่หลุดควบคุม จากนั้นลด k ให้น้อยที่สุดที่ยังพบข้อความที่ถูกต้อง ทำให้ชิ้นส่วนกระชับขึ้น เพื่อให้ 500 โทเคนบรรจุความหมาย 500 โทเคน ไม่ใช่หัวเรื่องและข้อความซ้ำซาก ลบชิ้นส่วนที่ซ้ำกันก่อนส่ง: สองท่อนที่เกือบเหมือนกันมีค่าใช้จ่ายสองเท่าแต่บอกครั้งเดียว และวัดด้วย usage บนทราฟฟิกจริง เพราะการเดาเกี่ยวกับชิ้นส่วน 500 โทเคนเป็นเพียงการเดา สำหรับภาพรวมว่าโทเคนไปไหนในการเรียก API ดู หนึ่งคำขอใช้กี่โทเคน

ใส่โทเคนต่อคำขอของคุณเองลงในเครื่องคำนวณด้านบนเพื่อคิดราคาบอทของคุณบนทั้งสามโมเดล หากคำตอบของคุณยาว DeepSeek-V4-Flash คือตัวที่ควรดูก่อน