- ไลบรารี Python จากทีม Mozilla AI ที่ทำให้สามารถใช้งาน ผู้ให้บริการ LLM มากกว่า 20 ราย ได้ด้วย ฟังก์ชันเดียว
- เมื่อต้องการสลับโมเดลของ OpenAI, Anthropic, Google, Mistral, AWS Bedrock เป็นต้น ก็เพียงเปลี่ยน
provider_id/model_id
- ให้ความสำคัญกับการใช้ SDK ทางการของผู้ให้บริการก่อน เพื่อ ลดปัญหาความเข้ากันได้ให้เหลือน้อยที่สุด และไม่จำเป็นต้องติดตั้งพร็อกซี/เกตเวย์เซิร์ฟเวอร์แยก ทำให้ ติดตั้งผ่าน pip แล้วใช้งานได้ทันที
- เป็นมิตรกับนักพัฒนา ด้วย type hints ใน IDE ที่ครบถ้วน การจัดการข้อยกเว้นที่เข้าใจง่าย custom exceptions รวมถึงเอกสารและคู่มือแบบรวดเร็ว
- มี เราเตอร์น้ำหนักเบา ที่ไม่ผูกกับเฟรมเวิร์ก และ ไม่ต้องใช้พร็อกซี/เกตเวย์เซิร์ฟเวอร์แยก (มีเพียง API Key ก็ใช้งานได้ทันที)
- แก้ปัญหาของโซลูชันเดิม พร้อมมี การดูแลรักษาอย่างต่อเนื่อง : ถูกใช้งานอยู่ในผลิตภัณฑ์จริงอย่าง any-agent ของ Mozilla
- LiteLLM: ทำเองโดยไม่ใช้ SDK ทางการ → อาจมีความกังวลเรื่องความเข้ากันได้/บั๊ก
- AISuite: โครงสร้างแบบโมดูลาร์ แต่การจัดการและการทำไทป์ยังไม่ดีพอ
- แบบผูกกับเฟรมเวิร์ก: แตกย่อยซ้ำอีกตามแต่ละโปรเจกต์
- แบบพร็อกซีอย่างเดียว: ต้องมีเซิร์ฟเวอร์แยก เพิ่มความซับซ้อน
เอกสารที่เกี่ยวข้อง
3 ความคิดเห็น
คงต้องจัดการคีย์แยกตามผู้ให้บริการ LLM แต่ละรายสินะ
ความคิดเห็นบน Hacker News
สำหรับ text API ฉันไม่เคยเจอ ปัญหาความเข้ากันได้ ใหญ่อะไร และก็เข้าใจได้ว่าถ้าจะทำมาตรฐานให้ API หลายแบบ ต้องลงมือทำ interface เอง
ถ้าจะสร้างเราเตอร์เฉพาะทาง ขั้นตอนนี้ก็จำเป็น
เคยลองใช้เป็นไลบรารีแบบทดลอง แต่สุดท้ายก็ย้ายไปใช้ llm ของ Simon แทน ขอขอบคุณ Simon ไว้ตรงนี้
ความต่างจะชัดขึ้นตรง กรณีขอบเขต เช่น พฤติกรรมของ streaming, การจัดการ timeout, หรือการเพิ่มฟีเจอร์ใหม่
ฝั่งเราก็ทำ interface ขึ้นมาใหม่เพื่อ normalize API เช่นกัน ดังนั้น การใช้ SDK หรือไม่ ก็เป็นแค่เรื่องว่าจะแบ่งเลเยอร์ตรงไหน
การเลือกใช้ SDK ส่วนใหญ่เป็นความชอบด้านการดูแลรักษามากกว่า ไม่ใช่เพราะแนวทางของ LiteLLM มีข้อบกพร่องพื้นฐาน
SDK ของ Together เคยพ่วง dependency ขนาด 60MB อย่าง Apache Arrow มาด้วย และฉันก็ต้องแพตช์เองให้เป็นตัวเลือกแทน
ถ้ามันบังคับตรึงเวอร์ชัน dependency ก็อาจชนกับโปรเจ็กต์ของฉันได้
ฉันเลยมองว่าการใช้แค่ OpenAPI/REST ดีกว่าไลบรารีที่ลาก dependency มาจำนวนมาก
แค่ใช้ SDK ทางการก็ไม่ได้แปลว่าจะแก้ ปัญหาความเข้ากันได้ ได้หมด และ any_llm เองสุดท้ายก็ยังต้องทำงานรักษาความเข้ากันได้กับ SDK ทางการอยู่ดี
เลยพูดได้ยากมากว่าวิธีไหนเหนือกว่าอย่างชัดเจน
จากมุมผู้ใช้ ไม่ว่าจะใช้ SDK ทางการในพร็อกซีหรือไม่ ประสบการณ์ใช้งานจริงก็แทบไม่ต่างกัน
แต่อาจมีข้อดีสำหรับฝั่งนักพัฒนาพร็อกซี
ตัวอย่างเช่น เมื่อไม่นานมานี้ Litellm มีปัญหากับ การจัดการ Deepseek Reasoning และส่วน reasoning เคยหายไปทั้งใน response แบบ synchronous และ streaming
จากประสบการณ์ของฉัน LiteLLM ทำงานได้ เสถียรมากจริง ๆ
ผู้ให้บริการมัก แจ้งล่วงหน้า ชัดเจนเวลา API จะมีการเปลี่ยนแปลง และฉันก็ไม่เคยเห็น LiteLLM มีปัญหาเพราะเรื่องนี้
ข้อเสียเชิงสมมติในแง่ลบเกี่ยวกับ LLM พวกนี้เหมือนจะมีอยู่แค่ในบทความนี้
เขายังพูดถึง OpenRouter กับ Portkey ในฐานะโซลูชันพร็อกซี/เกตเวย์ แต่จริง ๆ แล้ว OpenRouter ไม่ต้องให้ผู้ใช้ตั้งเซิร์ฟเวอร์เอง แค่เรียก API ไปยัง endpoint ได้เลย
บทความนี้เข้าใจ OpenRouter ผิดว่าเป็น self-hosted proxy
และ AISuite เป็นผลิตภัณฑ์ของ Andrew NG แต่บล็อกกลับเขียนว่า “ไม่ได้รับการดูแลรักษามาตั้งแต่เดือนธันวาคม 2024” ทั้งที่จริง ๆ แค่อาจไม่มี release tag และโปรเจ็กต์คอมมูนิตี้เล็ก ๆ หลายตัวก็ไม่ได้ทำ tagging กันสม่ำเสมอ
ฉันรู้สึกว่าการเอาเรื่องแบบนี้ขึ้นบล็อกโดยไม่ ตรวจสอบข้อเท็จจริง เป็นปัญหา
ถ้าไม่ใช่แบรนด์ Mozilla ฉันคงนึกว่าเป็นของหลอกหรือมัลแวร์ไปแล้ว
ชื่อก็คล้าย Anything-LLM มากเกินไปจนชวนสับสนด้วย
จนถึงตอนนี้ฉัน ใช้ LiteLLM มาตลอด แต่พอดู implementation ภายในจริง ๆ แล้วพบว่ามัน ซับซ้อนมากและมีปัญหาเยอะ
ตัวอย่างเช่น ช่วงไม่กี่เดือนที่ผ่านมา Structured Output ของส่วน Ollama พังแบบใช้ไม่ได้เลย และก็ถูกปล่อยทิ้งไว้อย่างนั้น แถมเอกสารก็แทบไม่ได้จัดระเบียบเลย
เหตุผลที่เลือก Python น่าจะเป็นเพราะ SDK ส่วนใหญ่ทำบน Python
แต่ถ้ามันเป็นรูปแบบที่ พอร์ตข้ามหลายภาษาได้โดยไม่ต้องพึ่ง interpreter ก็คงปฏิวัติวงการมาก
ถ้าจะทำโซลูชันที่เป็นสากลจริง ๆ ก็จำเป็นต้อง แยก runtime ของโมเดลออกจากภาษาให้เด็ดขาด ซึ่งเป็นปัญหาที่ยากกว่ามาก แต่ก็เป็นก้าวสำคัญ
ส่วนโปรเจ็กต์ฝั่ง Mozilla (รวมถึง LiteLLM) มีจุดแข็งตรงที่ รองรับหลาย interface อยู่แล้ว ทำให้ใช้งานหลายโมเดลได้ทันที
เชื่อมต่อกับผู้ให้บริการ LLM หลายรายได้เลยโดยไม่ต้องมีเซิร์ฟเวอร์พร็อกซี/เกตเวย์แยกต่างหาก ส่วนการเทียบกับ LiteLLM ฉันยังมีประสบการณ์ไม่พอจึงตอบชัด ๆ ไม่ได้
ฉันพัฒนามันขึ้นมาเพราะจำเป็นต่อการทำงานวิจัย
ได้แรงบันดาลใจจากโปรเจ็กต์เดิม ๆ แล้วทำให้รองรับ การใช้งานทั่วไปมากขึ้น
https://github.com/proxai/proxai
https://proxai.co/
ฉันเองก็เพิ่งปล่อย LLM abstraction layer ที่คล้ายกันไปไม่นานนี้
ใช้งานง่ายผ่าน pip install และออกแบบโดยเน้น ความเข้ากันได้กับ Langchain เพื่อให้แทนที่ในระบบเดิมได้ง่าย
แถมยังมี automatic failover ผ่าน virtual provider เมื่อเจอการเกิน Rate Limit โดยอัตโนมัติ
ฟีเจอร์ Usage/Logs ช่วยให้มองเห็นการใช้งาน LLM จริงได้ดี และ ฟีเจอร์ Cache ก็ช่วยลดค่าใช้จ่ายเวลาเทสต์ซ้ำได้มาก
ขอบคุณสำหรับบทความดี ๆ ครับ จังหวะเหมาะเลย เพราะวันนี้ผมกำลังรีแฟกเตอร์เป็นรอบที่ 27 พอดี
ทำด้วย C++ อยู่พักหนึ่ง จากนั้นก็ไป JavaScript แล้วตอนนี้ก็มา Rust อีกแล้ว...