มินิ-เฟรมเวิร์กสำหรับการประเมินประสิทธิภาพ LLM ในเกมการคาดเดาหมายเลขบูลส์และวัวซึ่งสนับสนุนผู้ให้บริการหลายรายผ่าน Litellm
บันทึก
TLDR: บูลส์และวัวเป็นเกมทำลายรหัสสำหรับผู้เล่นสองคน ผู้เล่นเขียนหมายเลขลับ 4 หลัก ตัวเลขจะต้องแตกต่างกันทั้งหมด (เช่น 1234 ) จากนั้นผู้เล่นคนอื่น (LLM ในกรณีนี้) พยายามเดาหมายเลขลับ (เช่น 1246 ) สำหรับทุกการคาดเดาข้อมูลจำนวนการแข่งขันจะถูกส่งคืน หากตัวเลขที่ตรงกันอยู่ในตำแหน่งที่ถูกต้องพวกเขาคือ "วัว" (วัวสองตัวในตัวอย่างนี้: 1 และ 2 ) หากอยู่ในตำแหน่งที่แตกต่างกันพวกเขาจะเป็น "วัว" (วัวหนึ่งตัว, 4 ) โซลูชันที่ถูกต้องต้องใช้เหตุผลในการคิดว่าการคาดเดาที่ดีและในบริบทต่อไปเพื่อเรียนรู้จากคำตอบที่ผ่านมา มันพิสูจน์แล้วว่าหมายเลขลับ 4 หลักใด ๆ สามารถแก้ไขได้ภายในเจ็ดรอบ


