null

Anuchit Chalothorn

Human Knowledge Belongs to The World

สร้าง Agent อัจฉริยะด้วย PydanticAI


01 Aug 2025 - 3 min read

สวัสดีครับทุกคน! วันนี้เราจะมาเจาะลึกเรื่องน่าสนใจในโลกของ AI นั่นคือ การสร้าง Agent ด้วย PydanticAI ครับ

PydanticAI เป็นเครื่องมือที่ช่วยให้เราสามารถสร้าง Agent ที่มีความสามารถในการจัดการข้อมูลและโต้ตอบกับผู้ใช้ได้อย่างมีประสิทธิภาพ ด้วยการใช้ประโยชน์จาก Pydantic ที่เป็นไลบรารีสำหรับการตรวจสอบข้อมูล (Data Validation) และการจัดการโมเดลข้อมูล (Data Modeling) ทำให้ Agent ของเรามีความ "ฉลาด" และ "เป็นระเบียบ" มากขึ้น

มาดูกันเลยว่าการสร้าง Agent ด้วย PydanticAI นั้นมีขั้นตอนอะไรบ้าง พร้อมตัวอย่างที่เข้าใจง่ายครับ!

ขั้นตอนการสร้าง Agent ด้วย PydanticAI

โดยหลักการแล้ว การสร้าง Agent ด้วย PydanticAI จะอาศัยการนิยาม "เครื่องมือ" (Tools) ที่ Agent สามารถใช้งานได้ และการนิยาม "Agent" ที่จะเลือกใช้เครื่องมือเหล่านั้นตามบริบทการสนทนา

1. นิยามเครื่องมือ (Define Tools)

เครื่องมือคือฟังก์ชันหรือชุดคำสั่งที่ Agent สามารถเรียกใช้งานได้ เพื่อทำภารกิจเฉพาะอย่าง เช่น การค้นหาข้อมูล, การคำนวณ, หรือการเรียกใช้ API ภายนอก

หัวใจสำคัญ: การใช้ Pydantic ในการกำหนด "Input Schema" และ "Output Schema" ของเครื่องมือแต่ละชิ้น * Input Schema: กำหนดว่าเครื่องมือต้องการข้อมูลอะไรบ้าง และต้องมีรูปแบบเป็นอย่างไร (เช่น ต้องเป็นตัวเลข, ต้องเป็นข้อความ, มีค่าสูงสุด/ต่ำสุดเท่าใด) * Output Schema: กำหนดว่าเครื่องมือจะส่งคืนข้อมูลอะไร และต้องมีรูปแบบเป็นอย่างไร

ตัวอย่าง: สมมติเราต้องการสร้าง Agent ที่สามารถบวกเลขได้

from pydantic import BaseModel
        
        # Input Schema สำหรับฟังก์ชันบวกเลข
        class AddToolInput(BaseModel):
            num1: int  # ต้องการตัวเลขจำนวนเต็มตัวแรก
            num2: int  # ต้องการตัวเลขจำนวนเต็มตัวที่สอง
        
        # ฟังก์ชันบวกเลข (เครื่องมือของเรา)
        def add_numbers(num1: int, num2: int) -> int:
            """รับตัวเลขสองตัวและส่งคืนผลบวก"""
            return num1 + num2
        
        # เราสามารถ "ห่อหุ้ม" ฟังก์ชันนี้ให้เข้ากับ PydanticAI ได้
        # โดยทั่วไป PydanticAI จะมี Decorator หรือ Class ช่วยในการนี้
        # (ตัวอย่างนี้เป็น conceptual มากกว่า code ที่รันได้โดยตรง)
        # @tool(input_schema=AddToolInput)
        # def add_numbers_tool(num1: int, num2: int) -> int:
        #     return add_numbers(num1, num2)
        

อธิบาย:

2. สร้าง Agent

Agent จะรับหน้าที่ในการทำความเข้าใจคำสั่งของผู้ใช้ (User Prompt) และเลือกเครื่องมือที่เหมาะสมที่สุดในการตอบสนอง

ตัวอย่าง (Conceptual):

# สมมติว่าเรามี PydanticAI Framework ที่ช่วยในการสร้าง Agent
        from pydanticai import Agent, Tool
        
        # กำหนด Tools ทั้งหมดที่ Agent สามารถใช้ได้
        # ในตัวอย่างนี้ เรามีแค่ add_numbers_tool
        # (สมมติว่า add_numbers_tool คือฟังก์ชัน add_numbers ที่ถูกห่อหุ้มด้วย Decorator จาก PydanticAI แล้ว)
        tools = [
            Tool(name="AddTool", func=add_numbers_tool, input_schema=AddToolInput)
        ]
        
        # สร้าง Agent
        my_agent = Agent(tools=tools)
        
        # สั่งให้ Agent ทำงาน
        response = my_agent.run("Please add 5 and 10")
        print(response) # คาดว่าผลลัพธ์จะเป็น 15
        

อธิบาย:

ข้อดีของการใช้ PydanticAI ในการสร้าง Agent

  1. ความชัดเจนของ Input/Output: Pydantic ทำให้เรานิยามข้อมูลที่เครื่องมือต้องการและส่งคืนได้อย่างชัดเจน ลดความผิดพลาดและทำให้ Agent ทำงานได้แม่นยำขึ้น
  2. การตรวจสอบข้อมูล (Data Validation): Pydantic จะช่วยตรวจสอบว่าข้อมูลที่ส่งเข้าเครื่องมือถูกต้องตามที่นิยามไว้หรือไม่ หากไม่ถูกต้อง Agent จะแจ้งข้อผิดพลาด ทำให้เราแก้ไขได้ตรงจุด
  3. ความสามารถในการขยาย (Extensibility): ง่ายต่อการเพิ่มเครื่องมือใหม่ ๆ ให้ Agent สามารถทำภารกิจได้หลากหลายมากขึ้น
  4. ความสามารถในการทำงานร่วมกับ LLM: PydanticAI ถูกออกแบบมาเพื่อทำงานร่วมกับ Large Language Models (LLMs) โดยเฉพาะ ทำให้ LLMs สามารถ "เข้าใจ" และ "ใช้" เครื่องมือที่เราสร้างขึ้นได้อย่างมีประสิทธิภาพ

ตัวอย่างการประยุกต์ใช้จริง (เพิ่มเติม)

สรุป

PydanticAI เป็นแนวทางที่ทรงพลังในการสร้าง Agent ที่มีความสามารถและน่าเชื่อถือ โดยการนำ Pydantic มาใช้ในการนิยามเครื่องมือ ทำให้ Agent ของเราสามารถจัดการกับข้อมูลได้อย่างมีโครงสร้าง ชัดเจน และปลอดภัย

หวังว่าโพสต์นี้จะเป็นประโยชน์ในการเริ่มต้นสร้าง Agent ของคุณนะครับ! หากมีคำถามหรือข้อสงสัย ถามมาได้เลยครับ 👇