แชตบอตที่แนบคู่มือสินค้าหมื่นกว่า token ไปกับทุกคำถาม หรือ coding agent ที่ส่งประวัติงานทั้งก้อนซ้ำทุกรอบ ล้วนจ่ายค่า input ส่วนเดิมซ้ำไปซ้ำมา prompt caching คือกลไกที่ทำให้ส่วนที่ซ้ำนี้ถูกลงหลายเท่า ส่วน KV cache คือกลไกข้างในโมเดลที่ทำให้เรื่องนี้เป็นไปได้
KV cache คืออะไร ทำไมโมเดลต้องมี
KV cache คือหน่วยความจำบน GPU ที่โมเดลเก็บค่า key และ value ของทุก token ที่อ่านหรือเขียนไปแล้ว เพื่อให้ตอนสร้าง token ถัดไปไม่ต้องคำนวณ token เก่าทั้งหมดใหม่ KV cache อยู่แค่ในคำขอเดียว พอตอบเสร็จก็ถูกทิ้ง
การตอบหนึ่งครั้งมีสองช่วง ช่วงแรกเรียก prefill โมเดลอ่าน prompt ทั้งก้อนพร้อมกันแล้วสร้าง KV cache ของทุก token ช่วงที่สองเรียก decode โมเดลเขียนคำตอบทีละ token โดยอ่าน KV cache ที่มีอยู่ แล้วเพิ่มค่าของ token ใหม่ต่อท้าย ถ้าไม่มี KV cache การเขียนคำตอบยาวๆ จะช้าลงเรื่อยๆ เพราะต้องคำนวณย้อนทั้งข้อความทุกครั้ง
ราคาของความเร็วนี้คือหน่วยความจำ ขนาดของ KV cache โตตามจำนวน token
KV cache (bytes) = 2 × จำนวน layer × จำนวน KV head × head dim × bytes ต่อค่า × จำนวน tokenตัวอย่างโมเดลสมมติที่มี 48 layer, 8 KV head, head dim 128 และเก็บค่าแบบ FP16 (2 bytes) จะใช้ 2 × 48 × 8 × 128 × 2 = 196,608 bytes หรือ 192 KB ต่อ token ถ้า context ยาว 128K token (131,072 token) KV cache จะกิน 24 GB ต่อคำขอเดียว นี่คือเหตุผลที่ context ยาวกิน VRAM มาก (ดูสูตรเต็มใน GPU สำหรับรัน LLM ต้องใช้ VRAM เท่าไร)
Prompt caching คืออะไร ต่างจาก KV cache อย่างไร
Prompt caching คือการเก็บผลการอ่านส่วนต้นของ prompt ไว้ข้ามคำขอ เมื่อคำขอถัดไปขึ้นต้นด้วยข้อความเดียวกันทุกตัวอักษร ระบบใช้ผลที่เก็บไว้แทนการอ่านใหม่ ผู้ให้บริการ API จึงคิดราคา token ส่วนนั้นถูกกว่า input ปกติมาก
ในเซิร์ฟเวอร์ที่รันเอง สองเรื่องนี้ต่อกันตรงๆ เอกสารของ vLLM อธิบายว่า Automatic Prefix Caching คือการเก็บ KV cache ของคำขอเก่าไว้ ถ้าคำขอใหม่มีส่วนต้นตรงกันก็ใช้ KV cache นั้นซ้ำ และข้ามการคำนวณส่วนที่ซ้ำไป
| KV cache | Prompt caching | |
|---|---|---|
| อยู่นานแค่ไหน | ภายในคำขอเดียว | ข้ามคำขอ ตามอายุ cache |
| ช่วยอะไร | ให้เขียนคำตอบได้โดยไม่คำนวณย้อน | ข้ามการอ่านส่วนต้นที่ซ้ำ ค่า input ถูกลง |
| คนใช้ API ต้องทำอะไร | ไม่ต้องทำอะไร | จัด prompt ให้ส่วนต้นคงที่ บางเจ้าต้องเปิดเอง |
| เห็นในบิลไหม | ไม่เห็น | เห็นเป็น token อ่านจาก cache และเขียน cache |
ผลพลอยได้คือช่วง prefill สั้นลง คำตอบคำแรกจึงมาเร็วขึ้นเมื่อ prompt ยาว เรื่องนี้อธิบายต่อใน TTFT และ Tokens per second คืออะไร
อธิบายด้วยภาพ
แชตบอตแนบคู่มือ 20,000 token วันละ 3,000 คำถาม
- ไม่ใช้ cache$123ค่า input ต่อวัน ราคาเต็มทุก token
- อ่านจาก cache$5.9459.4 ล้าน token × $0.10
- เขียน cache$1.50เขียนใหม่วันละ 30 ครั้ง
- ข้อความใหม่$3.001.5 ล้าน token × $2
- ใช้ cache รวม$10.44ค่า input ต่อวัน ลดลงราว 92%
ราคา claude-sonnet-5-5 ณ พฤศจิกายน 2569 ปริมาณการใช้เป็นตัวเลขสมมติ ค่า output ไม่เปลี่ยน
Prompt caching ของ OpenAI, Claude, Gemini และ DeepSeek ต่างกันอย่างไร
ณ พฤศจิกายน 2569 ทั้งสี่เจ้ามี prompt caching แต่เปิดใช้ อายุ cache และวิธีคิดเงินไม่เหมือนกัน ตัวเลขราคาในตารางเทียบกับราคา input ปกติของรุ่นนั้น
| ผู้ให้บริการ | เปิดใช้อย่างไร | ขั้นต่ำ | อายุ cache | อ่านจาก cache | เขียน cache |
|---|---|---|---|---|---|
| OpenAI (GPT-5.6 ขึ้นไป) | อัตโนมัติ หรือกำหนด breakpoint เองผ่าน prompt_cache_options | 1,024 token | 30 นาที เลือก 12 ชั่วโมงได้ใน Responses API | 0.1 เท่า (0.05 เท่าใน gpt-6.1-sol และ gpt-6.1-terra) | 1.25 เท่า (12 ชั่วโมง 2.5 เท่า) |
| Anthropic (Claude API) | ใส่ cache_control ช่องเดียวระดับคำขอ หรือวาง breakpoint เองได้ถึง 4 จุด | 512–4,096 token ตามรุ่น | 5 นาที ต่ออายุทุกครั้งที่อ่าน เลือก 1 ชั่วโมงได้ | 0.1 เท่า (0.05 เท่าใน Opus 5.5 และ Sonnet 5.5, 0.025 เท่าใน Fable 5.2) | 1.25 เท่า (1 ชั่วโมง 2 เท่า) |
| Google (Gemini) | implicit อัตโนมัติใน 2.5 ขึ้นไป ส่วน explicit สร้างผ่าน cachedContents ได้ใน Gemini 3 และ 2.5 | 2,048–4,096 token | explicit ค่าเริ่มต้น 1 ชั่วโมง ตั้งเองได้ | 5–10% ในรุ่นที่ดู | explicit คิดค่าเก็บรายชั่วโมง |
| DeepSeek | อัตโนมัติ เก็บบนดิสก์ | เอกสารไม่ระบุ | ล้างเองภายในไม่กี่ชั่วโมงถึงไม่กี่วัน | ราว 2–3% ของราคา cache miss | ไม่แยกค่าเขียน |
ข้อสังเกตจากเอกสารแต่ละเจ้า
- OpenAI รุ่นก่อน GPT-5.6 ทำ cache ให้อัตโนมัติและไม่มีค่าเขียน อายุ cache ตั้งด้วย
prompt_cache_retentionแบบin_memoryอยู่ราว 5–10 นาทีเมื่อไม่มีคำขอ ส่วน24hเก็บได้นานสุด 24 ชั่วโมง - Claude prompt ที่สั้นกว่าขั้นต่ำจะไม่ถูก cache และ API ไม่แจ้ง error
- Gemini 4 ใช้ได้แค่ implicit caching เอกสารแนะนำให้วางเนื้อหาใหญ่ที่ใช้ร่วมกันไว้ต้น prompt
- DeepSeek ระบุว่า cache เป็นแบบ best effort คำขอที่ส่วนต้นตรงกันก็อาจไม่ hit ทุกครั้ง
ตัวอย่างคำขอ Claude API ที่ขอให้ cache คำสั่งระบบซึ่งยาวและไม่เปลี่ยน
{
"model": "claude-sonnet-5-5",
"max_tokens": 1024,
"system": [
{ "type": "text",
"text": "<คู่มือสินค้าและนโยบายร้าน ยาวราว 20,000 token>",
"cache_control": { "type": "ephemeral" } }
],
"messages": [{ "role": "user", "content": "สั่งของวันนี้ ได้ของวันไหน" }]
}เช็กว่า cache ทำงานจริงจาก usage ในคำตอบ Claude แยกเป็น cache_creation_input_tokens กับ cache_read_input_tokens OpenAI ใช้ usage.input_tokens_details.cached_tokens ส่วน DeepSeek ใช้ prompt_cache_hit_tokens และ prompt_cache_miss_tokens
Prompt caching ลดค่า API ได้เท่าไร
ในงานที่ส่วนต้นของ prompt ยาวและซ้ำทุกคำขอ prompt caching ลดค่า input ได้มากกว่า 90% ตัวอย่างข้างล่างคิดด้วยราคา claude-sonnet-5-5 ณ พฤศจิกายน 2569 คือ input $2, เขียน cache 5 นาที $2.50 และอ่านจาก cache $0.10 ต่อ 1 ล้าน token
สมมติร้านออนไลน์ทำแชตบอตตอบลูกค้า แนบคู่มือและนโยบายร้าน 20,000 token ไปทุกคำถาม มีคำถามวันละ 3,000 ครั้ง ข้อความใหม่ต่อครั้ง 500 token และ cache หมดอายุจนต้องเขียนใหม่วันละ 30 ครั้ง
| รายการต่อวัน | ไม่ใช้ cache | ใช้ cache |
|---|---|---|
| ส่วนต้น 20,000 token | 60,000,000 token × $2 = $120 | อ่าน 59,400,000 token × $0.10 = $5.94 และเขียน 600,000 token × $2.50 = $1.50 |
| ข้อความใหม่ 500 token | 1,500,000 token × $2 = $3 | 1,500,000 token × $2 = $3 |
| รวมค่า input | $123 | $10.44 |
เดือนละ 30 วัน ค่า input ลดจาก $3,690 เหลือ $313.20 คิดที่ 33.4 บาทต่อดอลลาร์ (อัตราเดียวกับบทความ ราคา LLM API) คือจากราว 123,246 บาท เหลือราว 10,461 บาท ส่วน output ไม่ได้ลด ถ้าคำตอบยาว 300 token จะเป็นค่า output อีกวันละ $9 เท่ากันทั้งสองแบบ
ตัวเลขนี้จะหายไปทันทีถ้าส่วนต้นเปลี่ยนทุกคำขอ เช่น ใส่วันที่และเวลาไว้บรรทัดแรกของคำสั่งระบบ ทุกคำขอจะกลายเป็นการเขียน cache ใหม่ ซึ่งแพงกว่าส่งปกติ 25%
จัด prompt อย่างไรให้ cache ติด
หลักเดียวของ prompt caching คือของที่ไม่เปลี่ยนต้องอยู่หน้าสุด ของที่เปลี่ยนต้องอยู่ท้ายสุด เพราะทุกเจ้าจับคู่จากต้น prompt และ cache จะใช้ได้ถึงตัวอักษรแรกที่ต่างกันเท่านั้น
เช็กลิสต์ก่อนขึ้น production
- เรียงจากนิ่งไปเปลี่ยน Claude อ่านตามลำดับ tools, system แล้วจึง messages ให้วางนิยามเครื่องมือ คำสั่งระบบ และเอกสารอ้างอิงไว้ก่อน แล้วค่อยต่อประวัติแชตกับคำถามใหม่
- ย้ายของที่เปลี่ยนทุกครั้งไปท้าย วันที่ เวลา ชื่อผู้ใช้ เลขคำสั่งซื้อ หรือ request id ถ้าอยู่ในคำสั่งระบบ จะทำให้ cache พังทุกคำขอ
- นิยามเครื่องมือต้องคงที่ เอกสารของ Claude ระบุว่าการแก้ชื่อ คำอธิบาย หรือพารามิเตอร์ของ tool ทำให้ cache ของ tools, system และ messages ใช้ไม่ได้ทั้งหมด การเปิดปิด MCP server กลางงานก็เข้าข่ายนี้
- serialize ให้เหมือนเดิม สร้าง JSON ด้วยลำดับ key และการเว้นวรรคที่คงที่ เพราะต่างกันแค่ช่องว่างเดียวก็ไม่ hit
- ประวัติแชตต่อท้ายอย่างเดียว อย่าแก้หรือตัดข้อความเก่าตรงกลาง ถ้าจำเป็นต้องย่อ ให้ยอมรับว่ารอบนั้นจะต้องเขียน cache ใหม่
- ส่งให้ถี่พอ cache ที่ไม่ถูกใช้จะหมดอายุ เอกสารของ OpenAI แนะนำ
prompt_cache_keyสำหรับรุ่นก่อน GPT-5.6 และเตือนว่าทราฟฟิกที่เกินราว 15 คำขอต่อนาทีอาจถูกกระจายไปเครื่องอื่นที่ไม่มี cache - ดูตัวเลขจริง ถ้า token อ่านจาก cache ยังเป็น 0 ทั้งที่คิดว่าควร hit แปลว่ามีอะไรสักอย่างในส่วนต้นเปลี่ยน ให้เทียบ prompt สองคำขอทีละบรรทัด
ทำไม coding agent ได้ประโยชน์จาก prompt caching มากที่สุด
coding agent ส่งคำสั่งระบบ นิยามเครื่องมือ และประวัติงานทั้งหมดซ้ำทุกรอบ แต่ละรอบเพิ่มของใหม่แค่ผลจากเครื่องมือล่าสุด ส่วนที่ซ้ำจึงมักเป็นสัดส่วนใหญ่ของ input ทุกรอบ ซึ่งเป็นงานที่ prompt caching ช่วยได้มากที่สุด
ลองนึกถึงงานที่ agent วน 40 รอบ แต่ละรอบส่ง context 60,000 token ถ้าไม่มี cache ทุกรอบคิดราคา input เต็ม พอมี cache รอบหนึ่งจะคิดราคาเต็มหรือราคาเขียนเฉพาะส่วนที่เพิ่งเพิ่มเข้ามา ที่เหลือคิดราคาอ่าน จำนวน token ไม่ได้ลดลง แต่บิลลดลงมาก (พื้นฐานเรื่องนี้อยู่ใน Token คืออะไร)
มีอีกสองเรื่องที่คนใช้ agent ควรรู้
- พักนานเกินอายุ cache ข้อความแรกหลังกลับมาต้องเขียน cache ใหม่ทั้งก้อน ถ้า context ใหญ่ รอบนั้นจะแพงกว่ารอบปกติชัดเจน
- cache ช่วยเรื่อง rate limit ด้วย เอกสารของ Anthropic ระบุว่าโควตา input token ต่อนาที (ITPM) ของ Claude คิดเฉพาะ input ที่ไม่ได้อ่านจาก cache ทีมที่ cache ติดดีจึงส่งงานได้มากขึ้นโดยไม่ต้องขอเพิ่ม limit
ใช้ buzzAI ต้องสนใจ prompt caching ไหม
buzzAI เป็น API แบบเหมาจ่ายสำหรับ coding agent ที่ไม่คิดค่า token ชื่อโมเดลคือ Qwen3.8-27B โมเดล open-weight ที่รันบนการ์ด GPU ที่ buzzAI ดูแลเอง ใช้กับ Claude Code, Codex CLI และเครื่องมือที่ตั้ง base URL เองได้ เพราะไม่คิดเงินตาม token ราคาอ่านและเขียน cache ในบทความนี้จึงไม่มีผลกับบิลของคุณ แต่ถ้าทีมยังใช้ API แบบจ่ายตาม token คู่กันไปด้วย หลักการจัด prompt ข้างบนยังใช้ได้เต็มที่
สิ่งที่มีขอบเขตแทน token คือจำนวน agent ที่รันพร้อมกัน ขนาด context ตามแพ็ก และคิวในช่วงที่คนใช้เยอะ ตอนนี้ API ยังไม่เปิดให้ใช้ทั่วไป กดขอร่วมทดสอบได้ที่หน้าแรก รอบปัจจุบันจะเปิดเมื่อมีผู้สมัครครบโควต้าที่กำหนด แล้วเราจะส่ง API key ให้ทางอีเมล ดูแพ็กทั้งหมดได้ที่หน้าราคา
คำถามที่พบบ่อย
ต้องเปิด prompt caching เองไหม?
ขึ้นกับเจ้า OpenAI, Gemini 2.5 ขึ้นไป และ DeepSeek ทำให้อัตโนมัติ ส่วน Claude API ต้องใส่ cache_control ในคำขอ จะใส่ช่องเดียวระดับคำขอให้ระบบเลือกจุดเอง หรือวาง breakpoint เองก็ได้
cache อยู่ได้นานแค่ไหน?
Claude เก็บ 5 นาทีและต่ออายุทุกครั้งที่ถูกอ่าน เลือก 1 ชั่วโมงได้ OpenAI รุ่น GPT-5.6 ขึ้นไปเก็บ 30 นาที เลือก 12 ชั่วโมงได้ใน Responses API ส่วน explicit cache ของ Gemini มีอายุเริ่มต้น 1 ชั่วโมง และ DeepSeek ล้าง cache ที่ไม่ถูกใช้ภายในไม่กี่ชั่วโมงถึงไม่กี่วัน
prompt caching ทำให้ได้คำตอบเดิมทุกครั้งไหม?
ไม่ สิ่งที่ถูกเก็บคือผลการอ่านส่วนต้นของ prompt ไม่ใช่คำตอบ โมเดลยังสร้างคำตอบใหม่ทุกครั้ง คำตอบจึงต่างกันได้ตามปกติ และค่า output ยังคิดเต็มราคา
คนอื่นที่ใช้ API เดียวกันอ่าน cache ของเราได้ไหม?
เอกสารของ Anthropic ระบุว่า cache แยกกันระหว่างองค์กรเสมอ และบน Claude API ยังแยกตาม workspace ด้วย ผู้ให้บริการรายอื่นควรอ่านเรื่องนี้ในเอกสารของแต่ละราย
รันโมเดลเองใช้ prompt caching ได้ไหม?
ได้ vLLM มีฟีเจอร์ Automatic Prefix Caching ที่เก็บ KV cache ของส่วนต้นไว้ใช้ซ้ำ เปิดด้วย --enable-prefix-caching ช่วยลดเวลาช่วงอ่าน prompt แต่ไม่ได้ทำให้ช่วงเขียนคำตอบเร็วขึ้น
แหล่งอ้างอิง
ข้อมูล ณ วันที่อัปเดต แพ็ก โควตา และคำสั่งของแต่ละเครื่องมือเปลี่ยนได้บ่อย ก่อนใช้งานจริงควรตรวจกับเอกสารทางการที่ลิงก์ไว้ในแหล่งอ้างอิง