| แบบอย่าง | เกม | อัตราความสำเร็จ | AVG Turns (ความสำเร็จเท่านั้น) | ความล้มเหลวในรูปแบบ (เปลี่ยน) |
|---|---|---|---|---|
| OpenAI/O1-MINI-20124-09-12 | 25 | 60.0% [40.7%; 76.6%] | 9.1 ± 2.7 | 23.1% |
| OpenRouter/Manthropic/Claude-3.5-sonnet | 50 | 36.0% [24.1%; 49.9%] | 9.8 ± 4.0 | 0.0% |
| OpenAI/GPT-4O-20124-08-06 | 50 | 30.0% [19.1%; 43.8%] | 9.5 ± 3.6 | 0.0% |
| OpenAI/GPT-4O-MINI-20124-07-18 | 50 | 26.0% [15.9%; 39.6%] | 10.0 ± 3.1 | 0.1% |
| OpenRouter/Deepseek/Deepseek-Chat | 50 | 18.0% [9.8%; 30.8%] | 11.6 ± 3.6 | 3.3% |
| OpenRouter/Meta-llama/Llama-3.1-405B-Instruct | 50 | 8.0% [3.2%; 18.8%] | 9.5 ± 3.3 | 3.0% |
| OpenRouter/Google/Gemini-Pro-1.5 | 50 | 8.0% [3.2%; 18.8%] | 8.0 ± 4.1 | 0.1% |
| OpenRouter/Google/Gemini-Flash-1.5 | 50 | 2.0% [0.4%; 10.5%] | 8.0 ± 0.0 | 0.9% |
| มานุษยวิทยา/Claude-3-5-Haiku-201241022 | 50 | 0.0% [0.0%; 7.1%] | 0.0 ± 0.0 | 0.9% |
สำคัญ
สำหรับการวิ่งส่วนใหญ่มีการเล่น 50 เกม (ไม่รวม O1-MINI) ดังนั้นช่วงความมั่นใจจึงกว้าง หากคุณต้องการใช้จ่าย $ 100-200 ในเครดิต API ในการทดสอบเพื่อให้ได้ผลลัพธ์ที่แม่นยำยิ่งขึ้นและทำให้ CIS แคบโปรดอย่าลังเลที่จะติดต่อฉันหรือเปิดประชาสัมพันธ์ด้วยผลลัพธ์ของคุณ
GUESS: 1234 (กำหนดไว้ในไฟล์พรอมต์).strip() ถูกเพิ่มเข้าไปในที่อยู่นี้)o1-mini มักจะลืมกฎการจัดรูปแบบและพยายามที่จะเพิ่ม ความสำคัญ ให้กับการตอบสนอง พฤติกรรมนี้ถือว่าไม่สามารถยอมรับได้และนับเป็นข้อผิดพลาดและการเลี้ยวที่สูญเปล่าเนื่องจากคำสั่งระบุการจัดรูปแบบที่จำเป็นอย่างชัดเจนo1-mini )3 หลัก (เวอร์ชันดีบั๊ก: เลี้ยวน้อยลงการใช้เหตุผลที่สั้นกว่า):
openai/gpt-4o-mini-2024-07-18 : 283K แคช + 221K uncached + 68K เอาท์พุท = $ 0.1 ( แนะนำสำหรับการดีบัก )
openai/gpt-4o-2024-08-06 : 174K แคช + 241K uncached + 56K เอาท์พุท = $ 1.38
openai/gpt-4-turbo-2024-04-09 : ไม่ทราบ = $ 6.65
openai/o1-mini-2024-09-12 : 0K แคช + 335K uncached + 1345K เอาท์พุท = $ 17.15
anthropic/claude-3-haiku-20240307 : อินพุต 492K + เอาต์พุต 46K = $ 0.18
4 หลัก (เวอร์ชันหลัก):
openai/gpt-4o-mini-2024-07-18 : 451K แคช + 429K uncached + 100k เอาท์พุท = $ 0.15
openai/gpt-4o-2024-08-06 : 553K แคช + 287K uncached + 87k = $ 2.29
(25 เกม) openai/o1-mini-2024-09-12 : 0K Cached + 584K uncached + 1815K เอาท์พุท = $ 23.54
anthropic/claude-3-5-haiku-20241022 : 969K อินพุต + 90K เอาต์พุต = $ 1.42
openrouter/anthropic/claude-3.5-sonnet (ใหม่): ไม่ทราบ = $ 5.2
เฟรมเวิร์กนี้เกิดขึ้นด้วยความคิดเห็นที่อยากรู้อยากเห็นจากสมาชิกของช่องโทรเลขของฉัน พวกเขาอ้างว่าได้ทดสอบ LLMs ต่าง ๆ ในเกมบูลส์และวัวโดยสรุปว่าไม่มีใครสามารถแก้ปัญหาได้และดังนั้น LLM จึงไม่สามารถให้เหตุผลได้ ฉันขอตัวอย่างของสิ่งเหล่านี้ที่เรียกว่า "ความล้มเหลว" เหล่านี้เท่านั้นที่จะบอกว่าการแชทถูกลบ สะดวก. ต่อมาพวกเขากล่าวถึงการลองทัศนะ O1 ซึ่งเห็นได้ชัดว่าได้แก้ปัญหา-ในการเคลื่อนไหวประมาณ 20 ครั้งไกลจากการเคลื่อนไหว 7 ครั้งซึ่งถือว่าดีที่สุด
ในขณะเดียวกันฉันกำลังมองหาข้ออ้างในการทดลองกับ OpenHands และวิธีใดที่ดีไปกว่าการท้าทาย Copilot เพื่อหมุนเกณฑ์มาตรฐาน LLM ตั้งแต่เริ่มต้น? หลังจากสามช่วงเย็นของความพยายามแบบครึ่งใจ (ฉันกำลังเล่น stalker 2 พร้อมกัน) เกณฑ์มาตรฐานนี้เกิดมา-ผลิตภัณฑ์ที่มีความไม่แยแสส่วนที่เท่าเทียมกันและความปรารถนาที่จะพิสูจน์จุดที่ไม่มีใครขอ สนุก!
pip install -r requirements.txt
pre-commit install(ไม่บังคับ) เพื่อทำความเข้าใจตรรกะอ่านพรอมต์ทั้งหมดที่นี่
กำหนดค่าคีย์ API ของผู้ให้บริการ LLM ของคุณเป็นตัวแปรสภาพแวดล้อม (ไม่ว่าจะเป็น diroclty ในเทอร์มินัลของคุณหรือใช้ไฟล์. ENV) ฉันขอแนะนำให้ใช้ปุ่ม OpenAI หรือมานุษยวิทยาและ OpenRouter สำหรับสิ่งอื่นใด
ปรับ config/default_config.yaml ด้วยการตั้งค่ารุ่นและเกมที่คุณต้องการ ใช้ run_id เพื่อจัดเก็บการรันที่แตกต่างกันในโฟลเดอร์แยกต่างหาก - มิฉะนั้นโฟลเดอร์ผลลัพธ์จะถูกตั้งชื่อด้วยการประทับเวลา ฟิลด์หลักคือ: model , target_length (จำนวนหลักในหมายเลขลับ) 8 num_concurrent_games (เพื่อรับข้อ จำกัด TPS API ที่น่าหัวเราะเช่นสำหรับมานุษยวิทยาระดับ 2 ฉันไม่แนะนำให้ตั้งค่า 10 สูงกว่า 2
เรียกใช้เบนช์มาร์กและแสดงภาพผลลัพธ์ของการทำงานทั้งหมด:
python run_benchmark.py
python scripts/visualize_results.pyผลลัพธ์จะมีอยู่ใน HTML (พร้อมแปลงเพิ่มเติม) และ markdown
เกณฑ์มาตรฐานประเมิน LLMs ในสามประเด็นสำคัญ:
ผลลัพธ์จะถูกบันทึกด้วยประวัติเกมเต็มรูปแบบ (รวมถึงบันทึกการสนทนาเช่นที่นี่) และการกำหนดค่าสำหรับการวิเคราะห์โดยละเอียด
โครงการใช้สีดำ (ความยาวบรรทัด: 100) และ iSort สำหรับการจัดรูปแบบรหัส ตะขอล่วงหน้าให้แน่ใจว่าคุณภาพของรหัสโดยการตรวจสอบ:
เรียกใช้การตรวจสอบด้วยตนเองด้วย:
pre-commit run --all-filesเรียกใช้การทดสอบ (ใช่มีการทดสอบเกี่ยวกับตรรกะของเกมคำตอบการแยกวิเคราะห์และการตรวจสอบ):
python -m pytest . -v