Agent ArenaClickHouse Workshops

01 เลือกโมเดลฐาน

บันทึกสำหรับผู้สอนของโมดูล 01 — เวลา แนวการพูด ความล้มเหลวที่พบบ่อย และขั้นตอนรีเซ็ต

คู่มือของผู้ดำเนินกิจกรรมที่ใช้ควบคู่กับบทเรียน learner 01 เลือกโมเดลฐาน

เวลา

ประมาณ 20 นาทีเมื่อใช้ชุดย่อยที่แนะนำ; 45–60 นาทีถ้าคุณรันตารางเต็มสด ๆ

  • 8 min — ตั้งค่า Langfuse evaluator (LLM Connection, code evaluator correctness, และ evaluator definition llm_judge แบบ LLM-as-a-judge ซึ่งปล่อย score agent-arena-llm-judge) ทำเป็นการพาเดินดูสด ๆ บนโปรเจกเตอร์ของ คุณเอง ไม่ใช่แค่ให้ลิงก์ไป README — มันเป็นขั้นที่จุกจิกที่สุดในเซสชัน
  • 8 min — รันชุดย่อยสองโมเดลหนึ่ง prompt (พูดคุยระหว่างรอ; เป็นจังหวะที่ดี สำหรับการวางกรอบ "ทำไมต้องต้นทุนต่อคำตอบที่ถูกต้อง") ตารางเต็มปกติใช้เวลา 35–45 นาทีและควรรันไว้ล่วงหน้าหรือปล่อยให้เป็นงานที่ทำตามจังหวะตัวเอง
  • 4 min — เปิด Leaderboard อ่านผู้ชนะ เอ่ยชื่อ config_id

แนวการพูด

  • วางกรอบเรื่องนี้ว่าเป็นการตัดสินใจที่เป็นรากฐานของเวิร์กช็อป อย่างแท้จริง: โมเดลไหนเป็นเครื่องยนต์ของ agent ตัดสินด้วยหลักฐานแทน leaderboard สาธารณะที่คนอื่นรันบนงาน อีกแบบ
  • เน้นว่าการให้คะแนนเกิดขึ้นที่ไหน: ภายใน Langfuse ไม่ใช่ภายใน harness harness เป็นตัวประสานตารางและบันทึก Experiment Item ให้ครบ; leaderboard อ่านมันผ่าน Langfuse Public API นี่คือโปรเจกต์ Langfuse เดียวกับที่ เชื่อมต่อไว้ในโมดูล 00 — ไม่มีเครื่องมือใหม่หรือที่เก็บผลลัพธ์ที่สองถูกนำเข้ามาตรงนี้
  • อธิบายจำนวน item ให้ชัด: repo มีคำถาม YAML 20 ข้อ แต่ q019 และ q020 เป็น few-shot holdout ดังนั้น dataset experiment arena-golden ที่สะอาดมี 18 item
  • เอ่ยชื่อเมตริกหลักให้ชัดและบอกว่าทำไมมันไม่ใช่ความแม่นยำดิบ: ต้นทุนต่อคำตอบ ที่ถูกต้อง — คุณภาพต่อเงินหนึ่งดอลลาร์สำหรับงานเฉพาะนี้ ชี้ให้เห็นว่าต้นทุนคำนวณ จากราคา จริง ของ OpenRouter ที่รีเฟรชตอนเริ่มการรันแต่ละครั้ง ไม่ใช่ตัวเลขเก่า ที่ฝังไว้ใน config.yaml
  • แสดงคำศัพท์ของตารางบนจอ: หกโมเดลแบ่งเป็น proprietary กับ open-weight (claude-sonnet-5, gpt-5.6-luna, gemini-flash-lite / deepseek-v4-flash, qwen3.7-flash, glm-4.7-flash) × prompt (P1_zeroshot … P3_dialect) และบอกว่า config_id คือ <model>__<prompt>
  • คลิกสด ๆ จากแถวใน Leaderboard เข้าไปในผลลัพธ์รายคำถาม แล้วเข้าไปใน Langfuse trace ที่อยู่เบื้องหลัง — นี่คือนิสัยการเจาะลึกที่โมดูล 02 จะลงลึก
  • ปิดท้ายที่ผู้ชนะและพูด config_id ของมันออกมาดัง ๆ — ทุกโมดูลจากนี้ไป จะอ้างกลับมาที่มัน

