AI Engineer › พื้นฐาน LLM และ API
ชุดฝึกท้าย module: พื้นฐาน LLM และ API
โจทย์คละหัวข้อทั้ง module โดยไม่บอกว่าต้องใช้เทคนิคไหน ให้เลือกวิธีเองเหมือนตอนทำงานจริง
ประมาณ token ของคำถามทั้ง 30 ข้อใน qs (est_tokens ของแต่ละคำถาม) รวมกันเป็นเท่าไร เก็บไว้ในตัวแปร question_tokens_total
เอกสารไหนมี toy_tokens น้อยที่สุด (doc_id) เก็บไว้ในตัวแปร shortest_doc และจำนวน token ของมันไว้ใน shortest_len
ต้นทุนของคำขอที่ใช้ input 5,000 token และ output 800 token (PRICE_IN, PRICE_OUT ที่ให้ไว้ ปัด 6 ตำแหน่ง) เก็บไว้ในตัวแปร cost_5000_800
ที่ temperature 0.3 token แรกมีความน่าจะเป็นเท่าไร (ปัด 4 ตำแหน่ง) เก็บไว้ในตัวแปร p_t03
ตารางเวลารอ 6 ครั้งแรกเมื่อ base = 2 วินาที เพดาน 30 วินาที (min(30, 2 × 2^k), k = 0..5) เก็บเป็น list ไว้ในตัวแปร delays
แชตบอตรับ 1,000 คำถามต่อวัน ทำงาน 30 วัน แต่ละคำขอใช้ input 300 token และ output 120 token — ต้นทุนต่อเดือน (USD, ราคาสมมติ PRICE_IN/PRICE_OUT ปัด 2 ตำแหน่ง) เก็บไว้ในตัวแปร monthly_cost
ถ้าเพิ่ม cache ที่มี hit rate 40% (คำขอที่ hit ไม่เสียเงิน) ต้นทุนต่อเดือนของข้อ p6 เหลือเท่าไร (ปัด 2 ตำแหน่ง) เก็บไว้ในตัวแปร monthly_cost_cached และประหยัดได้เท่าไร ไว้ใน monthly_saving
ตัดประวัติ history ให้พอดีงบ 45 token โดยเก็บข้อความใหม่ล่าสุดย้อนหลัง (est_tokens ของ content) เก็บจำนวนข้อความที่เก็บได้ไว้ใน kept_count และผลรวม token ไว้ใน kept_tokens
เอนโทรปี (บิต: −Σ p·log2 p) ของการกระจาย softmax ที่ T = 1.0 และ T = 0.5 ปัด 4 ตำแหน่ง เก็บไว้ในตัวแปร entropy_t1, entropy_t05
สุ่ม 500 ครั้งด้วย np.random.RandomState(7).choice(4, size=500, p=softmax(logits, 1.0)) แล้วนับจำนวนที่ได้แต่ละ token (np.bincount(..., minlength=4)) เก็บเป็น list ของ int ไว้ในตัวแปร counts_t1
สตรีมคำถามที่ให้ไว้ (ตัวพิมพ์เล็กใหญ่/ช่องว่างต่างกัน) มีกี่ข้อความที่ไม่ซ้ำแบบดิบ (raw_unique) และหลัง normalize ด้วย strip().lower() (norm_unique)
jitter แบบ full: ด้วย rng = random.Random(0) สร้างเวลารอ 5 ครั้งแรก uniform(0, d) เมื่อ d มาจาก min(8, 1 × 2^k), k = 0..4 (เรียก rng.uniform ตามลำดับ) เก็บผลรวมของเวลารอ (ปัด 4 ตำแหน่ง) ไว้ในตัวแปร jitter_total
เรียก make_flaky(5) ด้วยการ retry สูงสุด 4 ครั้ง (จับ RateLimitError) — เก็บ True/False ว่าถอดใจ (gave_up) และจำนวนครั้งที่เรียก (attempts_made)
ใส่เอกสารตามลำดับ d01, d02, … โดยผลรวม est_tokens ไม่เกินงบ — ใส่ได้กี่เอกสารเมื่องบเป็น 100, 200 และ 400 token เก็บไว้ในตัวแปร fit_100, fit_200, fit_400
BPE สองรอบบน corpus ที่ให้ไว้: ทุกรอบเลือกคู่ที่พบมากสุด (เสมอเลือก tuple เล็กสุด) แล้วรวมเป็น token เดียวในทุกคำ — เก็บคู่ของรอบที่สองเป็นข้อความ "a+b" (a, b อาจเป็น token ที่รวมแล้ว) ไว้ใน second_pair และจำนวน token รวมหลังสองรอบไว้ใน tokens_after_2
เทียบตัวจำกัดอัตรา (สูงสุด 3 คำขอ ต่อ 5 วินาที) กับ timestamps ที่ให้ไว้: (ก) fixed window — แบ่งเวลาเป็นช่อง int(t // 5) แต่ละช่องรับได้ 3 (ข) sliding window — นับคำขอที่ถูกอนุญาตในช่วง (t − 5, t] — เก็บจำนวนที่อนุญาตของแต่ละแบบไว้ใน fixed_accepted, sliding_accepted