LogoAnuchit Tech Blog's

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

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

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

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

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

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

ตั้งค่าเครื่องมือ

เครื่องมือคือฟังก์ชันหรือชุดคำสั่งที่ 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)

อธิบาย:

  • AddToolInput คือ Model ที่บอกว่าฟังก์ชัน add_numbers ต้องการ input คือ num1 และ num2 ซึ่งทั้งคู่ต้องเป็น int
  • add_numbers คือฟังก์ชันที่ทำหน้าที่บวกเลขจริง ๆ

สร้าง Agent

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

การทำงาน:

  1. Agent วิเคราะห์คำถามของผู้ใช้
  2. Agent พิจารณาว่ามีเครื่องมือใดบ้างที่สามารถตอบคำถามนี้ได้
  3. Agent ตรวจสอบ Input Schema ของเครื่องมือที่เลือก
  4. Agent พยายามดึงข้อมูลที่จำเป็นจากคำถามผู้ใช้ และจัดรูปแบบให้ตรงกับ Input Schema
  5. Agent เรียกใช้เครื่องมือนั้น
  6. Agent รับผลลัพธ์จากเครื่องมือ และนำเสนอให้ผู้ใช้

ตัวอย่าง (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

อธิบาย

  • เราสร้างรายการ tools โดยระบุชื่อฟังก์ชัน, ตัวฟังก์ชันเอง, และ Input Schema ของฟังก์ชันนั้น ๆ
  • เมื่อเราสร้าง Agent โดยส่ง tools เข้าไป Agent จะรู้จักเครื่องมือที่เรามี
  • เมื่อเราเรียก my_agent.run("Please add 5 and 10") Agent จะ:
    • วิเคราะห์ว่าคำสั่งนี้ต้องการการบวก
    • เลือก add_numbers_tool
    • ดึง 5 และ 10 มาจากคำสั่ง
    • ตรวจสอบว่า 5 และ 10 ตรงกับ AddToolInput (เป็น integer)
    • เรียก add_numbers_tool(num1=5, num2=10)
    • ได้รับผลลัพธ์ 15
    • คืนค่า 15 เป็นผลลัพธ์

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

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

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

  • Agent ผู้ช่วยจัดการตาราง: สามารถรับคำสั่งเช่น "เพิ่มการประชุมเรื่อง PydanticAI วันพรุ่งนี้ 10 โมงเช้า" Agent จะใช้เครื่องมือที่เชื่อมต่อกับปฏิทิน และ Pydantic จะช่วยตรวจสอบว่าข้อมูลที่ได้รับ (ชื่อเรื่อง, วันที่, เวลา) ถูกต้องก่อนส่งไปยังฟังก์ชันปฏิทิน
  • Agent ค้นหาข้อมูล: รับคำสั่งเช่น "ค้นหาสภาพอากาศของกรุงเทพฯ" Agent จะใช้เครื่องมือที่เชื่อมต่อกับ API สภาพอากาศ โดย Pydantic จะช่วยตรวจสอบว่าชื่อเมืองที่ส่งไปนั้นเป็นรูปแบบข้อความที่ถูกต้อง

สรุป

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

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