เมื่อไม่นานมานี้ ฉันได้รับอีเมลจากนักวิชาการที่มีความสามารถคนหนึ่งสอบถามเกี่ยวกับวิธีที่ Botpress เชื่อมต่อกับ LLMs
เขากำลังเขียนบทความเกี่ยวกับการหลีกเลี่ยงการผูกขาดผู้ให้บริการ และอยากรู้ว่าเราใช้เฟรมเวิร์กอย่าง LangChain หรือ Haystack หรือไม่
ฉันยินดีมากที่ได้บอกกับเขาว่า เราได้สร้างระบบนามธรรมของเราเองที่ช่วยให้ผู้สร้าง Botpress สามารถเชื่อมต่อกับ LLMs ได้
เนื่องจากมีความสนใจในเรื่องนี้อย่างกว้างขวาง ผมจึงอยากเผยแพร่ข้อมูลนี้ต่อสาธารณะ เผื่อจะเป็นประโยชน์กับนักพัฒนาคนอื่น ๆ หรือผู้ใช้แพลตฟอร์มของเรา หวังว่าคุณจะสนใจเหมือนกับที่ผมสนุกกับการสร้างมัน
สองวิธีที่ Botpress เชื่อมต่อกับ LLMs
Botpress ได้สร้าง abstraction ของตัวเองที่ทำงานได้สองรูปแบบ:
1. อินทิเกรชัน
อินทิเกรชันจะมีแนวคิดของ action ที่มีประเภท input และ output เฉพาะ
เรามีคอมโพเนนต์โอเพ่นซอร์สบนแพลตฟอร์ม เพื่อให้ชุมชนสามารถสร้างอินทิเกรชันของตัวเองได้ ซึ่งจะเป็นแบบส่วนตัวหรือเปิดให้ใช้งานสาธารณะก็ได้
ดังนั้นผู้ให้บริการ LLM อย่าง OpenAI, Anthropic, Groq ฯลฯ ต่างก็มีอินทิเกรชันของตัวเอง นี่คือหนึ่งในวิธีที่ผู้ใช้ของเราสามารถเชื่อมต่อกับพวกเขาได้
2. อินเทอร์เฟซสำหรับเชื่อมต่อ LLM
นอกจากแนวคิดของอินทิเกรชันแล้ว เรายังเพิ่ม “อินเทอร์เฟซ” เข้าไปด้วย
เหล่านี้เป็นเพียงนิยามสคีมาตรฐานที่สามารถขยายได้โดยการผสานรวม เราได้สร้างสคีมาตรฐานสำหรับ LLMs
ตราบใดที่อินทิเกรชันขยายตามสคีมานี้ อินทิเกรชันนั้นจะถือว่าเป็นผู้ให้บริการ LLM ดังนั้นจึงสามารถใช้งานได้ทันทีใน Botpress
ตัวอย่างของอินทิเกรชันบน Botpress สำหรับผู้ให้บริการ LLM ต่าง ๆ มีดังนี้:
เรายังมีอินเทอร์เฟซคล้ายกันสำหรับ text2image, image2text, voice2text, text2voice ฯลฯ
การตั้งค่าโมเดล
ใน Botpress Studio เรามีการตั้งค่าทั่วไป 2 แบบ คือ "Best Model" และ "Fast Model" เราพบว่าส่วนใหญ่แล้ว งานต่าง ๆ มักจะเหมาะกับโหมดใดโหมดหนึ่งในสองโหมดนี้


