Tools
วิธีผสานรวม LLM กำหนดเองจาก SageMaker เข้ากับ Strands Agents
![]()
ช่วงนี้หลายองค์กรเริ่มเอา Large Language Models (LLMs) ที่ปรับแต่งเองไป deploy บน Amazon SageMaker AI real-time endpoints กันเยอะขึ้นนะ โดยใช้เฟรมเวิร์กที่ถนัดอย่าง SGLang, vLLM หรือ TorchServe เพื่อควบคุมการ deploy ได้เต็มที่ แถมยังช่วย optimize ต้นทุนและเข้ากับกฎระเบียบต่างๆ ด้วย
ปัญหาที่ต้องเจอ
แต่ความยืดหยุ่นตรงนี้ก็มีเรื่องท้าทายอยู่บ้าง นั่นคือรูปแบบการตอบกลับของโมเดลมันไม่ตรงกับที่ Strands Agents คาดหวังน่ะสิ! คือปกติแล้วเฟรมเวิร์กที่เรา customize มาพวกนี้มักจะคืนค่าในรูปแบบที่เข้ากันได้กับ OpenAI เพื่อให้ใช้งานได้หลากหลาย แต่ Strands Agents กลับอยากได้รูปแบบที่ตรงกับ Bedrock Messages API
ปัญหาจะใหญ่ขึ้นไปอีกเพราะโมเดลที่เราโฮสต์บน Amazon SageMaker AI real-time endpoints อาจจะไม่ได้รับประกันว่าจะรองรับ Messages API โดยตรงเลยนะ ถึงแม้ว่าเอนจิ้นอนุมานแบบกระจายของ Amazon Bedrock Mantle จะรองรับ OpenAI messaging formats มาตั้งแต่เดือนธันวาคม 2025 แล้วก็ตาม แต่ SageMaker AI ก็ให้ความยืดหยุ่นที่เราสามารถโฮสต์โมเดลพื้นฐานที่หลากหลายได้ ซึ่งบางทีก็อาจจะต้องใช้รูปแบบ prompt และ response ที่ไม่เป็นไปตาม API มาตรฐาน พอโมเดลส่งออกมาอีกแบบ แต่ Strands คาดหวังอีกแบบ มันก็เลยทำงานร่วมกันไม่ได้ราบรื่นอย่างที่คิด และถ้าไม่มีตัวแยกวิเคราะห์ (parser) ที่กำหนดเอง บางทีก็อาจเจอ error ฟ้องว่า TypeError: 'NoneType' object is not subscriptable ได้เลยนะ
ทางออกคืออะไร?
ไม่ต้องห่วง! ทางแก้คือเราต้อง implement ตัวแยกวิเคราะห์โมเดลที่กำหนดเอง (custom model parsers) ที่จะไปขยายคลาส SageMakerAIModel เพื่อแปลรูปแบบการตอบกลับจากโมเดลที่เราโฮสต์ให้เป็นรูปแบบที่ Strands Agents ต้องการนั่นเอง วิธีนี้จะช่วยให้องค์กรยังสามารถใช้เฟรมเวิร์กที่ชอบได้ โดยที่ไม่ต้องแลกกับความเข้ากันได้กับ Strands Agents SDK
ลองทำกันดู: ผสานรวม Llama 3.1 กับ SGLang บน SageMaker
ในบทความนี้ เราจะมาดูกันว่าสร้าง custom model parsers สำหรับ Strands agents ยังไง เมื่อต้องทำงานกับ LLMs ที่โฮสต์บน SageMaker ที่ไม่ได้รองรับ Bedrock Messages API โดยกำเนิด เราจะลอง deploy Llama 3.1 ด้วย SGLang บน SageMaker โดยใช้เครื่องมือดีๆ อย่าง awslabs/ml-container-creator จากนั้นก็ implement custom parser เพื่อผสานรวมกับ Strands agents
awslabs/ml-container-creator เนี่ย เป็น open-source Yeoman generator ของ AWS Labs ที่ช่วยให้เราสร้างโปรเจกต์ SageMaker BYOC (Bring Your Own Container) ได้แบบอัตโนมัติเลยนะ มันจะสร้างไฟล์ต่างๆ ที่จำเป็นสำหรับ build LLM serving containers ให้เรา เช่น Dockerfiles และ deployment scripts ทำให้การเตรียมสภาพแวดล้อมง่ายขึ้นเยอะ ลองดูรายละเอียดเพิ่มเติมได้ที่ ml-container-creator บน GitHub
พอเรามี LLM ที่ deploy อยู่บน SageMaker แล้วส่ง response ในรูปแบบที่เข้ากันได้กับ OpenAI และมี custom parser ที่แปลง response เหล่านั้นให้เป็น Bedrock Messages API ได้ Strands Agents ก็จะสามารถทำงานร่วมกับ LLM ของเราได้อย่างสบายๆ ไม่มีสะดุด
อ่านต่อ: อยากรู้ขั้นตอนและโค้ดเต็มๆ ไปดูได้ที่บทความนี้เลย Building Custom Model Provider for Strands Agents!