- ทีม Node.js ของ Red Hat กำลังทดลองแนวทางผสานรวม LLM กับ Node.js และ TypeScript/JavaScript
- มีการเปรียบเทียบหลายเฟรมเวิร์ก โดยเน้นตรวจสอบเป็นพิเศษที่ การเรียกใช้ tool/function และวิธีการทำงานของเอเจนต์
- วิเคราะห์ความสามารถของ Llama Stack ที่เพิ่งเปิดตัว และความเป็นไปได้ในการผสานรวมกับ Node.js
วิธีตั้งค่าและรัน Llama Stack
- Llama Stack เป็นเฟรมเวิร์กแบบโมดูลาร์ที่เผยแพร่หลายอิมพลีเมนเทชัน โดยมีเป้าหมายเพื่อทำให้ API เป็นมาตรฐาน
- หากใช้คอนเทนเนอร์ที่อิงกับ Ollama จะเป็นวิธีรันที่ง่ายที่สุด
- ตัวอย่างสคริปต์รันสำหรับตั้งค่าเซิร์ฟเวอร์:
- โมเดล:
meta-llama/Llama-3.1-8B-Instruct
- พอร์ต:
8321
- IP ของเซิร์ฟเวอร์ Ollama:
10.1.2.38
- ต้องรันโมเดลใน Ollama ไว้ล่วงหน้า และควรใช้งานอย่างน้อยวันละครั้งเพื่อคง keepalive
- สามารถดูสคีมา API และทดสอบแบบอินเทอร์แอ็กทีฟได้ผ่าน document endpoint (
/docs)
ตัวอย่างแอปพลิเคชัน Node.js แรก
- ใช้ไลบรารี
llama-stack-client-typescript เพื่อสื่อสารกับ Llama Stack
- นิยามทูล 2 ตัว:
favorite_color_tool: ให้ข้อมูลสีตามเมือง/ประเทศ
favorite_hockey_tool: ให้ข้อมูลทีมฮอกกี้น้ำแข็งตามเมือง/ประเทศ
- ทดสอบลำดับการเรียกใช้ทูลผ่านสถานการณ์ถามตอบ
- ปัญหาเริ่มต้น: หากทูลไม่มีข้อมูลที่ต้องการ จะไม่มีข้อความชี้นำที่ชัดเจนแสดงออกมา
- วิธีแก้: แทรกคำว่า "assistant" ในข้อความตอบกลับเพื่อให้ลำดับการทำงานลื่นไหลขึ้นอย่างเป็นธรรมชาติ
วิธีจัดการการเรียกใช้ tool ใน Llama Stack
- เมื่อใช้ API
chatCompletion() จำเป็นต้องจัดการการเรียกใช้ทูลด้วยตนเอง
- ใช้ฟังก์ชัน
handleResponse() เพื่อตรวจจับคำขอทูลและส่งผลลัพธ์กลับไปในรูปแบบข้อความอีกครั้ง
- โดยปกติ
tool_choice ถูกตั้งเป็น "auto" แต่หากมีทูลอยู่ ระบบจะมีแนวโน้มสูงที่จะพยายามใช้งานทูล
- พบว่าต่อให้คำถามไม่เกี่ยวข้องกับทูล ระบบก็ยังพยายามใช้ทูล และเมื่อเลิกพยายามแล้วจะลงเอยด้วยการตอบว่า ‘ไม่สามารถตอบได้’
การทดลองผสานรวม MCP กับ Llama Stack
- ผ่าน MCP(Model Context Protocol) สามารถ โฮสต์ทูลไว้บนเซิร์ฟเวอร์ภายนอก และแชร์ให้หลายเฟรมเวิร์กใช้งานร่วมกันได้
- เซิร์ฟเวอร์ MCP ใช้ Supergateway เพื่อบริดจ์เซิร์ฟเวอร์แบบ stdio ไปเป็นรูปแบบ SSE
- หลังลงทะเบียนเซิร์ฟเวอร์ MCP แล้ว สามารถใช้ Llama Stack agent API เพื่อเรียกใช้ทูล MCP อัตโนมัติได้
- agent API จะ:
- จัดการสถานะ/ข้อความให้อัตโนมัติ
- ให้เฟรมเวิร์กจัดการลำดับการเรียกใช้ทูลภายในเอง
- อย่างไรก็ตาม จะไม่สามารถดูล็อกการเรียกใช้ทูลได้โดยตรง และตรวจสอบได้เพียงคำตอบสุดท้ายเท่านั้น
การใช้ MCP เพื่อเข้าถึงสภาพแวดล้อมภายในเครื่อง
- สามารถรันเซิร์ฟเวอร์ MCP ภายในเครื่องด้วยรูปแบบ stdio แล้วเชื่อมต่อเข้ากับ Llama Stack ได้
- จำเป็นต้องมีโค้ดสำหรับแปลง JSON นิยามทูลของเซิร์ฟเวอร์ MCP ให้เป็นรูปแบบที่เข้ากันได้กับ Llama Stack
- ผ่าน
mcpClient.callTool() สามารถส่งผลลัพธ์ของทูลกลับเข้าไปในลำดับการตอบของ LLM ได้
- ด้วยวิธีนี้ จึงสามารถสร้างสถานการณ์ใช้งานที่เข้าถึงสภาพแวดล้อมของแอปในเครื่องได้ โดยไม่ต้องพึ่งเซิร์ฟเวอร์แบบรวมศูนย์
สรุป
- มีการฝึกปฏิบัติการผสานรวม LLM และการเรียกใช้ทูลผ่าน Llama Stack ในสภาพแวดล้อม Node.js
- ครอบคลุมหลายแนวทาง เช่น ทูลภายในเครื่อง, MCP ระยะไกล และ MCP ภายในเครื่อง พร้อมตัวอย่างการใช้งานที่หลากหลาย
- โดยเฉพาะสำหรับนักพัฒนา JavaScript/TypeScript บทความนี้นำเสนอตัวอย่างโค้ดและลำดับการทำงานที่นำไปใช้ได้จริง
- เป็นจุดเริ่มต้นที่มีประโยชน์สำหรับนักพัฒนาที่ต้องการผสานรวม LLM กับ Node.js ในอนาคต
แหล่งข้อมูลเพิ่มเติม
ยังไม่มีความคิดเห็น