แต่เหนือกว่าการเลือกโมเดลเพียงอย่างเดียว เราพบว่าผู้ให้บริการแต่ละรายมีความแตกต่างกันมากในเรื่องการเรียกใช้เครื่องมือและรูปแบบข้อความ จนไม่สามารถสลับโมเดลไปมาได้ง่าย ๆ แล้วคาดหวังประสิทธิภาพที่ดี
กลไก inference ของ Botpress
ด้วยเหตุนี้ เราจึงได้สร้างเอนจินอินเฟอเรนซ์ของเราเองชื่อว่า LLMz ซึ่งสามารถทำงานร่วมกับโมเดลใดก็ได้โดยแทบไม่ต้องเปลี่ยนพรอมต์เลย (หรือเปลี่ยนเพียงเล็กน้อย) และยังรองรับการเรียกใช้เครื่องมือได้ดีกว่าเดิม รวมถึงประสิทธิภาพที่ดีกว่าในแง่ของต้นทุนโทเคนและจำนวนรอบที่ต้องติดต่อกับ LLM
กลไกนี้ทำงานร่วมกับ typescript types สำหรับนิยามเครื่องมือ, ใช้ markdown สำหรับรูปแบบข้อความและโค้ด และมี sandbox สำหรับ inference ที่ออกแบบมาให้เหมาะกับ LLM โดยเฉพาะ
LLMz มีฟีเจอร์ปรับแต่งและดีบักมากมายที่จำเป็นสำหรับการใช้งานขั้นสูง เช่น:
- การบีบอัด token ขาเข้า
- การตัด token อย่างชาญฉลาด
- การจัดการหน่วยความจำให้เหมาะกับ context ของ token
- การเรียกใช้เครื่องมือแบบขนานและแบบผสม
- ผสมข้อความหลายชุดและการเรียกใช้เครื่องมือหลายรายการใน LLM call เดียว
- เครื่องมือที่ปลอดภัยต่อประเภทข้อมูลทั้ง input และ output
- รองรับ session ที่ยาวนานผ่านการ serialize sandbox
- การ mock, wrap และ trace เครื่องมือ
- แยกการทำงานแต่ละส่วนอย่างสมบูรณ์ใน V8 isolate ที่เบา (รองรับการประมวลผลพร้อมกันจำนวนมากได้อย่างรวดเร็วและประหยัด)
- การวนซ้ำและกู้คืนข้อผิดพลาดโดยอัตโนมัติ
ฟีเจอร์เหล่านี้ล้วนจำเป็นสำหรับการใช้งานของเรา แต่หากใช้วิธีเรียกใช้เครื่องมือแบบปกติจะทำได้ยากหรือแทบเป็นไปไม่ได้
เหตุผลที่ไม่เลือกใช้ router model แบบ lightweight
เราเคยคิดจะสร้าง router model ขนาดเล็กที่อยู่เหนือโมเดลหลักและเลือกโมเดลที่เหมาะสมกับงานโดยอัตโนมัติ
แต่เราตัดสินใจไม่ทำด้วยเหตุผลหลายประการ:
1. ความคาดเดาได้
ลูกค้าส่วนใหญ่ของเรา – ซึ่งก็เข้าใจได้ – ต้องการผลลัพธ์ที่เชื่อถือได้และคาดการณ์ได้
ดังนั้นแนวคิดของ dynamic model router จึงดูน่ากังวลสำหรับ agent ระดับสูง เพราะมันเพิ่มความไม่แน่นอนให้กับ LLMs อีกชั้นหนึ่ง
2. ความเร็ว
ความหน่วงต่ำเป็นสิ่งสำคัญมากสำหรับกรณีการใช้งานของเรา เพื่อให้ตัวกำหนดเส้นทางทำงานได้รวดเร็ว โมเดลต้องมีขนาดเล็กมาก (และอาจจะฉลาดน้อยกว่า) เมื่อเทียบกับโมเดลที่มันจะส่งต่อไป—ซึ่งมักจะเป็นตัวจัดประเภทแบบดั้งเดิม
แม้โดยทั่วไปจะทำงานได้ดีเมื่อฝึกกับงานเฉพาะ แต่ a) ขนาด context ที่สั้นเป็นปัญหาสำหรับ prompt ยาว และ b) ไม่สามารถประยุกต์ใช้กับ prompt อื่น ๆ ที่ไม่ได้ฝึกมาได้ดี
3. การเลือกโมเดลที่ดีที่สุดหรือให้ความเท่าเทียมกัน
แม้ benchmark จะบอกอย่างอื่น แต่ในความเป็นจริง เรายังไม่ค่อยเห็นโมเดลไหนทำผลงานได้ดีกว่า GPT-4o (จนถึงตอนนี้)
ยังไม่ชัดเจนว่า LLMs จะทำงานได้ดีกว่าในงาน X มากกว่างาน Y ในระยะยาวหรือไม่ หรือสุดท้ายแล้ว LLMs ทุกตัวจะเก่งในทุกเรื่อง ถ้าเป็นอย่างหลัง การเลือกโมเดลก็จะไม่คุ้มค่ากับความพยายาม
เตรียม LLMs ให้พร้อมสำหรับอนาคตด้วย feedback
ในอีกไม่กี่ปีข้างหน้า LLMs จะกลายเป็นสินค้าทั่วไป และการเลือกโมเดลจะไม่ใช่ประเด็นสำคัญอีกต่อไป
ด้วยเหตุผลเหล่านี้ เราจึงตัดสินใจลงทุนในการสร้างกลไกที่ดีสำหรับการให้ตัวอย่างแก่ LLMs
เราจึงสร้างระบบเก็บ feedback ที่บันทึก "สิ่งที่เรียนรู้" สำหรับการใช้งานครั้งถัดไป และจะนำเสนอสิ่งที่เกี่ยวข้องที่สุดในขณะ prompt สำหรับการใช้งานครั้งถัดไป เพื่อให้มั่นใจว่าผลลัพธ์จะเชื่อถือได้และพัฒนาอย่างต่อเนื่อง
เมื่อ LLMs พัฒนาขึ้นเรื่อย ๆ เราก็พร้อมและตื่นเต้นที่จะนำศักยภาพเหล่านั้นมาใช้ให้เกิดประโยชน์สูงสุดกับผู้ใช้แพลตฟอร์มของเรา





.webp)
