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

AI สำหรับผู้เริ่มต้นคู่มือ

Input กับ output tokens: AI API คิดเงินคุณค่าอะไร

ทำไม AI API จึงนับ input และ output tokens แยกกัน อ่านได้ที่ไหนในฟิลด์ usage และคำนวณค่าใช้จ่ายของ request หนึ่งครั้งได้อย่างไร

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

ภาพปกพร้อมชื่อเรื่อง “Input vs output tokens” และบรรทัด “What you pay for in an API request” บนพื้นหลังตารางสีเข้ม
ในหน้านี้
  1. อะไรนับเป็น input และอะไรนับเป็น output
  2. อ่านตัวเลขได้ที่ไหน: บล็อก usage
  3. ทำไมสองฝั่งมีราคาต่างกัน
  4. สูตร
  5. ตัวอย่างที่คำนวณจริงกับโมเดลจริง
  6. ใช้ในโค้ด
  7. ใช้ token ให้น้อยลงได้อย่างไร
  8. สิ่งที่ควรจำ

ถ้าคุณเพิ่งเรียก API ของโมเดลภาษาเป็นครั้งแรก คุณคงเห็นบล็อก usage ใน response แล้วสงสัยว่ามันนับอะไรกันแน่ คำตอบสั้น ๆ: ทุก request มี สองมิเตอร์ อันหนึ่งนับ token ที่คุณส่งไป (input) อีกอันนับ token ที่โมเดลเขียนกลับมา (output) แต่ละมิเตอร์มีราคาของตัวเอง และค่าใช้จ่ายของ request หนึ่งครั้งคือผลรวมของทั้งสอง

คู่มือนี้จะแสดงว่าหาตัวเลขได้ที่ไหน แปลงเป็นเงินได้อย่างไร และปรับอะไรได้บ้างเพื่อจ่ายน้อยลง ถ้ายังไม่แน่ใจว่าคำว่า "token" คืออะไร เริ่มจาก token ใน AI คืออะไร?

อะไรนับเป็น input และอะไรนับเป็น output#

Input tokens คือทุกอย่างที่โมเดลต้องอ่านเพื่อตอบคุณ:

  • ข้อความล่าสุดของคุณ;
  • system prompt (คำสั่งเช่น "ตอบสั้น ๆ เป็นภาษาไทย");
  • ข้อความก่อนหน้าในบทสนทนา ถ้าคุณส่งไปอีกครั้ง;
  • เอกสาร โค้ด หรือผลการค้นหาที่คุณแปะเข้าไปใน request

Output tokens คือทุกอย่างที่โมเดลสร้างขึ้นในการตอบ ในรูปแบบที่เข้ากันได้กับ OpenAI นี่คือข้อความใน choices[0].message.content โมเดลบางตัวในโหมด thinking ยังสร้าง reasoning tokens ก่อนคำตอบสุดท้ายด้วย ตรวจดูหน้าราคาของโมเดลว่าคิดเงินส่วนนี้เป็น output หรือไม่

จุดสำคัญสำหรับผู้เริ่มต้น: โมเดลไม่จำแชทของคุณระหว่าง request แอปแชทจะส่งประวัติทั้งหมดซ้ำทุกครั้ง ดังนั้น input ของบทสนทนายาวจะโตขึ้นทุกเทิร์น แม้ข้อความใหม่ของคุณจะมีบรรทัดเดียว

อ่านตัวเลขได้ที่ไหน: บล็อก usage#

ทุก response แบบไม่สตรีมจาก API ที่เข้ากันได้กับ OpenAI จะลงท้ายด้วยออบเจกต์ usage นี่คือตัวอย่างเพื่อการศึกษาโครงสร้างของมัน:

json
{
  "choices": [
    { "message": { "role": "assistant", "content": "..." }, "finish_reason": "stop" }
  ],
  "usage": {
    "prompt_tokens": 2000,
    "completion_tokens": 500,
    "total_tokens": 2500
  }
}
ฟิลด์ ความหมาย คิดเงินเป็น
prompt_tokens token ในทุกอย่างที่คุณส่งไป Input
completion_tokens token ที่โมเดลสร้างขึ้น Output
total_tokens prompt_tokens + completion_tokens ไม่ใช่ราคาแยก: เป็นเพียงผลรวม

