00 ตั้งค่า
บันทึกสำหรับผู้สอนของโมดูล 00 — เวลา แนวการพูด ความล้มเหลวที่พบบ่อย และขั้นตอนรีเซ็ต
คู่มือของผู้ดำเนินกิจกรรมที่ใช้ควบคู่กับบทเรียน learner 00 ตั้งค่า
ก่อนเซสชัน — provision key สำหรับผู้เรียนแบบใช้ร่วมกัน (ใช้อย่างเป็นธรรม)
สำหรับการจัดแบบสาธารณะที่ผู้สอนนำ อย่ายื่น OpenRouter key ส่วนตัวของคุณหรือ key ที่ไม่มีเพดานให้คนแปลกหน้าทั้งห้อง OpenRouter มี Management (provisioning) API ที่ผลิต key เฉพาะกิจพร้อมเพดานเครดิตแบบตายตัวได้ด้วยโปรแกรม — ทำให้ค่าใช้จ่ายของเวิร์กช็อป ถูกจำกัดและเป็นธรรม
1. สร้าง Management key (ครั้งเดียว) OpenRouter → Settings → Management API Keys (openrouter.ai/settings/management-keys) → Create New Key key นี้สร้าง ตรวจ และลบ key อื่นได้ และใช้จ่ายเงินในบัญชี ของคุณได้ — ให้ถือว่ามันเป็น credential ระดับ admin
export OPENROUTER_PROVISIONING_KEY=sk-or-v1-<management-key> # instructor only — never share2. Provision key ของผู้เรียนแบบใช้ร่วมกันพร้อมเพดานตายตัว repo มีตัวช่วยมาให้
(scripts/provision_workshop_keys.py)
ซึ่งเรียก POST https://openrouter.ai/api/v1/keys:
# one shared key the whole room uses, capped at $20 total (reset daily at 00:00 UTC):
python -m scripts.provision_workshop_keys --name "Agent Arena $(date +%F)" --limit 20 --dailyresponse ของการสร้างพิมพ์สตริงของ key ออกมาครั้งเดียว — คัดลอกมันแล้วมอบให้ผู้เรียนเป็น
OPENROUTER_API_KEY ของพวกเขา หลังจากนั้นจะดึงได้แค่ hash ของมัน (เพื่อตรวจหรือ
ลบ) ชอบ curl ดิบ ๆ มากกว่า? การเรียกเดียวกัน:
curl -s https://openrouter.ai/api/v1/keys \
-H "Authorization: Bearer $OPENROUTER_PROVISIONING_KEY" \
-H "content-type: application/json" \
-d '{"name":"Agent Arena workshop","limit":20}'เป็นธรรมกว่าสำหรับกลุ่มใหญ่ key ที่ใช้ร่วมกันอันเดียวหมายความว่าผู้เรียนคนเดียวสามารถเผา งบทั้งก้อนได้ สำหรับ 20 คนขึ้นไป ให้ผลิต key ที่มีเพดานหนึ่งอันต่อผู้เรียนหนึ่งคนแทน — แต่ละอันถูกจำกัดในตัวเอง:
python -m scripts.provision_workshop_keys --name "Agent Arena $(date +%F)" --limit 2 --count 30นั่นสร้าง key 30 อัน แต่ละอันมีเพดาน $2 แจกให้คนละอัน
3. เฝ้าดูแล้วเก็บกวาด ตรวจการใช้จ่ายกลางเซสชันและลบ key เมื่อเสร็จ:
python -m scripts.provision_workshop_keys --list
python -m scripts.provision_workshop_keys --delete <keyHash>Management key ใช้จ่ายเงินและสร้าง/ลบ key ในบัญชีของคุณได้ เก็บมันไว้ใน
.env ของผู้สอนเท่านั้น — ไม่ใส่ในเอกสารแจกผู้เรียน สไลด์ หรือ repo ที่แชร์กัน ผู้เรียน
จะได้รับเพียง key ของผู้เรียนที่ provision ไว้ (sk-or-v1-… แบบธรรมดาที่มีเพดาน)
การประมาณขนาด: รายชื่อโมเดลเป็นระดับ flash-lite ราคาถูก และตารางมีแค่ 6 × 3 = 18 คอนฟิก ดังนั้น เพดาน $20 แบบใช้ร่วมกันครอบคลุมทั้งห้องได้อย่างสบาย เมื่อรัน Arena สองสามครั้ง — เพดาน นี้เป็นราวกันตกจากวงวนที่หลุดควบคุม ไม่ใช่งบที่คับแคบ
เวลา
รวมประมาณ 25–30 นาทีเมื่อมีบัญชีอยู่แล้ว; เผื่อเวลาไว้มากกว่านั้นถ้าต้องสร้างบัญชี
- 5 min — สร้างสามบัญชี (OpenRouter, Langfuse Cloud, ClickHouse Cloud) ถ้า ผู้เรียนยังไม่ได้ทำไว้ล่วงหน้าหนึ่งวัน
- 5 min — clone repo, สร้าง virtualenv, ติดตั้ง dependency
- 5 min — กรอก
.env - 5 min —
source .env && scripts/arena.sh upยืนยันว่า dashboard โหลดได้ที่http://localhost:5174
ก่อนเซสชัน ให้เปิด OpenRouter → Settings → Privacy → Data Policies → Zero Data
Retention แล้วปิด Non-frontier (สีเทา/ปิด) จากนั้นทดสอบ Qwen ด้วย key ของ
ผู้เรียน Qwen ถูกส่งไปที่ endpoint ที่ไม่ใช่ ZDR ของ Alibaba ดังนั้นการเปิด ZDR สำหรับ non-frontier จะทำให้เกิด
No endpoints available matching your guardrail restrictions and data policy แม้ว่า
จะอนุญาต Alibaba แล้วและ guardrail ระดับ key/workspace จะผ่อนปรนก็ตาม นี่เป็นค่าตั้ง
ระดับบัญชีและผ่อนปรนผ่าน Management API หรือพารามิเตอร์ของ request ไม่ได้ ใช้ค่าตั้งนี้
สำหรับงานสังเคราะห์ของเวิร์กช็อปเท่านั้น; ให้คำนึงถึงข้อกำหนดการจัดการข้อมูลของ
องค์กรคุณเมื่อทำกับข้อมูลจริง
แนวการพูด
- เปิดด้วยการเอ่ยถึงทั้งสามบัญชีตั้งแต่ต้น — OpenRouter, ClickHouse Cloud, Langfuse Cloud — และพูดชัด ๆ ว่า Langfuse เป็นหนึ่งในนั้น ในโมดูลแรกสุด ก่อนที่จะเลือกโมเดลแม้แต่ตัวเดียว นั่นคือประเด็นทั้งหมด: Langfuse ไม่ใช่ของ เสริมสำหรับ production ที่มาแปะในโมดูล 04 มันคือเครื่องมือที่คุมการแข่งขันใน โมดูลถัดไป
- ชี้ที่ไดอะแกรมสถาปัตยกรรมและเอ่ยถึงเส้นทางโค้ดที่ใช้ร่วมกันเส้นเดียว:
agents/ถูกใช้ ทั้งโดยeval/harness.py(benchmark) และserving/api.py(production) — ดังนั้น ไม่มีอะไรที่วัดวันนี้ที่จะเบี่ยงออกจากสิ่งที่ปล่อยในโมดูล 04 - เล่าไปด้วยว่า
scripts/arena.sh upทำอะไรจริง ๆ ขณะที่มันรัน: สร้างฐานข้อมูลarena, สร้างผู้ใช้แบบอ่านอย่างเดียวarena_ro, สร้างข้อมูล e-commerce สังเคราะห์ ลงใน ClickHouse โดยตรง, สร้าง viewv_*และเริ่ม dashboard API + web UI - ตั้งความคาดหวังว่าแท็บ Leaderboard จะว่างเปล่าตอนจบโมดูลนี้ — นั่นถูกต้อง ไม่ใช่บั๊ก และมันคือปมค้างที่ทิ้งไว้เข้าโมดูล 01
ความล้มเหลวที่พบบ่อย
- ปล่อย
OPENROUTER_API_KEYเป็นsk-or-...— harness จะล้มเหลวด้วย401ครั้งแรกที่มันเรียกโมเดลในโมดูล 01 ไม่ใช่ตอนตั้งค่าเอง ขอให้ ผู้เรียนตรวจซ้ำว่า.envมี key จริงตอนนี้เลย ก่อนที่จะกลายเป็นเรื่องแพงที่ต้องไปดีบัก ทีหลัง - ปล่อย
ARENA_RO_PASSWORDว่าง —scripts/arena.sh upจะยังสร้างผู้ใช้arena_roอยู่ แต่ด้วยรหัสผ่านว่าง ซึ่ง client แบบอ่านอย่างเดียวของ agent อาจ ปฏิเสธ ขึ้นอยู่กับนโยบายรหัสผ่านของ ClickHouse Cloud service ให้ผู้เรียนตั้ง ค่าอะไรก็ได้ที่ไม่ว่าง - ClickHouse Cloud service ยัง provision อยู่ — service ที่สร้างใหม่อาจใช้เวลา
หนึ่งถึงสองนาทีก่อนจะรับการเชื่อมต่อ;
scripts/arena.sh upจะล้มเร็วด้วย error ของการเชื่อมต่อถ้ารันเร็วเกินไป แค่รอแล้วรันใหม่ - ไม่ได้ source
.envก่อนรันสคริปต์ —source .env && scripts/arena.sh upเป็นบรรทัดเดียวด้วยเหตุผล; การรันscripts/arena.sh upเดี่ยว ๆ ในเชลล์ใหม่ จะล้มเหลวเพราะไม่มี env varCLICKHOUSE_CLOUD_* - พอร์ต 5174 (หรือ 8000) ถูกใช้อยู่แล้ว — โปรเซสค้างจากการรันครั้งก่อน
scripts/arena.sh stopเคลียร์เซิร์ฟเวอร์ในเครื่องก่อนรันupใหม่
ขั้นตอนรีเซ็ต
- Seed ใหม่ตั้งแต่ต้น:
source .env && scripts/arena.sh up— มันเป็น idempotent และ ไม่ใช้ Aurora, ClickPipes หรือ ClickStack; มันสร้างฐานข้อมูลarena, ผู้ใช้arena_ro, ข้อมูลสังเคราะห์ และ viewv_*ขึ้นใหม่ แล้วรีสตาร์ต dashboard API และ web UI ผลลัพธ์ benchmark ยังอยู่ใน Langfuse - ถ้าติดขัดแค่เซิร์ฟเวอร์ในเครื่อง (ไม่ใช่ ClickHouse) การใช้
scripts/arena.sh stopตามด้วยscripts/arena.sh serveเร็วกว่าการทำupเต็มรูปแบบ - ตรวจสถานะได้ทุกเมื่อด้วย
scripts/arena.sh status— มันรายงานว่า dashboard API และ web UI ขึ้นอยู่หรือไม่ และพิมพ์จำนวนแถวของแต่ละ viewv_* - ถ้า
.envของผู้เรียนยังมีค่า placeholder อยู่ ก็ไม่มีทางลัด — หา key/credential จริงมาแล้วรันscripts/arena.sh upใหม่