การสร้าง Tool สำหรับค้นหาข้อมูลในฐานข้อมูลแบบรับพารามิเตอร์
การสร้าง lookup tool แบบ on-demand จะช่วยให้ LLM ค้นหาสกุลเงินตามชื่อหรือรหัสได้โดยไม่ต้องโหลดข้อมูลทั้งหมด ใช้ parameterized query (placeholder ?) เพื่อป้องกัน prompt injection และกำหนดจำนวนแถวสูงสุดเพื่อให้ผลลัพธ์ไม่เกินขอบเขตที่ต้องการ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Model Context Protocol (MCP) เบื้องต้น
คำแนะนำการฝึกหัด
- กำหนดฟังก์ชัน
lookup_currencies()ที่ค้นหาแถวในตารางcurrenciesโดยกรองแถวที่คอลัมน์nameหรือcodeมีค่าที่ตรงกับprefix(ไม่คำนึงถึงตัวพิมพ์ใหญ่-เล็ก) - ใช้ parameterized SQL query เพื่อแทรกค่า
prefixลงใน placeholder?และใช้LIMIT 50เพื่อจำกัดจำนวนแถวที่ส่งคืน
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Add lookup_currencies(prefix): find rows where name or code contains prefix
@mcp.____()
def ____(____: str) -> str:
"""Find currencies whose code or name contains the given prefix."""
try:
# Use parameterized query and LIMIT 50
cursor = conn.execute(
"SELECT code, name FROM currencies WHERE name LIKE ? OR code LIKE ? LIMIT ____",
(f"%{____}%", f"%{____}%")
)
rows = cursor.fetchall()
return "\n".join(f"{row['code']} - {row['name']}" for row in rows)
except sqlite3.Error as e:
return f"Database error: {e}"
print(lookup_currencies("Euro"))