ความล้มเหลวที่พบบ่อย

  • ไม่ได้ตั้งค่า Langfuse evaluator — harness รอแค่ถึง --eval-timeout (ค่าเริ่มต้น 180s) แล้วออกด้วยสถานะไม่เป็นศูนย์และบอกชื่อคะแนนที่ขาดไป มันรอ score ชื่อตรงเป๊ะว่า agent-arena-llm-judge ซึ่งปล่อยจาก evaluator definition llm_judge รัน python -m scripts.provision_langfuse_evaluators สำหรับ judge ที่ใช้ OpenRouter แก้ target/ตัวกรองของ evaluator correctness แล้วรันตารางเล็ก ๆ สองโมเดล หนึ่ง prompt ด้วย --run-id ใหม่; ไม่มีทางสำรองแบบเก็บผลในเครื่องโดยเจตนา เพราะ Langfuse เป็นที่เก็บการประเมิน
  • OPENROUTER_API_KEY ที่เป็น placeholder — ทุกการเรียกในตารางล้มเหลวด้วย 401 ยืนยันเรื่องนี้ในโมดูล 00 แต่ถ้ามันหลุดรอดมา นี่คือจุดที่มันจะ ปรากฏชัด: การรันทั้งครั้งที่มีคำตอบถูกศูนย์ข้อในทุกคอนฟิก
  • model slug เลื่อนออกจากแคตาล็อกของ OpenRouter — id ของโมเดลใน config.yaml (เช่น anthropic/claude-sonnet-5) ถูกตรึงไว้กับสิ่งที่ยังใช้งานได้บน OpenRouter ตอน เขียน; OpenRouter เลิกใช้/เปลี่ยนชื่อ slug ถ้าคอนฟิกหนึ่งพัง ทันทีด้วยความล้มเหลวแนว "model not found" ให้ตรวจ https://openrouter.ai/api/v1/models เพื่อดู slug ปัจจุบันแล้วเทียบกับ config.yaml endpoint /api/models ของ dashboard สะท้อนแคตาล็อกจริง ดังนั้นการที่ ตรงนั้นไม่ตรงกันเป็นทางเร็วในการจับการเลื่อนก่อนจะรัน harness
  • ยังไม่ได้ seed ClickHouse — ถ้าโมดูล 00 ไม่จบอย่างสะอาด query ของ harness ที่ยิงไปที่ view v_* จะคืนผลว่างเปล่าหรือ error; ทุกคอนฟิกจะกลับมาด้วย outcome เดียวกัน ให้รัน scripts/arena.sh up ใหม่
  • การรันดูเหมือนค้าง — ตารางคือ models × prompts (6 × 3 = 18 คอนฟิกโดยค่าเริ่มต้น); มันอาจใช้เวลาหลายนาทีตั้งแต่ต้นจนจบ ใช้ --models/--prompts เพื่อย่อมันสำหรับ การเดโมสด (ดูขั้นตอนรีเซ็ต)

ขั้นตอนรีเซ็ต

  • ยืนยันว่า ClickHouse ถูก seed แล้ว: scripts/arena.sh up (idempotent; รันซ้ำได้ปลอดภัย)
  • รันชุดย่อยราคาถูกแทนตารางเต็ม: python -m eval.harness --run-id demo2 --models qwen3.7-flash,gpt-5.6-luna --prompts P1_zeroshot,P3_dialect
  • ให้ --run-id ใหม่กับการรันครั้งใหม่เสมอ (เช่น demo2, demo3) เพื่อให้มันปรากฏเป็น ชุดแถวของตัวเองบน Leaderboard และเป็น Experiment ของตัวเองใน Langfuse แทนที่จะ ผสมเข้าไปในการรันครั้งก่อน
  • ถ้า Langfuse evaluator เป็นตัวขวาง ให้ตรวจว่าทั้งคู่ target ไปที่ Experiments และมีตัวกรอง dataset เป็น arena-golden แล้วรันชุดย่อยราคาถูกด้านบนซ้ำด้วย --run-id ใหม่
  • ถ้าตัว dashboard เองดูติดขัด (ไม่ใช่ harness) การใช้ scripts/arena.sh stop แล้ว scripts/arena.sh serve จะรีสตาร์ตเฉพาะเซิร์ฟเวอร์ในเครื่องโดยไม่แตะข้อมูลที่ seed ไว้

ในหน้านี้

TH