LangChain Typed Message ทำไม Messages ถึงไม่ใช่แค่ Text?
Share

นักพัฒนาที่เริ่มใช้งาน LangChain มักคุ้นเคยกับการส่งข้อความในรูปแบบ JSON หรือ Python Dictionary แต่ในปัจจุบัน LangChain เลือกใช้แนวทางที่แตกต่างออกไป โดยกำหนดให้ข้อความทุกประเภทเป็น Typed Messages แนวทางนี้ไม่ได้สร้างมาเพื่อเพิ่มความซับซ้อน แต่เป็นการออกแบบเพื่อรองรับเทคโนโลยีอย่าง Agentic AI, Tool Calling และ Multimodal AI ที่กำลังกลายเป็นมาตรฐานของระบบรุ่นใหม่

เหตุใด LangChain จึงใช้ Typed Messages
Typed Messages เป็น Object ที่เก็บทั้งข้อมูลและความหมายของข้อความไว้พร้อมกัน ทำให้ Framework เข้าใจบทบาทของแต่ละข้อความได้ทันที ตัวอย่างข้อความที่ใช้บ่อย ได้แก่
-
SystemMessage: กำหนดบทบาทและข้อจำกัดของโมเดลก่อนเริ่มการสนทนา
-
HumanMessage: แทนข้อมูลที่ผู้ใช้งานส่งเข้ามา
-
AIMessage: เก็บคำตอบจากโมเดล รวมถึงข้อมูลเพิ่มเติม เช่น Tool Calls, Metadata และ Token Usage
-
ToolMessage: ใช้ส่งผลลัพธ์จากเครื่องมือภายนอกกลับเข้าสู่โมเดล การแยกประเภทข้อความช่วยให้ระบบรองรับ Workflow ที่ซับซ้อน เช่น Multi-Agent System หรือ Retrieval-Augmented Generation (RAG) ได้อย่างมีประสิทธิภาพ
Messages ในยุคใหม่ไม่ได้มีเพียงข้อความ
ความเข้าใจผิดที่พบบ่อยคือการคิดว่าเนื้อหาข้อความ (content) จะเป็น String เสมอ ในโมเดลรุ่นใหม่ที่รองรับ Multimodal ค่า content อาจเป็น List ของ Content Blocks ซึ่งประกอบด้วยข้อมูลหลายประเภท เช่น ข้อความ รูปภาพ ผลลัพธ์จาก Tool หรือ Structured JSON การใช้ Object จึงช่วยขยายความสามารถของ Message ได้โดยไม่กระทบกับโครงสร้างของระบบ
Pitfall ที่พบบ่อย: เมื่อ .strip() ทำให้ระบบล้มเหลว
ข้อผิดพลาดที่มักพบคือการใช้คำสั่ง response.content.strip() ซึ่งจะทำงานได้ปกติเมื่อเนื้อหาเป็น String เท่านั้น แต่หากโมเดลส่งค่ากลับมาเป็น List ของ Content Blocks ระบบจะเกิดข้อผิดพลาดประเภท AttributeError ทันที ปัญหานี้พบบ่อยเมื่อผู้พัฒนายังคงสมมติว่าผลลัพธ์ทุกประเภทคือข้อความธรรมดา แนวทางที่เหมาะสมคือการตรวจสอบชนิดข้อมูลก่อนใช้งานเสมอ
ตัวอย่างการนำมาประยุกต์ใช้

สร้างแอปพลิเคชันที่รองรับข้อความและรูปภาพพร้อมกัน โดยใช้ Typed Messages แยกแยะประเภทข้อมูลให้ชัดเจน ระบบสามารถแยกบทบาทของ SystemMessage เพื่อกำหนดขอบเขต และ ToolMessage เพื่อรับผลลัพธ์จากเครื่องมือภายนอก ทั้งนี้ต้องออกแบบให้ระบบตรวจสอบชนิดข้อมูลก่อนเสมอ เพื่อหลีกเลี่ยงข้อผิดพลาดหากเนื้อหาถูกส่งมาเป็น List แทนที่จะเป็น String
คำถามที่พบบ่อย
-
Typed Messages ใน LangChain คืออะไร
คือคลาสที่ใช้แทนข้อความแต่ละประเภท (เช่น SystemMessage, HumanMessage) เพื่อให้ Framework เข้าใจบทบาทและข้อมูลประกอบได้ชัดเจนกว่าการใช้ Dictionary
-
ทำไม response.content.strip() จึงเกิด Error
เพราะเมื่อตัวแปร content ส่งค่ามาเป็น List จะไม่มีเมธอด strip() ให้ใช้งาน ทำให้นักพัฒนาควรตรวจสอบชนิดข้อมูลก่อนเสมอ
-
นักพัฒนาควรเตรียมระบบอย่างไร
ควรออกแบบ Message Processing ให้รองรับ Typed Messages และโครงสร้างข้อมูลหลายรูปแบบ พร้อมหลีกเลี่ยงการสมมติว่าผลลัพธ์จะเป็นแค่ข้อความธรรมดา
สรุป
Typed Messages สะท้อนวิวัฒนาการจาก Chatbot แบบเดิมไปสู่ Agent ที่สามารถใช้เครื่องมือและเข้าใจข้อมูลได้หลายประเภท นักพัฒนาที่เข้าใจโครงสร้างของข้อความเหล่านี้ จะสามารถออกแบบระบบที่รองรับเทคโนโลยีในอนาคตได้ดีกว่าการยึดติดกับโครงสร้างแบบ Dictionary บทเรียนสำคัญคือ อย่าคิดว่า Message คือ Text เสมอ เพราะเมื่อ AI เปลี่ยนรูปแบบการสื่อสาร โค้ดที่ยืดหยุ่นเท่านั้นที่จะรองรับการเปลี่ยนแปลงได้อย่างยั่งยืน

Share

Keep me postedto follow product news, latest in technology, solutions, and updates
Related articles
Explore all


