매개변수화된 데이터베이스 조회 도구
온디맨드 조회 도구를 사용하면 LLM이 전체 목록을 불러오지 않고도 이름이나 코드로 통화를 검색할 수 있습니다. 프롬프트 인젝션을 방지하기 위해 매개변수화 쿼리(플레이스홀더 ?)를 사용하고, 응답 범위를 제한하기 위해 행 수 제한을 적용하세요.
이 연습은 강의의 일부입니다
Model Context Protocol (MCP) 입문
연습 안내
currencies테이블에서name또는code에prefix가 포함된 행을 찾는lookup_currencies()도구를 정의하세요(대소문자 구분 없음).- 매개변수화 SQL 쿼리를 사용하여
?플레이스홀더에prefix를 삽입하고, 반환되는 행 수를 제한하기 위해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"))