ข้อผิดพลาดที่ผู้เริ่มต้นมักเจอคือการเอา total_tokens ไปคูณกับราคาเดียว เพราะ input และ output มีราคาต่างกัน คุณจึงต้องใช้ตัวเลขสองตัวแยกกัน

ผู้ให้บริการบางรายเพิ่มฟิลด์พิเศษ ตัวอย่างเช่น API ของ DeepSeek เองยังแยก prompt_tokens เป็น prompt_cache_hit_tokens และ prompt_cache_miss_tokens และในโหมด thinking จะรายงาน reasoning_tokens (ที่มา: เอกสาร API ของ DeepSeek, ตรวจสอบเมื่อ 21 ตุลาคม 2026) สามฟิลด์ในตารางคือสิ่งที่คุณวางใจได้ในทุก response ที่เข้ากันได้กับ OpenAI

เมื่อคุณสตรีมคำตอบ จะยังไม่รู้ usage ตอนเริ่ม ใน API ของ DeepSeek เอง ข้อมูลนี้จะมาใน content chunk สุดท้ายก่อน data: [DONE] (เอกสาร API ของ DeepSeek, ตรวจสอบเมื่อ 21 ตุลาคม 2026) API อื่นอาจส่งต่างออกไปหรือส่งเมื่อขอเท่านั้น ตรวจดูว่า client ของคุณได้รับอะไร การสตรีมเองมีอธิบายใน Streaming responses ใน Python

ทำไมสองฝั่งมีราคาต่างกัน#

การอ่าน prompt กับการเขียนคำตอบเป็นงานคนละแบบ โมเดลประมวลผล prompt ทั้งหมดในรอบเดียว แต่ต้องสร้างคำตอบทีละ token และทุก token ใหม่ขึ้นอยู่กับ token ก่อนหน้า นี่คือเหตุผลที่ผู้ให้บริการมักตั้งราคา output สูงกว่า input และทำไมคุณเห็นตัวเลขสองตัวต่อโมเดลในรายการราคาใด ๆ

โมเดลที่เราใช้เป็นตัวอย่างด้านล่าง MiniMax-M2.7 (id minimax-m2.7) เป็นไปตามรูปแบบนี้ ราคาปัจจุบันต่อ 1M tokens คือ $0.05 สำหรับ input และ $0.15 สำหรับ output

สูตร#

ราคาคิดต่อ 1 ล้าน tokens ดังนั้นค่าใช้จ่ายของ request หนึ่งครั้งคือ:

text
cost = input_tokens × input_price ÷ 1,000,000
     + output_tokens × output_price ÷ 1,000,000

นี่คือตัวอย่างด้วยราคากลม ๆ ที่สมมติขึ้น เพื่อแสดงการคำนวณเท่านั้น (ตัวอย่าง, แทนที่ด้วยราคาปัจจุบันจากตารางด้านล่าง):

python
# example, substitute current prices from the table
price_in = 0.20    # USD per 1M input tokens
price_out = 0.80   # USD per 1M output tokens

prompt_tokens = 2000
completion_tokens = 500

cost = (prompt_tokens * price_in + completion_tokens * price_out) / 1_000_000
# 2000 × 0.20 ÷ 1,000,000 = 0.0004 (input)
# 500 × 0.80 ÷ 1,000,000 = 0.0004 (output)
# 0.0004 + 0.0004 = 0.0008 USD

ตัวอย่างที่คำนวณจริงกับโมเดลจริง#

ใช้ request จากตัวอย่าง usage ด้านบน: 2,000 input tokens และ 500 output tokens บน MiniMax-M2.7 ผ่าน CheapTokens คิดเป็น $0.00018 ตัวเลขนี้คำนวณจากรายการราคาปัจจุบันทุกครั้งที่แสดงหน้า

request เดียวมีขนาดเล็กมาก จึงควรขยายดู แอปเล็ก ๆ ที่ส่ง 10,000 request ขนาดนี้ใช้ 20,000,000 input tokens และ 5,000,000 output tokens รวมเป็น $1.75

request เดียวกันบนโมเดลอื่นจากรายการของเรา:

โมเดล ค่าใช้จ่าย OpenRouter
GLM-5.3-Flash $0.00006 $0.00012
DeepSeek-V4-Flash $0.00008 $0.00017
MiniMax-M2.7 $0.00018 $0.0012

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

สังเกตว่า output เป็นส่วนน้อยของจำนวน token ที่นี่ (500 จาก 2,500) แต่เป็นส่วนที่ใหญ่กว่าของบิลเมื่อเทียบกับสัดส่วน token เพราะ output tokens มีราคาสูงกว่า (ดูตาราง) สำหรับโมเดลนี้ ฝั่ง output ยังเป็นจุดที่ยืนยันการประหยัดเทียบกับราคาอ้างอิงของ OpenRouter ซึ่งมีประโยชน์ถ้าแอปของคุณเขียนคำตอบยาว ๆ

ใช้ในโค้ด#

คุณอ่าน usage จากแพ็กเกจ Python openai อย่างเป็นทางการได้โดยชี้ไปที่ base URL ของ CheapTokens:

python
from openai import OpenAI

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

response = client.chat.completions.create(
    model="MiniMaxAI/MiniMax-M2.7",
    messages=[{"role": "user", "content": "Explain input and output tokens in two sentences."}],
)

usage = response.usage
print("input:", usage.prompt_tokens)
print("output:", usage.completion_tokens)
print("total:", usage.total_tokens)

# example, substitute current prices from the table above
price_in, price_out = 0.20, 0.80
cost = (usage.prompt_tokens * price_in + usage.completion_tokens * price_out) / 1_000_000
print(f"approx. cost: ${cost:.6f}")

ถ้ายังไม่เคยส่ง request มาก่อน ให้ทำตาม request API ครั้งแรกของคุณกับ CheapTokens ก่อน

ใช้ token ให้น้อยลงได้อย่างไร#

  • ย่อ prompt ให้สั้นลง ตัด system prompt และลบคำสั่งที่โมเดลไม่จำเป็นต้องใช้ ทุก token ที่คุณส่งจะถูกคิดเงินทุก request
  • ตัดประวัติให้สั้นลง ในแชทยาว เก็บแค่ไม่กี่เทิร์นล่าสุดหรือสรุปสั้น ๆ แทนบทสนทนาทั้งหมด
  • ส่งเฉพาะส่วนที่เกี่ยวข้องของเอกสาร ข้อความหนึ่งหน้ามีราคาถูกกว่าไฟล์ทั้งไฟล์
  • ขอรูปแบบที่ต้องการ "ตอบเป็นสาม bullet point" ให้ output tokens น้อยกว่าคำตอบเรียงความแบบเปิดกว้าง
  • ตั้ง max_tokens อย่างตั้งใจ มันจำกัดเฉพาะ output ต่ำเกินไปคำตอบจะถูกตัด รายละเอียดอยู่ใน ทำไมคำตอบ AI ถึงหยุดกลางประโยค? MiniMax-M2.7 บน CheapTokens รองรับ output สูงสุด 8,192 tokens ต่อคำตอบ และมี context window 180K

สำหรับการประเมินค่าใช้จ่ายของ workflow ที่ใหญ่ขึ้น ดู วิธีประเมินค่าใช้จ่ายของ AI agent

สิ่งที่ควรจำ#

  1. ทุก request มี input tokens (prompt_tokens) และ output tokens (completion_tokens)
  2. ทั้งสองมีราคาแยกกัน โดยปกติ output สูงกว่า
  3. ค่าใช้จ่าย = input tokens × ราคา input + output tokens × ราคา output โดยราคาต่อ 1M tokens
  4. อ่านตัวเลขจาก usage ใน response แทนการเดา

บน CheapTokens ยอดเงินเติมล่วงหน้าหนึ่งยอดใช้ได้กับทุกโมเดล ราคาต่อโมเดลคงที่ไม่มีราคาช่วงพีค และ API เข้ากันได้กับ OpenAI Chat Completions และ Anthropic Messages หากต้องการลองตัวอย่างด้านบน ขอ API key แล้วส่ง request แรกของคุณ

ราคาปัจจุบันของทุกโมเดล: ราคา CheapTokens