สารบัญ — บทที่ ๘ / ๑๖
PART 1 · รู้จัก
๑ · BOMLLM คืออะไร
๒ · สถาปัตยกรรม 4 เครื่อง
๓ · ฮาร์ดแวร์ที่ต้องมี
PART 2 · ติดตั้ง
๔ · เตรียมเครือข่าย
๕ · Mac Mini = สมอง
๖ · VPS = หน้าบ้าน
๗ · .env และ litellm.yaml
▸ ๘ · Virtual keys และงบประมาณ
PART 3 · ใช้งาน
๙ · Open WebUI ครั้งแรก
๑๐ · ลงโมเดลเพิ่มและส่วนเสริม
๑๑ · ภาพและเสียง (optional)
๑๒ · สูตรภาษาไทย
PART 4 · ต่อช่องทาง
๑๓ · LINE และ Telegram bot
๑๔ · MT5 EA อ่านอย่างเดียว และ content pipeline
PART 5 · ดูแล
๑๕ · ความปลอดภัยและ monitoring
๑๖ · อัปเกรดและแก้ปัญหา
PART 2 · ติดตั้ง

08Virtual keys และงบประมาณ

Virtual keys and budgets

TL;DR — สรุปใน 30 วินาทีtldr

Virtual key คือ กุญแจใบรองที่ออกให้แต่ละช่องทาง — แต่ละใบมี 3 คุณสมบัติ: อนุญาตเฉพาะโมเดลที่กำหนด, มีเพดานงบประมาณต่อวันของตัวเอง และเพิกถอน/หมุนเวียนได้โดยไม่แตะกุญแจหลัก — นี่คือเหตุผลที่ระบบ 5 ช่องทางอยู่ด้วยกันได้อย่างมีระเบียบ: ประตูเดียว หลายบาน ทุกบานมีมิเตอร์

เมื่อไหร่ควรใช้ / When to usewhen to use

ออกกุญแจทันทีที่ stack ขึ้นแล้ว (บทที่ ๖–๗) และออกใหม่ทุกครั้งที่เพิ่มช่องทาง — บทที่ ๑๓–๑๔ จะใช้กุญแจพวกนี้

กุญแจใครใช้โมเดลที่อนุญาตเพดาน/วัน
BOM_KEY_LINELINE botthai-chat-rt$2
BOM_KEY_TELEGRAMTelegram botthai-chat-rt$2
BOM_KEY_MT5MT5 EA (อ่านอย่างเดียว)โมเดลวิเคราะห์ตัวเดียว$1
BOM_KEY_WRITERpipeline บทความ n8nbom-writer$5
BOM_KEY_WEBUIเว็บแชทรายการที่คัดมา$10

วิธีทำ / How-tohow to

ออกกุญแจด้วย API ของ LiteLLM โดยตรง (คำสั่งเดียวต่อใบ):

curl -X POST http://127.0.0.1:4000/key/generate \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"key_alias": "line-bot",
       "max_budget": 2.0,
       "budget_duration": "1d",
       "models": ["thai-chat-rt"]}'

# การตอบกลับมี field "key" = กุญแจจริง -> นำไปแปะใน .env และ n8n credential store
# (ในรายงาน/log พูดแค่ "โหลดคีย์แล้ว ยาว N ตัว" เท่านั้น)

หลักการ: กุญแจอยู่ใน .env (VPS) หรือ credential store ของ n8n เท่านั้น ห้ามฝังใน workflow JSON/โค้ด

ตรวจการใช้จ่ายสะสมทุกวัน (นี่คือแหล่งตัวเลข "ใบเสร็จ" ของทั้งเล่ม):

-- SQL บน Postgres ของ LiteLLM (รันผ่าน docker exec)
SELECT date_trunc('day', "startTime") AS day,
       count(*) AS calls,
       round(sum(spend)::numeric, 4) AS usd
FROM "LiteLLM_SpendLogs"
GROUP BY 1 ORDER BY 1 DESC LIMIT 30;

ผลจริงสัปดาห์แรกของ ก.ย. 2026: 1,370 calls/$1.10, 1,470/$0.66, 3,448/$2.76 (พีคสุด), 494/$0.31

ถ้าติดตรงไหน → บทที่ ๑๖

ตัวอย่างการตั้งค่า / Config exampleconfig example

การใช้ง่ายกุญแจฝั่งผู้เรียก — ทุกช่องทางเรียกที่เดียวกัน ต่างกันแค่ใบกุญแจและชื่อโมเดล:

# ทุกช่องทางชี้ที่: https://llm.ชื่อโดเมนคุณ/v1  (OpenAI-compatible 100%)
curl https://llm.example.com/v1/chat/completions \
  -H "Authorization: Bearer $BOM_KEY_LINE" \
  -d '{"model": "thai-chat-rt",
       "messages": [{"role":"user","content":"ทองเที่ยงนี้เป็นไงบ้าง"}]}'

ถ้าใช้กุญแจผิดใบ/เกินงบ proxy ตอบ 401/403 ทันที — ไม่มีทางลอยไปกินเงินส่วนอื่น

Pro tip — เคล็ดลับจากสนามจริงpro tip

★ PROD LESSON
เพดานที่ไม่เคยแตะ — เพดานรวม $5/วัน (max_budget ใน litellm.yaml) ตั้งมาตั้งแต่วันแรก ยอดสูงสุดที่เคยเกิดจริงคือ $2.76 = 55% ของเพดาน — การตั้งเพดานไว้ก่อนไม่ได้แปลว่าจะใช้ถึง แต่แปลว่าวันที่มีอะไรเพี้ยน บิลก็ยังถูกล็อกไว้
★ PRO TIP
หมุนเวียนกุญแจไม่เจ็บ — เพราะทุกช่องทางถือกุญแจใบของตัวเอง การเปลี่ยนกุญแจเว็บแชทไม่กระทบบอทเลย — สงสัยว่ารั่วก็ระงับใบนั้นก่อน แล้วออกใบใหม่ (แนวคิด blast radius เล็ก)

คำถามที่พบบ่อย / FAQfaq

ถาม: ถ้ากุญแจรั่วจริง ๆ ความเสียหายคือเท่าไหร่? — ถูกกั้นไว้ที่เพดานของใบนั้น ($1–10/วัน) บวกเวลาที่เราเห็นใน spend log — โมเดลที่ใบกุญแจอนุญาตก็ถูกจำกัดอยู่ด้วย ไม่สามารถเอาไปเรียกของแพงกว่าได้

ถาม: ดู dashboard ที่ไหน? — ที่ /ui ของ LiteLLM (หลังผ่าน Cloudflare Access) มีทั้งรายการกุญแจและกราฟ spend รายวัน

คำถามอื่น ๆ ดูที่ FAQ

ดูเพิ่ม / See alsosee also

ภาพประกอบ / Figuresfigures

หน้า API ของ LiteLLM เวอร์ชัน 1.100.0 ที่ใช้จริงใน production
เวอร์ชันที่เห็นคือเวอร์ชันที่รันอยู่จริงบน VPS — ทุก endpoint ต้องมีกุญแจจึงเรียกได้
แผนภาพผ้ากุญแจเสมือน 5 ใบ
หนึ่ง proxy หลายประตู ทุกประตูมีมิเตอร์ของตัวเอง

วิดีโอ / Videovideo

🎬
วิดีโอกำลังผลิต — ติดตามที่ YouTube @icafefx
คลิปสาธิตทีละขั้นของบทนี้จะอัปโหลดที่ youtube.com/@icafefx เร็ว ๆ นี้